VGA Камера с UART TTL выходом.
Программа выходного дня.
Потребовалось создать программу для работы с JPEG камерой C328 (под windows).
C328 представляет из себя цветную VGA (640x480) камеру с UART-TTL выходом.
Камера способна сжимать и передавать кадры в формат JPEG.
Получить кадр из камеры можно путем запроса по протоколу UART.
Для работы камере требуется внешний источник питания +5в, и преобразователь уровней из TTL в RS232 при подключении к обычному COM порту ПК, или USB-to-UART при подключении к USB порту ПК.
Для подключения к ПК был выбран переходник на основе микросхемы конвертера USB-to-UART FTDI FT232R.
Программа.
Задача: создать программу работающею под управлением ОС Windows способную принимать кадры и отображать полученные кадры в окне программы, а также производить запись на диск принятых кадров.
Что и было сделано. Программа написана на языке Visual Basic 2008 NET.
Окно программы представлено на рисунке:
Алгоритм работы с программой следующий.
Произвести поиск в программе COM порта к которому подключена камера. Для этого необходимо нажать на кнопку (1) Поиск портов, затем произвести выбор номера порта (2) и нажать Открыть (3).
Запуск процесса получения кадров от камеры. Для этого необходимо нажать на кнопку (4) Захват. После нажатия на кнопку программа будет выводить лог в окно (5) и отображать полученные кадры в окне (6).
Внимание !
На улице при солнечном освещении камера выдавала цветные кадры с искажением цветов и засветкой в сторону красного-розового.
Как оказалось в объективе камеры отсутствует ИК фильтр (в виде тонкой пленки), что и приводило к искажению цветов.
ИК фильтр требуется любой камере которая будет работать при дневном освещении, так как в спектре дневного света много ИК (Инфракрасное излучение), человеческий глаз в ИК диапазоне не видит, а вот камеры видят во всю что и приводит к искажению цветов.
В системах видео наблюдения:
В темное время суток (ночью) ИК фильтр не нужен, и его как правило убирают (механически), переключают камеру в ЧБ (черно белый) режим так как в темноте цвет не нужен и дополнительно включают освещение в виде ИК прожекторов и ИК ламп, чтоб лучше было видно :)
Производители:
Наблюдая за выпускаемой продукцией производителей камер и сенсоров в последнее время было замечено что, с целью повышения чувствительности камер в ночном режиме, все производители начали включать в состав света-чувствительной матрицы RG-BG, пикселы W (черно белый).
W элементы как раз и предназначены для повышения чувствительности сенсоров в темное время суток.
Алгоритм работы с камерой.
Алгоритм работы с камерой выполнен в виде конечного автомата.
ПК выступает в роли ведущего (master), камера в роли ведомого (slave). ПК (мастер) начинает обмен и ожидает подтверждения от камеры (ведомого).
Обмен ведется пакетами длинной по 6 байт. В каждом пакете передается команда, данные или подтверждение о получении пакета.
В каждом пакете подтверждения указывается команда которую подтверждает данный пакет. Т.е. на любой пакет от ПК, камера отвечает подтверждением. Камера после отправки пакета с данными, ожидает пакет подтверждения от ПК.
В текущей реализации пакет с данными(кадра) от камеры задан длинной 512 байт. Длину пакета с данными можно задавать в процессе конфигурации камеры.
Реализация алгоритма.
Исходный код автомата представлен в подпрограмме таймера Timer1_Tick в файле Form1.vb.
Алгоритм работы с камерой следующий:
1. Выполняется синхронизация с камерой.
ПК посылается пакет CAM_SYNC_PKT (состоящие из 6 байт 0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00).
Камера посылает пакет подтверждения CAM_ACK_PKT.
Если пакета подтверждения о камеры нет то пакет CAM_SYNC_PKT посылается снова.
2. Инициализация.
Камере посылаются следующие последовательности:
- CAM_INIT_PKT - команда инициализации камеры, устанавливаем разрешение 640х480 и формат сжатия кадра jpeg.
- CAM_PAKSIZE_PKT - команда установки размер пакета данных от камеры 512 байт.
- CAM_SHAPSHOT_PKT - команда получит снимок + сжатие jpeg.
3. Прием кадра из камеры.
- CAM_GETPIC_PKT - команда передачи кадра в ПК.
После получения кадра, производится вывод кадра в окне программы и производится запись картинки в файл.
Имя файла картинки задается в виде текущей даты и текущего времени на момент записи на диск.
Исходники программы выложены на GitHub, в каталоге C328_datasheets лежит документация на камеру.
Поиски в интернете показали что существует множество камер с подобным интерфейсов, похожим алгоритмом работы и разной оптикой.
Достоинства камеры:
- Простота работы с камерой, требуется только питание и UART порт.
- Простой интерфейс UART 115200 8N1, простой протокол обмена, пригодный для подключения к микроконтроллерам с малым количеством ОЗУ.
- Малые накладные расходы на получение картинки в формате JPEG.
Недостатки камеры:
- Низкое разрешение, 640х480 явно мало если нужно разбирать мелкие детали на изображении.
- Низкая скорость приема кадров, прием одного кадра может занимать до нескольких секунд !!!
- Стоимость, цены доходят до 50$, что дорого для такого разрешения.