Timelapse таймер на Arduino

Timelapse таймер на Arduino

Одним из моих хобби является, как ни банально, фотография. Недавно задумался над созданием таймлапсов. Для создания таймлапсов требуется таймер, на котором можно будет выставлять частоту срабатывания затвора фотоаппарата. В поисках готового и дешевого решения были попытки заказать устройство на ebay, но так как Почта России дважды теряла мой долгожданный таймер, я решил сделать его сам.

326f30cf6ef9a4708564924e45d08c51

Разработка принципиальной схемы

Идея устройства проста: сигнал с потенциометра поступает на АЦП контроллера, тем самым задает интервал выходного сигнала на камеру. Этот интервал будет отображаться на 2 индикаторах, 3-й индикатор будет обозначать нам единицу измерения интервала (секунды или минуты), а также зажигать точку в случае, если значение потенциометра не менялось дольше 1 секунды. Данная индикация нужна была для решения одной проблемы, о которой будет сказано ниже, в конце концов она не оказалось лишней. Так же на устройстве я предусмотрел пару кнопок для ручной подачи сигнала на затвор и фокус.

Управление 7 сегментными индикаторами довольно простое.

ecc099858d85c732a9325ebd26f42e1d

Принципиальная схема устройства

20c3abc72e92ca6d19b709dca8737e34

Развел плату в Eagle-Cad. Естественно старался все делать на SMD элементах и настолько компактно насколько это позволяет печать на фольге и травление в хлорном железе. В результате вышла плата размером 5х5 см.

e3773622018fed0de456f326e62e4056

В живую.

8c07d47f5d6d8b481d9c530e83e7e86e

После этого перевел рисунок на текстолит, вытравил и залудил. Результат:

b4b1d6f0d78be60024819d8fc3c9b7cf

Попытался впервые нанести маску, но первый блин комом.

934446c7487a772477c541bf237680e1

Прошивка

После напайки большей части компонентов настала очередь поработать с прошивкой. Во-первых, залить на ATmega8L бутлоадер Arduino NG. Во-вторых, написать код программы. И уже на первом этапе я понял, что задача не так проста, потому что Arduino NG производится на базе ATmega8 и работает с кварцем на 16 МГц, в отличие от ATmega8L, которая работает с кварцем на 8 МГц. Но благо в интернете много информации по этой теме, например бутлоадер, который помогает сделать Аrduino с кварцем на 8 МГц на 8L. Его я и залил через Arduino IDE. Увы загрузчик постоянно слетал после прошивки первого скетча. Эту проблему я так и не смог устранить, поэтому так и приходилось заново его заливать

После этого принялся писать код скетча, но так как мои знания в программировании ограничиваются Паскалем первокурсника и простыми примерами для STM8, то обратился за помощью к коллеге ftp27, который с ярым энтузиазмом решил мне помочь.

Основная проблема состояла в поддержании цикла динамической индикации с одновременным отсчетом таймера для произведения снимка. Благо, в Arduino предусмотрена славная функция mills(), возвращающая кол-во миллисекунд с момента включения устройства. Так как не предусматривалось использование устройства в течении более 1 суток, то эта функция идеально подходила для тайминга.

Данная программа считывает значение с АЦП, проверяет, не изменился ли выбор времени, и если уж он изменился, то производит снимок с новым таймером. Так как значение АЦП довольно таки ощутимо бегает даже если не трогать потенциометр, то было решено брать не более 16 значений времени.

Для пущей экономии было решено выключать индикацию через 10 секунд после последней смены значения потенциометра. Сэкономили 30 мА — мелочь, а приятно.

Все файлы прошивки и схемотехники можно найти здесь.

Сборка устройства

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

До

f0a92ad1c41a8b750f1aa044f6783a0f

После

64c035554e605c583f6973a0b48ede86

В итоге вышло неплохое устройство себестоимостью 200 р., которое, мать его, работает.
8493c3d4e3b67abfec591f6861ec6098

80b19851cfe916c265b0d11fcc72beac

Конечно, можно было пойти по протоптанной тропинке и сделать все на NE 555, но очень уж хотелось индикацию и более удобный выбор времени таймера.

В этот же день и сняли свой первый таймлапс прямо из окна рабочего места gif.

А потом я нашел проект Magic Lantern и необходимость внешнего таймера совсем отпала :)