Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 269

Как подключить модуль камеры 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

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

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

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 Безымянный.png и изменив значение EXAMPLE 1 на EXAMPLE 3, камера будет транслировать изображение напрямую на экран монитора, при условии, что arduino подключена к компьютеру и запущена программа Arduino IDE. При значение EXAMPLE 1 камера совместно с библиотекой LiveOV7670Library, передает картинку напрямую на дисплей подключенный по SPI интерфейсу.

WhatsApp-Image-2018-06-04-at-16.41.48-1.jpeg

Данный пример работы камеры можно использовать как камеру видео наблюдения добавив к 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. На основе полученных изображений сразу можно сделать вывод о недостатках: а. Отсутствие внутреннего буфера приводит к смазывание картинки, тк она сразу передается на компьютер, а это занимает время. б. Наблюдаются артефакты в виде горизонтальных полосок — сбой синхронизации в получении картинки. Вместо градации серого отправляется цветоразностная составляющая. в. Объект должен быть в фокусе камеры для четкого изображения.

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

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

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

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

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

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

ov7670-modul.jpg
Модуль камеры OV7670.

Камера позволяет формировать изображения в других форматах, таких как CIF (352×240) например. Ручная регулировка до 40×30 также возможна. Максимальная скорость передачи изображения (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. Комплектующие

arduino-ov7670-komplekt.jpg

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

  • TFT-дисплей,
  • Arduino Nano,
  • OV7670,
  • Макет.

Для понимания работы 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. Настройка программы

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

arduino-ov7670-1.png

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

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

arduino-ov7670-3.png

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

arduino-ov7670-4.png

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

arduino-ov7670-5.png

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

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

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

arduino-ov7670-6.png

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

arduino-ov7670-7.png

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

arduino-ov7670-8.png

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

arduino-ov7670-9.png

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

arduino-ov7670-10.png

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

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

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

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

Такой обширный функционал достигается благодаря множеству модулей различного предназначения, одним из которых является Ардуино камера. Она пригодится как для написания умных нейросетей, так и для простого отслеживания того, что происходит у вас в квартире, когда вы не дома. Давайте разберёмся, какие характеристики есть у таких датчиков и как их лучше всего реализовать в жизнеспособных системах.

kamera.jpg
Пример модуля камеры: OV7670 300KP VGA Camera Module

Характеристики TTL камеры

Сам TTL модуль работает на стандарте NTSC протокола, который известен всему миру благодаря возможности безналичной оплаты в смартфонах. Андроид, в отличие от продукции купертиновцев, давно научился применять эту технологию для беспроводного управления любой техникой.

ttl.jpg
TTL Serial JPEG камера с NTSC видео от Adafruit

Дело в том, что такая передача данных имеет куда более защищённые протоколы, чем у блютуз или беспроводного интернета, что усложняет взлом злоумышленниками вашей охранной системы. А ведь, как известно, большую часть камер можно спокойно просмотреть, находясь на другом конце света, притом для этого не потребуется никаких навыков хакера. Достаточно скачать простое приложение и знать ресурсы, предоставляющие адреса устройств по месту их расположения.

adafruit.jpg

Но не только в защитных целях годится Аrduino камера, её можно применять и для создания собственных фотоаппаратов и вебок, если вы захотите. А благодаря встроенным возможностям по настройке диафрагмы и насыщенности цветов можно получить такие кадры, которые не каждая зеркалка или мыльница с хорошим объективом способны выдать.

И, наконец, авто-контраст и авто-яркость прекрасно подходят для отслеживания движений даже в тёмных помещениях, что позволяет устанавливать их вместо соответствующих датчиков. Но, конечно, без соответствующего софта это просто груда железа. Благо, найти подходящие библиотеки, благодаря доступности Ардуино, не так и сложно, достаточно просмотреть пару тематически англоязычных форумов.

Но не заблуждайтесь, такие модули не предназначены для профессиональной фотографии, ведь их максимальное разрешение не выходит за пределы 630 на 480, предоставляемых даже самой дешёвой веб-камерой. Пример того как выглядит итоговое изображение:

camera_Test_Image_2.jpeg

При этом, у неё есть куда более значимые достоинства, перекрывающие все недостатки, например:

  1. Камеры чувствительны к ИК излучению, что не только даёт обнаружить любые изменения в цветопередаче, но и позволяет отслеживать движения в полной темноте. Учитывайте, что каждый модуль индивидуален, и подбирать его стоит по вашим требованиям, в данном случае мы рассмотрим именно систему видеонаблюдения.
  2. Размеры в 32 мм квадратных при фотоматрице CMOS в четверть дюйма.
  3. Соответственно разрешению, и мегапикселей немного – всего 0.3.
  4. А вот формат выходных данных зависит от камеры; если вам нужен простой модуль для видеонаблюдения, то подойдёт и стандарт M-JPEG, который будет выдавать не более 30 кадров в секунду.
  5. Все параметры, будь то баланс белого или экспозиция, автоматически подстраиваются в зависимости от программы.
  6. Максимальное усиление – 16 Дб, а вот динамический диапазон – все 60 Дб.
  7. Угол обзора небольшой – всего 60 градусов, учитывайте это, когда будете выбирать место для установки. Но его можно значительно расширить, прикупив специальные фишай линзы.
  8. Фокусное расстояние – от 10 до 15 метров.
  9. Битрейт установлен изначально 38400, менять его вроде бы и можно, с помощью АТ+ команд, но на деле это не работает или же попросту бесполезно.
  10. Потребляют такие модули в среднем 75 мА, учитывайте это, если собираетесь сделать автономную камеру видеонаблюдения.
  11. Работает в функциональном напряжении 5В, а подключается по 3.3 В TTL через три проводника.

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

Подключение и настройка

Зачастую камера для Ардуино приходит без коннекторов, поэтому вам необходимы специальные проводники, которые придётся подпаивать к пинам отдельно. Благо контакты расположены приблизительно в 2-х мм друг от друга, что упрощает подключение видео с Аrduino к МК.

soedinyaem-kameru.jpg

Так что сгодятся любые толстые проводники и самые обычные жала для распайки, без ювелирной работы, которую приходится проделывать на тех же датчиках движения, что является ещё одним преимуществом, которое предоставляет Аrduino видеонаблюдение, в отличие от аналогов.

Если же вам не нужна видеосъемка, по какой-то причине, то достаточно и 4-х проводов. Естественно, лучше подобрать разные цвета, для удобного кабель-менеджмента, когда вы будете упаковывать поделку в заготовленный корпус. В нашем случае расклад таков:

  1. Для 5В пина подключаем красный проводник.
  2. На заземление отправляем черный.
  3. Белый идёт на пин для получения данных.
  4. Зеленый – на TX, предназначенный для передачи картинки.

Естественно, вы можете припаивать и другие цвета или сделать всё однотонным, это не повлияет на функционал. Такая расстановка необходима лишь для того, чтобы при подключении к МК усилителей или дополнительных модулей не возникало никаких проблем. Ведь далеко не все камеры обладают встроенным микрофоном, а звукозапись в устройствах наблюдения никому ещё не вредила.

Соединение деталей, схема

Теперь соединим всё вместе. Эта схема предоставлена самим производителем таких камер — Adafruit:

shema-kamera.jpg

Программирование

Так как мы говорим о простейшей реализации, то предполагаем, что у вас нет навыков работы с С++, а соответственно, сгодится любая библиотека из общественного источника.

Но если малейший опыт работы с МК имеется, то постарайтесь выбрать код, который не будет работать через раз и по необъяснимой магии. Это значительно сэкономит вам нервы, ведь в сообществе, тем более русскоязычном, есть множество «недоинженеров», пишущих функции без каких-либо знаний базовых алгоритмов и основ программирования.

Для камеры нужно использовать приложение Windows Comm Tool. Нужно использовать серийный протокол. Сами производители рекомендуют переходник для FTDI или USB/TTL конвертер. Для Arduino можно брать серийный чип (FTDI) и загрузить скетч в мк:

// empty sketch     void setup()    {  }     void loop()  {  }

Но это не подойдет для плат вроде Leonardo!

Для плат типа Leonardo нужно брать этот код:

//Leo_passthru  // Allows Leonardo to pass serial data between   // fingerprint reader and Windows.  //  // Red connects to +5V  // Black connects to Ground  // Green goes to Digital 0  // White goes to Digital 1    void setup() {    Serial1.begin(57600);    Serial.begin(57600);  }    void loop()   {      while (Serial.available())      Serial1.write(Serial.read());    while (Serial1.available())      Serial.write(Serial1.read());  }

Соединение такое:

soedinenie-2-1.jpg

Обнаружение движения

Благодаря расширенному спектру такая камера подойдёт и в качестве датчика движения, способного реагировать ночью на любой шорох. Если подключить её к смартфону, о чём мы еще поговорим, можно настроить двойной протокол передачи данных.

Когда телефон удаляется настолько, что NTSC перестаёт работать, информация и СМС будут передаваться по беспроводному интернету и наоборот.

Связка: камера, Ардуино и Андроид

Как уже упоминалось, всю систему можно привязать к вашему смартфону, и это решение имеет множество достоинств. Сделать это удастся с помощью специального приложения, но новичкам лучше не использовать NTSC, доступный в модуле, ведь с ним будет много мороки.

Лучшим выбором, для проверки работоспособности проекта в принципе, будет блютуз модуль и соответствующее приложение на Андроид, позволяющее работать с ним. А уже затем можно начинать эксперименты с усложнением системы.

Использование видеокамеры с Arduino

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

  1. Видеонаблюдение за квартирой.
  2. Автоматизированные фермы и теплицы, в которых есть микроклимат, и, дабы его не нарушать, наблюдение стоит вести удалённо.
  3. Замена датчику движения, при соответствующем софте.

Используемые источники:

  • https://robotclass.ru/articles/arduino-ov7670-tft-spi/
  • https://arduinoplus.ru/podkluchaem-ov7670-k-arduino/
  • https://arduinoplus.ru/arduino-kamera/

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации