Автоматическая панорамная головка
- Войдите на сайт для отправки комментариев
Друзья здравствуйте!
Давно хотел собрать подвес для фотоаппарата для авто-съемки панорам
Механику всю собрал, там все просто. фотик небольшой 400гр, так что всего
2 сервомашинки постоянного вращения без редукторов вращают фото в 2 плоскостях.
Я сначала хотел делать все на шаговых двигателях, но не нашел нормальных , пришлось заказывать 2 сервы SM-S4315r постоянного вращения. (Меня подкупил высокий момент до 15 кгс)Лишь когда они приехали, я понял что лоханулся, что такие сервы нельзя позиционировать в пространстве.
Пришлось покупать 2 потенциометра и начинать изучать программирование на ардуино.
Пытаюсь делать сам, принципы понимаю но спотыкаюсь на мелочах.
и так проблема №1:
Мне нужно чтобы серва1 крутила подвес и останавливалась каждые 45 градусов(всего 9 раз) после каждой остановки происходил бы спуск затвора, ну это позже и отдельная тема.
Я поковырялся и написал скетч который просто ставил серву в определенный угол, дабы проверить потенциометр.
#include <Servo.h> Servo servo1; int servopin1=10; int potensiometr = A9; int val; void setup() { servo1.attach(servopin1); } void loop(){ val = analogRead(potensiometr); int pos = map(val,0,1023,0,200); if(pos<30) { servo1.write(80); //гоним серву вперед до заданного положения } else if(pos>30) { servo1.write(100); //гоним серву назад до заданного положения } else{ servo1.write(90); //иначе останавливаемся, т.е то что нужно. delay(1000); } } }
И он даже работает, что вызывает у меня дикую радость, так как это первый мой скетч и он заработал, но дальше я начал спотыкаться. Я понимаю что нужно запускать FOR. но как я не пытался исхитриться у меня ничего не получается. серва начинает дергаться или просто тупо кружиться. Помогите, пожалуйста, если кто может))) Если кому интересно выложу фото подвеса. а если соберу доконца, то опишу в проектах. механика собрана на 80%. Прилагаю последний код на котором я встал. [CODE]
#include <Servo.h> Servo servo1; int servopin1=10; int potensiometr = A9; int val; void setup() { servo1.attach(servopin1); } void loop() { val = analogRead(potensiometr); int pos = map(val,0,1023,0,200); for(int i=1;i<=101;i=i+20) { if(pos<i) { servo1.write(80); } else if(pos>i) { servo1.write(100); } else { servo1.write(90); delay(1000); } } }
Криво вставился код, не знаю как исправить(((( дублирую в правильном виде то, что у меня не получилось.
Так как не известно какая конкретно зависимость направлений вращений потенциометра и сервы ,то попробуйте раскомментировать строку 21, закомментировав строку 22.
Выше реалазовано всего лишь пропорциональное регулирование, а значит будет статическая ошибка.
Так как не известно какая конкретно зависимость направлений вращений потенциометра и сервы ,то попробуйте раскомментировать строку 21, закомментировав строку 22.
Выше реалазовано всего лишь пропорциональное регулирование, а значит будет статическая ошибка.
Спасибо, пытаюсь разобраться в написаном.
А что делает эта строка строка, непойму?
consnrain это команда какая-то или переменная новая. Ардуино ругается именно на эту строку error: 'consnrain' was not declared in this scope
там опечатка
а что она делает написано тут Программирование в разделе Математические функции.
Попробовал, что-то идет не так. серва начинает либо бешено кружиться, либо если использовать 21 строку вместо 22 ,серва крутится и останавливается в одном положении и далее не двигается.
Это и есть статическая ошибка - тоесть до нужной позиции не дотягивает, пока просто снизте точность позиционирования
если 30 мало, то сделайте побольше... аесли многовато, то поменьше...
Подскажите, голову удалось запустить т.е скетч дописать,поделиться им можете?
Головку запустил, даже сделал несколько панорам в автоматическом режиме.
Осталось просто доработать механику.
Код получился некрасивый, но иначе (по правилам с циклами переменными)ничерта не работал. Пришлось как всегда изобретать велосипед.
Но в итоге работает.
Так как катастрофически не хватает времени, проект забросил. и где код лежит уже не помню. Но он залит в Ардуино. Можно его оттуда какнить выудить?
А, не, наврал. Код нашел. В программировании не разбираюсь но логику понимаю, поэтому не все может быть понятно.
Благодарю!