- Необходими компоненти
- Неща, които трябва да запомните за модула на камерата OV7670
- Електрическа схема
- Програмиране на Arduino UNO
- Как да използвам четец на сериен порт за четене на изображения
- По-долу са примерни изображения, взети от OV7670
- Предпазни мерки при използване на OV7670
Камерите винаги са доминирали в електронната индустрия, тъй като тя има много приложения като система за наблюдение на посетители, система за наблюдение, система за присъствие и др. Камерите, които използваме днес, са интелигентни и имат много функции, които не са присъствали в по-ранните камери. Докато днешните цифрови фотоапарати не само улавят изображения, но също така улавят описания на сцената на високо ниво и анализират това, което виждат. Той се използва широко в роботиката, изкуствения интелект, машинното обучение и др. Заснетите кадри се обработват с помощта на изкуствен интелект и машинно обучение и след това се използват в много приложения като откриване на регистрационната табела, откриване на обекти, разпознаване на лица и др.
В този урок ще свържем най-широко използвания модул за камера OV7670 с Arduino UNO. Модулът на камерата OV7670 може да бъде свързан с Arduino Mega със същата конфигурация на пина, код и стъпки. Модулът на камерата е труден за интерфейс, тъй като има голям брой щифтове и объркани кабели за извършване. Също така проводникът става много важен при използване на модули на камерата, тъй като изборът на проводника и дължината на проводника може значително да повлияе на качеството на картината и може да донесе шум.
Вече сме направили достатъчно проекти за камери с различни видове микроконтролери и IoT устройства като:
- Система за наблюдение на посетителите с Raspberry Pi и Pi камера
- IOT базирана система за домашна сигурност Raspberry Pi с предупреждение по имейл
- Камера за наблюдение на Raspberry Pi с улавяне на движение
В камерата OV7670 работи на 3.3V, така че е много важно да се избегне Arduino, която дава 5V продукция в техните изходни GPIO пина. OV7670 е FIFO камера. Но в този урок картината или кадрите ще бъдат взети без FIFO. Този урок ще има лесни стъпки и опростено програмиране за свързване на OV7670 с Arduino UNO.
Необходими компоненти
- Arduino UNO
- Модул за камера OV7670
- Резистори (10k, 4.7k)
- Джъмпери
Необходим софтуер:
- IDE на Arduino
- Четец на сериен порт (за анализиране на изходно изображение)
Неща, които трябва да запомните за модула на камерата OV7670
Модулът за камера OV7670 е модул за камера FIFO, предлаган от различни производители с различни конфигурации на щифтове. TheOV7670 предоставя 8-битови изображения с пълен кадър в широк спектър от формати. Масивът с изображения може да работи с до 30 кадъра в секунда (fps) във VGA. OV7670 включва
- Матрица на сензора за изображения (от около 656 x 488 пиксела)
- Генератор на времето
- Аналогов процесор на сигнала
- A / D преобразуватели
- Генератор на тестови образци
- Цифров процесор на сигнала (DSP)
- Скалер на изображения
- Цифров видео порт
- LED и Strobe изход за управление на светкавицата
Сензорът за изображения OV7670 се управлява с помощта на серийна контролна шина на камерата (SCCB), която е интерфейс I2C (SIOC, SIOD) с максимална тактова честота 400KHz.
Камерата се доставя със сигнали за ръкостискане като:
- VSYNC: Вертикален изход за синхронизация - Нисък по време на кадър
- HREF: Хоризонтална справка - Висока по време на активни пиксели на реда
- PCLK: Пикселен часовник - Безплатен часовник. Данните са валидни за нарастващия ръб
В допълнение към това той има още няколко сигнала като
- D0-D7: 8-битов YUV / RGB видеокомпонентен цифров изход
- PWDN: Избор на режим на изключване - нормален режим и режим на изключване
- XCLK: Вход на системния часовник
- Нулиране: Нулиране на сигнала
OV7670 се тактира от 24MHz осцилатор. Това дава изход на пикселен часовник (PCLK) от 24MHz. FIFO осигурява 3Mbps буферна памет за видеокадър. Генераторът на тестови шаблони се отличава с 8-лентов цветен шаблон, избледняващ до сив цвят. Сега нека започнем да програмираме Arduino UNO за тестване на Camera OV7670 и хващане на кадри с помощта на четец на серийни портове.
Електрическа схема
Програмиране на Arduino UNO
Програмирането започва с включване на необходимата библиотека, необходима за OV7670. Тъй като OV7670 работи на I2C интерфейс, той включваСлед това регистрите трябва да бъдат модифицирани за OV7670. Програмата е разделена на малки функции за по-добро разбиране.
The Setup () се състои от всички първоначални настройки на необходимите само за заснемане на изображения. Първата функция е arduinoUnoInut (), която се използва за инициализиране на arduino uno. Първоначално деактивира всички глобални прекъсвания и задава конфигурации на комуникационния интерфейс като PWM часовник, избор на щифтове за прекъсване, избор на предклаер, добавяне на битове за паритет и стоп.
ArduinoUnoInut ();
След конфигуриране на Arduino, камерата трябва да бъде конфигурирана. За да инициализираме камерата, имаме само опциите за промяна на стойностите на регистъра. Стойностите на регистъра трябва да бъдат променени от стандартните към потребителските. Също така добавете необходимото закъснение в зависимост от честотата на микроконтролера, която използваме. Тъй като бавните микроконтролери имат по-малко време за обработка, добавяйки повече закъснение между улавянето на кадри.
void camInit (void) { writeReg (0x12, 0x80); _забавяне_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK не превключва на HBLANK. }
Камерата е настроена да прави QVGA изображение, така че разделителната способност трябва да бъде избрана. Функцията конфигурира регистъра да прави QVGA изображение.
setResolution ();
В този урок изображенията се правят в монохромен, така че стойността на регистъра е настроена да извежда монохромно изображение. Функцията задава стойностите на регистъра от регистър списък, който е предварително дефиниран в програмата.
setColor ();
Функцията по-долу е функция за запис в регистъра, която записва шестнадесетичната стойност за регистрация. Ако получите разбърканите изображения, опитайте да промените втория член, т.е. 10 на 9/11/12. Но през повечето време тази стойност работи добре, така че няма нужда да я променяте.
writeReg (0x11, 10);
Тази функция се използва за получаване на разделителната способност на изображението. В този проект правим снимки в размер 320 х 240 пиксела.
captureImg (320, 240);
Освен това, кодът също има конфигурации I2C, разделени на няколко части. Само за да получите данните от камерата, конфигурациите на I2C имат функция Start, Read, Write, Set Address, които са важни при използване на I2C протокол.
Можете да намерите пълния код с демонстрационно видео в края на този урок. Просто качете кода и отворете четеца за сериен порт и вземете рамките.
Как да използвам четец на сериен порт за четене на изображения
Serial Port Reader е прост графичен интерфейс, изтеглете го от тук. Това улавя base64 кодирането и го декодира, за да образува изображение. Просто следвайте тези прости стъпки, за да използвате четец на сериен портСтъпка 1: Свържете вашия Arduino към всеки USB порт на вашия компютър
Стъпка 2: Щракнете върху „Проверка“, за да намерите вашия COM порт на Arduino
Стъпка 3: Накрая кликнете върху бутона „Старт“, за да започнете да четете последователно.
Стъпка 4: Можете също да запазите тези снимки, като просто кликнете върху „Запазване на снимката“.
По-долу са примерни изображения, взети от OV7670
Предпазни мерки при използване на OV7670
- Опитайте се да използвате жици или джъмпери възможно най-къси
- Избягвайте какъвто и да е свободен контакт с щифтове на Arduino или OV7670
- Внимавайте при свързването, тъй като голям брой окабелявания могат да доведат до късо съединение
- Ако UNO дава 5V изход за GPIO, използвайте Level Shifter.
- Използвайте 3.3V вход за OV7670, тъй като превишаването на напрежението от това може да повреди модула OV7670.
Този проект е създаден, за да даде общ преглед на използването на модул за камера с Arduino. Тъй като Arduino има по-малко памет, обработката може да не е според очакванията. Можете да използвате различни контролери, които имат повече памет за обработка.