Техническое зрение

Камера от мобильного телефона попала ко мне довольно давно, но только сейчас дошли руки поделать с ней какие-нибудь эксперименты.

Модуль VGA камеры от сотового телефона

В результате прочесывания интернета выяснилось, что это камера от SIEMENS CX65, и на нее есть хороший даташит (

) Поизучав документацию я решил подключить модуль камеры к плате Марсоход. Проект сложный, но что поделать, наши проекты становятся сложнее и сложнее!

Для подключения ее к плате Марсоход, во-первых, потребовалась доработка самой платы - допавание нескольких разьемчиков:

add_pick

и перерезание дорожек:

cut

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

Плата для подключения модуля камеры к плате Марсоход

и с обратной стороны:

Плата для подключения модуля камеры к плате Марсоход

Его этой платки вот такая:

Схема платы для подключения модуля камеры к плате Марсоход

Вот так все выглядит в сборе:

Подключение модуля камеры к плате Марсоход

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

Немного о самой камере.
Для подключения она имеет два интерфейса. Один управляющий, реализован на основе шины I2C ( используются сигналы SCL и SDA ) . Камера имеет большое количество внутренних регистров, которые доступны через этот интерфейс. После подачи питания все эти регистры устанавливаются в состояния "по умолчанию", описанные в даташите.

Второй интерфейс - для передачи видеоданных. Он похож на интерфейс VGA - есть сигналы строчной (HD) и кадровой  (VD) синхронизации, только данные передаются не в аналоговом, а в цифровом виде по параллельной 8-битной
шине ( DOUT0..DOUT7, тактируемые DCLK ). Кроме того, для работы камеры нужна внешняя тактовая частота ( EXTCLK ).

О проекте и как все работает.

Я сделал проект в среде Altera Quartus II для платы Марсоход, его можно взять здесь:


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

Для включения камеры нужно через интерфейс I2C во внутреннем регистре по адресу "03", сбросить старший бит.
После этого камера начинает выдавать данные в режиме "YUV". Это значит, что на каждый пиксель изображения будет представлен двумя байтами, первый - цветоразностные сигналы, второй - яркость ( собственно он нам и нужен ).

Чтобы увидеть изображение от камеры, мы будем передовать данные на компьютер, в программку ethcam.exe через ethernet 10baseT. Когда-то мы уже передавали ethernet пакеты с платы Марсоход, у нас был такой проект.

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

Программа для компьютера была написана в среде Visual Studio 2010 на С++. Ее исходник находится там же, вместе с проектом для платы Марсоход (

)

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

Кроме этого, программа имеет возможность записывать принятые кадры в AVI файл. Для этого в ней есть кнопка "Rec/Stop".

Вот так выглядит программа:

Программа для принятика кадров от камеры, подключенной к плате Марсоход

 Ну а вот и фрагмент видео, записанного с помощью этой программы и камеры, и платы Марсоход:

Ну а вот как я записывал это видео:

Как видите проект вполне работоспособный!

 


Добавить комментарий