Видеорегистратор на ардуино своими руками

Опубликовано: 16.05.2024

Меня давно-давно уже привлекает электроника не только как пользователя. Я хочу уметь творить и создавать в этой сфере тоже. И может быть когда-нибудь в будущем одна из моих компаний будет заниматься робототехникой или периферийными компьютерами для автомобилей.

Передо мной стояла задача — сделать возможность переключения между камерой обгона, заднего вида и видеорегистратором (чтобы иметь возможность настроить изображение), при этом сохраняя автоматическое включение камеры заднего вида, когда "врубаешь задний ход".

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

Я так же хотел сделать так, чтобы камеру заднего вида можно было включить без включения заднего хода. Обычно питание камеры цепляют к лампе заднего хода и таким образом она автоматически включается когда авто сдает назад. Однако камера заднего вида полезна и если машина стоит в "кармашке" и нам нужно сдать назад и из-за стоящих рядом автомобилей ничего не видно. Я несколько раз был в ситуации, когда хотел включить эту камеру не включая реверс — просто чтобы посмотреть что происходит на дороге. И по этой причине, и для сохранения концепции переключения всех камер, я решил сделать подачу питания на камеру постоянно, но реализовать еще и определение, что питание на лампу заднего хода подается и автоматически переключать на камеру заднего хода в этом случае.

Я еще с детства умею держать паяльник… Но многих вещей я не знал — как программировать микроконтроллеры и как изготавливать платы. Поэтому процесс создания устройства был для меня весьма увлекательным…

Во-первых, нужно было научиться работать с Arduino. Я купил базовый набор Arduino, инструменты, отдельно купил набор реле, поскольку не знал в тот момент что могу и самостоятельно собрать схему для релешек.

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

Написание программы для Arduino было, наверное, самым простым. А самым сложным — сборка. Нужно было приготовить все входы — выходы и припоять провода к купленым разъемам качественно у меня все никак не получалось — сопротивление постоянно гуляло, даже после пайки с кислотой. Но после нескольких часов я справился с этой задачей и у меня появилась возможность проверить как это работает используя реальный сигнал. У меня не было нескольких видеокамер дома, поэтому было решено использовать аудио-сигнал. Запустил музыку вконтакте (Дуров, верни музыку!), с мобилы… и подал не входные разъемы устройства (на фото видно как это работает).
Отлично! Все работает, программа циклически переключает музыку, а значит будет работать и с видео!

А вот теперь — новый этап. Нужно спроектировать печатную плату. Я перебрал несколько программ типа P-CAD и они мне не понравились. "Ну неужели нету нормального софта?" — подумал я, и тут я наткнулся на Fritzing. Программа очень тесно дружит с Arduino, у нее удобный интерфейс и она может запускаться на маке — это то, что я искал.

Я набросал на виртуальной печатной плате что я от нее хочу, перешел на вкладку со схемой, сделал Autoroute (автоматическое прокладывание связей), немного поправил пути, проставил те, которые программа не смогла сама и распечатал на бумаге для проверки схемы.

Вот тут нужно быть внимательным. Я специально распечатал схему, чтобы при проверке можно было обводить ручкой те места, про которые у меня нет никаких сомнений. Все, проверка закончена — можно приступать к проектированию печатной платы.

Переходим в третью вкладку, назначаем размер платы, чтобы он соответствовал размерам Arduino, раскидываем компоненты и делаем autoroute. Я думал это будет так же легко, как описано в предыдущем предложении, но! Но программа не может нормально проложить авто-роут, использует несколько перемычек и мне приходиться работать с этим руками. Я распечатываю схемы платы и потихоньку ищю слабые места.

После продолжительного времени внимательной отладки, я приступил к изготовлению платы — отрезал заготовку, украл у жены модный глянцевый журнал и распечатал схему платы на принтере. По методу ЛУТа (лазерно утюга) изображение распечатаное на глянце закрепляется на заготовке и переносится на плату под воздействием температуры (необходимо утюжить изображение прикрепленное к плате).

Я не буду подробно останавливаться на процессе изготовления, потому что он уже много где подробно описан, к примеру тут. Могу сказать только то, что у меня получилось очень качественного изготовить с первого раза — но я очень внимательно прочитал несколько статей по этому поводу. Ах да… я встречал много вопросов типа "А какую лучше страницу из журнала использовать — светлую или темную? C буквами или без?". Так вот, по моей практике: лучше всего печатные платы выходят из страниц с красивыми девушками и чем они более секси — тем лучше платы получаются :). Но на самом деле это имеет значение только с эстетической точки зрения, а на физику и химию процесса не влияет. Только не используйте фотобумагу — распечатаное на лазерном принтере изображение "волосатое" и мажется.

Еще, очень важно понять что ошибки, которые совершают все, вы тоже можете совершить. Я перепроверял все на 100 раз и много раз читал о том, что в самый последний момент люди ошибались и у них получалась "зеркальная" плата. Так вот я заметил это уже на этапе сборки платы, когда собрал разъемы для соединения с Arduino и понял, что они с обратной стороны. Это дало мне возможность еще поработать над платой и мне в итоге удалось оптимизировать ее, петем перенесения элементов, выходов и переназначения пин-ов — я сэкономил 30% платы и обошелся всего одной перемычкой + избавился от черезчер близких дорожек. Но если выша схема была идеальной — не перепутайте сторону!

А результат работы камеры обгона просто потрясающий — на праворуком авто теперь можно безопасно ездить по трассе! :) Я покупал камеру КРС-DNR880 в интернет-магазине за 5990 рублей и длиннофокусный объектив на 25 мм за 790 рублей. Всем рекомендую взять его при заказе. Я боялся что в будущем на следующем авто, будет стандартная магнитола и она будет поддерживать только NTSC, поэтому и взял NTSC-камеру — ведь с моей текущей магнитолой на Android она работает отлично.


В данном проекте мы подключим камеру через Ethernet при помощи Arduino. Т.о. вы сможете делать фото внутри дома, просто открыв веб-страничку в вашем браузере. Для данного проекта вам не понадобится какое-либо специальное приложение для смартфона.

Шаг 1: Используемые материалы


Шаг 2: Подключение модулей



Аппаратное соединение модулей вместе не вызовет особых проблем. Выполните подключение согласно рисунку.

Шаг 3: Подготовка программного обеспечения – библиотека

Для данного проекта нам понадобится загрузить несколько библиотек. Все б иблиотеки можно загрузить с ресурса http://arduino.cc

  • Adafruit_VC0706.h (для TTL камеры)
  • SdFat.h (для SD-карты)
  • SdFatUtil.h (для SD-карты)
  • Ethernet.h (для Ethernet шилда, устанавливается по умолчанию в скетче)
  • SoftwareSerial.h (для TTL камеры)

После загрузки всех библиотек вы готовы для запуска проекта.

Шаг 4: Программное обеспечение – код скетча


В данном разделе размещается код скетча проекта.

Загрузите файл скетча - ethernet_camera.ino

Вам необходимо выполнить некоторые изменения в коде скетча.

1. Необходимо изменить параметры mac[] и ip[] для вашего arduino.

2. Для отображения jpg файла в браузере мы должны подать команду для преобразования в формат jpg, как показано ниже:

В скетче указаны блоки с подробными комментариями – процедура прошивки, последовательная передача данных, файлы чтения/записи SD-карты, ethernet и т.д.

Шаг 5: Запуск и тестирование результатов



На картинке выше показан результат работы ethernet камеры.

Для фотографирования: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/ttt

Для просмотра полученной фотографии: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/image.jpg

Для удаления фотографии: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/rrr

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

Такой обширный функционал достигается благодаря множеству модулей различного предназначения, одним из которых является Ардуино камера. Она пригодится как для написания умных нейросетей, так и для простого отслеживания того, что происходит у вас в квартире, когда вы не дома. Давайте разберёмся, какие характеристики есть у таких датчиков и как их лучше всего реализовать в жизнеспособных системах.

Основным производителем таких камер сейчас является компания - adafruit.com.

Пример модуля камеры: OV7670 300KP VGA Camera Module

Характеристики TTL камеры

Сам TTL модуль работает на стандарте NTSC протокола, который известен всему миру благодаря возможности безналичной оплаты в смартфонах. Андроид, в отличие от продукции купертиновцев, давно научился применять эту технологию для беспроводного управления любой техникой.

TTL Serial JPEG камера с NTSC видео от Adafruit

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

Но не только в защитных целях годится Аrduino камера, её можно применять и для создания собственных фотоаппаратов и вебок, если вы захотите. А благодаря встроенным возможностям по настройке диафрагмы и насыщенности цветов можно получить такие кадры, которые не каждая зеркалка или мыльница с хорошим объективом способны выдать.

И, наконец, авто-контраст и авто-яркость прекрасно подходят для отслеживания движений даже в тёмных помещениях, что позволяет устанавливать их вместо соответствующих датчиков. Но, конечно, без соответствующего софта это просто груда железа. Благо, найти подходящие библиотеки, благодаря доступности Ардуино, не так и сложно, достаточно просмотреть пару тематически англоязычных форумов.

Но не заблуждайтесь, такие модули не предназначены для профессиональной фотографии, ведь их максимальное разрешение не выходит за пределы 630 на 480, предоставляемых даже самой дешёвой веб-камерой. Пример того как выглядит итоговое изображение:

При этом, у неё есть куда более значимые достоинства, перекрывающие все недостатки, например:

  1. Камеры чувствительны к ИК излучению, что не только даёт обнаружить любые изменения в цветопередаче, но и позволяет отслеживать движения в полной темноте. Учитывайте, что каждый модуль индивидуален, и подбирать его стоит по вашим требованиям, в данном случае мы рассмотрим именно систему видеонаблюдения.
  2. Размеры в 32 мм квадратных при фотоматрице CMOS в четверть дюйма.
  3. Соответственно разрешению, и мегапикселей немного – всего 0.3.
  4. А вот формат выходных данных зависит от камеры; если вам нужен простой модуль для видеонаблюдения, то подойдёт и стандарт M-JPEG, который будет выдавать не более 30 кадров в секунду.
  5. Все параметры, будь то баланс белого или экспозиция, автоматически подстраиваются в зависимости от программы.
  6. Максимальное усиление – 16 Дб, а вот динамический диапазон – все 60 Дб.
  7. Угол обзора небольшой – всего 60 градусов, учитывайте это, когда будете выбирать место для установки. Но его можно значительно расширить, прикупив специальные фишай линзы.
  8. Фокусное расстояние – от 10 до 15 метров.
  9. Битрейт установлен изначально 38400, менять его вроде бы и можно, с помощью АТ+ команд, но на деле это не работает или же попросту бесполезно.
  10. Потребляют такие модули в среднем 75 мА, учитывайте это, если собираетесь сделать автономную камеру видеонаблюдения.
  11. Работает в функциональном напряжении 5В, а подключается по 3.3 В TTL через три проводника.

Теперь, когда мы изучили техническую сторону вопроса, необходимо разобраться в подключении, если с Ардуино вы столкнулись впервые.

Подключение и настройка

Зачастую камера для Ардуино приходит без коннекторов, поэтому вам необходимы специальные проводники, которые придётся подпаивать к пинам отдельно. Благо контакты расположены приблизительно в 2-х мм друг от друга, что упрощает подключение видео с Аrduino к МК.

Так что сгодятся любые толстые проводники и самые обычные жала для распайки, без ювелирной работы, которую приходится проделывать на тех же датчиках движения, что является ещё одним преимуществом, которое предоставляет Аrduino видеонаблюдение, в отличие от аналогов.

Если же вам не нужна видеосъемка, по какой-то причине, то достаточно и 4-х проводов. Естественно, лучше подобрать разные цвета, для удобного кабель-менеджмента, когда вы будете упаковывать поделку в заготовленный корпус. В нашем случае расклад таков:

  1. Для 5В пина подключаем красный проводник.
  2. На заземление отправляем черный.
  3. Белый идёт на пин для получения данных.
  4. Зеленый – на TX, предназначенный для передачи картинки.

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

Соединение деталей, схема

Теперь соединим всё вместе. Эта схема предоставлена самим производителем таких камер - Adafruit:

Программирование

Так как мы говорим о простейшей реализации, то предполагаем, что у вас нет навыков работы с С++, а соответственно, сгодится любая библиотека из общественного источника.

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

Для камеры нужно использовать приложение Windows Comm Tool. Нужно использовать серийный протокол. Сами производители рекомендуют переходник для FTDI или USB/TTL конвертер. Для Arduino можно брать серийный чип (FTDI) и загрузить скетч в мк:

Для плат типа Leonardo нужно брать этот код:

Теперь нужно скачать и настроить библиотеку от производителя:

Обнаружение движения

Благодаря расширенному спектру такая камера подойдёт и в качестве датчика движения, способного реагировать ночью на любой шорох. Если подключить её к смартфону, о чём мы еще поговорим, можно настроить двойной протокол передачи данных.

Когда телефон удаляется настолько, что NTSC перестаёт работать, информация и СМС будут передаваться по беспроводному интернету и наоборот.

Связка: камера, Ардуино и Андроид

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

Лучшим выбором, для проверки работоспособности проекта в принципе, будет блютуз модуль и соответствующее приложение на Андроид, позволяющее работать с ним. А уже затем можно начинать эксперименты с усложнением системы.

Использование видеокамеры с Arduino

Как применять подобную систему, решать исключительно вам, вот лишь несколько проектов, которые можно взять на заметку:

Видеокамеры (камеры) в настоящее время находят широкое применение в электронной промышленности и имеют множество применений, таких как система мониторинга посетителей, система наблюдения, система учета посещаемости и т.д. Камеры, которые мы используем сегодня, умны и имеют множество функций, которых не было в предыдущих моделях камер. Современные цифровые камеры не только захватывают изображения, но также захватывают и высокоуровневые описания изображений и анализируют то, что они видят. Они широко используются в робототехнике, искусственном интеллекте, машинном обучении и т. д. Захваченные кадры обрабатываются с помощью искусственного интеллекта и машинного обучения, а затем используются во многих приложениях, таких как обнаружение номерных знаков, обнаружение объектов, обнаружение движения, распознавание лиц и т. д.

Внешний вид проекта подключения камеры OV7670 к Arduino Uno

В этой статье мы рассмотрим подключение наиболее часто используемого сейчас модуля камеры OV7670 к плате Arduino Uno. Аналогичным образом ее можно подключить и к плате Arduino Mega. Модуль камеры достаточно тяжел в подключении поскольку он имеет большое количество контактов. Также при использовании камеры достаточно важен выбор проводов, которыми вы ее подключаете, поскольку качество проводов может значительно влиять на качество картинки и уровень зашумленности видеоизображения.

Камера OV7670 работает от напряжения 3.3V, поэтому следует избегать прямого ее подключения к обычным контактам ввода/вывода Arduino, которые работают с напряжением 5V. OV7670 является камерой с буфером FIFO (first in, first out – первым пришел, первым вышел). Но в этом проекте мы будем захватывать изображения без использования данного буфера. Мы постарались максимально упростить данный проект чтобы его можно было повторить даже начинающим радиолюбителям.

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Uno (купить на AliExpress).
  2. Модуль камеры (Camera Module) OV7670 (купить на AliExpress).
  3. Резистор 10 кОм – 2 шт. (купить на AliExpress).
  4. Резистор 4,7 кОм – 2 шт. (купить на AliExpress).
  5. Соединительные провода.

Программное обеспечение

Arduino IDE
Serial Port Reader (для анализа выходного изображения)

Некоторые особенности модуля камеры OV7670

OV7670 представляет собой модуль камеры с буфером типа FIFO. В настоящее время он производится несколькими фирмами и доступен с различной распиновкой. OV7670 обеспечивает полномасштабное (full frame) 8 битовое изображение в окне. OV7670 умеет работать с различными форматами видео изображения. В VGA разрешении камера обеспечивает до 30 кадров в секунду.

Модуль камеры OV7670 включает:

  • массив датчиков изображений (разрешения примерно 656 x 488 пикселов);
  • тактовый генератор;
  • процессор обработки сигналов;
  • аналого-цифровые преобразователи;
  • генератор тестовых шаблонов;
  • цифровой сигнальный процессор;
  • устройство для масштабирования изображений;
  • цифровой видео порт;
  • светодиод и выход управления стробоскопической вспышкой.

Датчик изображения камеры OV7670 управляется с помощью шины SCCB (Serial Camera Control Bus - последовательная шина управления камерой) по протоколу I2C (контакты SIOC, SIOD) с максимальной частотой синхронизации 400 кГц.

Внешний вид модуля камеры OV7670 показан на следующих рисунках.

OV7670 модуль VGA камеры

OV7670 модуль VGA камеры

Модуль камеры OV7670 (со снятой линзой)

Модуль камеры OV7670 (со снятой линзой)

Модуль камеры OV7670 (нижняя сторона платы)

Модуль камеры OV7670 (нижняя сторона платы)

Камера использует следующие квитирующие (подтверждающие) сигналы:

  • VSYNC : Vertical Sync Output (выход вертикальной синхронизации (для строк) – низкий уровень во время кадра;
  • HREF : Horizontal Reference (горизонтальная синхронизация (для колонок) – высокий уровень во время активных пикселов ряда (строки);
  • PCLK : Pixel Clock Output (пиксельная синхронизация (тактовый сигнал передачи байта из параллельного порта D0–D7) – независимый генератор синхронизирующих импульсов. Данные правильны на нарастающем фронте.

В дополнение к этому камера оперирует еще следующими сигналами:

  • D0-D7 : параллельный цифровой 8-битный видеовыход в формате YUV/RGB;
  • PWDN : Power Down Mode Selection - включение (лог. 0) и выключение (лог. 1) камеры;
  • XCLK : внешнее тактирование (синхронизация);
  • Reset : сигнал сброса.

Камера OV7670 синхронизируется с помощью генератора на 24 МГц. Это обеспечивает выход пиксельной синхронизации (PCLK) 24 МГц. Буфер типа FIFO имеет память на 3 Мбит. Генератор тестовых шаблонов формирует шаблон цветовых полос – с 8 полосами, с постепенным уменьшением к серому цвету (fade-to-gray).

Схема проекта

Схема подключения модуля камеры OV7670 к плате Arduino Uno представлена на следующем рисунке.

Схема подключения модуля камеры OV7670 к плате Arduino Uno

Внешний вид получившейся у нас конструкции проекта показан на следующем рисунке.

Внешний вид конструкции проекта

Объяснение программы для Arduino

Полный текст программы приведен в конце в статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Для работы с камерой OV7670 нам понадобится встроенная в Arduino IDE библиотека. Никаких внешних библиотек, которые необходимо скачивать, мы в этом проекте использовать не будем, только встроенные библиотеки.

После подключения в программе необходимых библиотек нам необходимо сконфигурировать регистры для работы с камерой OV7670.

Функция Setup() в нашем проекте будет включать все необходимые установки, необходимые для захвата изображений. Первой функцией, которую мы применим, будет arduinoUnoInut() – она используется для инициализации платы Arduino Uno. Она отключает все глобальные прерывания и устанавливает настройки для интерфейсов связи, такие как синхронизацию для ШИМ (широтно-импульсная модуляция), выбор контактов прерывания, настройки предделителя, добавление бита четности и стоповых битов.

Статья посвящена подключению и работе с серийным модулем TTL камеры и Arduino.

Камера работает по стандартам NTSC. Подобные модули отлично вписываются в проекты для реализации фотографии и видеострима. Кроме того, обычно они имеют встроенную возможность настройки яркости и насыщенности цветов, настройки авто-контраста и авто-яркости, дают возможность отслеживать движение.

Описание и технические характеристики камеры

Хотелось бы более детально остановиться на том, как именно подобные модули обеспечивают и фото и видеосъемку. Изначально камера была разработана с целью наблюдения. То есть, основная задача была стримить видео с пина Video (в черно-белом цвете) и обрабатывать команды по серийному протоколу связи. С помощью серийного протокола можно запросить у модуля камеры остановить кадр видеосъемки и сохранить полученный кадр в формате JPEG. Например, модуль камеры в стандартном режиме работы будет стримить видео. Когда камера обнаружит движение, будет сделано фото, которое сохранится на карту памяти для дальнейшего анализа.

Видеокамера для Arduino

Разрешение на модуле камеры не большое – максимальный размер фото 630х480 пикселей. При этом камера чувствительна к инфракрасному излучению, благодаря чему обнаруживаются изменения в цветопередаче. Основная причина этих недостатков – модуль камеры предназначен для наблюдения, а не качественной фотографии. Существуют модули и с другими параметрами. Рассматриваемый нами – один из самых лучших по своим техническим характеристикам.

Технические характеристики модуля камеры

  • Размер модуля: 32 м x 32 мм : CMOS 1/4 дюйма
  • Количество пикселей: 0.3 M
  • Размер пикселя: 5.6 мкм * 5.6 мкм
  • Формат на выходе: Стандартный JPEG/M-JPEG
  • Баланс белого: автоматический
  • Экспозиция: автоматическая
  • Коэффициент передачи: автоматический
  • Динамический диапазон: 60 Дб
  • Максимальное аналоговое усиление: 16 Дб
  • Скорость кадров: 640*480 30 кадров в секунду
  • Режим сканирования: прогрессивное сканирование
  • Угол обзора: 60 градусов
  • Расстояние наблюдения: 10 метров, максимум 15 метров (настраиваемое)
  • Размер изображения: VGA (640*480), QVGA (320*240), QQVGA (160*120)
  • Скорость передачи данных: по умолчанию 38400 (В даташите указано, что вы можете менять скорость с помощью соответствующих команд, но на практике это не работает)
  • Потребляемый ток: 75 мА
  • Рабочее напряжение: постоянный ток +5В
  • Связь: 3.3В TTL (три проводника TX, RX, GND)

В качестве примера работы видеокамеры ниже приведены две фотографии: первая – в комнате в солнечный день и вторая – на улице в дождливый.

Фото с видеокамеры в помещении
Фото улицы с видеокамеры в дождливый день

Подключение камеры

Как правило модуль продается без коннекторов, так что придется запаять проводники к предусмотреным пинам. Хорошая новость: контакты находятся на достаточно большом расстоянии друг от друга (около 2 мм). Можно использовать достаточно толстый проводник и жало для распайки.

Если вы не планируете использовать возможности видеосъемки, можно использовать четыре провода. Мы используем красный для пина +5 В, черный для Земли, белый для пина RX (данные, которые поступают на камеру от Arduino) и зеленый для пина TX (данные, которые поступают с камеры).

Видеокамера для Arduino вид спереди
Видеокамера для Arduino четыре коннектора

Если вы планируете использовать NTSC видео-выход для подключения к телевизору или монитору, припаяйте еще один черный проводник к пину Земля и желтый к пину CVBS.

Видеокамера для Arduino с NTSC
Видеокамера для Arduino в корпусе

Если у вас водонепроницаемая модель камеры, в ней уже будут предусмотрены следующие коннекторы:

  • Красный подключен к +5 В;
  • Черный подключен к Земле;
  • Зеленый – RX;
  • Белый – TX;
  • Желтый – сигнал NTSC видео;
  • Коричневый – Земля NTSC видео.

Проверка работоспособности камеры

Один из самых быстрых методов проверки работоспособности камеры – использование NTSC видео выхода для подключения. В этом случае при настройке параметров изображения и фокусировки вы моментально увидите результат. В комплексе с программой CommTool, которую мы рассмотрим ниже, это идеальный метод для ознакомления с основаи работы с модулем камеры и Arduino.

Для подключения к большинству телевизоров и мониторов нужен RCA джек. С этой целью мы припаяли RCA выход к камере. Черный проводник подключен к Земле, а желтый – к сигналу. Купить коннекторы RCA типа можно в любом магазине радиотехнических деталей.

К сожалению, перейти из режима NTSC в режим PAL невозможно.

Подключите кабель NTSC к монитору и подключите красный и черный кабели к источнику питания +5 В. На мониторе тут же появится черно-белое изображение!

Видеокамера подключенная к Arduino
Видеокамера Arduino - вывод через RCA джек

Использование CommTool

Для использования windows-приложения Comm Tool, необходимо наладить обмен данными с камерой по серийному протоколу. Мы предлагаем два варианта. Первый – использовать переходник для FTDI или какой-то USB/TTL конвертер. В случае с Arduino вы можете использовать серийный чип (чип FTDI), загрузив следующий скетч на Arduino:

Примечание: Этот метод сработает только на Arduino с отдельным USB-интерфейсом, вроде Uno. С платами Leonardo так не получится!

Если вы используете Leonardo, Micro, Yun, или другие контроллеры на основании ATmega32U4, используйте этот Leo_passthru скетч вместо "пустого" скетча.

//Обеспечивает передачу данных по серийному протоколу при

//использовании плат Arduino Leonardo в Windows.

// Красный подключен к +5 В

// Черный - к земле

// Зеленый - к цифровому пину 0

// Белый - к цифровому пину 1

Теперь подключите камеру к Arduino следующим образом:

Подключение видеокамеры к Arduino

На водонепроницаемых камерах белый и зеленый провода часто меняются местами! Так что учтите это при подключении. Красный коннектор должен все равно идти к +5 В, а черный – к Земле.

Обратите внимание, что при подключении камеры к Arduino используется резистор на 10 кОм. Питание логики камеры 3.3 В, так что опустить напряжение с 5 В до 2.5 не такая уж плохая идея. В обычном режиме на выходе с цифрового пина 0 формируется сигнал HIGH, который соответствует 5 В. При нашем подключении, с учетом сопротивления резистора, подключенного к входному сигналу (белый проводник), напряжение не превысит 3.3 В.

Теперь загрузите и установите программное обеспечение VC0706 CommTool.

Запустите программу и выберите COM порт, к которому подключена Arduino.

Запуск VC0706 CommTool

После этого Open порт и нажмите Get Version

Обратите внимание, что отобразилось VC0703 – Почему DSP запрограммирован под другим номером – точно не известно. В любом, случае, ответ мы получили.

Следующая кнопка – рядом с FBUF CTRL.

Панель управления в VC0706 CommTool

Это новая панель, которую мы можем использовать, чтобы напрямую загрузить рисунки с камеры.

  • Установите камеру на объекте для его фотографии;
  • Нажмите Stop FBuf, чтобы «заморозить» кадр;
  • Нажмите Sel File, чтобы выбрать файл для сохранить в JPG формате.

После этого нажмите Read (рядом с Sel File), чтобы считать кадр с камеры.

Считывание изображения с камеры

Вот и все! Теперь вы с легкостью можете загружать фото с камеры. Чтобы сделать новый снимок, нажмите Resume. После этого нажмите Stop CFbuf для нового фото. Кроме того, вы можете выбрать Compression Ratio и выбрать качество снимка. Учтите, что время обработки тоже изменится. Простого пути изменения размера фотографии в этой программе нет, но мы можем это сделать в скетче Arduino.

Вы могли заметить, что есть выпадающий список для изменения скорости передачи данных. По умолчанию скорость выставлена на 38400.

Несмотря на то, что в программе есть эти настройки, даже если они отработают, после перезагрузки камеры придется выставлять их заново. В некоторых случаях, при изменении скорости передачи данных в программе, камеры отключаются. Так что пользоваться этими настройками не рекомендуется.

Настройка считывания изображения с камеры

Стоит обратить внимание на кнопку Image Property, с помощью которой можно настроить камеру. С помощью ползунов можно в режиме реального времени подстраивать изображение, которое выводится на вашем подключенном мониторе.

Настройка считывания изображения с камеры в режиме реального времени

В программе куча настроек. Рекомендуем ознакомится с их перечнем ниже и не менять их, пока вы на 100% уверены, что это за настройка и зачем она вам нужна.

  • Config – смотрите выше.
  • Get Version – смотрите выше.
  • R/W Data – используется для передачи данных на процессор DSP чипа. Не стоит менять эту настройку без стопроцентного понимания, зачем это необходимо, так как можно получить конфликт с камерой.
  • Color Ctrl – служит для выбора цвета, черно-белого режима или авто выбора (вероятно, основанного на условиях освещенности). Автоматический режим отлично отрабатывает, так что можно использовать именно его.
  • Mirror Ctrl – скорее всего – переворот изображения (зеркальный эффект).
  • Power Ctrl – проверка питания. Можно настроить автоматический режим отключения, когда нет движения.
  • Timer Ctrl – в DSP есть встроенный RTC, который можно настроить. Однако батарейки нет, так что после перезагрузки настройки собьются.
  • AE Ctrl – управление авто контрастом/яркостью. По умолчанию настройки установлены на автоматический выбор для сьемки в помещении и на открытом пространстве.
  • Motion Ctrl – настройки системы обнаружения движения. Можно с ними поиграться и протестировать. Есть скетч для Arduino для обнаружения движения объектов, который можно использовать.
  • OSD Config – протокол, который, судя по отзывам, не поддерживается большинством камер :(
  • Image property – смотрите выше.
  • Gamma – точная настройка гаммы CMOS сенсора. Настройки по умолчанию хорошие. Поэкспериментировать можно.
  • SPI Flash – скорее всего – считывание и запись данных в SPI хранилище.
  • Other Ctrl – возможно, для цифро-аналогового преобразования.
  • Up/Down Load – считывание и запись данных на флэш-память. Вероятно, для загрузки нового DSP кода.
  • System Reset – перезагрузка модуля. Актуальна, когда модуль перестает отвечать.
  • FBuff Ctrl – смотрите выше.
  • Zoom Ctrl – в модуле есть встроенный 'Pan Tilt Zoom', НО он рассчитан только для видеосьемки. С фотографиями отрабатывать не будет. Можете поэкспериментировать с PTZ, может оказаться полезным.

Использование видеокамеры с Arduino

Давайте подключим камеру к нашему микроконтроллеру (в данном случае - Arduino). Подключение похоже на предложенный выше вариант. Для подключения используем два цифровых пина и серийный протокол для обмена данными с модулем. Для сохранения снимков вам понадобится карта памяти. Можно использовать дополнительные microSD модули или шилды.

Подключите видеокамерукамеру к Arduino, как показано на рисунке ниже:

Подключение видеокамеры к Arduino Uno

В водонепроницаемых камерах белый и зеленый проводники могут располагаться наоборот! Так что проверьте это перед подключением. Красный кабель идет к +5 В, черный – к Земле.

Переименуйте распакованную папку Adafruit_VC0706. Проверьте наличие файлов Adafruit_VC0706.cpp и Adafruit_VC0706.h. Переместите папку с библиотекой Adafruit_VC0706 в папку /libraries/ folder. Возможно, вам надо будет создать подпапку в библиотеке. Перезагрузите Arduino IDE.

Первый снимок

Что ж, теперь можно делать ваш первый снимок. Откройте Arduino IDE и выберите скетч File-> Examples-> Adafruit_VC0706-> Snapshot. Загрузите его на Arduino. Откройте окно серийного монитора, в котором вы увидите как сделается фото 640x480 и сохранится на карту памяти microSD. Карту можно извлечь и перенести с нее данные на ваш компьютер.

Данные с видеокамеры в серийном мониторе Arduino IDE

Ниже показаны несколько настроек, которые можно поменять для работы с вашей видеокамерой. Первое – замена пинов, к которым подключена камера. Можно использовать два любых цифровых пина. Замена проводится в следующей строке:

// This is the camera pin connection. Connect the camera TX

// to pin 2, camera RX to pin 3

NewSoftSerial cameraconnection = NewSoftSerial(2, 3);

Можно изменить разрешение снимка на 160x120, 320x240 или 640x480. Для этого используются следующие строки:

// Set the picture size - you can choose one of 640x480, 320x240 or 160x120

// Remember that bigger pictures take longer to transmit!

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

Обнаружение движения

Отличная опция, которая есть в камере – возможность обнаруживать движение. Работает эта фукция по принципу обнаружения изменений в кадрах и подаче соответствующего сигнала на микроконтроллер. Так что в своих проектах можно немного сэкономить и не использовать дополнительный пироэлектрический датчик движения.

Загрузите скетч из File-> Examples-> Adafruit_VC0706-> MotionDetect на Arduino. Как только он загрузится, будет сделан снимок. Подождите несколько минут и помашите рукой перед камерой, будет сделано еще одно фото.

Данные с видеокамеры при обнаружении движения

Включать и отключать функцию обнаружения движения можно с помощью вызова setMotionDetect()

// Motion detection system can alert you when the camera 'sees' motion!

cam.setMotionDetect(true); // turn it on

//cam.setMotionDetect(false); // turn it off (default)

Вам надо подать запрос на камеру при обнаружении движения, вызвав motionDetected() – в результате вам вернется true, если движение было и false, если не было.

Ручная настройка фокуса

В камере не предусмотрен автофокус, есть только ручной режим. С одной сторы это хорошо, с другой – плохо. Камера поставляется с хорошей глубиной фокуса, которая подходит для большинства задач. Если вы планируете настраивать фокус, очень рекомендуем предварительно подключить модуль камеры к монитору, как мы это делали выше. Так вы сможете в режиме реального времени отследить изменение настроек. После настройки, объектив затягивается винтом.

Ручная настройку фокуса на видекомере для Arduino

Если у вас влагозащищенная камера, для настройки придется снять корпусную часть и только потом провести настройку.

Дополнительные вопросы-пояснения

Как можно изменить скорость передачи данных на модуле видеокамеры?

Возможно, вы обратили внимание, что есть командная строка для изменения скорости передачи данных. По умолчанию, значение установлено на 38400.

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

С какой скоростью можно делать снимки?

Рассмотренная в данной статье камера достаточно медленная. Для передачи изображения понадобится около 30 секунд. Обратите внимание, что это характеристика, которая отвечает за обработку и сохранение снимка в том числе. Для анализа в режиме реального времени подобной задержки нет.

Почему такие бледные цвета? Снимки похожи на монохромные.

Рассмотренный модуль был разработан для режима наблюдения, чувствительность видеокамеры смещена к инфракрасному диапазону. Это значит, что объект, который отражает или излучает инфракрасные волны будет казаться ярче.

Для более естественной цветопередачи можно использовать дополнительные инфракрасные фильтры.

Есть ли альтернативные библиотеки для камеры и Arduino?

Например, есть еще одна библиотека, которую можно тоже скачать на Github

Так что экспериментируйте, тестируйте и развивайте свои проекты на Arduino.

Читайте также: