Как веб камеру подключить к ардуино

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

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

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

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

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

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

Необходимо 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. Тогда пинов хватит и на подключение дисплея и на модем для передачи изображения по электронной почте. Дерзайте и у вас всё получится!

Ethernet камера на базе Arduino

В данном проекте мы подключим камеру через Ethernet при помощи Arduino. Т.о. вы сможете делать фото внутри дома, просто открыв веб-страничку в вашем браузере. Для данного проекта вам не понадобится какое-либо специальное приложение для смартфона.

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

Шаг 3: Подготовка программного обеспечения – библиотека

Для данного проекта нам понадобится загрузить несколько библиотек. Все б иблиотеки можно загрузить с ресурса http://arduino.cc

  • Adafruit_VC0706.h (для TTL камеры)
  • SdFat.h (для SD-карты)
  • SdFatUtil.h (для SD-карты)
  • Ethernet.h (для Ethernet шилда, устанавливается по умолчанию в скетче)
  • SoftwareSerial.h (для TTL камеры)

После загрузки всех библиотек вы готовы для запуска проекта.

Шаг 4: Программное обеспечение – код скетча

В данном разделе размещается код скетча проекта.

Загрузите файл скетча – ethernet_camera.ino

Вам необходимо выполнить некоторые изменения в коде скетча.

1. Необходимо изменить параметры mac[] и ip[] для вашего arduino.

2. Для отображения jpg файла в браузере мы должны подать команду для преобразования в формат jpg, как показано ниже:

В скетче указаны блоки с подробными комментариями – процедура прошивки, последовательная передача данных, файлы чтения/записи SD-карты, ethernet и т.д.

Шаг 5: Запуск и тестирование результатов

Для фотографирования: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/ttt

Для просмотра полученной фотографии: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/image.jpg

Для удаления фотографии: Напечатайте в командной строке любого браузера http:/xxx.xxx.xxx.xxx:5555/rrr

Описание и технические характеристики камеры

Хотелось бы более детально остановиться на том, как именно подобные модули обеспечивают и фото и видеосъемку. Изначально камера была разработана с целью наблюдения. То есть, основная задача была стримить видео с пина Video (в черно-белом цвете) и обрабатывать команды по серийному протоколу связи. С помощью серийного протокола можно запросить у модуля камеры остановить кадр видеосъемки и сохранить полученный кадр в формате JPEG. Например, модуль камеры в стандартном режиме работы будет стримить видео. Когда камера обнаружит движение, будет сделано фото, которое сохранится на карту памяти для дальнейшего анализа.

Разрешение на модуле камеры не большое – максимальный размер фото 630х480 пикселей. При этом камера чувствительна к инфракрасному излучению, благодаря чему обнаруживаются изменения в цветопередаче. Основная причина этих недостатков – модуль камеры предназначен для наблюдения, а не качественной фотографии. Существуют модули и с другими параметрами. Рассматриваемый нами – один из самых лучших по своим техническим характеристикам.

Технические характеристики модуля камеры

  • Размер модуля: 32 м x 32 мм
  • Фотоматрица: CMOS 1/4 дюйма
  • Количество пикселей: 0.3 M
  • Размер пикселя: 5.6 мкм * 5.6 мкм
  • Формат на выходе: Стандартный JPEG/M-JPEG
  • Баланс белого: автоматический
  • Экспозиция: автоматическая
  • Коэффициент передачи: автоматический
  • Динамический диапазон: 60 Дб
  • Максимальное аналоговое усиление: 16 Дб
  • Скорость кадров: 640*480 30 кадров в секунду
  • Режим сканирования: прогрессивное сканирование
  • Угол обзора: 60 градусов
  • Расстояние наблюдения: 10 метров, максимум 15 метров (настраиваемое)
  • Размер изображения: VGA (640*480), QVGA (320*240), QQVGA (160*120)
  • Скорость передачи данных: по умолчанию 38400 (В даташите указано, что вы можете менять скорость с помощью соответствующих команд, но на практике это не работает)
  • Потребляемый ток: 75 мА
  • Рабочее напряжение: постоянный ток +5В
  • Связь: 3.3В TTL (три проводника TX, RX, GND)

В качестве примера работы видеокамеры ниже приведены две фотографии: первая – в комнате в солнечный день и вторая – на улице в дождливый.

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

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

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

Для камеры нужно использовать приложение 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());  }

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

Теперь нужно скачать и настроить библиотеку от производителя:

VC0706 Comm Tool

Шаг 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).

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

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

Why Cameras Are Hard for Arduino

To explain why there has never been real camera support for Arduino before, it would be best to first describe camera support at a high level from both hardware and software perspectives.

Hardware side – Camera Interface and RAM

Arduino boards, of which the most mainstream and popular are UNO, MEGA, and Nano, are based on the Atmel ATMega328p, 1280, and 2560 processors. Later, the 32-bit Arduino Due uses the Atmel SAM3X8E.

None of these microcontrollers have an adequate camera port to convey high-speed camera video signals, and neither do they have enough RAM onboard to hold an entire image.

Software Side – Camera Driver 

On the other hand, even if there is a dedicated camera port on Arduino, you still need the proper camera driver to make it work, because different image sensors require different camera drivers, and writing such a driver is not an easy task for those developers who just want to take the camera for granted. What’s more, it is not that easy to get support from an image sensor vendor for a datasheet and register settings to write a camera driver.

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

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

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

Шаг 5. Демонстрация

Выполните следующие операции на телефоне Android:

  • Запустите приложение ArduinoTFT на телефоне Android;
  • Поверните телефон в горизонтальное положение;
  • Включите соединение Bluetooth, выберите обнаруженный модуль Bluetooth (HC-06);

На экране должны появиться два окна и четыре кнопки:

  • В верхнем правом окне находится окно видоискателя камеры телефона;
  • Большое левое окно — полученные или отправленные изображения.

Функции кнопок:

  1. Передача одного изображения с телефона Android на Arduino;
  2. Непрерывная передача изображений с телефона Android на Arduino;
  3. Передача одного изображения из Arduino на телефон Android;
  4. Непрерывная передача изображений с Arduino на телефон Android.

Размер изображения составляет 320×240 пикселей (2-5 кБ). Выше есть демо-видео.

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

Подключите видеокамерукамеру к Arduino, как показано на рисунке ниже:

В водонепроницаемых камерах белый и зеленый проводники могут располагаться наоборот! Так что проверьте это перед подключением. Красный кабель идет к +5 В, черный – к Земле.

Предлагаем для начала проверить microSD карту. После проверки, можно устанавливать библиотеку VC0706 для видеокамер. Скачать ее можно здесь: Github

Переименуйте распакованную папку Adafruit_VC0706. Проверьте наличие файлов Adafruit_VC0706.cpp и Adafruit_VC0706.h. Переместите папку с библиотекой Adafruit_VC0706 в папку /libraries/ folder. Возможно, вам надо будет создать подпапку в библиотеке. Перезагрузите Arduino IDE.

Если вы используете Arduino v23 или более раннюю версию, вам надо будет дополнительно установить библиотеку NewSoftSerial. Скачать ее можно здесь: NewSoftSerial10c.zip. В Arduino 1.0 эта библиотека встроена (называется SoftwareSerial).

Первый снимок

Что ж, теперь можно делать ваш первый снимок. Откройте Arduino IDE и выберите скетч File-> Examples-> Adafruit_VC0706-> Snapshot. Загрузите его на Arduino. Откройте окно серийного монитора, в котором вы увидите как сделается фото 640×480 и сохранится на карту памяти microSD. Карту можно извлечь и перенести с нее данные на ваш компьютер.

Ниже показаны несколько настроек, которые можно поменять для работы с вашей видеокамерой. Первое – замена пинов, к которым подключена камера. Можно использовать два любых цифровых пина. Замена проводится в следующей строке:

// This is the camera pin connection. Connect the camera TX

// to pin 2, camera RX to pin 3

NewSoftSerial cameraconnection = NewSoftSerial(2, 3);

Можно изменить разрешение снимка на 160×120, 320×240 или 640×480. Для этого используются следующие строки:

// Remember that bigger pictures take longer to transmit!

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

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

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

Загрузите скетч из File-> Examples-> Adafruit_VC0706-> MotionDetect на Arduino. Как только он загрузится, будет сделан снимок. Подождите несколько минут и помашите рукой перед камерой, будет сделано еще одно фото.

Включать и отключать функцию обнаружения движения можно с помощью вызова setMotionDetect()

// Motion detection system can alert you when the camera ‘sees’ motion!

cam.setMotionDetect(true); // turn it on

//cam.setMotionDetect(false); // turn it off (default)

Вам надо подать запрос на камеру при обнаружении движения, вызвав motionDetected() – в результате вам вернется true, если движение было и false, если не было.

Ручная настройка фокуса

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

Если у вас влагозащищенная камера, для настройки придется снять корпусную часть и только потом провести настройку.

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

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

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

3+

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

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

Основным производителем таких камер сейчас является компания — adafruit.com.

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

Application with Arducam SPI Camera Module

Arducam’s Arduino cameras are designed for regular less powerful Arduino boards and are mainly for capturing high-resolution still images or a few seconds short movie clips. 

So it is suitable for: 

  • Battery-powered IoT applications that require taking a still image then store it on an SD card or send the image over wifi and upload it to the cloud (like Twitter or Amazon AWS server) for future image processing. 
  • Battery-powered applications like cube satellite (Cubesat), you can power off the Arducam completely using a MOSFET to cut off the camera power pin to reduce the power consumption to ZERO.
  • With multiple camera applications like panoramic photography, you can connect more than 4 Arducams on the same bus and take images at the same time, then poll from each camera to retrieve the image data one by one.
  • Tiny Machine Learning (TinyML) with Tensorflow light liked explained in this official Arduino tutorial: Person Detection with TensorFlow and Arduino.

It is not suitable for: 

  • video streaming, 
  • surveillance or 
  • recording, 

Because the SPI interface throughput is not enough for MJPEG video stream. 

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

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

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

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

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

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

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

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

  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 через три проводника.

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

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

Давайте подключим камеру к нашему микроконтроллеру (в данном случае — Arduino). Подключение похоже на предложенный выше вариант. Для подключения используем два цифровых пина и серийный протокол для обмена данными с модулем. Для сохранения снимков вам понадобится карта памяти. Можно использовать дополнительные microSD модули или шилды.

Подключите видеокамерукамеру к Arduino, как показано на рисунке ниже:

В водонепроницаемых камерах белый и зеленый проводники могут располагаться наоборот! Так что проверьте это перед подключением. Красный кабель идет к +5 В, черный – к Земле.

Предлагаем для начала проверить microSD карту. После проверки, можно устанавливать библиотеку VC0706 для видеокамер. Скачать ее можно здесь: Github

Переименуйте распакованную папку Adafruit_VC0706. Проверьте наличие файлов Adafruit_VC0706.cpp и Adafruit_VC0706.h. Переместите папку с библиотекой Adafruit_VC0706 в папку /libraries/ folder. Возможно, вам надо будет создать подпапку в библиотеке. Перезагрузите Arduino IDE.

Если вы используете Arduino v23 или более раннюю версию, вам надо будет дополнительно установить библиотеку NewSoftSerial. Скачать ее можно здесь: NewSoftSerial10c.zip. В Arduino 1.0 эта библиотека встроена (называется SoftwareSerial).

Первый снимок

Что ж, теперь можно делать ваш первый снимок. Откройте Arduino IDE и выберите скетч File-> Examples-> Adafruit_VC0706-> Snapshot. Загрузите его на Arduino. Откройте окно серийного монитора, в котором вы увидите как сделается фото 640×480 и сохранится на карту памяти microSD. Карту можно извлечь и перенести с нее данные на ваш компьютер.

Ниже показаны несколько настроек, которые можно поменять для работы с вашей видеокамерой. Первое – замена пинов, к которым подключена камера. Можно использовать два любых цифровых пина. Замена проводится в следующей строке:

// This is the camera pin connection. Connect the camera TX

// to pin 2, camera RX to pin 3

NewSoftSerial cameraconnection = NewSoftSerial(2, 3);

Можно изменить разрешение снимка на 160×120, 320×240 или 640×480. Для этого используются следующие строки:

// Set the picture size — you can choose one of 640×480, 320×240 or 160×120

// Remember that bigger pictures take longer to transmit!

cam.setImageSize(VC0706_640x480); // biggest

//cam.setImageSize(VC0706_320x240); // medium

//cam.setImageSize(VC0706_160x120); // small

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

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

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

Загрузите скетч из File-> Examples-> Adafruit_VC0706-> MotionDetect на Arduino. Как только он загрузится, будет сделан снимок. Подождите несколько минут и помашите рукой перед камерой, будет сделано еще одно фото.

Включать и отключать функцию обнаружения движения можно с помощью вызова setMotionDetect()

// Motion detection system can alert you when the camera ‘sees’ motion!

cam.setMotionDetect(true); // turn it on

//cam.setMotionDetect(false); // turn it off (default)

Вам надо подать запрос на камеру при обнаружении движения, вызвав motionDetected() – в результате вам вернется true, если движение было и false, если не было.

Ручная настройка фокуса

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

Если у вас влагозащищенная камера, для настройки придется снять корпусную часть и только потом провести настройку.

Управляемый голосом робот Arduino

Наличие робота для заказа — одно из лучших ощущений в мире. Хотя может пройти некоторое время, прежде чем мы можем случайно попросить нашего робота-дворецкого приготовить нам еду, небольшая хитрость может принести вам послушного маленького работника робота сегодня!

KureBas Robotics объединила голосовую активацию, дешевую экшн-камеру и двухколесного робота-робота с оружием для создания своего робота для чистки стола Arduino.

Комбинируя функцию Wi-Fi экшн-камеры с системой Bluetooth для управления движением робота, KureBas использовал камеру многократного использования, а не дорогостоящий блок только с микроконтроллером. Дистанционное управление роботом вместе с голосовой активацией стало возможным благодаря приложению Android, разработанному разработчиком проекта, которое можно загрузить со страницы учебника.

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

За сегодня

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

Здравствуйте! Пиксели с камеры идут напрямую в 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 пикселей?

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

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

Источник

цифровая электроника вычислительная техника встраиваемые системы

Arduino и камера OV7670

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

В связи с этим радиолюбители и разработчики электроники для задач фиксации и обработки изображений берут более сложные вычислительные устройства, например, Raspberry Pi. Но при желании такие задачи можно отчасти решить с помощью Arduino. Так, в данном материале будет показано, как подключить камеру OV7670 к Arduino и получать с нее изображения.

Камера OV7670 имеет разрешение 0.3 мегапикселя. Вывод изображений осуществляется в формате 640×480 VGA при 30 кадрах в секунду. Модуль камеры питается от 3.3 В, Настройка регистров камеры осуществляется по интерфейсу I2C. Данные передаются по параллельному интерфейсу, состоящему из восьми линий (D0-D7). Схема подключения OV7670 к Arduino показана на рисунке ниже.

Для того чтобы взаимодействовать с камерой на персональном компьютере через Arduino на этом компьютере должен стоять Java SE Development Kit 8 или выше. Если этого нет, то скачайте дистрибутив с официального сайта Java.

Теперь скачайте тестовую программу отсюда. Откройте ее в Arduino IDE, подключите плату Arduino и загрузите данный скетч в эту плату. Узнайте к какому COM-порту подключена ваша плата Arduino и скачайте соответствующий номеру порта архив.

Далее скачайте и распакуйте архив Extra.rar. Он состоит из папок scr и lib, а также файла win32com.dll. Поместите этот файл в директорию C:\Program Files\Java\jdk1.8.0\jre\bin. Теперь откройте папку lib и увидите файлы comm.jar и javax.comm.properties. Первый файл скопируйте в C:\Program Files\Java\jdk1.8.0\jre\lib\ext, а второй в C:\Program Files\Java\jdk1.8.0_74\jre\lib.

Откройте командную строку cmd и в ней зайдите в директорию, где хранится папка code, в данном случае это C:\Program Files\Java\jdk1.8.0\bin. Введите java code.SimpleRead, это будет выглядеть так C:\Program Files\Java\jdk1.8.0\bin>java code. SimpleRead. Всё, теперь после этого в папке out вы сможете увидеть изображения с подключенной к Arduino камеры OV7670.

Конечно, их качество оставляет желать лучшего, но это то, на что способна 8-битное вычислительное устройство.

Источник

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

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

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

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

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

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

Шаг 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