Камера OV7670 подключение к Arduino

Содержание

Многие привыкли к ошибочному стереотипу, что на восьмибитном микроконтроллере нельзя сделать что-то сложнее метеостанции. И действительно, большинство проектов на Arduino не заходят дальше подключения примитивных и всем надоевших датчиков, потенциал контроллера не раскрывается, так что мы решили разрушить этот стереотип. Нет, мы не будем запускать Linux на AVR, как это уже делали, но в нашей сегодняшней статье мы рассмотрим подключение самой настоящей цифровой камеры к нашему
микроконтроллеру!

Краткий обзор

Камера OV7670

Наш герой сегодня – модуль камеры OV7670. Кратко – разрешение до 640×480 px, до 30 кадров в секунду, несколько стандартов кодирования.

Для конфигурации и связи используется интерфейс, схожий по стандарту с I2C, а для непосредственно передачи данных цвета пикселей – восьмибитная параллельная шина. Лучше-бы было взять Arduino Mega 2560, но для неё пока что не существует готовых решений, а также усложняется схемотехника – необходимо добавить 2 конвертера уровней. Поэтому в примере мы будем использовать Arduino Uno. К сожалению, её памяти не хватит на сборку кадра, а пинов не хватит для подключения дисплея, так что изображение за нас собирать будет компьютер.

Схема подключения

Камера OV7670 - подключение к Arduino

Необходимо 2 резистора на 4.7…10Ком для подтяжки линий I2C и два резистора на 4.7Ком для деления напряжения тактового сигнала.

Подключение в Arduino IDE

Из-за специфики и необходимой скорости работы, конфигурация и работа написаны без применения библиотек Arduino, на «чистом» Си. Код для работой с камерой:

( _BV ( EXCLK ) | _BV ( AS2 ) ) ;

15 ; //low d0-d3 camera

252 ; //d7-d4 and interrupt pins

3 ; //disable prescaler for TWI

Он подойдёт для всех Arduino, имеющих в основе ATMega328P (Nano, Uno, Pro Mini 328 и клоны).

В нашем примере Arduino Uno подключается к порту COM9, запрашивает картинку и сохраняет её. Переменные адреса и номер порта заданы в коде, если вы не хотите заморачиваться – легче поменять номер порта в Диспетчере устройств.

Для успешной фотографии необходимо поместить желаемый объект в фокус камеры и не двигать его, так как изображение передаётся на лету и из-за скорости передачи в кадр могут вноситься искажения. Этого можно избежать, взяв, например, Arduino Due. Тогда пинов хватит и на подключение дисплея и на модем для передачи изображения по электронной почте. Дерзайте и у вас всё получится!

Товары из статьи в нашем магазине

Arduino Uno R3

Arduino Uno R3 (ATmega 328P / CH340G)

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

OV7670 камера для Arduino

Прозрачная макетная плата на 400 точек (breadboard)

Прозрачная макетная плата на 400 точек (breadboard)

Набор проводов «Папа — Мама», шлейф, 20 см

Шлейф проводов «Папа — Мама» (20см, 40шт.)

Самые популярные материалы в блоге

За все время

За сегодня

OLED I2C 128 x 64 px

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

17 комментариев . Оставить новый

Куда сохраняются изображения?

Здравствуйте! Пиксели с камеры идут напрямую в UART, из которого побайтово их необходимо собрать в изображения. Например при помощи небольшой программы Grabber https://robotos.in/files/lessons/2/FrameGrabber.7z

Рискну спросить, каким образом я должен запускать эту программу, которую вы скинули?

Есть ли возможность записать видео на sd карту?

Здравствуйте! К сожалению мощности контроллера Arduino и объема буфера для записи видео не хватит.

А через мегу или tense 3.6 можно?

Добрый день! С Ардуино вроде полностью разобрался, пишет с ком-порт данные. А вот с Java-приложением прошу подсказки. Скачать JDK, установил библиотеку javax.comm. Была ошибка компиляции командой в консоли javac SimpleRead.java, а после установки библиотеки эта ошибка исчезла.

Но застрял на другом теперь: я выполнил javac BMP.java, класс создался. Я не Java разработчик, поэтому тонкостей не знаю. Снова выполнил SimpleRead.java, пишет: SimpleRead.java:70: error: can not find symbol BMP bmp = new BMP();

Видимо тот самый класс BMP.class, который я скомпилировал, не находит… Не могли бы Вы сказать что нужно сделать, чтобы программа скомпилировалась и собрала мне, все-таки, картинку?

Здравствуйте! По этой ссылке автор данного кода объясняет, как его правильно установить и запустить.

Добрый день! мы соединили Arduino Nano c камерой модуль оv7670, с помощью Arduino IDE. И нам почему то выдал такую ошибку: C:\Users\Uzer\Downloads\LiveOV7670 (1)\LiveOV7670\LiveOV7670.ino:8:22: fatal error: avr / io.h: No such file or directory

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

В статье написано: ” Он подойдёт для всех Arduino, имеющих в основе ATMega328P (Nano, Uno, Pro Mini 328 и клоны).” МЫ СКОПИРОВАЛИ СКЕТЧ И СДЕЛАЛИ КОМПИЛЯЦИЮ И НАМ ВЫДАЛ ОШИБКА, (ОШИБКА СВЕРХУ)

Ошибка заключается в том, что ваша среда разработки не может найти одну из необходимых библиотек, о чем говорит фраза fatal error: avr / io.h: No such file or directory

Как можно изменить данный код для платы Arduino Due?

Как запустить камеру для снятия картинки 40×30 пикселей?

Можно сделать, чтобы Ардуино передавала изображение не на компьютер, а через приёмопередатчик на другую Ардуину и через неё на дисплей?

У меня есть пару вопросов по поводу этой чудо камеры, и вашего кода. Я на самом деле своего рода новичок в работе с регистрами, и у меня появилось пару вопросов. Первый вопрос, где вы нашли подробнейшую информацию на эту камеру, потому что в даташите на эту камеру многие регистры не описаны? И второй вопрос. Каким образом вы работаете с зарезервированными регистрами камеры, если о них вообще ничего не известно? Ведь по идеи, они зарезервированы для того чтобы с ними мы не контактировали. Либо же я ошибаюсь, тогда почему?

Не рабоает. Пробывал разные программы для захвата. схема подключения в норме , ток идет. Походу стопорится в самом коде. А конкретно, в функции ArduinoUnoInut() после строки _delay_ms() он при попытке вывести в порт значение для проверки начинает выводить инвертированный знак вопроса. До этой строчки он без проблем выводит в порт значения.


Источник: voltiq.ru