Как подключить модуль камеры OV7670 к Arduino

Транслируем изображение в реальном времени с помощью модуля камеры OV7670 на 1,8-дюймовый TFT ЖК-экран с помощью Arduino IDE.

Шаг 1. О проекте

В этом уроке мы покажем как отображать видео-поток с модуля камеры OV7670 на 1,8-дюймовый TFT ЖК-экран с помощью Arduino. OV7670 - самый доступный модуль камеры, который можно использовать с Arduino, поэтому вы можете использовать его во многих проектах.

Мы подключим, настроим и получим тестовый образ от OV7670 с помощью небольшой программы, написанной в Arduino IDE. Это может стать отправной точкой для его использования в будущих проектах. В уроке мы будем использовать библиотеку indrekluuk, и мы очень благодарны разработчикам этой библиотеки.

Шаг 2. Модуль камеры OV7670

Этот модуль позволяет захватывать изображения в формате VGA (640x480). Он может выполнять некоторую начальную обработку и передавать изображения на микроконтроллеры, такие как Arduino, через интерфейс SCCB.

Модуль камеры OV7670.
Модуль камеры OV7670.

Камера позволяет формировать изображения в других форматах, таких как CIF (352x240) например. Ручная регулировка до 40x30 также возможна. Максимальная скорость передачи изображения (VGA) может достигать 30 кадров в секунду. Камера также выполняет предварительную обработку изображений, например контроль экспозиции, усиление, баланс белого и многое другое. Также поддерживаются различные варианты кодирования изображений (YUV, различные типы RGB). Передача данных осуществляется по протоколу SCCB.

OV7670 характеристики

  • Разрешение VGA (640 x 480)
  • QVGA (320 х 240)
  • CIF (352 х 240)
  • QCIF (176 × 144);
  • Скорость передачи до 30 кадров в секунду,
  • несколько способов кодирования изображения RAW RGB, RGB 565/555, YUV / YCbCr 4: 2: 2.

Шаг 3. Комплектующие

Нам понадобится очень небольшой набор комплектующих (на фото выше слева направо):

Для понимания работы TFT-дисплея обязательно посмотрите Гид по работе с TFT-дисплеями.

Шаг 4. Схема соединения

Продолжаем со сборки всех компонентов, как показано на схеме ниже.

Соединения между OV7670 и Arduino Nano:

OV7670 Arduino Nano
VSYNC PIN2
XCLCK PIN3(должен быть сдвинут по уровню от 5 В => 3,3 В)
PCLCK PIN12
SIOD A4 (I2C data)
SIOC A5 (I2C clock)
DO D3 A0.. A3 (pixel data bits 0..3)
D4 D7 PIN4..PIN7 (pixel data bits 4..7)
3.3V 3.3V
RESET 3.3V
GND GND
PWDN GND

Соединения между TFT-дисплеем и Arduino Nano:

TFT Display Arduino Nano
DC PIN 8 (5V => 3.3V)
CS PIN 9 (5V => 3.3V)
RESET PIN 10 (5V => 3.3V)
SPI data PIN 11 (5V => 3.3V)
SPI clock PIN 13 (5V => 3.3V)
VCC 5V/3.3V (в зависимости от положения перемычки на плате TFT)
BL 3.3V
GND GND

Шаг 5. Компиляция в Arduino IDE

Скачать все нужные файлы вы можете на GitHub здесь.

  • Скопируйте "src/lib/LiveOV7670Library" и "src/lib/Adafruit_GFX_Library" в папку Arduino "libraries" (если у вас уже есть "Adafruit_GFX_Library", то вам не нужно её копировать).
  • Откройте "src/LiveOV7670/LiveOV7670.ino" в Arduino IDE.
  • Select Tools -> Board -> Arduino Uno/Nano.

Шаг 6. Настройка программы

Вы можете выполнить все действия шаг за шагом согласно скриншотам.

Сначала идем на Github.

Нажмите «Скачать ZIP» (Download ZIP), чтобы загрузить все файлы.

После загрузки разархивируйте файлы в нужную папку.

Откройте разархивированную папку и перейдите в каталог: LiveOV7670-master\src\lib. Скопируйте две папки в вашу библиотеку (Library) Arduino.

Перейдите в LiveOV7670-master\src\LiveOV7670. Откройте файл с именем setup.h.

При изменении значения примера 1 на пример 3, как показано на скриншоте ниже, камера будет транслировать изображение непосредственно на компьютер.

Когда установлен Пример 1, камера передает изображение непосредственно на ЖК-дисплей, который подключен через интерфейс SPI с использованием библиотеки LiveOV7670Library.

Установите Пример 1 для live-потока TFT.

Далее откройте файл LiveOV7670.ino.

В нижней правой части экрана выберите плату Arduino и порт (Port).

Загрузите код сверху без каких-либо изменений.

Вы увидите уведомление о том, что программа компилируется, как показано выше.

Шаг 7. Заключение

Эта дешевая и простая в использовании Arduino-совместимая камера полезна для проектов видеонаблюдения или в качестве системы для робототехники, использующей платформы, такие как OpenCV. Также можно использовать как обычную веб-камеру.

5 июня 2019 в 14:27 | Обновлено 7 декабря 2019 в 00:01 (редакция)
Опубликовано:
Уроки, ,

4 комментария

  1. Людмила
    19 октября 2020 в 20:52

    Уважаемый автор, все сделала, как вы сказали, но после загрузки ошибка компиляции (см. далее). Что я делаю не так?
    Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Плата:»Arduino Nano, ATmega328P (Old Bootloader)»

    In file included from C:\Users\����\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_SPITFT.cpp:36:0:

    C:\Users\����\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_SPITFT.h:244:23: error: no members matching ‘Adafruit_GFX::drawRGBBitmap’ in ‘class Adafruit_GFX’

    using Adafruit_GFX::drawRGBBitmap; // Check base class first

    ^~~~~~~~~~~~~

    exit status 1

    Ошибка компиляции для платы Arduino Nano.

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    «Показать подробный вывод во время компиляции»

    Ответить
  2. Людмила
    20 октября 2020 в 00:07

    Я все сделала. У меня после долгих мытарств (меняла наименование пользовательской папки на английский язык) все-таки программа загрузилась. Но на экране — рябь , просто бегут полосочки по экрану. Сам экран реагирует на освещение — когда подношу к камере лампу, полоски становятся светлыми. В чем может быть дело? Почему нет целостного изображения? Использовала точно такие как у вас детали.

    Ответить
  3. Людмила
    22 октября 2020 в 18:26

    У меня все заработало (поправила контакты, перезагрузила скетч). Жаль, что вы так необщительны, но все равно спасибо. А сделайте еще на какой-нибудь урок на другой TFT экран. Я хочу большой экран, ну хотя бы 6-7 дюймов.

    Ответить
    1. Бунёджон
      2 марта 2021 в 19:44

      Здравствуйте, а можете поделиться проектом, хотел подробно узнать, спасибо

      Ответить

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

Ваш E-mail не будет никому виден. Обязательные поля отмечены *