Прототип робота для таймлапс-съёмки под управлением Arduino

в 9:45, , рубрики: arduino, avr, DIY, diy или сделай сам, dslr, видео, микроконтроллеры, программирование микроконтроллеров, роботы, фотография, Фототехника

Эта статья описывает создание прототипа программируемой подвижной платформы с несколькими степенями свободы для выполнения фотосъемки зеркальной фотокамерой — для последующего монтажа таймлапс-видео. Рекомендуется ничего не понимающим в электронике и микроконтроллерах, «профессиональным разработчикам» решений на Arduino и их продавцам здесь ничего полезного нет.

image

Кратко о том, зачем мне это было надо
Меня вечно тянуло к извращениям. Начинается всё весьма мирно и банально, но потом любопытство тянет вширь и глубь и начинаются эксперименты — о результатах которых даже иногда и рассказывать неудобно.

С фотографией и видеосъёмкой у меня было подобным же образом. Освоив в миллениум пленочные аппараты меня потянуло на эксперименты с ранними цифровиками. Вы в курсе, что не так давно фотки писались на PCMCIA-винт, а на матрицах не было антиалиасинг-фильтра? Навести, ткнуть кнопку автомата, кинуть фотку в облако через WiFi камеры, прогнав через инстаграмм-украшательства? Не наш путь. Только хардкор, только руками.
С подобным подходом я вместо съёмок достопримечательностей, семьи и голых девушек пришёл к специфичным видам фотографии. К той же астрофотографии — всё по-взрослому, разве что без адаптивной оптики и обсерватории в Чили. Теперь мучаюсь с поисками покупателя на дачу посреди которой стоит обсерватория. В процессе творческих мук над рекламными роликами про дачу вернулся к ещё одному своему увлечению — экспериментами с таймлапс-видеосъемкой. Ну, вы в курсе, это где извращенцы снимают одно и то же по кадру в секунду/минуту/часу, а потом делают вид, что это такое очень тормознуто снятое видео. Все вы видели примеры подобных роликов.
Однако, я не был бы собой, если бы меня это устраивало. Статичная таймлапс-съемка уже даже скучновата. Хочется оживить кадр. Можно просто прикрутить камеру к астрономической монтировке и получить ме-е-е-едленное панорамирование (360° за 24 часа ;) ). Для нетерпеливых продаются даже приблуды для панорамирования — для любопытства купил одну такую у китайцев и страшно проплевался. Полез изучить вопрос и выяснил, что всё довольно уныло. Готовые приблуды стоят страшных денег. Особенно в пересчёте на деревянные. Сносные по цене годятся лишь для мелочи типа GoPro. А килограммовую зеркалку с объективом на что-то водрузить и подвигать — неа, это БАБЛИЩЕ. Более того — чаще всего и коммерческие, и любительские приблуды представляют из себя небольшой рельс по которому тянут каретку с камерой. Ребят, это так скучно! Хотя выходит плавненько, признаю. В общем, покопавшись в поисковиках по теме timelapse dolly я весьма разочаровался в человечестве.
Но тут я вспомнил про Ардуино.

Тему микроконтроллеров я долго обходил стороной, хотя, безусловно, как современный человек ежедневно пользуюсь их трудом даже не замечая этого. Разумеется, я знаю, что есть такие маленькие микросхемки, которые всё умеют сами — только цепляй к ним чо надо и получишь результат. Но я не дружу с электричеством, ничё не понимаю в электронике и последний раз программировал на С дюжину лет назад. Про эксперименты с ассемблером я вообще промолчу. Я скорее даже не посредственный, я отвратительный программист. Так что всю работу, которую могли сделать для меня микроконтроллеры, я не получал или достигал ручками, или какой-нибудь грубой примитивной электротехникой.

А тут такой замечательный повод для экспериментов. Как было можно пройти мне мимо?

image

Возможно, не все представляют себе возможности даже самых простых микроконтроллеров. Особенно плохо предметом владеют люди «творческих профессий». Дизайнеры, фотографы, операторы — часто они выучивают «процесс» и придерживаются консервативных взглядов на предмет своей профессии, не желая ничего менять. Особенно, когда движение в сторону (необязательно это движение вперёд) связано с заметными усилиями по изучению чего-то нового, что совершенно необязательно пригодится в основной деятельности. Дескать, ну и зачем мне это надо — лучше пойду ещё одну голую девушку поснимаю. Безусловно, это дело редко кому надоедает. А даже если люди и задумываются о движении в сторону, то часто могут позволить себе просто заплатить. Зачем строить железку, если можно железку купить?

Но если железку купить не на что, да к тому же она никогда не окупится и хочется просто поиграться с идеей? Если рассматривать микроконтроллеры как замену Танчикам, способную выдать что-то интересное 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.

image

По ардуино я воспользовался предложениями от 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

Да! И купите у меня дачу, наконец! Я жуть как устал ждать покупателя!

В заключение — вот так робот выглядит «вживую»:

Автор: Alexander_Kharin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js