Камера для таймлапса на Arduino с ArduCam
Эту статью написал один из клиентов Arducam.
Камера для таймлапса на Arduino с ArduCam

Экспериментируя с камерами-обскурами, я много думал о том, как запечатлеть и показать течение времени. День и ночь, смена времён года, восход и закат солнца, восход и заход луны, приливы, час пик, наплыв посетителей в ресторанах — даже жизнь и смерть отмечают ход времени.
Готовых устройств для таймлапс-съёмки в продаже много. Им нужны питание от сети, солнечная панель или ёмкий аккумулятор, дорогая фототехника; к тому же они большие и заметные. Размер и цена сильно ограничивают продолжительность съёмки — даже если такое устройство не утащит первый же проходящий мимо варвар. Моя цель — сделать как можно более маленькую, экономичную и дешёвую камеру, чтобы свободно расставлять такие камеры где угодно и смотреть, что покажет течение времени.
Для этого я решил попробовать ArduCam.
Честно говоря, ArduCam меня разочаровала и оказалась неудобной по нескольким причинам:
- Библиотеки с открытым кодом не используют современную систему контроля версий вроде GitHub — это просто несколько файлов. Вдобавок под Linux они не компилируются, пока не исправишь директивы
#includeс учётом регистра символов. - На сайте ArduCam показаны снимки в полном разрешении с «поддерживаемых» модулей камер, но плата-шилд ArduCam Rev. B не может снимать растровые изображения больше 320 × 240 пикселей: у неё буфер всего 3 мегабита. С камерами со встроенным JPEG-сжатием можно получить снимки с более высоким разрешением, но они выходят очень размытыми, потому что их приходится ужимать до размера буфера. Если те снимки и правда сделаны с шилдом ArduCam, то не тем кодом, который выложен на сайте.
- Первая купленная мной «поддерживаемая» камера, MT9D111, не смогла сделать ни одного приличного снимка ни в одном разрешении. Заработать удалось только модуль OV2640.
| Пример снимка с «поддерживаемой» камеры MT9D111, сделанного примером из открытого кода ArduCam. |
|---|
В общем, ArduCam слегка разочаровала. Впечатляет, что кто-то сумел собрать камеру, работающую с Arduino, но пользы от неё немного. Размер изображения смехотворно мал, а потребление значительное (на 4 батарейках AA получается около 370 снимков). Для каких-то задач она, может, и пригодится, но не для качественной таймлапс-съёмки.
Посмотрим на мою камеру, код и результаты.

Моя камера на ArduCam
В камере использованы следующие компоненты:
- Arduino Uno Rev. 3
- Плата-шилд ArduCam Rev. B
- Модуль камеры OV2640
- Карта microSD на 2 ГБ
- 4 батарейки AA
Сборка элементарная: всё просто соединяется вместе. Собрать камеру можно меньше чем за минуту.
Учтите: плату ArduCam можно заставить работать с Arduino Mega, но придётся переделать соединения, поскольку распиновка не совсем совпадает. Энергоэффективность можно было бы немного повысить понижающим DC-DC-преобразователем, но я отказался от этого: даже при большей энергоэффективности разрешение снимков было неприемлемым.
| Снимок камерой OV2640 из окна офиса Google в Сиэтле. |
|---|
Первая версия кода просто делала снимок, ждала минуту с помощью delay и снимала снова — пока не сядут батарейки. Так удалось сделать 364 растровых снимка. Вторая версия кода с помощью библиотеки Sleep_n0m1 переводила Arduino в спящий режим и будила каждую минуту. Я надеялся, что это заметно продлит работу от батареек, но камера успела сделать лишь 370 снимков.
Снимки я собрал в видео командой avconv в Linux:
avconv -f image2 -i %08d.BMP output.avi
В целом опыт был познавательным, но ясно: если нужна по-настоящему долговременная и достаточно качественная таймлапс-съёмка, ArduCam для этого не подойдёт.

