Поворотный стол для 3д сканирования .
- Войдите на сайт для отправки комментариев
Занимался темой **DAVID 3 ** в 2014 году. Собрал вполне рабочую конструкцию .
Не давно установил **DAVID 4 ** и очень мне понравилась функция поворотного стола .Стол у меня был сделан уже давно но управляется кнопкой .
Стол может быть зафиксирован в любом положении в 3 осях , спокойно поворачивать вес до 3 кг .
Очень хотелось бы автоматизировать весь процесс .Полазил по инету нашел вот такой вариант .
https://sites.google.com/site/janbeck/3 ... for-david4
Автор пишет что все работает .Но автор полез на шину i2C .Он управляет шаговым мотором .В моём варианте стоит концевик на поворотном столе на 12 секторов .Концевик запараллелен с кнопкой .
- КОД: ВЫДЕЛИТЬ ВСЁ • РАЗВЕРНУТЬ
-
#include <Wire.h> #include <Adafruit_MotorShield.h> #include "utility/Adafruit_MS_PWMServoDriver.h" // Create the motor shield object with the default I2C address Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // Connect a stepper motor with 400 steps per revolution (0.9 degree) // to motor port #2 (M3 and M4) Adafruit_StepperMotor *myMotor = AFMS.getStepper(400, 2); void setup() { Serial.begin(9600); // open serial port AFMS.begin(); // create with the default frequency 1.6KHz myMotor->setSpeed(1); // 1 rpm myMotor->step(1, FORWARD, MICROSTEP); // take a step to initialize position delay(250); // settle mechanics for 250 ms myMotor->release(); // turn off current } void loop() { static int counter = 0; if(Serial.available()>0) // is there any unread serial data? { char ch = Serial.read(); // read a character from the serial port Serial.print("echo");Serial.println(ch); // echo back so that it is displayed in DAVID debug console if (ch == '2') // is it the character for the number 2? { counter = counter + 1; // increment the scan count myMotor->step(10, FORWARD, MICROSTEP); // take a step delay(250); // settle mechanics for 250 ms myMotor->release(); // turn off current if (counter == 40) // we have performed a full rotation { counter = 0; // reset for next scan } else { Serial.println("S"); // Tell DAVID to do another Scan } } } // end Serial.available }
Может кто посмотрит из знающих и отзывчивых .Как бы его переделать под такой алгоритм работы .
1 .При нажатии (сканировать )*стол неподвижен .
2 .По окончание сканирования ( примерно 30 сек )
*должна пройти команда на включение реле (для наглядности пин 13)
примерно 7 секунд и отключится .(концевик должен замкнуться )
3 .Через 20 сек.( время для поворота на сектор )*должна пройти команда (" S ") сканировать .
4 .Далее по циклу 12 раз .(стол разбит на 12 секторов ) Каждое включение поворачивает стол на 30 градусов .
Опыта в программирование нет .Только в готовых скетчах что нибудь подправить под свои нужды .
Если можно помогите пожалуйста .
Взял типовую схему включение реле для ардуино .Отключил концевик .
Навешал что мог .Работает .
В момент включения ардуино стол крутиться .
При команде "S" через монитор включается таймер и стол вращается 22 сек. Останавливается и проходит команда "S" .Через 40 сек.включается стол и так до бесконечности .
Хотелось бы чтобы после прохождение 12 циклов .Останавливалось и подавало сигнал зуммер например .
Кривенько но как смог . DAVID приблуду видит и команда "S" проходит .
Посмотрите пожалуйста что можно добавить или выкинуть .
Странный какой-то алгоритм. Counter есть, но не используется. Все намекает на то, что надо его инкрементировать после каждого цикла и сравнивать с лимитом.
Я и пишу как смог .Собрал методом вставки из 2 скетчей .Но как не странно работает .
Помогите пожалуйста сделать цикличность 12 раз .
Работает, но не так, как Вам надо. Значит не очень правильно работает.
Помочь можно, но концепцию менять надо полностью. Встраиваться во все эти delay() у меня никакого интереса нет.
Готов принять ваше решение .Если есть более итересное и правильное .
В исходном коде процесс запускался, если в порт приходила команда "2". У вас осталась только проверка, что в порт что-то пришло (не важно что). В исходном варианте, все дальнейшие действия зависили от этого условия, т. е. были заключены в фигурные скобки. У Вас же, от этой проверки зависит только одна команда: "digitalWrite(relPin, HIGH);", все остально выполняется в любом случае. В исходном варианте, подсчитывалось кол-во включений-выключений шагового двигателя. У Вас видимо реализовано как-то по другому, и значение счетчика не меняется.
Да уж погарячился .
Стол сделан просто двигатель и мощный редуктор .
Работает много лет .
Захотелось автоматизировать процесс .
Помогите пожалуйста сделать правильно .
Для начала, давайте проясним.
В начальном коде, после получения в порт символа "2", шаговый двигатель поворачивает стол на некий угол. Если, после этого поворота стол не вернулся в исходную позицию (совершил полный оборот), в порт выводится символ "S".
Что или кто подает команду "2"? Команда "S" - запускает сканирование?
В Вашем коде, 22 с - это поворот на угол или полный оборот?
Вы хотите что бы процесс останавливался после 12 циклов. 12 циклов чего - поворотов на угол или полных оборотов?
В каком порядке выполняются действия: сначало сканирование, потом поворот стола или наоботрот?
Как вариант (по мотивам исходного кода). 12 циклов "поворот->сканирование" и останов:
Задача программы .
Повернуть стол на определенный угол .Мотор не шаговый поэтому им можно управлять только по времени .Ставить датчики не вариант .Управляя временем работы легко перестроить на другой угол поворота .
После поворота на 30 градусов (22секунды) программа должна отправить в DAVID команду на сканирование . Время сканирования также проще задать таймером ( 40секунд ).
И так 12 раз.
Ну и вишенка на торте .Сигнал зуммера .
Выше привел вариант.
Так понимаю, сейчас каждое сканирование запускается после перезагрузки Arduino? Не думали, вместо этого, запускать сканирование нажатием кнопки?
значения true и false в нижнем регистре должны быть написаны.
Дошло не сразу .Спасибо помогли ,все заработало .
Программисты шутят .Хи Хи Хи.
Извиняюсь за мой косяк с "TRUE" и "FALSE".
Как подключать кнопку знаете?
"" Извиняюсь за мой косяк с "TRUE" и "FALSE". "" Ерунда воспринял как тест на сообразительность .Не прошол .
Сегодня гонял программу ВСЁ четко СПАСИБО .
Если не трудно допишите пожайлуста .
1.кнопку надо обязательно (пришлось открывать монитор порта для запуска )
2.зуммер (есть активный ) окончания сканирования .(вишенка на торте )
Ну а самому за строкой хватит сканировать поднять и опустить ногу с зумером на время делэя как хочется писка?
А кнопку простым циклом вайл пока не нажата держать на месте? На форуме полно примеров строки пока кнопка не нежата ничего не делать.
Конечно попробовать можно .
Но могу наваротить такого , 2 ардуины уже загубил .Опасаюсь .
Вариант с кнопкой. Подключение:
(GND)—[ резистор 10 КОм ]—(buttonPin)—[ кнопка ]—(+5V)
Номера контактов для кнопки и пищалки указаны только для примера!
Функция для пищалки введена, но ничего не делает, т. к. реализация зависит от типа пищалки.
Опять ругается .
Есть активный зуммер .Его и повешу .
Есть активный зуммер .Его и повешу .
Откройте для себя встроенную функцию tone();
К примеру tone(pinForBuzzer, 4000, 500); сгенерит вам писк частотой 4000 и длинной 500 миллисекунл на ножке выделенной под буззер. При этом она не является блокирующей, то-есть пищать будет, а останавливать выполнение программы - нет.
Это правильный подход к пассивному зуммеру .
Для активного это не нужно .Пришло 5 вольт пищит .
Опять ругается .
Fogari большое спасибо за вашу помощь .
Вечером попробую .
Все работает ЧЁТКО .
Только одно но . Программа выдаёт только 11 комманд "" S "" .Наверно нужно поставить не 12 а 13 циклов .
Гдето 1 теряетса .
Но ЭТО все нюансы и просто настройка .
Еще раз хочу ВАС поблагодарить за оказанную помощь . DIFO
Гдето 1 теряетса .
Вечерком попробую .
Засунул все в корпус .Работает .
Только одно но .При подключение к usb компа реле несколько раз срабатывает и движок дёргается . Через пару секунд успокаивается и смирно ждёт нажатия кнопки . Это не критично но если можно исправить помогите пожалуйста .
Реле на D13 не вешайте.
Можно на любую другую .
На что это повлияет ?
Возьмите Arduino, залейте туда пустой скетч. Отключите от USB, подключите от USB. Мигает LED на плате сразу после подключения?
Под рукой нет но завтра перезалью скетч с другой номерацией .
Неужели так просто ? Ведь 13 это обычный вывод + светодиод .ИЛИ всё сложнее .
При старте ардуино все ноги сконфигурированы как входы. Из за того, что к 13 ноге присоединен диод с резистором на ней после старта есть напряжение, которое может управлять реле. Пока отрабатывает загрузчик и до инициализации ноги как выход. После инициализации как выход 13 нога работает как нормальный выход. Если не нравятся глюки во время инициализации, а 13 нога нужна, то можно подтянуть резистором к земле или плюсу что бы на время инициализации не глючило внешние подключение.
С резистором, конечно, правильный совет, но основная проблема в ином.
Для штатных бутлодеров.
The only differences is the time the bootloader waits for a new program to arrive and the number of times it flashes the pin 13 LED when it starts. Because of the automatic reset on the Diecimila, its bootloader needs only wait a very short amount of time (less than a second) - to save time, it also flashes the pin 13 LED only once. The NG bootloader waits about 6-8 seconds and flashes the LED three times.
Для оптибута:
Переписал с 13 на 12 и всё стало отлично работать . Теперь выдает 12 циклов и очень точно делает 360 градусов .Все работает как и задумано .
Спасибо ВСЕМ за оказанную помощь . DIFO .
Доброго дня .
Как известно аппетит приходит во время еды .
Эксплуатация стола ( ВСЕ ОТЛИЧНО РАБОТАЕТ ) выевила несколько моментов .
1 При изменение ула поворота приходится загружать скетч с измененными настроиками .
Можно ли добавить кнопку и менять время работы двигателя без перезагрузки .
2 Можно ли приспособить этот стол и для фото сьемки . Вместо (S) отправлять ИК код на фотоаппарат .
Можно ли добавить кнопку и менять время работы двигателя без перезагрузки .
2 Можно ли приспособить этот стол и для фото сьемки . Вместо (S) отправлять ИК код на фотоаппарат .
мне кажется, это немного превосходит размер помощи, который воспитанный человек может себе позволить попросить бесплатно....
но решать, конечно, исполнителю
А шо спросить нельзя . Помогать или нет ЭТО дело сугубо добровольное .
Последняя фраза ключевая .Только не ИСПОЛНИТЕЛЮ а неравнодушному форумчанину .
P.S. Давно очень давно обращаюсь за помощью на различные форумы но по поводу моей воспитанности первый раз получил подобный ответ .
не ИСПОЛНИТЕЛЮ а неравнодушному форумчанину .
ну вот я и есть "неравнодушный форумчанин" - не могу пройти мимо, видя как вы fogari эксплуатируете. Он вам уже три варианта кода написал, а у вас каждый раз "все отлично, но есть одно но".
Вы бы хоть для приличия попытались что-то самостоятельно сделать, а то... Сказку о рыбаке и рыбке помните? Старуха в итоге осталась у разбитого корыта.
На нет и спроса нет .
Я на диске для аэробики сделал
https://youtu.be/FFlwcblPyGo
У меня примерно тоже самое только компактней и работает в 3х осях .
С помощью FOGARI был добавлен автомат на ардуине и работать все стало намнаго приятней .
Подбери время работы двигателя и поворачивай на сколько нужно в автомате . Каждый раз дергать тумблер ЭТО не по феншую . Даже можно запитать все от USB .Надо подобрать резистор в цепь двигателя что бы ограничеть ток до 0,4 А .
Еще бы придумать как не перезагружая скетч менять угол и время .
Облазил форумы но пока не как не подберу . Проще всего через "" remotexy "" там все делается просто .Они сейчас даже добавили вариант через ОTG но проблемма в питании .
Управлять через телефон не всегда удобно . Надо чтобы все было единым узлом .
ограничеть ток до 0,4 А .
Для этого отцы придумали ШИМ, а итальянцы 6 выходов ШИМ в ардуине сделали.
Шим это здорово . Только очень раздрожает этот писк , усложнение схемы .Зачем он нужен , сдесь не требуется изменять скорость двигателя . Только время работы . Ограничев ток убираем лишний блок питания .Конечно если исползовать USB .Чем проще механизм тем дольше работает .