- Необходимые компоненты
- Что нужно помнить о модуле камеры 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
- Резисторы (10 кОм, 4,7 кОм)
- Джемперы
Требуется программное обеспечение:
- IDE Arduino
- Считыватель последовательного порта (для анализа выходного изображения)
Что нужно помнить о модуле камеры OV7670
Модуль камеры OV7670 - это модуль камеры FIFO, доступный от разных производителей с различными конфигурациями контактов. TheOV7670 обеспечивает полнокадровые 8-битные изображения с окнами в широком диапазоне форматов. Массив изображений может работать со скоростью до 30 кадров в секунду (fps) в VGA. OV7670 включает в себя
- Матрица датчика изображения (около 656 x 488 пикселей)
- Генератор времени
- Аналоговый сигнальный процессор
- Аналого-цифровые преобразователи
- Генератор тестовых шаблонов
- Цифровой сигнальный процессор (DSP)
- Image Scaler
- Цифровой видеопорт
- Выход управления светодиодной и стробоскопической вспышкой
Датчик изображения OV7670 управляется с помощью последовательной шины управления камерой (SCCB), которая представляет собой интерфейс I2C (SIOC, SIOD) с максимальной тактовой частотой 400 кГц.
Камера выдает такие сигналы подтверждения связи, как:
- VSYNC: выход вертикальной синхронизации - низкий во время кадра
- HREF: горизонтальная ссылка - высокая во время активных пикселей строки
- PCLK: Pixel Clock Output - Часы в свободном режиме. Данные действительны по нарастающему фронту
В дополнение к этому, он имеет еще несколько сигналов, таких как
- D0-D7: 8-битный компонентный цифровой видеовыход YUV / RGB
- PWDN: выбор режима пониженного энергопотребления - нормальный режим и режим пониженного энергопотребления
- 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 и декодирует ее для формирования изображения. Просто следуйте этим простым шагам, чтобы использовать Serial Port ReaderШаг 1. Подключите Arduino к любому USB-порту вашего ПК.
Шаг 2: Нажмите «Проверить», чтобы найти свой COM-порт Arduino.
Шаг 3: Наконец, нажмите кнопку «Пуск», чтобы начать последовательное чтение.
Шаг 4: Можно также сохранить эти изображения, просто нажав «Сохранить изображение».
Ниже приведены примеры изображений, снятых с OV7670.
Меры предосторожности при использовании OV7670
- Старайтесь использовать провода или перемычки как можно короче
- Избегайте слабого контакта с любыми контактами на Arduino или OV7670.
- Будьте осторожны при подключении, так как большое количество проводов может привести к короткому замыканию.
- Если UNO выдает выход 5 В на GPIO, используйте Level Shifter.
- Используйте вход 3,3 В для OV7670, поскольку превышение напряжения может привести к повреждению модуля OV7670.
Этот проект создан, чтобы дать обзор использования модуля камеры с Arduino. Поскольку у Arduino меньше памяти, обработка может быть не такой, как ожидалось. Вы можете использовать разные контроллеры, у которых больше памяти для обработки.