Подключаем камеру OV7670 к Arduino и выводим картинку на дисплей

Данная камера ov7670 является самым доступным модулем для получения изображения совместно с Arduino.

Модуль камеры имеет следующие характеристики:

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

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

Подключение OV7670 к Arduino

Начнем с сборки схемы и написания программы управления. Итак для сборки и отладки тестового макета нам потребуется :

  1. Arduino
  2. Макетная плата
  3. Камера OV7670
  4. Дисплей
  5. Dupont-провода

Внешний вид макета

После того как Все компоненты собраны, приступаем к сборке схемы.

Чтобы не запутаться в схеме, для наглядности, распишем что и куда подключается:

OV7670 подключаем к arduino:                Дисплей подключаем к arduino
 VSYNC - к выводу D2                         DC - к выводу D8
 XCLCK - к выводу D3                         CS - к выводу D9
 PCLCK - к выводу D12                        RESET - к выводу D10
 SIOD - к выводу A4                          SPI data - к выводу D11
 SIOC - к выводу A5                          SPI clock - к выводу D13
 D0..D3 - к выводу A0..A3                    VCC - к выводу 3.3V
 D4..D7 - к выводу D4..D7                    BL - к выводу 3.3V
 3.3V - к выводу 3.3V                        GND - к выводу GND
 RESET - к выводу 3.3V
 GND - к выводу GND
 PWDN - к выводу GND

Программа для трансляции видео с камеры на tft дисплее

Для работы с камерой и дисплеем совместно с Arduino нам понадобится, библиотеки: LiveOV7670Library и Adafruit_GFX_Library. Скачиваем их и устанавливаем в Arduino IDE. Теперь все готово для загрузки программы в Arduino.

Код состоит из нескольких частей. После скачивания и распаковки, все файлы следует сохранить в одной папке. Ссылка на скачивание проекта. После загрузки кода и проверки схемы, мы сразу получаем картинку ту что видит камера, не забыв настроить фокусировку.

После проверки работоспособности, можно перейти в скетче на вкладу setup.h

и изменив значение EXAMPLE 1 на EXAMPLE 3, камера будет транслировать изображение напрямую на экран монитора, при условии, что arduino подключена к компьютеру и запущена программа Arduino IDE.

При значение EXAMPLE 1 камера совместно с библиотекой LiveOV7670Library, передает картинку напрямую на дисплей подключенный по SPI интерфейсу. 

Видео работы:

Заключение

Данный пример работы камеры можно использовать как камеру видео наблюдения добавив к arduino LAN или же как зрение к роботу. Так же возможно использовать в виде WEB-камеры для компьютера.

Немного об особенностях работы с камерой.

  1. Согласно документации камеры OV7670, модуль питается от 3,3 В, при подключении к Arduino 5V необходимо обеспечить преобразование уровней напряжения. (Хотя запустилась и заработала без лишних элементов)
  2. Модуль имеет выходы SIO_C, SIO_D — шина SCCB  похожа по  работе с шиной I2C. Модуль отвечает на шину I2C по адресу 0x21. Входной сигнал синхронизирующего сигнала XCLK и выход PCLK для синхронного сбора данных с параллельной 8-разрядной шины D7-D0.
  3. Выходы H1REF и VSYNC синхронизируют сбор данных с параллельной шины (соответствующая конфигурация позволяет отложить сигнал сигнальной линии H1REF, используя только синхронизацию VSYNC-кадров).
  4. Основой для запуска модуля является соответствующая конфигурация регистров по шине SCCB. Интерфейсные линии SCCB должны быть подтянуты по питанию через резисторы 4.7-10 кОм.
  5. Стабильность работы камеры зависит и от источника питания, необходимо, чтобы модуль  имел стабильный источник питания 3,3 В.
  6. Для того, чтобы шина данных работала, необходимо подать сигнал синхронизации на вход XCLK, согласно Datasheet: частота входного сигнала должна быть 10-48 МГц.
  7. Ниже приведенный скетч генерирует тактовую частоту XCLK = 8 МГц. Частота сигнала PCLK,  изменяет данные на линиях D7-D0 зависимые от установленных делителей и PLL. В нашем случае мы на PCLK  частотой 2 МГц.
  8. На основе полученных изображений сразу можно сделать вывод о недостатках:
    а. Отсутствие внутреннего буфера приводит к смазывание картинки, тк она сразу передается на компьютер, а это занимает время.
    б. Наблюдаются артефакты в виде горизонтальных полосок — сбой синхронизации в получении картинки. Вместо градации серого отправляется цветоразностная составляющая.
    в. Объект должен быть в фокусе камеры для четкого изображения
0

Изменено: