С фотографией и видеосъёмкой у меня было подобным же образом. Освоив в миллениум пленочные аппараты меня потянуло на эксперименты с ранними цифровиками. Вы в курсе, что не так давно фотки писались на PCMCIA-винт, а на матрицах не было антиалиасинг-фильтра? Навести, ткнуть кнопку автомата, кинуть фотку в облако через WiFi камеры, прогнав через инстаграмм-украшательства? Не наш путь. Только хардкор, только руками.
С подобным подходом я вместо съёмок достопримечательностей, семьи и голых девушек пришёл к специфичным видам фотографии. К той же астрофотографии — всё по-взрослому, разве что без адаптивной оптики и обсерватории в Чили. Теперь мучаюсь с поисками покупателя на дачу посреди которой стоит обсерватория. В процессе творческих мук над рекламными роликами про дачу вернулся к ещё одному своему увлечению — экспериментами с таймлапс-видеосъемкой. Ну, вы в курсе, это где извращенцы снимают одно и то же по кадру в секунду/минуту/часу, а потом делают вид, что это такое очень тормознуто снятое видео. Все вы видели примеры подобных роликов.
Однако, я не был бы собой, если бы меня это устраивало. Статичная таймлапс-съемка уже даже скучновата. Хочется оживить кадр. Можно просто прикрутить камеру к астрономической монтировке и получить ме-е-е-едленное панорамирование (360° за 24 часа ;) ). Для нетерпеливых продаются даже приблуды для панорамирования — для любопытства купил одну такую у китайцев и страшно проплевался. Полез изучить вопрос и выяснил, что всё довольно уныло. Готовые приблуды стоят страшных денег. Особенно в пересчёте на деревянные. Сносные по цене годятся лишь для мелочи типа GoPro. А килограммовую зеркалку с объективом на что-то водрузить и подвигать — неа, это БАБЛИЩЕ. Более того — чаще всего и коммерческие, и любительские приблуды представляют из себя небольшой рельс по которому тянут каретку с камерой. Ребят, это так скучно! Хотя выходит плавненько, признаю. В общем, покопавшись в поисковиках по теме timelapse dolly я весьма разочаровался в человечестве.
Но тут я вспомнил про Ардуино.
Тему микроконтроллеров я долго обходил стороной, хотя, безусловно, как современный человек ежедневно пользуюсь их трудом даже не замечая этого. Разумеется, я знаю, что есть такие маленькие микросхемки, которые всё умеют сами — только цепляй к ним чо надо и получишь результат. Но я не дружу с электричеством, ничё не понимаю в электронике и последний раз программировал на С дюжину лет назад. Про эксперименты с ассемблером я вообще промолчу. Я скорее даже не посредственный, я отвратительный программист. Так что всю работу, которую могли сделать для меня микроконтроллеры, я не получал или достигал ручками, или какой-нибудь грубой примитивной электротехникой.
А тут такой замечательный повод для экспериментов. Как было можно пройти мне мимо?
Возможно, не все представляют себе возможности даже самых простых микроконтроллеров. Особенно плохо предметом владеют люди «творческих профессий». Дизайнеры, фотографы, операторы — часто они выучивают «процесс» и придерживаются консервативных взглядов на предмет своей профессии, не желая ничего менять. Особенно, когда движение в сторону (необязательно это движение вперёд) связано с заметными усилиями по изучению чего-то нового, что совершенно необязательно пригодится в основной деятельности. Дескать, ну и зачем мне это надо — лучше пойду ещё одну голую девушку поснимаю. Безусловно, это дело редко кому надоедает. А даже если люди и задумываются о движении в сторону, то часто могут позволить себе просто заплатить. Зачем строить железку, если можно железку купить?
Но если железку купить не на что, да к тому же она никогда не окупится и хочется просто поиграться с идеей? Если рассматривать микроконтроллеры как замену Танчикам, способную выдать что-то интересное IRL? Так что достаточно лишь себя замотивировать и сделать шаг. Как вдруг оказывается, что даже для фотографа (далее в тексте пользователь робота называется фотографом, хотя снимает с ним видео. Жизнь странная штука) всё выглядит не так уже страшно и сложно. Особенно, если оставаться на этом самом игрушечном-наколенном уровне.
Для меня мотивацией поковыряться послужило желание построить подвижную платформу для моей зеркалки. Съемку таймлапс-видео можно значительно оживить и сделать интереснее движением точки съёмки. Как простым последовательным перемещением, как панорамированием, так и совмещением этих и других движений.
Соответственно, для меня задача формировалась так — обеспечить несколько степеней свободы для тяжелой зеркальной камеры — с требуемой для таймлапса точностью и стабильностью движения. И, конечно, полностью автоматизированной съёмкой. И всё малой кровью, то бишь небольшим количеством рублей и терпимыми затратами времени. То есть как можно быстрее. Так и родился мой проект 4DOF Timelapse Robot.
Достаточно сделать шаг. И тогда для тех, кто никогда не занимался программированием и сборкой электронных устройств открывается чудный и продуманный мир. Где шагнувший становится хозяином безбрежных перспектив. Можно так? Можно. А вот так? Можно. А я это хочу — можно? Да, можно, вот, смотри как делается…
Достаточно неплохо ощущения описывает вот этот текст из комментов к игре в программиста микроконтроллера (угу, вы правильно прочитали — даже в это играют!):
Например в симуляторе самого простого avr за 35 рублев задачи выходят на порядки интереснее: богатый (по сравнению с любыми играми уж точно) ассемблер, множество регистров, причем не абы каких, а 8-ми битных, часть из них парные 16-ти битные, куча периферии, которую можно и нужно использовать (всякие таймеры, компараторы, ацп/цапы, кнопки мертвеца ака wdt), один или несколько портов ввода-вывода, каждый из которых по 8 пинов, каждый пин на которых можно программно переконфигурировать, система аппаратных прерываний (да да, ты не ослышался — аппаратные прерывания в самой примитивной железке, и ими можно пользоваться!), несколько типов памяти, особенности которых нужно учитывать, да и сами пины тоже не простые — однобитовые, логические, умеющие только в 0 и 1, зато быстро-быстро, на скорости в единицы и десятки МГц, имеющие индивидуальные и общие ограничения по току. Столько всякого разного — и все твое.
И всем этим зоопарком управляешь ты, и только ты! Это как солидных размеров цех по перемалыванию информации, с множеством сложного, интересного, уникального оборудования, со своими возможностями и особенностями. Скучно тут не бывает. Менеджмент тоньше некуда — никакие симсы/стратежки/зомби-фермы и рядом не валялись.
И это только верхушка айсберга, а сам айсберг — огого:
В комплекте идет непередаваемая вселенная стеклянного времени, где секунда растягивается до бесконечности, и ты мыслишь тактами и наносекундами. На этих временных интервалах ты изучаешь внешний мир и взаимодействуешь с ним — скорости портов самого простого МК вполне хватает для столь тонких манипуляций. МК превращается в микроскоп времени, где можно любой скоротечный процесс рассмотреть во всех подробностях, и даже успеть отреагировать на изменения в нем, если хочется вмешаться в этот процесс.
Как бонус идет полноценный вкусный даташит с максимально полной информацией о работе МК, который приятно даже просто читать, как учебник (это не какой-то огрызок на 5 страниц текста), плюс тысячи форумов и руководств. И конечно тусовка: тысячи людей твоего языка, нередко даже профессионалов (занимающихся МК давно и за зарплату), с которыми можно общаться, обмениваться опытом, учиться, и даже просить помощи. В играх же тебя здесь ждет стена. В общем симулятор реального МК или живой МК — это не в пример более живая и интересная игрушка, чем любая компьютерная игра.
Причем порог вхождения у нее крайне низкий, да и сам процесс вхождения более приятный. К тому же полезный, да не эфемерно, а реально, и, что особенно вкусно — это по карману любому: за эти самые 35 рублев твое увлечение из игрушки может превратиться в реальную железку на руках, которую, при наличии паяльника, можно применить куда-нибудь с реальной пользой.
Причем сейчас уже avr'ки не особо котируются, ведь, накинув сверху еще 10 рублев, тебе становятся доступны stm'ки и даже начальные arm'ы, а это уже куда более серьезное железо с гораздо большими возможностями, почти взрослый компьютер на кристалле — именно arm'ы например трудятся в ваших смартфонах и планшетах.
И это — самый низкий ценовой уровень! Чуть дороже уже идет куда более вкусное железо.
Программирование МК — это окно в удивительный мир железа, мир этот большой и интересный, и не где-то за экраном, а прямо здесь, и ты можешь невозбранно пользоваться плодами этого мира. Также в этом мире нередко встречаются настоящие уникумы, типа всяких специализированных железок, архитектур вообще очень много, самых разных, о большинстве из которых мало кто даже слышал, и часть из них просто поражают возможностями...
Для неофитов наиболее привлекательной и легкодоступной кажется самая разрекламированная вселенная Arduino. К этому можно относиться по-разному, но нельзя не признать — именно доступность и распространённость решений на базе всевозможных вариаций с atmega328 позволяет неофиту легко достичь сносных результатов, практически ничего не поняв в деталях работы микроконтроллера и его общении с периферией. Нубы ни черта не поймут как это работает внутри, но поделка заработает и будет шевелиться согласно его желаниям и тут уже плевать, что китайцы давно сделали это дешевле и напечатали миллионом копий. Да даже если это повторение пути давно пройденного тысячами других — это всё равно удовольствие от самостоятельного выполнения поставленной задачи. Зачем собирать Лего по инструкции — ведь другие уже собрали? Удовольствие. Зачем снимать галактики крайне простой техникой если есть Хаббл? Удовольствие. Зачем собирать тележку на колесиках с пультом если в магазине таких сотни в красивых коробочках? Удовольствие.
Вот так надо подходить и к Ардуино — мы идём получать удовольствие, а то, что на нас при этом делают деньги предприимчивые китайцы, итальянцы и местные торгаши — ну, за удовольствие надо платить! Ну, а профессионалы от электроники могут справедливо плеваться в сторону Ардуино-поделок и дальше.
Итак в данной статье удовольствие получаем от неслыханного — наша зеркалка сама по себе ездит и снимает с заданной периодичностью кадры, пока мы, довольные, пьём кофе и читаем geektimes.
Что мы хотим от поделки:
— Управление камерой — выполнение на камере задаваемой нами экспозиции и выдерживание желаемой паузы между кадрами;
— Перемещение вперед-назад на произвольное расстояние — без требований долгого монтажа или подготовки основания;
— Вращение камеры влево-вправо c произвольным шагом;
— Вращение камеры вверх-вниз с произвольным шагом;
— Вращение кольца трансфокатора или фокуса объектива — конечно, так же с выбираемой нами интенсивностью.
Этот комплекс возможностей предполагает большую творческую свободу при съемке таймлапс-видео. Можно решать практически любые задачи — комбинируя в разных пропорциях движение камеры и управляя выдержкой-паузой. Недоступным остаётся только произвольное управление экспозицией в зависимости от освещенности — тут можно доверится только программе экспонометра камеры или ограничиться небольшим промежутком. Все кто снимал таймлапсы в утреннее-вечернее время прекрасно представляют как быстро меняются условия освещенности.
К сожалению, по настоящее время так же не реализовано вращение камеры вверх-вниз — ну, относительно шасси. Я пока не представляю себе какими средствами выполнить это в габаритах моего прототипа. Пока что приходится обходиться изначально заданным углом возвышения камеры при её крепеже — причем отличие от горизонтального положения делает невозможным управление трансфокатором-фокусом.
Первой проблемой встает вопрос — на чём перемещаться камере? Зеркалка вещь тяжелая. Начинается поиск компромисса — хочется и не таскать тяжести вроде детского электромобиля и что бы камера стояла стабильно и не перевешивала из-за высоко получившегося центра тяжести. Фотографы с GoPro-игрушками вполне могут удовлетвориться и четырёхколесными автоплатформами-багги. Для моей зеркалки хотелось бы что-то более стабильное. Изучив вопрос и существующие решения я остановился на гусеничной платформе.
Специализированные и готовые гусеничные платформы стоили несуразно много. Разумнее было употребить для нашей цели игрушку. Поскольку в семье уже есть радиоуправляемый танк (Леопард 1:20), то первым делом посмотрел в его сторону. Но стало жалко — пусть дальше ездит и плюётся шариками на радость детям. Что бы ещё можно быстро и недорого прикупить и раскурочить? Поковырявшись на Авито выяснил, что танки или мелковаты или дороговаты. Зато есть маловостребованные детьми и потому не настолько дорогие, но ничем не уступающие в моих целях экскаваторы. Но, как назло, в моем городе ничего не было подходящего в продаже. Заказывать через почту? Может тогда посмотреть китайцев? Так я пришел на сайт к «робототорговцу» Нин aka SINONING. Хотите алюминиевый клевый «танчик»-шасси за 138$ — без проблем! Хотите такой же по размерам, но весь пластиковый «экскаватор»-шасси за тридцатку? Пожалста! Совсем жадина? Вот вам за 14$ танковое шасси и даже с моторчиком. Там же можно прикупить ардуинки, но у меня этого добра и в городе полно, так что от китайцев ко мне поехало недорогое пластиковое шасси SN1000.
По ардуино я воспользовался предложениями от Make Robots (https://vk.com/makerobot66) где закуплено следующее барахло, использованное в этом проекте:
- DCcduino UNO (with USB cable)… 480 x 1 = 480
- GY-273 HMC5883L Module… 170 x 1 = 170
- Arduino Starter Kit… 480 x 1 = 480
- 1 Channels 5V Relay Module… 180 x 1 = 180
- LCD 2004 I2C blue… 610 x 1 = 610
- Motor Drive Shield L293D… 360 x 1 = 360
- Joystick Module KY-023… 170 x 1 = 170
- Timing belt GT2 6mm… 120 x 1 = 120
- Timing pulley GT2 16t 6mm… 140 x 1 = 140
- 10pcs 30cm jump wires 1f1f… 55 x 1 = 55
- 10pcs 30cm jump wires 1m1f… 55 x 1 = 55
- 28BYJ-48 Stepper Motor + ULN2003 driver… 260 x 1 = 260
- Battery holder 18650 x2… 60 x 1 = 60
Итого 3140р.
Кроме этого потребовались:
- две батареи 18650
- тоненькая ламинированная ДВП «фанерка».
- кучка болтиков и гаечек M4
- шесть саморезов 3.5x51 вроде как.
- 10 втулок M5 и 2 M8 — просто как проставки.
- Несколько деталюшек из «механо»-конструктора.
- выключатель под пайку
- гнездо для 3.5мм джека под пайку
- гнездо для питания 2.1x5.5
- и зажим для бумаги
Со стороны фотооборудования пригодились:
— зеркалка
— пульт ДУ китайский «беспроводной» — как донор кабеля подключения к разъему ДУ фотоаппарата
— простейший крепеж для камеры из штативного болта с проставками. Нормальная штативная головка была бы куда лучше, но минусом был бы более высокий центр тяжести.
Со стороны механики возни много не было. Полученный SN1000 имеет два DC мотора «130-size» для привода гусениц, и ещё один DC мотор установлен в редукторе для вращения платформы на этом гусеничном шасси. Всё собрано. Так что всё практически готово. Осталось только закрепить на платформе камеру и электронику. Традиционным подсмотренным мною решением является помещение электронного барахла на шасси под плоскостью на которой размещена полезная нагрузка или органы управления. Плоскость отделена от шасси проставками нужной высоты. Некоторые умудряются аж в несколько этажей строить.
Ладно, выпилил фанерку, насверлил в ней дырок под крепеж, прикупил втулок и саморезов — всё, готово. Ничего сложного в этом нет даже для фотографа. Шасси «экскаватора» обеспечивает и достаточную жесткость платформы и точки крепления.
С электроникой хлопот больше, но это заметно увлекательнее. Нет, правда, это очень занятно. Но не сложно. Несмотря на вполне профильное образование я плохо понимаю электронику, закон Ома от зубов вовсе не отскочит, программировал на С в последний раз лет двенадцать назад и чисто учебные задачи, никакого продашкн, да и руками толком работать не умею. Но не так всё страшно. Даже такой плохой программист как я, абсолютно не знакомый с применяемыми электронными компонентами, оказался способен быстро и легко накидать что-то работоспособное. Причем путь от моргания светодиодом до решения поставленных задач проходится очень быстро и легко — спасибо многочисленным ардуиночным веб-ресурсам, где всё разжёвано вплоть до сносно откомментированного кода и картинок с коммутацией. Существуют так же неплохие (иногда даже русскоязычные) книги, где последовательно и довольно доступно изложены наиболее востребованные возможности платформы Ардуино. Так что проглотив несколько книг и сохранив десяток закладок в браузеры на интересные решения я вполне шустро, буквально за несколько дней написал и отладил программу (скетч) проекта для Ардуино. Возни с паяльником так же не так уж много и вся она ограничивается чисто припайкой проводки к платке или выключателю. Получилось, конечно же, некрасиво, но на коленке вполне работает. Для фотографа перфекционизм пайки или программы существенен только тогда, когда их недостаток мешает реализации его целей.
Вернёмся ещё раз к списку компонент — я откомментирую назначение и взаимодействие их между собой.
Мозгами прототипа является DCcduino UNO. Это классический Arduino UNO R3 в китайской реализации. Отмечу, ничем не уступающей оригиналу. Там всё тот же Atmega328P с его обвязкой, разве что драйвер виртуального последовательного порта для USB требуется другой, но легко находимый (чип CH340), а в Win8 вроде даже комплектный. Данная ардуинка чаще всего является первым и наипростейшим что ковыряют нубы и я не стал исключением. И, ведь знаете, мне вполне хватило. Т.е. напряги с ресурсами возникли, но, тем не менее, задачи мои простенький 8битный микроконтроллер был более чем способен выполнить.
Мозги управляют моторами посредством другой платки, т.н. «шилда» — вставляемой в разъемы ардуинки платы на которой разведена и напаяна полезная в прикладном смысле нагрузка. Это надо отличать от просто «модуля». «Модули» — готовое решение со всей разводкой и напаянными компонентами — связываются с ардуинкой посредством проводов, втыкаемых в разъемы ардуинки, иногда с посредником в виде беспаечной макетной платы. А «шилд» — это такой «модуль», который устанавливается поверх ардуинки, поскольку последняя имеет стандартизированный типоразмер и положение коннекторов.
В моем случае я счёл нужным приобретение Motor Drive Shield L293D — это модуль для управления четырьмя DC-моторами (или двумя шаговыми двигателями) с токами до 600mA на каждый DC мотор. Проще говоря, для маленьких машинок сгодится. Для двигателей в моем шасси китайцы прописали 800mA stall current — максимальное потребление мотора, так что я предположил, что мне хватит. Немножко ошибался. Сейчас я бы лучше выбрал Adafruit Motor Shield V2 — эта платка значительно лучше отвечает задаче и освобождает уйму ресурсов, которые отбирает моя первая версия. Тут даже не в недостатке тока дело — с первой платой это тоже решается установкой поверх каждого чипа L293D ещё одного близнеца или, вообще, заменой их на аналогичный по разводке чип SN754410. Обращу так же внимание, что моторчики должны быть рассчитаны на напряжение 6V или более. Китайцы говорят, что у меня 6V моторы там и мне лениво лезть проверять. Потому что 3V моторы тоже будут работать, просто не так уж долго. В любом случае, они стандартного типоразмера и легко меняются. Кстати, вы про себя отметьте, что до начала возни с проектом я ни о чем вышенаписанном никакого понятия не имел, но это всё легко находится, осваивается и применяется.
К «шилду» подключено питание всей системы. От неё запитываются и моторы и ардуинка и прочая обвязка. Питанием в этом проекте служат две Li-Ion батареи 18650, выдавая порядка 7.4В с током до 3А (может и больше, но я лучше проверять не буду). В качестве резервного питания к выключателю так же подпаян выход на внешний источник питания через разъем 2.1x5.5мм. Разумеется, нельзя забывать вытащить батареи перед подключением внешнего источника, т.к. ничего хорошего из параллельного использования не выйдет. Однозначно. Но тем не менее, предусмотреть внешнее питание необходимо, потому что на морозе Li-Ion батареи кончаются очень-очень-очень быстро и может даже насовсем.
С камерой ардуинка общается через модуль реле. Понятно, что всё что она этим может сделать — замкнуть «кнопку» пульта дистанционного управления. А там уже от камеры зависит какую экспозицию она отработает (точнее, какую экспозицию установил фотограф). Конечно, если камера в Bulb-режиме, то продолжительностью выдерживания релюшки-«кнопки» мы контролируем экспозицию. Для ночных съемок без этого никак, потому в программе задаем не только сработку релюшки, но и возможность удерживания включенной релюшки необходимое фотографу время. У меня Nikon, потому потребовался специфичный разъем для ДУ, позаимствованный мною у китайского пульта таймлапс-съёмки. Счастливые сторонники Canon обходятся простыми штекерами-джеками, позавидую.
Для общения фотографа с программой предназначены органы прямой и обратной связи — LCD 2004 I2C blue и Joystick Module KY-023. Первое — LCD дисплей с синей подсветкой с матрицей 20 символов на 4 строки и одной латиницей в знакогенераторе. Заметно удорожал его адаптер I2C — это навесочка на него, позволяющая общаться с ардуинкой всего по двум проводам. Точнее даже по одному, но проводочка всё одно два и, конечно, ещё два для питания-земли (+ и -, ага). Поскольку большую часть портов ардуино у нас отъела платка-«шилд» управления моторами (в чем преимущество V2 шилда — тот так же общается по I2C, оставляя порты свободными), то другого выхода у нас нет. Ещё три порта (два аналоговых входа и один цифровой) у нас отъедает джойстик. Это довольно простое устройство, в котором качанием джойстика по двум осям мы меняем их сопротивление, а ардуинка по нему довольно точно может сказать программе куда и насколько мы его отклонили, а ещё нажатием на джойстик вызываем замыкание контакта кнопки. Итого мы получаем минимум пять возможностей что-то сказать программе используя всего три порта (но проводков пять, питание-земля, ага). Сам джойстик, однако, приятных эмоций не вызывает. Очень чувствителен, неудобен в монтаже, но… работает, ладно.
Наконец, объективом камеры у данного прототипа занимается шаговый мотор (степпер) 28BYJ-48. Ему так же нужен драйвер — чип, выгоняющий на него большой ток по слаботочной команде от ардуинки. Здесь это модуль-платка с ULN2003. Поскольку перемещения колец объектива должны быть очень точными и повторимыми — обычный DC-мотор не применим. Шаговый мотор позволяет с безупречной точностью крутнуть объектив чуть-чуть-чуть, а в следующий раз ещё чуть-чуть-чуть — очень точно и без всяких рывков, губящих любой таймлапс. Конечно, он не встроен в объектив и тут начинается проблема. Крутит он через зубчатый ремень типоразмера GT2 6мм шириной. Как можно было бы предположить — надежность кручения зависит от натяжения ремня и сцепления его с прорезиненной поверхностью колец объектива. Но я не предполагал и считал, что проблем не будет. Будут.
Поскольку на этом прототипе шаговик расположен слева от камеры, то хорошо натянутый ремень вызывает сворачивание камеры со штативного болта, как только её не затягивай. Был бы он справа — наоборот бы, затягивал, но, тут печалька… А сцепление абы-как затянутого ремня довольно нестабильно. Можно увеличить его наклеив на кольцо какое-нибудь покрытие с лучшим сцеплением. Или переставить мотор на другую сторону. Пока я не решил, что лучше.
Теперь расскажу о логике работы всего этого. В логике всё очень примитивно — если не стараться углубляться в то, как всё работает. Итак, у нашего «простенького» микропроцессора (atmega328) есть килобайт перезаписываемой постоянной памяти (я про EEPROM) в которой хранятся значения параметров таймлапс съемки. Есть энергонезависимая флэш память на 32Кб для хранения программы и загрузчика-перезаписывателя. Есть 2Кб оперативной памяти, которую использует наша программа для хранения переменных во время работы. Конечно, там еще куча регистров, таймеров и даже термометр внутри, но незачем сейчас об этом знать.
При подаче питания загрузчик в флэше запускает записанную им туда же нашу программу. Первым делом она размещает в оперативной памяти все переменные и константы в ней прописанные, считывает туда же из EEPROM параметры съемки и выводит на LCD предлагаемые фотографу альтернативы дальнейших действий. После вывода — крутится в цикле ожидания какой-либо реакции фотографа — вплоть до полной разрядки батарей. Доступны следующие действия:
— прямое управление приводами робота — для проверки работоспособности соединений, оценки работы-калибровки моторов и установки в стартовое положение шасси.
— программирование таймлапс съемки — изменение тех самых определяемых фотографом параметров съемки.
— тестовое исполнение съемки — пошаговое исполнение запрограммированной съемки, не включающее в себя экспонирование и паузы между шагами («фреймами»).
— запуск таймлапс-съёмки — исполнение шаг за шагом программы съемки согласно введённым параметрам.
Цикл исполнения программы съемки состоит из повторяющихся шагов-фреймов — их количество равняется заданному фотографом количеству кадров в ролике. Исполняется в следующем порядке:
0) вывод на LCD текущих параметров съёмки и хода её выполнения.
1) экспонирование. Переключаем релюшку и ждём заданное в параметрах время.
2) движение вперед-назад. Включаем моторы и движемся на заданное в параметрах расстояние.
3) вращение камеры влево-вправо. Вращаем камеру налево или направо на заданные в параметрах градусы. Вращение может происходить не каждый кадр, а, может быть, каждый второй, третий, пятый, десятый — зависит от реализующего свои фантазии фотографа.
4) вращение кольца объектива на заданный параметрами угол. Точнее, в параметрах задаётся количество шагов для шаговика, а какое количество шагов приводит к нужному углу поворота кольца вычисляет фотограф заранее — в режиме прямого управления шаговиком.
5) выжидание паузы между кадрами. Если в фрейме задавалось движение — есть смысл выставлять паузу не менее двух секунд, так как платформе надо успокоиться.
И, далее, если пользователь не прервал исполнение — переходим в начало следующего шага-фрейма.
В общем, никакой зверской математики или непостижимых простому фотографу алгоритмов.
Почему же я называю это прототипом, а не бегу наладить промышленное производство, патенты, сертификацию и международные продажи?
Во-первых, эт всёж игрушка. Я побаловался, удовлетворил любопытство изучая микроконтроллер и его обвязку, завёл в голове ещё несколько идей по реализации каких-то бытовых приспособ, но делать деньги, увы, не научился. Но себестоимость получилась весьма неплохой — по цене до сотни баксов вполне сносное устройство, тягающее на себе зеркалку.
Во-вторых, проблем хватает и есть что допиливать. Кратко перечислю:
— про ремень шаговика и объектив уже писалось выше.
— запитывание моторчика с одного канала L293D хватает чтобы робот бодренько бегал по ровной поверхности, даже наклонённой под заметным углом вверх, но категорически не хватает на бездорожье — по траве-песку ездить роботу… нехорошо. Частично я это решил допитав двигатели ещё одним каналом второй L293D. Решительно решается заменой двигателей в приводе гусениц более мощными и использованием их с драйвером, выдающим хороший такой ток.
— с поворотом платформы тоже не айс. Поворот меньше градуса выполнить трудно. Нужен шаговый двигатель. Редуктор, опять же, люфты имеет совершенно игрушечные — не забываем о происхождении и назначении шасси! Поскольку вращение при таймлапс съемке выполняется в одну сторону — люфт выбирается быстро и дальше не так критичен, но если есть движение вперед-назад, то возможны непроизвольные движения платформой — в пределах люфта.
— как реализовать поворот камеры вверх-вниз я так и не додумался. Таким образом, хотя проект и обозван 4DoF, по факту имеем только три степени свободы.
— двигатели и их приводы на гусеницы имеют разные характеристики. Не совсем идентичные. Поэтому при формально прямолинейном движении робота будет вести чуток в сторону. По моим прикидкам — примерно 10см на пять метров. Я это предполагал и намеревался ввести коррекцию курса применив обратную связь на основе упомянутого в списке магнитометра GY-273 HMC5883L Module.
Предполагалось, что, запомнив перед началом движения в фрейме значение поля в направлении движения, робот, по завершению предписанного движения, подработает одной гусеницей для коррекции курса до аналогичности значений замеряемого при коррекции поля и запомненного. Заранее неясно хватит ли точности магнитометра для этого или вместо обратной связи придётся просто вводить эмпирически вычисленную для данного прототипа поправку на время работы одного двигателя. Просто потому что купленный модуль оказался не совсем работоспособным — вместо значений от датчика один шум, а замену ему я пока не получил. А ещё на этом датчике хотел прикрутить детекцию опрокидывания при движении — чтобы прекращать съёмку. Хоть для этого пригодится.
— интерфейс получился весьма унылым. Неудобный джойстик, инертность управления роботом (об этом позже), отсутствие красивых графиков, кнопочек, завитушек, прибамбасов и фанфар — одни непонятные символы и те на латинице. В общем, некоммерческий продукт, точно…
— общий ужас от наколенности изделия. Уйма проводочков, платочек кое-как распиханных, закреплённых и торчащих то тут, то там. Это явно не похоже на белую красивую игрушку для магазина.
В-третьих, тут есть ещё куда развивать проект! Кроме решения перечисленных проблем и формирования коммерческого облика. Правда! Например, упомянутая выше инертность интерфейса взялась от стремления реализовать удалённое управление и получение телеметрии с робота. Да, да. Микроконтроллер, даже такой, на самом деле очень мощная штука, просто неэффективно работает в моих руках. Всё могло летать, но недостатки программирования и использования стандартных библиотек приводят к тому, что, управляя джойстиком приходится некоторое время ждать реакции робота на действие. Просто попутно робот готов к управлению им с других устройств. Правда-правда. Уже на стадии такого вот прототипа им вполне можно управлять со смартфона или компьютера. Рулить, корректировать параметры съемки, отслеживать исполнение — всё это можно уже сейчас сделать откуда угодно. Удивительно, но для этого мне даже не пришлось быть гуру в микроконтроллерах — кое-как, но оно уже работает. Хотя лучше меня не спрашивать, как именно. Слава Ардуино, чё уж.
Что дальше? Буду снимать. Получать удовольствие от снятого или мотивацию к пересъемке-переделке. Для этого и делалось, не? Мне не привыкать пользоваться инструментами, которыми не так уж просто пользоваться. А тут и пожаловаться не на кого кроме себя.
Я надеюсь, что заронил в читателях мысль, что не всё уж так сложно и вполне даже интересно попробовать в свободное время вон ту идейку, которая когда-то затаилась в уголке читательского мозга. Впрочем, даже просто «вот ведь какие извращения бывают!» будет мне достаточно. Спасибо за чтение и потраченное время.
Если кому-то не лень потратить времени ещё больше — можно познакомиться с написанным кодом. Ничего интересного или хорошего в нём нет, но он работает. Заранее предупреждаю, что там 800 строк.
» 4DOF Timelapse Robot V1.2
Да! И купите у меня дачу, наконец! Я жуть как устал ждать покупателя!
В заключение — вот так робот выглядит «вживую»:
Комментарии (26)
Aleksandr_Zh
14.10.2016 13:59ну что, можно похвалить за «правильно растущие руки» :)
в марте участвовал в судействе конкурса «Шаги в науку» в г.Брянск. Если не подводит память, парнишка сделал нечто подобное + логи GPS + параметры среды. Первое место честно получил.
А со стабилизацией фото как дела обстоят? или полная остановка при фотографировании?
L293D не сильно греются? её бы полевиками заменить…Alexander_Kharin
14.10.2016 14:11Кхм, робот для замера температурной и газовой составляющей по GPS привязкам чтоли? Молодца какой… Моя эта поделка уже тоже принесла мне приз — отладочную платку ESP8266. Там среди участников конкурса был школьник, который весьма прикольный робот-полотёр собрал. Я чессно за него свой голос отдал, молодёжь рулит.
Стабильность видео большей частью зависит от основания. Если робот движется по бездорожью — видяшка очевидно будет прыгать. Но в наше время это не проблема — даже ютуб и тот предлагает стабилизировать видео.
Не греются. Длительная работа = перемещения на длинные расстояния редко используются при съемке таймлапсов. Между фазами движений разных кадров проходит уйма времени за которое что угодно остынет.
DrZlodberg
14.10.2016 14:00К сожалению, по настоящее время так же не реализовано вращение камеры вверх-вниз — ну, относительно шасси. Я пока не представляю себе какими средствами выполнить это в габаритах моего прототипа
А в чём проблема? Места на конструкции под это завались. Если угол требуется небольшой — основание камеры повесить на 2 петли а третьей точкой винт+гайка с мотором. Хотя если сделать крепление винта на шарнире — можно и более-менее вменяемые углы сделать.
Если нужно конкретные углы — тут нужно лепить что-то типа панорамной головки: U — образная рамка на петлях и червячный привод сбоку.
Кстати непонятно, зачем так сильно вынесен привод кольца? Мотор можно поместить прямо под корпус, тогда конструкция станет сильно компактнее.Alexander_Kharin
14.10.2016 14:16Пока не понял первой идеи. Мысль про червячный привод у меня была, но цельного видения по его реализации не возникло. Проблема — в недостатке кругозора и воображения. ;)
Да, там на фотках степпер вынесен вбок. Так удобнее — у меня же ремень несшитый и идея была каждый раз подгонять под объектив прищепкой. Если повешать степпер ближе к объективу, рядом с ардуинкой, например, то свободный участок ремня куда можно прицепиться прищепкой становится очень маленьким — весьма небольшое вращение кольца полностью выберет свободный от прищепки ремень и начнёт наматывать её на объектив. Но для вращения фокусировочного кольца автофокусного объектива так вполне можно. Там чаще всего много и не покрутишь. А так — да, щас для транспортировки моторчик подвешен как раз под объективом, чтоб не мешался и не увеличивал габариты.DrZlodberg
14.10.2016 14:37Первая идея элементарна: Очень грубо — дверь, у которой вместо замка болт, вкрученный перпендикулярно плоскости двери и гайка в притолке. При вращении одного или другого будет плавно изменятся угол открытия. По сути это вариант червячного привода. Болт можно прикрутить напрямую к валу двигателся, так что технически реализуется довольно просто. Только требуется дополнительная подвижность в местах крепления болта и гайки, т.к. будет менятся их угол.
С червяком тоже всё довольно просто. Можно взять болт с грубой резьбой и вместо червяка использовать обычную самопальную шестерню большого диаметра вырезанную из листа пластика. Нагрузка там не должна быть большой, так что проблем с ресурсом не будет.
Кстати можно вместо червяка использовать и обычный шкив (как на кольце) только с большим передаточным отношением.
А в чём проблема вместо прищепки сделать обычны пружинный натяжитель? Это будет сильно удобнее.
Офтоп: Представил себе вместо этого объектива хороший телевик. Занятная гаубица получилась бы, если бы он не перевесил.Alexander_Kharin
14.10.2016 14:53А, да, понял про петли. Да, такое у меня в голове мелькало, но мне показалось тогда, что жесткости конструкции может не хватать. Типа тяжелый ведь груз на «двери» будет, а тут всего три точки. Но, конечно, всё зависит от петель и болта. А так — да, на основание платформы можно на шарнир степпер закрепить с «болтом» вместо вала, гайку на «дверь» и туда-сюда в пределах болта елозить. Вполне себе мысль.
Да, конечно, тяжелый телевик, ну, f2.8 какой-нибудь, потребует противовес на задницу робота — батареечек уже будет мало. А так — я старался всё разместить так, чтобы с моей зеркалкой и небольшим объективом центр тяжести находился в пределах погона платформы.
Alexander_Kharin
14.10.2016 14:56Пружинный натяжитель ведь применяется для цельных ремней, нет? Я чёт не понял тогда. Пока что для сцепки кусков ремня я видел только конструкции очень похожие по принципу на скрепку.
DrZlodberg
14.10.2016 15:021. А что мешает использовать цельный ремень? Я думал конструкция со скрепкой временная, просто потому, что была под рукой, а не из конструктивных соображений.
2. А какая разница вообще цельный он или нет? Он даёт удобство натяжения. Тонкости конструкции ремня ему пофиг.
Alexander_Kharin
14.10.2016 15:09Дак просто там, где я закупал ардуиночное барахло (Make Robots в vk), нет цельных ремней. Там ремни больше с ориентацией на 3d принтеры лежат чем для приводов роботов, а для тех цельные ремни нужны редко. Так-то конечно — никто не мешает! Китайцы с удовольствием любой ремень и шкив продадут. :) Это действительно временная конструкция — точно поняли. Я просто проверял идею на достаточность.
Так как два конца не цельного ремня-то с ним срастить? Я чёт не понял. Пружинный натяжитель это для меня такое вот:
Foolleren
14.10.2016 15:35Вот только таймлапс с движением камеры уже называется гиперлапс (Hyperlapse)
Alexander_Kharin
14.10.2016 15:37also walklapse, spacelapse, stop-motion time-lapse, motion timelapse, moving timelapse © wiki
RusikR2D2
14.10.2016 15:40Я бы заменил гусеницы на колеса.
а то любой камешек под гусеницей вызовет перекос платформы.Alexander_Kharin
15.10.2016 20:07Тут довольно спорно. Гусеничная машина более плавно переберется через неровность, а, значит, видео тоже будет плавнее дёргаться. А просто ездить проще на колесной, факт. Но дело-то в другом. Я же искал готовое шасси с поворотной платформой. Колесные такого типа встречаются очень редко. Построить с нуля никто не мешает если руки чешутся.
amaksr
14.10.2016 18:05Основная проблема таких динамических таймлапсов — стабилизация видео. Когда начинаешь монтировать все вместе, то основное время уходит именно на совмещение соседних кадров. Если соседние кадры сделаны с угловой разницей даже в 1 градус, то после стабилизации получаем трепыхания по краям (видимо обусловленные дисторцией оптики), с которыми ни Ютуб, ни прочий известный мне софт справиться не может.
Вот если бы автор решил эту проблему…Alexander_Kharin
15.10.2016 20:11Однозначно, лучше пользоваться хорошей оптикой с выровненным полем. В астрофотографии это просто must have. Да и то редко встречается оптика с нормально исправленными аберрациями даже среди рекламируемых как астрографы. А уж таймлапс… Тут важна плавность и повторяемость движений, точно. Поэтому нельзя просто руками чё-то переставлять-крутить и ожидать сносных результатов. :( Надо автоматизировать, печалька.
Alexander_Kharin
21.10.2016 08:28НАДО СКАЗАТЬ
Магнитометр всё-таки не катит. Он работает, реагирует вполне себе правильно. Но очень уж скачут значения, получаемые с него. Точность недостаточна. Протокол общения с магнитометром требует порядка 1-1.5мс на получение и обработку значений поля и отдельное измерение не говорит вообще ни о чём. Точность никакущая. Даже трата заметной доли секунды на обработку сотни измерений не даёт точности — средняя от измерений плавает слишком сильно для того чтобы уловить небольшое смещение курса робота. Только трата гдето секунды на измерения поля даёт боле-мене точное ощущение, что курс несколько сместился. Короче, было бы красиво, но не катит. Оставлю магнитометр для детекции опрокидывания, а коррекцию попробую сделать эмпирическим подбором режима работы двигателей.Alexander_Kharin
21.10.2016 12:10Ну, понятно, что можно было бы взять не копеечный модуль у которого в спеке написано +-2 градуса точности, а чё-то пристойное, вроде CMPS, но тогда его стоимость будет сравнима со стоимостью всего робота (получается примерно 2200р за CMPS11 с доставкой).
Alexander_Kharin
21.10.2016 12:28А можно взять водяру (побольше, стаканом явно не обойтись) и набросать стабилизацию курса в фазе движения на датчике с гироскопом помещённым в шасси. Надо бы помозговать ещё…
Alexander_Kharin
21.10.2016 12:37Попробую ещё на следующей неделе всёже поиграться с калибровкой и пересчётом значений датчика. Может при уходе от обработки сырых данных к откалиброванным градусам получится стабильную и сносную по точности ориентацию получать.
r00tGER
Идет бычок, качается,
Вздыхает на ходу:
— Ох, доска кончается,
Сейчас я упаду!
Alexander_Kharin
Про видяшку-то? Ага. Потом проверял ещё хватит ли шести метров дистанции чтобы съехать с доски совсем. Бродил с соседом около робота и спорил на каком шаге он таки свалится. Ох, это унылое зрелище валяющейся на боку железяки, глупо щелкающей затвором камеры. Надо, надо вводить коррекцию курса. Новый магнитометр я получил, он вроде даже правдоподобные показания выдает — попробую на следующей неделе посмотреть хватит ли его точности.
tmin10
Возможно стоит ввести дальномеры для определения границ или простейшие датчики цвета, чтобы отличить где доска, а где уже не доска.
Alexander_Kharin
Идея была как раз состряпать устройство которому не надо готовить основание. Зачем же тогда себя ограничивать? И тогда я бы лучше поставил на детектор правильного курса из маяка, ну, например, лазерного, указывающего единственно правильный курс, и приемников излучения, которые с достаточной точностью могут определить отклонение от прямого направления шасси на маяк. А чтоб в кадре не светился — поставить его и детекторы позади робота. Но чёто это уж очень геморно. Посмотрим как справится магнитометр или прикинутые на глазок поправки.
tmin10
А ведь точно! Небольшой маяк в виде лазерной указки тут вполне подойдёт. Направляем его в место между двумя фотоэлементами и если освещённость на одном сильно вырастет, то зщначит робот отклонился от курса и нужно его выправить. Ну или как-то ещё развить эту идею, например ИК диод и 2 фотоэлемента с непрозрачной перегородкой, если освещены оба, то всё ок, если только один — отклонились.
Alexander_Kharin
Да да. У меня примерно такие идеи и были. Только вот с ИК плохо будет… Дело-то чаще всего на природе. В общем, я за недостатком кругозора эту идею пока отложил и прикрутил к роботу магнитометр, посмотрим. Вроде ж около приборов с сильными магнитными полями роботу всё одно не ездить.
tmin10
Хм, можно наверное попробовать с сильным магнитом ещё сделать такой маяк, тогда вообще никаких помех не будет.