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$, что дорого для такого разрешения.