Ардуино для начинающих. Урок 8. Аналоговые входы
Сегодня мы поговорим об аналоговых входах Arduino. На разных платах ардуино имеется разное количество аналоговых входов. Так например, у Arduino Uno их 6, а у Arduino Nano их 8. Узнать сколько аналоговых входов на конкретной плате Ардуино вы можете, посмотрев описание плат в разделе «Платы».
Как мы уже знаем, цифровые пины могут быть как входом так и выходом и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые пины могут только принимать сигнал. И в отличии от цифровых входов аналоговые измеряют напряжение поступающего сигнала.
В большинстве плат ардуино стоит 10 битный аналогово-цифровой преобразователь. Это значит что 0 считывается как 0 а 5 В считываются как значение 1023. То есть аналоговые входы измеряют, подаваемое на них напряжение, с точностью до 0,005 вольт.
Благодаря этому мы можем подключать разнообразные датчики и резисторы (термо резисторы, фоторезисторы,).
В этом уроке используется:
Большая макетная плата на 1600 точек с 4 шинами питания: |
Arduino Uno: |
Arduino Nano: |
Фоторезисторы 20 штук: |
Инфракрасный дальномер: |
Высокоточный инфракрасный дальномер с I2C: |
Набор резисторов из 100 штук на все случаи: |
Соединительные провода 120 штук: |
Потенциометры с колпачками 5 штук: |
Подключение фоторезистора к Arduino
Подключение фоторезистора к Ардуино
Как видите, схема очень проста. Обратите на стягивающий резистор на 10 кОм. Зачем он нужен и какой номинал лучше выбрать мы говорили на прошлом уроке. Теперь давайте напишем простой скетч, который будет выводить в COM порт значения с аналогово входа.
int sensePin = 0; // Пин к которому подключен фоторезисторanalogReferense(DEFAULT); // Задаем опорное значение напряжения. Эта строка не обязательна.Serial.begin(9600); // Открываем порт на скорости 9600 бод.Serial.println(analogRead(sensePin)); // Считываем значение и выводим в портdelay(500); // задержка для того что бы значений было не слишком много |
Как видите в скетче нет ничего сложного. Команда analogReferense() не обязательна. Я добавил ее просто для демонстрации.
Давайте сделаем что то более интересное. Например ночник с автоматическим включением, если яркость освещения падает ниже определенного уровня. Для этого нам необходимо добавить в нашу схему светодиод через резистор на 150 Ом. Его мы подключаем к контакту 9 на Ардуино. Теперь наша схема выглядит так:
схема ночника на ардуино
Так же немного доработаем наш скетч.
int sensePin = 0; // Пин к которому подключен фоторезисторint ledPin = 9; // Пин к которому подключен светодиодpinMode(ledPin, OUTPUT); // назначаем пин ledPin выходомint val = analogRead(sensePin); // Считываем значение с фоторезистораif(val |
Источник: https://all-arduino.ru/arduino-dlya-nachinayushhih-urok-8-analogovye-vhody/
Модуль видеокамеры и Arduino
Статья посвящена подключению и работе с серийным модулем TTL камеры и Arduino.
Камера работает по стандартам NTSC. Подобные модули отлично вписываются в проекты для реализации фотографии и видеострима. Кроме того, обычно они имеют встроенную возможность настройки яркости и насыщенности цветов, настройки авто-контраста и авто-яркости, дают возможность отслеживать движение.
Описание и технические характеристики камеры
Хотелось бы более детально остановиться на том, как именно подобные модули обеспечивают и фото и видеосъемку. Изначально камера была разработана с целью наблюдения. То есть, основная задача была стримить видео с пина 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)
В качестве примера работы видеокамеры ниже приведены две фотографии: первая – в комнате в солнечный день и вторая – на улице в дождливый.
Подключение камеры
Как правило модуль продается без коннекторов, так что придется запаять проводники к предусмотреным пинам. Хорошая новость: контакты находятся на достаточно большом расстоянии друг от друга (около 2 мм). Можно использовать достаточно толстый проводник и жало для распайки.
Если вы не планируете использовать возможности видеосъемки, можно использовать четыре провода. Мы используем красный для пина +5 В, черный для Земли, белый для пина RX (данные, которые поступают на камеру от Arduino) и зеленый для пина TX (данные, которые поступают с камеры).
Если вы планируете использовать NTSC видео-выход для подключения к телевизору или монитору, припаяйте еще один черный проводник к пину Земля и желтый к пину CVBS.
Если у вас водонепроницаемая модель камеры, в ней уже будут предусмотрены следующие коннекторы:
- Красный подключен к +5 В;
- Черный подключен к Земле;
- Зеленый – RX;
- Белый – TX;
- Желтый – сигнал NTSC видео;
- Коричневый – Земля NTSC видео.
Проверка работоспособности камеры
Один из самых быстрых методов проверки работоспособности камеры – использование NTSC видео выхода для подключения. В этом случае при настройке параметров изображения и фокусировки вы моментально увидите результат. В комплексе с программой CommTool, которую мы рассмотрим ниже, это идеальный метод для ознакомления с основаи работы с модулем камеры и Arduino.
Для подключения к большинству телевизоров и мониторов нужен RCA джек. С этой целью мы припаяли RCA выход к камере. Черный проводник подключен к Земле, а желтый – к сигналу. Купить коннекторы RCA типа можно в любом магазине радиотехнических деталей.
К сожалению, перейти из режима NTSC в режим PAL невозможно.
Подключите кабель NTSC к монитору и подключите красный и черный кабели к источнику питания +5 В. На мониторе тут же появится черно-белое изображение!
Использование CommTool
Для использования windows-приложения Comm Tool, необходимо наладить обмен данными с камерой по серийному протоколу. Мы предлагаем два варианта. Первый – использовать переходник для FTDI или какой-то USB/TTL конвертер. В случае с Arduino вы можете использовать серийный чип (чип FTDI), загрузив следующий скетч на Arduino:
// empty sketch
void setup()
{
}
void loop()
{
}
Примечание: Этот метод сработает только на Arduino с отдельным USB-интерфейсом, вроде Uno. С платами Leonardo так не получится!
Если вы используете Leonardo, Micro, Yun, или другие контроллеры на основании ATmega32U4, используйте этот Leo_passthru скетч вместо “пустого” скетча.
//Leo_passthru
//Обеспечивает передачу данных по серийному протоколу при
//использовании плат Arduino Leonardo в Windows.
// Красный подключен к +5 В
// Черный – к земле
// Зеленый – к цифровому пину 0
// Белый – к цифровому пину 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());
}
Теперь подключите камеру к Arduino следующим образом:
На водонепроницаемых камерах белый и зеленый провода часто меняются местами! Так что учтите это при подключении. Красный коннектор должен все равно идти к +5 В, а черный – к Земле.
Обратите внимание, что при подключении камеры к Arduino используется резистор на 10 кОм. Питание логики камеры 3.3 В, так что опустить напряжение с 5 В до 2.5 не такая уж плохая идея.
В обычном режиме на выходе с цифрового пина 0 формируется сигнал HIGH, который соответствует 5 В.
При нашем подключении, с учетом сопротивления резистора, подключенного к входному сигналу (белый проводник), напряжение не превысит 3.3 В.
Теперь загрузите и установите программное обеспечение VC0706 CommTool.
Запустите программу и выберите COM порт, к которому подключена Arduino.
После этого Open порт и нажмите Get Version
Обратите внимание, что отобразилось VC0703 – Почему DSP запрограммирован под другим номером – точно не известно. В любом, случае, ответ мы получили.
Следующая кнопка – рядом с FBUF CTRL.
Это новая панель, которую мы можем использовать, чтобы напрямую загрузить рисунки с камеры.
- Установите камеру на объекте для его фотографии;
- Нажмите Stop FBuf, чтобы «заморозить» кадр;
- Нажмите Sel File, чтобы выбрать файл для сохранить в JPG формате.
После этого нажмите Read (рядом с Sel File), чтобы считать кадр с камеры.
Вот и все! Теперь вы с легкостью можете загружать фото с камеры. Чтобы сделать новый снимок, нажмите Resume. После этого нажмите Stop CFbuf для нового фото. Кроме того, вы можете выбрать Compression Ratio и выбрать качество снимка. Учтите, что время обработки тоже изменится. Простого пути изменения размера фотографии в этой программе нет, но мы можем это сделать в скетче Arduino.
Вы могли заметить, что есть выпадающий список для изменения скорости передачи данных. По умолчанию скорость выставлена на 38400.
Несмотря на то, что в программе есть эти настройки, даже если они отработают, после перезагрузки камеры придется выставлять их заново. В некоторых случаях, при изменении скорости передачи данных в программе, камеры отключаются. Так что пользоваться этими настройками не рекомендуется.
Стоит обратить внимание на кнопку Image Property, с помощью которой можно настроить камеру. С помощью ползунов можно в режиме реального времени подстраивать изображение, которое выводится на вашем подключенном мониторе.
В программе куча настроек. Рекомендуем ознакомится с их перечнем ниже и не менять их, пока вы на 100% уверены, что это за настройка и зачем она вам нужна.
- Config – смотрите выше.
- Get Version – смотрите выше.
- R/W Data – используется для передачи данных на процессор DSP чипа. Не стоит менять эту настройку без стопроцентного понимания, зачем это необходимо, так как можно получить конфликт с камерой.
- Color Ctrl – служит для выбора цвета, черно-белого режима или авто выбора (вероятно, основанного на условиях освещенности). Автоматический режим отлично отрабатывает, так что можно использовать именно его.
- Mirror Ctrl – скорее всего – переворот изображения (зеркальный эффект).
- Power Ctrl – проверка питания. Можно настроить автоматический режим отключения, когда нет движения.
- Timer Ctrl – в DSP есть встроенный RTC, который можно настроить. Однако батарейки нет, так что после перезагрузки настройки собьются.
- AE Ctrl – управление авто контрастом/яркостью. По умолчанию настройки установлены на автоматический выбор для сьемки в помещении и на открытом пространстве.
- Motion Ctrl – настройки системы обнаружения движения. Можно с ними поиграться и протестировать. Есть скетч для Arduino для обнаружения движения объектов, который можно использовать.
- OSD Config – протокол, который, судя по отзывам, не поддерживается большинством камер 🙁
- Image property – смотрите выше.
- Gamma – точная настройка гаммы CMOS сенсора. Настройки по умолчанию хорошие. Поэкспериментировать можно.
- SPI Flash – скорее всего – считывание и запись данных в SPI хранилище.
- Other Ctrl – возможно, для цифро-аналогового преобразования.
- Up/Down Load – считывание и запись данных на флэш-память. Вероятно, для загрузки нового DSP кода.
- System Reset – перезагрузка модуля. Актуальна, когда модуль перестает отвечать.
- FBuff Ctrl – смотрите выше.
- Zoom Ctrl – в модуле есть встроенный 'Pan Tilt Zoom', НО он рассчитан только для видеосьемки. С фотографиями отрабатывать не будет. Можете поэкспериментировать с PTZ, может оказаться полезным.
Использование видеокамеры с 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, если не было.
Ручная настройка фокуса
В камере не предусмотрен автофокус, есть только ручной режим. С одной сторы это хорошо, с другой – плохо. Камера поставляется с хорошей глубиной фокуса, которая подходит для большинства задач.
Если вы планируете настраивать фокус, очень рекомендуем предварительно подключить модуль камеры к монитору, как мы это делали выше. Так вы сможете в режиме реального времени отследить изменение настроек.
После настройки, объектив затягивается винтом.
Если у вас влагозащищенная камера, для настройки придется снять корпусную часть и только потом провести настройку.
Дополнительные вопросы-пояснения
Как можно изменить скорость передачи данных на модуле видеокамеры?
Возможно, вы обратили внимание, что есть командная строка для изменения скорости передачи данных. По умолчанию, значение установлено на 38400.
Несмотря на то, что в приложении можно изменять скорость, эти настройки отрабатывают не очень хорошо. Даже если получиться изменить настройки, после перезагрузки модуля видеокамеры для Ardbino, они собьются. Кроме того, порой это приводит даже к поломке камеры.
С какой скоростью можно делать снимки?
Рассмотренная в данной статье камера достаточно медленная. Для передачи изображения понадобится около 30 секунд. Обратите внимание, что это характеристика, которая отвечает за обработку и сохранение снимка в том числе. Для анализа в режиме реального времени подобной задержки нет.
Почему такие бледные цвета? Снимки похожи на монохромные.
Рассмотренный модуль был разработан для режима наблюдения, чувствительность видеокамеры смещена к инфракрасному диапазону. Это значит, что объект, который отражает или излучает инфракрасные волны будет казаться ярче.
Для более естественной цветопередачи можно использовать дополнительные инфракрасные фильтры.
Есть ли альтернативные библиотеки для камеры и Arduino?
Например, есть еще одна библиотека, которую можно тоже скачать на Github
Так что экспериментируйте, тестируйте и развивайте свои проекты на Arduino.
Источник: http://arduino-diy.com/arduino-modul-videokamery
Видеокамера OV7670. Введение
Обработка изображений — это весьма востребованная сторона разработок эмбеддеров. Охранно-следящие устройства и видеодокументирование, мультимедиа и связь — только некоторые из областей применения, где требуется обработка изображений. Конечно не секрет, что для разработчиков-любителей, за редким исключением, цена комплектующих имеет важное, порой решающее значение. Поэтому неудивительно, что при закупках народ ориентируется в первую очередь на недорогие комплектующие. Примером недорогой видеокамеры служит OV7670, купленная на Деалэкстиме за 12,90 $. Знаю, товарищи, знаю, что на ебее она ещё дешевле
Источник: http://www.embed.com.ua/raznoe/videokamera-ov7670-vvedenie/
OV7670 без буфера FIFO передача видео по WiFi с обработкой на ESP32
Обсуждение возможности присоединения видеокамеры к Arduino идет довольно давно, но все разговоры сводились к элементарным расчетам, которые доказывали, что видеосигнал при помощи Arduino обработать невозможно. Об этом говорит как скорость работы контроллеров используемых для плат Arduino, так и отсутствие приемлемого количества оперативной памяти.
Часто обсуждались вопросы подключения самой простой и доступной по цене камеры OV7670.
Но тактирование данной камеры имеет минимальную частоту 10МГц, а номинальная частота тактирования (при которой камера выдает «не размазанные» изображения) 24МГц.
Мы же имеем частоту Arduino NANO, Mega, UNO 16Мгц, а требуется, чтобы обрабатывающий контроллер был значительно быстрее камеры, чтобы успевать принимать значения битов изображения.
Только современные Arduino платы способны на такое: Arduino Due , Intel Galileo. Но они дороги или мало распространены.
И здесь, как черт из табакерки, на арену выпрыгивают китайские производители контроллеров. Сначала появляется ESP8266, который был нами протестирован, но честно говоря, поговорка о том, что чего из него ни делай, а получается погодная станция, родилась не на пустом месте.
Попытки установить ESP8266 на мобильного робота и одновременно обеспечить адекватную работу обвески из датчиков у нас не получилось. Но, тем не менее, эти контроллеры пользуются определенным успехом, по крайней мере, их покупают.
Начав разработку, дети Поднебесной уже остановиться не могут, и следом выпускают новую версию контроллера ESP32, который не только получил адекватный запас GPIO, но и дополнительно получил второе ядро, и дополнительно (к поддержке WiFi протокола, который уже был на ESP8266) поддержку протокола Bluetooth.
Частота 160МГц, два 32-ных ядра, WiFI, BT, не оставили нас равнодушными, тем более идея сборки мобильного робота с камерой, которая передает изображение по WiFi витает уже давно.
Анализ документации по камере показал, что подключить ее к ESP32 вполне по силам. А позднее был найден пример подобного подключения на github:
Ниже приводится схема подключения по программе указанной выше. Стоит заметить, что используется камера без буфера FiFO.
Помимо камеры в примере к ESP32 подключен TFT дисплей.
Я не нашел поблизости дисплея и подключил только камеру. Более того использовался контроллер Lolin32 Lite, который не имеет разведенного вывода GPIO 21 и моя схема немного изменилась.
Код использованный при проведении испытаний
С 5й ноги камеры контакт соединен с 23 GPIO платы на основе ESP32. В программе убрано всё, что касается работы с дисплеем и изменен указанный выше GPIO. Программный код будет по второй схеме прикреплен к данной статье.
Сначала из куска шлейфа IDE был создан шлейф для камеры, но потом для простоты (скорости) все было сделано на макетной плате.
На стандартную макетную плату Lolin32 Lite становится так, что остаются с боков по одному контактному месту для соединений, а вот плата ESP-WROOM32 шире, и с одной стороны все контактные посадочные места оказываются под платой.
Вот такой пучёк проводов получился.
Установив прошивку и открыв Serial port на скорости 115200, можно убедиться, что плата завелась, а заодно узнать полученный ею адрес от вашей WiFi сети. И не забудьте в программе прописать ваше имя WiFi сети и пароль сети.
Чтобы получить информацию из Serial port следует: открыть Serial port, затем нажать на ESP32 кнопку Reset (Boot). После этого ESP32 перезагрузится и напечатает в порт информацию по подключению.
Теперь во внутренней сети потребуется компьютер или смартфон.
На нем в адресной строке браузера следует указать ip-адрес нашего устройства (здесь это 192.168.1.136). Все! Смотрим на картинки с камеры.
Честно говоря, качество полученной картинки не выдерживает никакой критики. Под большим вопросом и скорость передачи, отрисовка рисунка 320х240 шла довольно медленно и с задержкой в пару секунд. В итоге мы имеем загруженный под завязку ESP32 и 1-3 мутных кадра в секунду.
Выводы: камера OV7670 работает, но образец без буфера FiFo показывает на выходе изображение низкого качества, причины тому могут быть две – 1) большое время экспонирования полного кадра, что приводит к смазыванию картинки, 2)объектив без автофокуса с ручной фокусировкой, что затрудняет использование данной камеры в динамике (на мобильном роботе). Использование камеры с внутренним буфером FiFo может немного улучшить ситуацию, но кардинально ничего не изменится.
Дальнейшие испытания пойдут в область использования готовых изделий, таких как смартфон в качестве камеры робота (или подобное устройство с возможностью отдельной от контроллера робота трансляции видео в сеть).
Код использованный при проведении испытаний
Источник: http://zizibot.ru/directory/camera/ov7670/
Arduino Usage
Next up, we will wire the camera to our microcontroller (in this case an Arduino). This is pretty similar to the above except we will be using two digital pins and a software serial port to talk to the camera. To save images, you'll need some sort of external storage like our microSD breakout board.
Connect up the camera like this:
For the weatherproof camera, the white and green wires are swapped on some cameras! So please flip the white and green wires indicated if using the metal camera. Red should still be connected to +5 and Black to Ground
We suggest testing the microSD card first. Check out our microSD breakout board tutorial and verify that you can read from the card by listing the files. Once you have verified the microSD card wiring, you can come back here and install the VC0706 camera library.
Visit the Github repository here. To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_VC0706. Check that the Adafruit_VC0706 folder contains Adafruit_VC0706.
cpp and Adafruit_VC0706.h Place the Adafruit_VC0706 library folder your arduinosketchfolder/libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE.
If you're using Arduino v23 or earlier, you'll also need to install the NewSoftSerial library. Download it by clicking this link and install it as you did the Adafruit_VC0706 library. Arduino 1.0 has this built in now (called SoftwareSerial)
Taking a Snapshot
OK now you're finally ready to run the snapshot demo. Open up the Arduino IDE and select File-> Examples-> Adafruit_VC0706-> Snapshot sketch and upload it to the Arduino.
Open up the serial monitor and you can see the sketch will take a 640×480 photo and save it to the microSD card. You can then pop the card into your computer to see the JPG file
There are a few things you can change once you get it working.
One is changing the pins the camera uses. You can use any two digital pins, change this line:
// This is the camera pin connection. Connect the camera TX
// to pin 2, camera RX to pin 3
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);// This is the camera pin connection. Connect the camera TX
// to pin 2, camera RX to pin 3
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
You can also change the snapshot image dimension to 160×120, 320×240 or 640×480 by changing these lines:
// 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// 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
Simply uncomment the size you want, and comment out the others. Bigger pictures will take longer to snap, so you will want to think about how fast you need to grab data and save it to the disk
A neat thing that the camera has built in is motion detection. It will look for motion in the video stream and alert the microcontroller (by sending a serial data packet) when motion is detected. IN this way you can save a bit of cash and skip on having a PIR sensor (although a PIR sensor will be better at detecting warm mammalian things).
Load up the File-> Examples-> Adafruit_VC0706-> MotionDetect sketch and upload it to the Arduino. It will take a photo immediately because it just turned on. Then wait a few minutes and wave you hand in front of the camera, it will take another photo.
You can turn motion detection on or off by calling 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)// Motion detection system can alert you when the camera 'sees' motion! cam.setMotionDetect(true); // turn it on //cam.setMotionDetect(false); // turn it off (default)
You'll need to 'poll' the camera to ask it when motion is detected, by calling motionDetected()– it will return true if motion was recently detected, and false otherwise.
Adjusting the Manual Focus
One last thing, the camera modules use a manual focus system – there's no auto focus. This can be good or bad. The camera comes with a far depth of focus which is good for most stuff.
If you want to change the focus, we strongly recommend plugging it into a video monitor as shown above so you can see exactly how the camera focus looks.
You can then lock the focus with the set screw
The version in the weatherproof housing is a little tougher to adjust but it can be done by unscrewing the housing (it takes a few steps but its all easy to do) and then adjusting the focus before reassembly
USING COMMTOOL CIRCUITPYTHON USAGEThis guide was first published on Jul 29, 2012. It was last updated on Jul 29, 2012. This page (Arduino Usage) was last updated on Nov 09, 2017.
Источник: https://learn.adafruit.com/ttl-serial-camera/arduino-usage
Камера обгона и переключение камер на Arduino — бортжурнал Mitsubishi Colt Покемон 2003 года на DRIVE2
Вступление
Меня давно-давно уже привлекает электроника не только как пользователя. Я хочу уметь творить и создавать в этой сфере тоже. И может быть когда-нибудь в будущем одна из моих компаний будет заниматься робототехникой или периферийными компьютерами для автомобилей.
Передо мной стояла задача — сделать возможность переключения между камерой обгона, заднего вида и видеорегистратором (чтобы иметь возможность настроить изображение), при этом сохраняя автоматическое включение камеры заднего вида, когда “врубаешь задний ход”.
Т.е. переключение должно проходить циклически, “Выкл” -> Камера обгона -> Камера заднего вида -> регистратор. При выключеном состоянии мы должны видеть обычный экран магнитолы, где может быть навигация, музыка. Вторая кнопка должна позволять экстренно включить камеру обгона, если мы срочно решили кого-то обогнать.
Я так же хотел сделать так, чтобы камеру заднего вида можно было включить без включения заднего хода. Обычно питание камеры цепляют к лампе заднего хода и таким образом она автоматически включается когда авто сдает назад. Однако камера заднего вида полезна и если машина стоит в “кармашке” и нам нужно сдать назад и из-за стоящих рядом автомобилей ничего не видно.
Я несколько раз был в ситуации, когда хотел включить эту камеру не включая реверс — просто чтобы посмотреть что происходит на дороге.
И по этой причине, и для сохранения концепции переключения всех камер, я решил сделать подачу питания на камеру постоянно, но реализовать еще и определение, что питание на лампу заднего хода подается и автоматически переключать на камеру заднего хода в этом случае.
Реализация
Я еще с детства умею держать паяльник… Но многих вещей я не знал — как программировать микроконтроллеры и как изготавливать платы. Поэтому процесс создания устройства был для меня весьма увлекательным…
Во-первых, нужно было научиться работать с Arduino. Я купил базовый набор Arduino, инструменты, отдельно купил набор реле, поскольку не знал в тот момент что могу и самостоятельно собрать схему для релешек.
На макетной плате я собрал первую схему с релешками и так как входящего сигнала у меня не было, я использовал свободные порты Arduino для того чтобы подать несколько сигналов импульсами, а в качестве индикации сигнала на выходе — использовал встроенные в Arduino светодиод. Это дало мне возможность отлаживать программу эмулируя входные и выходные сигналы.
Написание программы для Arduino было, наверное, самым простым. А самым сложным — сборка. Нужно было приготовить все входы — выходы и припоять провода к купленым разъемам качественно у меня все никак не получалось — сопротивление постоянно гуляло, даже после пайки с кислотой.
Но после нескольких часов я справился с этой задачей и у меня появилась возможность проверить как это работает используя реальный сигнал. У меня не было нескольких видеокамер дома, поэтому было решено использовать аудио-сигнал. Запустил музыку вконтакте (Дуров, верни музыку!), с мобилы… и подал не входные разъемы устройства (на фото видно как это работает).
Отлично! Все работает, программа циклически переключает музыку, а значит будет работать и с видео!
А вот теперь — новый этап. Нужно спроектировать печатную плату. Я перебрал несколько программ типа P-CAD и они мне не понравились. “Ну неужели нету нормального софта?” — подумал я, и тут я наткнулся на Fritzing. Программа очень тесно дружит с Arduino, у нее удобный интерфейс и она может запускаться на маке — это то, что я искал.
Я набросал на виртуальной печатной плате что я от нее хочу, перешел на вкладку со схемой, сделал Autoroute (автоматическое прокладывание связей), немного поправил пути, проставил те, которые программа не смогла сама и распечатал на бумаге для проверки схемы.
Вот тут нужно быть внимательным. Я специально распечатал схему, чтобы при проверке можно было обводить ручкой те места, про которые у меня нет никаких сомнений. Все, проверка закончена — можно приступать к проектированию печатной платы.
Переходим в третью вкладку, назначаем размер платы, чтобы он соответствовал размерам Arduino, раскидываем компоненты и делаем autoroute.
Я думал это будет так же легко, как описано в предыдущем предложении, но! Но программа не может нормально проложить авто-роут, использует несколько перемычек и мне приходиться работать с этим руками.
Я распечатываю схемы платы и потихоньку ищю слабые места.
После продолжительного времени внимательной отладки, я приступил к изготовлению платы — отрезал заготовку, украл у жены модный глянцевый журнал и распечатал схему платы на принтере. По методу ЛУТа (лазерно утюга) изображение распечатаное на глянце закрепляется на заготовке и переносится на плату под воздействием температуры (необходимо утюжить изображение прикрепленное к плате).
Я не буду подробно останавливаться на процессе изготовления, потому что он уже много где подробно описан, к примеру тут. Могу сказать только то, что у меня получилось очень качественного изготовить с первого раза — но я очень внимательно прочитал несколько статей по этому поводу.
Ах да… я встречал много вопросов типа “А какую лучше страницу из журнала использовать — светлую или темную? C буквами или без?”. Так вот, по моей практике: лучше всего печатные платы выходят из страниц с красивыми девушками и чем они более секси — тем лучше платы получаются :). Но на самом деле это имеет значение только с эстетической точки зрения, а на физику и химию процесса не влияет.
Только не используйте фотобумагу — распечатаное на лазерном принтере изображение “волосатое” и мажется.
Еще, очень важно понять что ошибки, которые совершают все, вы тоже можете совершить. Я перепроверял все на 100 раз и много раз читал о том, что в самый последний момент люди ошибались и у них получалась “зеркальная” плата.
Так вот я заметил это уже на этапе сборки платы, когда собрал разъемы для соединения с Arduino и понял, что они с обратной стороны.
Это дало мне возможность еще поработать над платой и мне в итоге удалось оптимизировать ее, петем перенесения элементов, выходов и переназначения пин-ов — я сэкономил 30% платы и обошелся всего одной перемычкой + избавился от черезчер близких дорожек. Но если выша схема была идеальной — не перепутайте сторону!
Заключение
А результат работы камеры обгона просто потрясающий — на праворуком авто теперь можно безопасно ездить по трассе! 🙂 Я покупал камеру КРС-DNR880 в интернет-магазине за 5990 рублей и длиннофокусный объектив на 25 мм за 790 рублей.
Всем рекомендую взять его при заказе.
Я боялся что в будущем на следующем авто, будет стандартная магнитола и она будет поддерживать только NTSC, поэтому и взял NTSC-камеру — ведь с моей текущей магнитолой на Android она работает отлично.
Цена вопроса: 12 000 ₽ Пробег: 170000 км
Источник: https://www.drive2.ru/l/1572687/
Ардуино и видео? Легко
Известно, что слабый микроконтроллер ардуино не способен пропустить через себя видеопоток. А если подойти к этой задаче с другого бока? … и растянуть процесс съёмки во времени. Хе, многие уже и сами догадались, эта техника съёмки называется timelapse (замедленная покадровая съёмка).
То есть это никакая не видеосъёмка, а фотосъёмка, в результате которой создаётся видео.
Признаюсь, изначально я не планировал делать замедленную съёмку. Просто хотел сделать для своей ардуины регистрацию событий, в том числе и с фотографиями. Ну а потом пошло-поехало.
Если мой читатель не занимается разработкой, то может просто посмотреть полученный результат (зайти из под Chrome).
Из чего состоит моя система:
- плата Arduino Mega;
- модуль JPEG камеры;
- служебная программа и база данных MongoDB;
- WEB сервер для размещения HTML файлов;
Когда ардуина посылает свои данные на сервер, то к каждому параметру прикрепляется своя метка времени.
Отправили параметр — добавилась запись в хранилище, ещё два раза отправили — сохранились ещё две записи. Вся работа с хранилищем ведётся через служебную программу (далее посредник), которая запускается на стационарном компьютере. При этом, сам WEB сервер отдаёт только статичный контент.
То есть, все клиенты ведут информационный обмен через служебную программу посредника, аналогично популярному протоколу MQTT. Основное отличие от MQTT будет в том, что этот посредник напрямую работает с хранилищем данных, обеспечивая работу с историческими данными.
Этот факт упрощает схему взаимодействия, и не требует дополнительного сетевого трафика для сохранение данных.
Для удобства разработки своих веб приложений, я создал javascript библиотеку с таким API: Так создаётся клиент для работы с сетевым хранилищем:var client = new MgtClient(“localhost”, “login”, “password”, onDebugLog);
Аргументы функции:
- сетевой адрес, на котором запущена программа посредника, можно просто указать IP, например так — «127.0.0.
1»;
- логин пользователя;
- пароль пользователя;
- функция обратного вызова, для отладочных строковых сообщений;
Функция обратного вызова для отладочных сообщений может выглядеть так:function onDebugLog(aStr) { // метка времени и сообщение будут выводиться в отладочную консоль браузера console.log((new Date()).getTimeString() + ' ' + aStr + '
'); }
Пока не сложно? Дальше будет потрудней.
Структура запроса к хранилищу:var request = { name: “параметр 1”, // имя запрашиваемого параметра placeId: 1, // идентификатор вашего объекта beginTime: 1458108472000, // начальное время в миллисекундах от 1 Января 1970 года endTime: 1458194872000, // конечное время в миллисекундах от 1 Января 1970 года (не включительно) limit: 10000 // максимальное количество записей, не обязательный параметр (по умолчанию без ограничения)
};
Ещё не запутались?
Тогда вот структура ответа на запрос:var result = { times: [], // массив временных меток полученных записей (время в миллисекундах от 1 Января 1970 года) values: [], // массив значений полученных записей position: 20, // порядковый номер указывающий на новые данные в массиве (данные могут поступать порциями) status: “progress”, // состояние запущенного процесса (“progress”, “abort”, “done”, “fail”) progress: 91 // индикатор выполнения (в процентах) };
Ага, уже сложней?
Состояние поля «status»:
- «done» — получили всё что запросили (либо получены данные за весь временной диапазон, либо сработало ограничение на количество записей);
- «progress» — указывает, что это не последняя порция данных, процесс скачивания ещё не окончен;
- «abort» — прервалось скачивания данных (сработало ограничение на общий объём выкачиваемых данных), можете тут же сформировать новый запрос на получение недостающих данных;
- «fail» — что то пошло не так (может тока нет в розетке?)
Вы думаете это всё? К сожалению, нет.
Запрашиваемые параметры могут быть разного типа.
- Если параметр числовой, то в массиве значений окажутся числа.
- Если строковый, то в массиве значений будут строки.
- Если булев, то в массиве значений будут «true» или «false».
- Если бинарный (например JPEG картинка), то в массиве значений будут массивы байт.
- Если это событие, то вернуться массивы, сформированные особым образом.
Пример одной записи события:var event = [ “сработал датчик движения”, // заголовок произошедшего события “термометр”, // имя параметра 1 27.5, // значение параметра 1 “светодиод”, // имя параметра 2 true, // значение параметра 2 …
“фото”, // имя последнего параметра 1458108472000 // сюрприз!!! это всего лишь временная метка сохранённого изображения, // нужно сформировать дополнительный запрос для выкачивания этого изображения.
];
То есть, каждая запись события может содержать произвольный набор параметров. Такая группировка очень удобна для анализа общей картины.
Уфф, самое сложное уже позади.
А так выглядит сама отправка запроса:// aRequest – структура запроса
// onReadArchive – обратная функция для получения ответа/ответов
client.
readArchive(aRequest, onReadArchive); Обратная функция для получения ответов:// aResult – структура ответа
onReadArchive(aResult) { // TODO вставьте свой код обработки пришедших данных // если вернём “false”, то продолжим принимать ответы (если процесс приёма не завершён) // если вернём “true”, то обрываем получение остальных ответов (если процесс приёма не завершён) return false; }
Наконец мы подошли к самому монтажу видео.
Для создания видео я использовал javascript библиотеку Whammy, здесь подробнее.
Функция, которая создаёт видео:
function createVideo() { var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); canvas.width = '640'; // это ширина фоток в пикселях canvas.height = '480'; // это высота фоток в пикселях var framerate = 10; // устанавливаем количество кадров в секунду var quality = 0.
8; // устанавливаем качество видео var video = new Whammy.Video(framerate, quality); // объект для создания видео в формате WebM for (var i = 0; i < images.length; i++) { // пройдёмся по всем изображениям var image = images[i]; context.globalAlpha = 1; context.drawImage(image, 0, 0, 640, 480); // сначала размещаем изображение на канву video.
add(context); // добавляем новый кадр } var output = video.compile(); // создаём видео из кадров var url = URL.createObjectURL(output); // конвертируем в нужный формат document.getElementById('player').src = url; // подсовываем результат нашему проигрывателю
}
К сожалению, создать видео можно не во всех браузерах.
Например, мой любимый Firefox не умеет преобразовывать изображения в формат WebP, на основе которого и происходит конвертация в видео. И хотя я нашёл javascript библиотеку для такого преобразования, но конвертировала она так медленно (а кадров было так много), что я отказался от её применения.
Впрочем, во всех браузерах с «хромовским» движком эта штука работать будет.
Здесь вы можете посмотреть что у меня получилось.
Не имея цельной документации, могу предложить мои предыдущие статьи.
Статья 1
Статья 2
Ну вот и всё, и сказать то мне больше нечего.
Источник: https://habr.com/post/391773/