- Потрібні компоненти
- Що слід пам’ятати про модуль камери OV7670
- Кругова діаграма
- Програмування Arduino UNO
- Як використовувати зчитувач послідовних портів для читання зображень
- Нижче наведені зразки зображень, взяті з OV7670
- Запобіжні заходи при використанні OV7670
Камери завжди домінували в електронній галузі, оскільки в ньому є безліч додатків, таких як система моніторингу відвідувачів, система спостереження, система відвідування тощо. Камери, якими ми користуємося сьогодні, розумні та мають безліч функцій, яких не було в попередніх камерах. Хоча сьогоднішні цифрові камери не тільки фіксують зображення, але й знімають високоякісні описи сцени та аналізують те, що вони бачать. Він широко використовується в робототехніці, штучному інтелекті, машинному навчанні тощо. Захоплені кадри обробляються за допомогою штучного інтелекту та машинного навчання, а потім використовуються у багатьох додатках, таких як виявлення номерних знаків, виявлення об’єктів, виявлення руху, розпізнавання облич тощо.
У цьому посібнику ми взаємодіємо з найбільш широко використовуваним модулем камери OV7670 з Arduino UNO. Модуль камери OV7670 може бути з'єднаний з Arduino Mega з однаковою конфігурацією контактів, кодом та кроками. Модуль камери важко інтерфейсувати, оскільки він має велику кількість контактів і переплутаних проводів для проведення. Також провід стає дуже важливим при використанні модулів камери, оскільки вибір дроту та довжина дроту може суттєво вплинути на якість зображення та може спричинити шум.
Ми вже робили широкі проекти на камерах з різними мікроконтролерами та пристроями IoT, такими як:
- Система моніторингу відвідувачів за допомогою камери Raspberry Pi та Pi
- Система домашньої безпеки Raspberry Pi на основі IOT з попередженням електронною поштою
- Камера спостереження 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 кадрів в секунду (кадрів в секунду) у VGA. OV7670 включає
- Матриця датчика зображення (приблизно 656 x 488 пікселів)
- Генератор синхронізації
- Аналоговий процесор сигналів
- A / D перетворювачі
- Генератор тестових зразків
- Процесор цифрових сигналів (DSP)
- Скалер зображень
- Порт цифрового відео
- Вихід управління світлодіодним та стробоскопічним спалахом
Датчик зображення OV7670 управляється за допомогою послідовної шини управління камерою (SCCB), яка є інтерфейсом I2C (SIOC, SIOD) з максимальною тактовою частотою 400 кГц.
Камера має такі сигнали рукостискання, як:
- VSYNC: Вертикальний вихід синхронізації - низький під час кадру
- HREF: горизонтальне посилання - високий під час активних пікселів рядка
- PCLK: Піксельний годинник - Безкоштовний годинник. Дані дійсні на висхідній кромці
На додаток до цього, він має ще кілька сигналів, таких як
- D0-D7: 8-бітний цифровий вихідний компонент YUV / RGB
- ШІН: Вибір режиму відключення живлення - Звичайний режим та Режим відключення
- XCLK: Введення системного годинника
- Скинути: скинути сигнал
OV7670 тактований від генератора 24 МГц. Це дає піксельний годинник (PCLK) вихід 24 МГц. FIFO забезпечує 3 Мбіт / с буферної пам'яті відеокадру. Генератор тестових зразків має 8-смугову кольорову смужку, кольорову смужку, що переходить у сірий колір. Тепер почнемо програмувати Arduino UNO для тестування камери OV7670 та захоплення кадрів за допомогою зчитувача послідовних портів.
Кругова діаграма
Програмування Arduino UNO
Програмування починається з включення необхідної бібліотеки, необхідної для OV7670. Оскільки OV7670 працює на інтерфейсі I2C, він включаєПісля цього реєстри потрібно змінити на OV7670. Програма розділена на невеликі функції для кращого розуміння.
Setup () включає в себе всі початкові настройки, необхідні тільки для захоплення зображення. Першою функцією є arduinoUnoInut (), яка використовується для ініціалізації arduino uno. Спочатку він відключає всі глобальні переривання та встановлює конфігурації інтерфейсу зв'язку, такі як ШІМ-сигнал, вибір виводів переривання, вибір пресклера, додавання бітів парності та зупинки.
ArduinoUnoInut ();
Після налаштування Arduino слід налаштувати камеру. Для ініціалізації камери ми маємо лише можливість змінити значення реєстру. Значення реєстру потрібно змінити із типових на спеціальні. Також додайте необхідну затримку залежно від частоти мікроконтролера, яку ми використовуємо. Оскільки повільні мікроконтролери мають менше часу обробки, додаючи більше затримки між захопленням кадрів.
void camInit (void) { writeReg (0x12, 0x80); _delay_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 є функція «Пуск, читання, запис, встановлення адреси», що важливо для використання протоколу I2C.
Повний код із демонстраційним відео можна знайти в кінці цього посібника. Просто завантажте код і відкрийте програму зчитування послідовних портів і захопіть кадри.
Як використовувати зчитувач послідовних портів для читання зображень
Зчитувач послідовних портів - це простий графічний інтерфейс, завантажте його звідси. Це захоплює кодування base64 і декодує його, щоб сформувати зображення. Просто виконайте ці прості кроки, щоб користуватися програмою зчитування послідовних портівКрок 1: Підключіть Arduino до будь-якого USB-порту ПК
Крок 2: Клацніть на “Перевірити”, щоб знайти свій COM-порт Arduino
Крок 3: Нарешті натисніть кнопку «Пуск», щоб розпочати серійне читання.
Крок 4: Можна також зберегти ці фотографії, просто натиснувши “Зберегти картинку”.
Нижче наведені зразки зображень, взяті з OV7670
Запобіжні заходи при використанні OV7670
- Намагайтеся використовувати дроти або перемички якомога коротше
- Уникайте будь-якого вільного контакту з будь-якими штифтами на Arduino або OV7670
- Будьте обережні щодо підключення, оскільки велика кількість проводів може призвести до короткого замикання
- Якщо UNO подає на GPIO вихід 5 В, тоді використовуйте рівень перемикача.
- Використовуйте вхід 3.3 В для OV7670, оскільки перевищення напруги, ніж це може пошкодити модуль OV7670.
Цей проект створений, щоб дати огляд використання модуля камери з Arduino. Оскільки в Arduino менше пам'яті, обробка може бути не такою, як очікувалося. Ви можете використовувати різні контролери, які мають більше пам'яті для обробки.