Arduino gopro: как контролировать камеру через wifi

Контролируем GoPro через WiFi с помощью Ардуино

28 июня в 10:22

В этом уроке мы покажем вам, как просто управлять GoPro Hero 4 и GoPro Hero Session 5 с помощью Wi-Fi и платы Arduino. В целом, эти рекомендации могут быть легко адаптированы для любого типа GoPro.

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

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

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

Шаг 1. Комплектующие

Для этого проекта вам потребуется всего несколько вещей.

Для начала, очевидно, понадобится камера GoPro. Все инструкции должны работать для самой последней модели (GoPro Hero 6). Хотя, всё протестировано с GoPro Hero 4 и GoPro Hero Session 5. Модели Hero Session немного отличаются по контролю, чем другие модели, но планируем также их рассмотреть.

Также понадобится Arduino MKR1000 или Arduino MKR Zero. Здесь используется MKR1000. Можно работать с другим совместимым с Arduino беспроводным микроконтроллером с поддержкой Wi-Fi.

Вам также понадобится USB-кабель для Arduino, компьютер, на котором работает программное обеспечение Arduino IDE (которое, как я полагаю, у вас есть), и смартфон с установленным GoPro-приложением.

Если у вас нет опыта и вы раньше не использовали Arduino, настоятельно рекомендуем вам сначала посмотреть класс Arduino перед тем, как начать этот проект.

Шаг 2. Настройка Wi-Fi вашей камеры

Первое, что вам нужно сделать, это включить и настроить Wi-Fi-соединение вашей камеры. Не будем вдаваться в это слишком глубоко, потому что для этого уже есть много уроков и рекомендаций. На GoPro Hero 4 самый простой способ сделать это — подключить камеру к телефону, следуя указаниям в приложении.

После того, как телефон связан с камерой, откройте настройки камеры с помощью приложения и дайте Wi-Fi сети новое имя и пароль по вашему выбору.

На GoPro Hero 5 применяется тот же метод. Для начала подключите камеру к телефону, следуя инструкциям в приложении. Это автоматически настроит имя и пароль сети Wi-Fi.

Чтобы просмотреть имя сети Wi-Fi на вашей камере, перейдите к «Информация о камере» (англ. — Camera Info), которая находится в меню «Настройки подключения» (англ. — Connection Settings).

Шаг 3. Поиск MAC-адреса GoPro

После того как Wi-Fi включен, вам нужно выяснить, какой MAC-адрес вашей камеры. Этот адрес хорошо бы знать когда имеете дело с традиционной линейкой GoPro Hero. Однако, если вы используете GoPro Hero Session этот адрес является обязательным.

Чтобы получить его, сначала подключите свой компьютер к сети Wi-Fi вашей камеры, используя имя сети и пароль с предыдущего шага.

Как только вы войдете в сеть Wi-Fi вашей камеры, откройте любой старый веб-браузер на своем компьютере и перейдите по следующему URL-адресу:

http://10.5.5.9/gp/gpControl/info

Этот URL-адрес должен печатать строку информации в вашем веб-браузере, которая выглядит примерно так:

{«model_number»21,»model_name»:»HERO5Session», «firmware_version»:»HD5.03.02.51.00″, «serial_number»:»C3212365684485″,»board_type»:»0x05″, «ap_mac»:»0641631510c4″, «ap_ssid»:»GP54688615″, «ap_has_default_credentials»:»0″,»capabilities»:»16″}

Если это не так, убедитесь, что ваша камера включена и все еще подключена к Wi-Fi.

Нас интересует строка чисел, которая следует за «ap_mac:». Эта 12-значная строка цифр и является MAC-адресом. В данном случае это — 0641631510c4.

Как только вы определили адрес, разделите его на два символа и отформатируйте его следующим образом:

0x06, 0x41, 0x63, 0x15, 0x10, 0xC4

Шаг 4. Подключение Arduino к GoPro Hero

Для того, чтобы Arduino общался с камерой серии GoPro Hero, ее необходимо соединить с помощью PIN-кода. Чтобы получить pin, перейдите в меню телефона для соединения камеры с приложением. Это должно сгенерировать 4-значный PIN-код на всех камерах последующих моделей (у Hero 3 и ранее есть 6-значный PIN-код). Pin живет всего 3 минуты.

Вам нужно вручную вставить PIN два раза в код ниже в обоих местах, где:

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ENTER YOUR PIN HERE WHERE IT SAYS XXXX //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

После ввода pin-а у вас есть менее трех минут, чтобы загрузить его в Arduino и установить соединение с камерой.

Не забудьте ввести учетные данные Wi-Fi GoPro в этом месте:

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ENTER YOUR WIFI NAME AND PASSWORD HERE //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Во всех смыслах и целях, как только вы успешно загрузили код, ничего не появится. Тем не менее, если вы перейдете из меню настройки GoPro обратно к экрану видео, вы сможете теперь отправлять команды (которые мы рассмотрим ниже).

Если на следующих шагах вы не сможете отправить команды на камеру, вернитесь назад и повторите этот шаг. Код для связки GoPro с Arduino с использованием его PIN-кода:

#include #include #include int status = WL_IDLE_STATUS; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ENTER YOUR WIFI NAME AND PASSWORD HERE //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! char ssid[] = «XXXXXXXXXXXX»; // your network SSID (name) char pass[] = «XXXXXXXXXXXX»; // your network password (use for WPA, or use as key for WEP) WiFiClient client; const char* host = «10.5.5.9»; const int httpPort = 80; void setup(){ //Initialize serial and wait for port to open: Serial.begin(115200); // check for the presence of the wifi module: if (WiFi.status() == WL_NO_SHIELD) { Serial.println(«WiFi not present»); // don't continue: while (true); } // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print(«Attempting to connect to SSID: «); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 8 seconds for connection: delay(8000); } Serial.println(«Connected to wifi»); printWifiStatus(); // START PIN StartPin(); delay(10000); // FINISH PIN FinishPin(); } void loop(){ //Nothing to do here! delay(1000); } void StartPin(){ Serial.print(«connecting to «); Serial.println(host); if (!client.connect(«10.5.5.9», httpPort)) { Serial.println(«connection failed»); return; } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ENTER YOUR PIN HERE WHERE IT SAYS XXXX //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! String StartUrl = «/gpPair?c=start&pin;=XXXX&mode;=0»; Serial.print(«Requesting URL: «); Serial.println(StartUrl); client.print(String(«GET «) + StartUrl + » HTTP/1.1
» + «Host: » + host + »
» + «Connection: close

«); Serial.println(«Started»); } void FinishPin(){ Serial.print(«connecting to «); Serial.println(host); if (!client.connect(«10.5.5.9», httpPort)) { Serial.println(«connection failed»); return; } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ENTER YOUR PIN HERE WHERE IT SAYS XXXX //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! String StopUrl = «10.5.5.9/gpPair?c=finish&pin;=XXXX&mode;=0»; Serial.print(«Requesting URL: «); Serial.println(StopUrl); client.print(String(«GET «) + StopUrl + » HTTP/1.1
» + «Host: » + host + »
» + «Connection: close

«); Serial.println(«Finished»); } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print(«SSID: «); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print(«IP Address: «); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print(«signal strength (RSSI):»); Serial.print(rssi); Serial.println(» dBm»); }

Шаг 5. Подключение Arduino к GoPro Hero Session

GoPro Session не содержит ПИН-код. Однако у неё есть свои особенности, которые делают подключение к ней действительно раздражающим. Как вы могли заметить, как только вы закончите запись, или, если на то пошло, как только вы закончите делать что-либо с камерой, она выключится и перейдет в спящий режим.

Прежде чем вы сможете отправить GoPro Hero любую команду, вам нужно ее «разбудить». Самый простой способ сделать это — вручную нажать кнопку меню на задней панели камеры и отправить команды в течение нескольких секунд, в которых она «бодрствует». Однако это раздражает и не особенно практично.

Лучший способ разбудить GoPro — это использовать WOL-пакет или «волшебный пакет». Этот аббревиатура означает Wake-on-Lan и является протоколом для дистанционного пробуждения компьютера из спящего режима.

Это требует отправки байтов с использованием протокола UDP от Arduino к GoPro, чтобы разбудить её. Это немного раздражает, потому что это другой протокол, чем тот, каким вы отправляете все остальные команды управления.

Код также менее симпатичный, и с ним немного сложнее справиться, если вы новичок в программировании.

Тем не менее, когда он работает, он действительно работает как магия. Никогда не перестает удивлять, когда камера просыпается, отправив ей команду от Arduino.

Команда WOL (функция CameraInitiate() в коде) должна быть отправлена ​​перед большинством других команд и обычно должна сопровождаться задержкой в ​​1-2 секунды. По сути, вам нужно отправить её в любое время, когда вам может понадобиться разбудить камеру. И после того, как вы отправите команду, вам нужно сделать паузу на мгновение, чтобы камера действительно проснулась.

В приведенном ниже примере функция WOL вызывается в настройке, поэтому она будет только будить вашу камеру при первом запуске. Не забудьте ввести учетные данные Wi-Fi GoPro и MAC-адрес в код.

Сам код для GoPro Session:

Источник: https://ArduinoPlus.ru/kontroliruem-gopro-cherez-wifi-s-pomoshhju-arduino/

Сверхдешёвая камера с управлением — своими руками

В качестве преамбулы скажу, что поскольку, подобная статья уже была, я по-началу и не собирался писать о камере на хабр. Камера была сделана, просто ради интереса, тренировки навыков и отработки технологии удалённого управления физическими объектами.

Немного позже использовал эту систему как наглядный пример, сопровождающий обзор, на другом ресурсе (а фактически, в качестве чита что-бы подтянуть голоса). Это был настоящий бета-тест, который выявил кучу недоработок. За это огромное спасибо всем неравнодушным, помогавшим кто советом, а кто и куском кода.

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

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

О том какова стоимость моей поделки: читаем ниже.

Итак, «как корабль назовешь, так он и поплывет», раз написал заголовок про дешевизну — буду соответствовать прозой, так что, детали — потом, а сперва о стоимости.

Пройдём по ценам*

* все цены даны со скидками. О скидках — отдельно, пожже.

Необходимый набор:

  • Arduino Uno (или nano) — 15.29$
  • Сервопривод (рулевая машинка) SG90 2х2.37$ = 4.74$
  • Вебкамера 3.01$

Итого: 23.04$ (примерно 750р, на данный момент)

Дополнительный набор (ленивости + плюшки):

  • Экран от Nokia 5110 — 250р (в комплекте с самой Нокией и блоком питания, куплено пару лет назад, будем считать, что именно для этой цели, реально можно найти уже вдвое дешевле, или вообще на халяву)
  • MegaShield v4 к Arduino — 5.86$
  • Проводки-коннекторы — 2.86$ (40 штук за эту цену, реально использовано 7)
  • Сверхяркий сверхсиний сверхтодиод для подсветки экрана — 5р/шт (лучше 4шт., у меня сделано неправильно)

Итого: примерно 550р

Всего: 1300р

О реализации

Всё делалось с нуля. Повторять то, что уже было — я не стал, во-первых из соображений тренировки, а во-вторых Ethernet-модуля у меня на тот момент не было, я решил что это всё слишком сложно (там был завязан MySQL) и это решение мне однозначно не подойдёт.

О задачах

Задачи я себе обозначил следующие:

  • Видеть картинку/видео
  • Иметь возможность управлять камерой
  • Иметь возможность управлять размером и качеством видео или картинки, причём не «уже на стороне клиента», а «ещё на стороне сервера, по команде клиента». Такая необходимость возникла из-за того что мне не везде доступен «большой и широкий интырнет»
  • Обеспечивать приемлемую «реалтаймовость»
  • Иметь задел на будущее — управление нагрузкой 220В и т.д. Собственно ради этого всё и затевалось, т.к. готовые решения либо жутко дороги, либо такой возможности не предоставляют.
Читайте также:  Секундомер ардуино: делаем своими руками на основе uno

О проблемах В ходе реализации возникли вопросы вот такого плана:

  • Видео либо грузит процессор в случает показа на несколько пользователей, либо даёт задержку 5-10, т.е. не обеспечивает «реалтаймовость», из-за чего нельзя сразу определить адекватность и вообще работоспособность управления
  • Использование сервиса трансляций, хотя и сильно разгружает сервер в случае большого онлайна, не обеспечивает необходимую надёжность, и, опять же, даёт задержку
  • Специальный сервер для трансляции видеопотока требует определённых навыков, которых у меня пока что нет
  • Использование отображения путём смены картинок не обеспечивает высокий fps, а также постоянно обращается к жёсткому диску, что, при большом количестве пользователей, может вызывать лаги картинки не из-за загрузки процессора, а именно из-за обращения к диску

О решениях

  • Решено использовать в качестве отображения — картинки
  • Для исключения жёсткого диска из процесса выдачи картинок установлен RamDisk, на который дважды в секунду «ложится» изображение с вебкамеры
  • Для выдачи картинки решено использовать php и gdlib
  • Обновление картинки инициируется клиентом посредством javascript и ajax, и происходит без обновления самой странички

Довольно лирики!

Как выглядит

Выглядит всё более чем скромно Работает примерно так:Ардуина, если кто не виделМегашилд с проводками«Сэндвич» в профиль«Сэндвич» анфасLCDшкаОна же вид сзади (пины и кондёр)В сбореВ сборе 2Колхоз — система проводков и верёвочек (крепление камеры)

Куда же без него

Как устроено аппаратно

Вебкамера подлючена по USB к компьютеру. Arduino тоже подключена к компьютеру по USB.

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

Как работает программно

На стороне клиента чистый веб-интерфейс, без всяких плагинов и примочек. Только html, css, и javascript (+ajax).

На стороне сервера

  • Сам сервер — Apache
  • Обработчик скриптов — php
  • Приём картинок с камеры — любая самая простая доступная, бесплатная или самопальная программа для сохранения картинок с вебкамеры
  • Хранение картинки — RamDisk, утилита для создания дискового раздела в оперативной памяти (русскоязычная версия RAMDisk «Enterprise» бесплатна для локализованных систем)
  • Чтобы не прописывать в php прямых локальных путей, папка с картинкой смонтирована в www папку с помощью juction (бесплатная утилита Марка Руссиновича)
  • Передача управления из интернета к Arduino реализована с помощью программы-прокси, следующим образом: php скрипт создаёт UDP сокет и отправляет датаграмму на определённый порт, далее программа-прокси слушает этот этот порт и принимает приходящие на него сообщения и отправляет их на COM-порт Arduino (можно даже без обработки). Выбор UDP вызван исключительно для упрощения системы, UDP не требует никаких подтверждений и проверок о доставке-отправке ни со стороны клиента, ни со стороны сервера.

На стороне Arduino

  • Сама (почему «сама»? потому что «плата») Arduino
  • Скетч внутри неё — стандартные примеры из штатного набора arduino-0022 servo и serial + найденная на просторах интернета библиотека для дисплея, доработанная до приемлемого вида (в плане кириллицы и латиницы одновременно)
  • На данный момент плюсом стоит мегашилд, чисто из-за удобства и культурного вида — в этом варианте я не спаял ни одного проводка (за исключением платы к дисплею)

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

Будьте внимательны к мелочам

Хочу отметить проблемы с программной частью которые случались из-за собственной невнимательности/неосведомлённости/ненаблюдательности:

  • Первое с чем я серьёзно мучался: Arduino принимает из отправленной на её виртуальный COM-порт строки отдельно первый байт и отдельно всё остальное. Какие изощрения я только не пробовал — и с массивами и с кучей проверок… Хоть ты убейся. Решение проблемы? Пришло неожиданно и внезапно, в моментк огда я об этом и не думал: Sleep 2 после чтения каждого байта. ВСЁ!
  • Вторая проблема — серьёзная нагрузка на сервер, казалось бы, из ничего, возникла потому, что обновление картинки было сделано по таймеру, не дожидаясь собственно факта загрузки картинки (или ошибки загрузки). Таком образом отсылалась куча «лишних» запросов.
  • Третье: FireFox оказался самым правильным и капризным браузером, и заставил меня учиться писать валидный код. Так например, событие OnClick по элементу Option работать не должно. А оно работет, везде кроме огнелиса.
  • Четвёртая, совершенно не явная и редко всплывающая: периодически картинка «ломалась». Как выяснилось, это происходило в момент когда файл был занят при записи. Т.е. проверка file_exists() проходила, а файл оставался залоченным. Не помогла и проверка is_writable(). Пришлось организовывать цикл по наличию ошибки и внутри него отрабатывать чтение файла «до победного конца».

Оставшиеся недоработки

Есть и такие.

  • Во-первых, это описанные в каментах «левые» символы иногда появляющиеся в конце сообщения на экране. На самом деле это команды управления. Уши этого бага растут из того что если активно спамить или жать кнопки, буфер ком-порта не успевает полностью прочитаться Ардуиной и последующие сообщения валятся в конец буфера. Решение есть, но пока не сделано.
  • Во-вторых, это периодическое падение UDP-сокета в программе прокси при большом онлайне. В чём причина — не знаю. Проявляется не сразу. Умирает и не «откисает». Помогает закрытие сокета и бинд по-новой. Возможно, виноват кривой видовский winsock.ocx. Переписывать это дело на API в бейсике, как-то лень. Пока одним из «топорных» решений вижу сброс и ребинд сокета по таймеру, каждые, скажем, полчаса.

О скидках

Общеизвестно, что в Китае — дешевле. Главное знать места, где именно дешевле, и как добыть дополнительную скидку. Тут смысла писать нет — слишком большой объём текста с картинками, к тому же известный большинству.

Поэтому дабы не провоцировать ярых противников борьбы со спамом и прочим «реферальством», отмечу необходимый минимум — это скидка 15% на BiC, складывающаяся из одноразового купона на 10% и скидки за первую покупку 5% при вводе рекомендателя + хинт, как использовать эту систему неоднократно.

Все заинтересовавшиеся, могут ознакомиться с полной информацией по ссылке на страничке с, собственно, самой камерой.

Ссылки

Камера, работающий экземпляр, для тех кто ещё не видел и не наигрался
Топик, в котором ссылку на камеру слили на хабр раньше времени
RAMDisk
juction
Исходники (упрощённые, во избежание) клиентской части, серверной (php) и программы web-arduino-прокси (VB 6.0)

Apache, php, либо какие-то комбинированые сборки и т.д. — на свой вкус.

Источник: https://habr.com/post/135912/

Модуль видеокамеры и 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:

Читайте также:  Esp8266 lib h: скачать и установить библиотеку для проектов

// 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

Arduino GoPro Wifi Control

It is possible to receive status updates from the GoPro using this link:
http://10.5.5.

9/gp/gpControl/statusWhen this link is called, it provides a JSON object which can be parsed using this Camera Status guide.

The easiest way to see it is to connect to your GoPro's wifi network with your computer, and load the above link using a web browser.It will return something which looks like:

{«status»{«1″:1,»2″:2,»3″:0,»4″:0,»6″:0,»8″:0,»9″:0,»10″:0,»13″:0,»14″:0,»15″:0,»16″:0,»17″:1,»19″:0,»20″:0,»21″:0,»22″:0,»23″:0,»24″:0,»26″:0,»27″:0,»28″:82,»29″:»»,»30″:»»,»31″:0,»32″:0,»33″:0,»34″:2796,»35″:1917,»36″:0,»37″:1,»38″:0,»39″:1,»40″:»%12%05%13%0C%04%0E»,»41″:0,»42″:0,»43″:0,»44″:0,»45″:0,»46″:1,»47″:1,»48″:1,»49″:0,»54″:15476384,»55″:1,»56″:0,»57″:3927,»58″:0,»59″:0,»60″:500,»61″:2,»62″:0,»63″:0,»64″:0,»69″:1,»71″:12,»72″:19,»73″:20,»74″:0}, «settings»:{«1″:0,»2″:1,»3″:8,»4″:0,»5″:0,»6″:1,»7″:1,»8″:1,»9″:0,»10″:0,»11″:0,»12″:0,»13″:1,»14″:0,»15″:4,»16″:0,»17″:4,»18″:1,»19″:0,»20″:0,»21″:1,»22″:0,»23″:0,»24″:0,»25″:0,»26″:4,»27″:0,»28″:4,»29″:5,»30″:0,»31″:0,»32″:3601,»33″:0,»34″:0,»35″:0,»36″:0,»37″:0,»38″:0,»39″:4,»40″:0,»41″:13,»42″:8,»43″:0,»44″:8,»45″:8,»46″:0,»47″:0,»48″:0,»52″:1,»54″:1,»57″:0,»58″:1,»59″:6,»60″:8,»61″:1,»62″:2500000,»63″:7,»64″:4,»65″:0,»66″:0,»67″:0,»68″:0,»69″:1,»70″:0,»71″:0,»73″:0,»74″:0,»75″:3,»76″:3,»78″:1,»84″:0,»85″:0,»86″:1,»87″:40,»89″:12,»91″:0,»92″:12,»95″:1,»96»:0}}

To be entirely honest, every single time I tried to make this work with my Arduino it would somehow crash my GoPro. Since I didn't really need this functionality for the larger project that I was working on, I stopped spinning my wheels on this part.

However, thanks to nes3dprinting, here is some code that works with the ESP8266 board:

// Code by https://www.instructables.com/member/nes3dprinting/

// This is for an ESP8266, not the MKR1000
// Made this for a GoPro Hero+. Should work for Hero4- Latest(Hero7)
//https://github.com/KonradIT/goprowifihack/blob/master/HERO/CameraStatus.md

Читайте также:  Амперметр arduino: пример реализации устройства

#include ESP8266WiFi.h // ArduinoJson Version 5.13
#include ArduinoJson.h #include ESP8266HTTPClient.h

//########################## Enter GoPro WiFi Details Here #############################
const char* ssid = «GoProHero+»;
const char* pass = «GoProHero+»;
//######################################################################################

const char* host = «10.5.5.9»;
const int httpPort = 80;

void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid,pass);
}
void loop() { if (WiFi.status() == WL_CONNECTED) { // Prints the Current Mode of the Camera: Video-0, Photo-1, MultiShot-2 // https://github.com/KonradIT/goprowifihack/blob/master/HERO/CameraStatus.md // Pick desired status from function below GetStatus(); }
}

void GetStatus() { //Serial.println(«Getting Status Updates»); HTTPClient http; //Object of class HTTPClient http.begin(«http://10.5.5.9/gp/gpControl/status»); int httpCode = http.GET(); //Serial.print(«httpCode: «); //Serial.println(httpCode); //Check the returning code if (httpCode > 0) { // Parsing — Created Using ArduinoJson Assistant // https://arduinojson.

org/v5/assistant/ const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(55) + JSON_OBJECT_SIZE(64) + 730; DynamicJsonBuffer jsonBuffer(bufferSize); String str = http.getString(); //Serial.println(str); JsonObject& root = jsonBuffer.

parseObject(str); JsonObject& status = root[«status»]; int status_1 = status[«1»]; // 1 int status_2 = status[«2»]; // 4 int status_3 = status[«3»]; // 0 int status_4 = status[«4»]; // 0 int status_6 = status[«6»]; // 0 int status_8 = status[«8»]; // 0 int status_9 = status[«9»]; // 0 int status_10 = status[«10»]; // 0 int status_11 = status[«11»]; // 0 int status_13 = status[«13»]; // 0 int status_14 = status[«14»]; // 0 int status_15 = status[«15»]; // 0 int status_16 = status[«16»]; // 0 int status_17 = status[«17»]; // 1 int status_19 = status[«19»]; // 0 int status_20 = status[«20»]; // 0 int status_21 = status[«21»]; // 0 int status_22 = status[«22»]; // 0 int status_23 = status[«23»]; // 0 int status_24 = status[«24»]; // 0 int status_26 = status[«26»]; // 0 int status_27 = status[«27»]; // 0 int status_28 = status[«28»]; // 0 const char* status_29 = status[«29»]; // «» const char* status_30 = status[«30»]; // «GoProHero+» int status_31 = status[«31»]; // 0 int status_32 = status[«32»]; // 0 int status_33 = status[«33»]; // 0 int status_34 = status[«34»]; // 4431 int status_35 = status[«35»]; // 4860 int status_36 = status[«36»]; // 0 int status_37 = status[«37»]; // 0 int status_38 = status[«38»]; // 0 int status_39 = status[«39»]; // 1 const char* status_40 = status[«40»]; // «%12%0B%0C%17%1E%08» int status_41 = status[«41»]; // 0 int status_42 = status[«42»]; // 0 int status_43 = status[«43»]; // 1 int status_44 = status[«44»]; // 0 int status_45 = status[«45»]; // 0 int status_46 = status[«46»]; // 0 int status_47 = status[«47»]; // 0 int status_48 = status[«48»]; // 0 int status_49 = status[«49»]; // 0 long status_54 = status[«54»]; // 15899787264 int status_55 = status[«55»]; // 1 int status_56 = status[«56»]; // 4 int status_57 = status[«57»]; // 0 int status_58 = status[«58»]; // 0 int status_59 = status[«59»]; // 0 int status_60 = status[«60»]; // 500 int status_61 = status[«61»]; // 2 int status_62 = status[«62»]; // 0 int status_63 = status[«63»]; // 0 int status_64 = status[«64»]; // 2215 JsonObject& settings = root[«settings»]; int settings_1 = settings[«1»]; // 0 int settings_2 = settings[«2»]; // 11 int settings_3 = settings[«3»]; // 5 int settings_4 = settings[«4»]; // 0 int settings_5 = settings[«5»]; // 0 int settings_6 = settings[«6»]; // 1 int settings_7 = settings[«7»]; // 0 int settings_8 = settings[«8»]; // 0 int settings_9 = settings[«9»]; // 0 int settings_10 = settings[«10»]; // 0 int settings_11 = settings[«11»]; // 0 int settings_12 = settings[«12»]; // 0 int settings_13 = settings[«13»]; // 0 int settings_14 = settings[«14»]; // 4 int settings_15 = settings[«15»]; // 0 int settings_16 = settings[«16»]; // 0 int settings_17 = settings[«17»]; // 0 int settings_18 = settings[«18»]; // 0 int settings_19 = settings[«19»]; // 0 int settings_20 = settings[«20»]; // 0 int settings_21 = settings[«21»]; // 0 int settings_22 = settings[«22»]; // 0 int settings_23 = settings[«23»]; // 0 int settings_24 = settings[«24»]; // 0 int settings_25 = settings[«25»]; // 0 int settings_26 = settings[«26»]; // 0 int settings_27 = settings[«27»]; // 0 int settings_28 = settings[«28»]; // 0 int settings_29 = settings[«29»]; // 3 int settings_30 = settings[«30»]; // 0 int settings_31 = settings[«31»]; // 0 int settings_32 = settings[«32»]; // 10 int settings_33 = settings[«33»]; // 0 int settings_34 = settings[«34»]; // 0 int settings_35 = settings[«35»]; // 0 int settings_36 = settings[«36»]; // 0 int settings_37 = settings[«37»]; // 0 int settings_38 = settings[«38»]; // 0 int settings_39 = settings[«39»]; // 0 int settings_49 = settings[«49»]; // 100 int settings_50 = settings[«50»]; // 0 int settings_51 = settings[«51»]; // 2 int settings_52 = settings[«52»]; // 1 int settings_53 = settings[«53»]; // 1 int settings_54 = settings[«54»]; // 0 int settings_55 = settings[«55»]; // 3 int settings_56 = settings[«56»]; // 0 int settings_57 = settings[«57»]; // 0 int settings_58 = settings[«58»]; // 0 int settings_59 = settings[«59»]; // 0 int settings_60 = settings[«60»]; // 8 int settings_61 = settings[«61»]; // 1 long settings_62 = settings[«62»]; // 700000 int settings_63 = settings[«63»]; // 1 int settings_64 = settings[«64»]; // 2 int settings_68 = settings[«68»]; // 0 int settings_69 = settings[«69»]; // 0 int settings_70 = settings[«70»]; // 0 int settings_72 = settings[«72»]; // 0 int settings_73 = settings[«73»]; // 0 int settings_74 = settings[«74»]; // 0 int settings_75 = settings[«75»]; // 0 int settings_76 = settings[«76»]; // 0 int settings_77 = settings[«77»]; // 0

//########################### Set Desired State to Update Here ########################################## Serial.print(«The Current State is: «); Serial.println(status_43);
//###################################################################################################### } else { Serial.println(«No Response From Camera»); }
}

Источник: https://www.instructables.com/id/Arduino-GoPro-Wifi-Control/

Автомобиль с видеокамерой. Управление через WiFi

Это небольшой рассказ о том, как построить робота в виде игрушечного автомобильчика с видео камерой, которым можно управлять с помощью компьютера или смартфона на ОС Android через WiFi. Устройство не имеет никакой автономности в смысле своего поведения (типа распознавания чего-либо), управление — только от человека, поэтому «робот» — это не совсем подходящее слово в названии.

Началось все с того, что идея управления игрушечными устройствами от первого лица (т.н. FPV) мне показалась чрезвычайно интересной с точки зрения собственно процесса. Ведь мы можем таким образом реализовать свое присутствие, не в виртуальном мире, а в реальном.
Проще и быстрее всего применить эту идею на игрушечных или модельных автомобилях.

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

 
Начав изучение вариантов, как можно осуществить эту идею, я нашел очень подробное описание подобного проекта здесь. A его автор с радостью помог мне разобраться в проблемах, возникших при создании робота.
Так я впервые и узнал что такое …duino. Так как это был уже готовый вариант микроконтроллера, где не нужно было паять обвязку к нему, я выбрал именно его.

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

Для реализации данного проекта понадобится:

  • Микроконтроллер Arduino (любой: nano, uno, mega)
  • Аккумулятор 9,6вольт
  • Китайская машинка на радиоуправлении
  • Роутер dir320 (или любой другой поддерживающий OPEN-WRT прошивку)
  • Вебкамера Logitech c310 или любая другая с UVC потоком

Крупноблочная схема реализации проекта на базе WiFi роутера 

Программ пять: на PC, на Android, на роутере (сервер управления и видеопоток), и в микропроцессоре.

Схема работы: соединяем настольный компьютер (ноутбук, далее — PC) с роутером по WiFi. На роутере при его включении автоматически загружаются 2е программы:
1) сервер. Эта программа открывает сокет (соединение) на определенном порту и ждет, когда по этому порту с ней соединится клиент (любая программа, которая обратится в этот порт и также, особым образом скажет серверу, что она готова работать через открытый сокет). Далее, после установки соединения, все что придет от клиента, будет перенаправлено по определенному пути, для нас это COM-порт, на этом порту подключен микропроцессор. И наоборот, все что придет со стороны COM-порта, будет переслано клиенту.
2) программа обработки видео, захватывает его с usb камеры и шлет на определенный порт. Для его просмотра нужно всего лишь иметь соединение с роутером на этом порту.
После того, как между компьютером и роутером установлено WiFi-соединение, запускаем на PC программу для управления роботом (тот самый клиент), эта программа соединяется с программой-сервером на роутере. Эта же или другая программа транслирует видео с WiFi роутера.
Далее, пользователь может управлять автомобильчиком и нажимает, например, кнопку «вперед». Программа на PC, отсылает команду «вперед» прямо на роутер, на его IP, но на определенный порт. На роутере, эта команда поступает в программу-сервер, т.к. выслана она на его порт, и в рамках открытого для этого сокета. Программа-сервер, ничего не делая с этой командой, просто отправляет её в COM-порт. Таким образом, команда «вперед» оказывается в микропроцессоре, который в ответ на нее, дает сигнал «вперед» на один из своих выводов. К таким выводам процессора подсоединена схема управления двигателями, т.к. сам микропроцессор управлять ими не может в силу своей маломощности.
Управлять исполнительным устройством через роутер, без микропроцессора не получится, т.к. микропроцессор может формировать сигналы «1» (напряжение >2,5v) или «0» (меньше обозначенного) на любом из десятка-другого своих выводов. У роутера же выводов нет, есть только порты ввода/вывода, типа USB или COM (serial), в которых по 2-3 провода.
Теперь часть практическая. Заранее скажу, что несмотря на кажущиеся сложности, все на самом деле просто, если речь идет о простом копировании этого проекта – ведь все уже сделано и работает. Нужно просто выполнить в точности эту инструкцию.
Изначально микроконтроллером был freeduino maxserial у которого был com port, который был одним из немногих(как я тогда считал) для подключения к uart роутеру, для этого нужно было паять переходник с uarta на com чтобы соединить его с роутером. Его брать я не очень хотел, так как оригиналом есть все-таки Arduino, да и Freeduino в Украине нет.

Как я выяснил потом, все было это просто излишнее нагромождение схемы. Обойтись можно всего 1 проводком который будет идти от TX роутера(на рисунке) к RX (0 пин) микроконтроллера.

Непонятно почему но на фридуине оказалось для нормального подключения нужно tx на tx. Скорее всего просто неверно нанесено обозначение. (тут 0 пин tx) По этому лучше брать оригинальный Arduino.
Машинку я купил хорошую, хоть и китайскую 

Машинка оказалась очень мощная, 5 кг на ровной поверхности тянула очень уверено. Также у нее в комплекте шел аккумулятор на 6 вольт. Что касается электроники, то в машинке уже есть готовый драйвер двигателей, на который можно подать управляющие слаботочные выходы с микроконтроллера (если бы с машинкой не повезло — драйвер моторов можно было взять тоже от arduino )

Роутер требует прошивку openwrt и список пакетов указанных на рисунке. 

Роутер можно настроить как точку доступа, которой могут подключится любые устройства, имеющие WiFi. И, даже если не будет программного обеспечения для управлении машинкой – использовать ее как беспроводную камеру видеонаблюдения.

Камера с310 просто подключается к порту usb на роутер и не требует пайки, требует небольших настроек в роутере. Проект имеет 2 цепи питания, 1 цепь питается от 9,6 вольт — роутер и микроконтроллер, 2 цепь питается от 6 вольт — привод и рулевое машинки. Можно обойтись всего 1 источником питания в 9,6 вольт, но более емкостным. Роутер потребляет 2А, микроконтроллер потребляет почти незаметно, машинка 4А.
Программа микроконтроллера обрабатывает сообщения, которые приходят с последовательного порта роутера, обработка происходит побайтово через portb arduino, например если пришло в роутер 2, то, переведя в двоичную систему получаем 00000010 – что соответствует 2 пину на portb. Такое решение позволяет управлять одновременно несколькими пинами. Вот что получилось в итоге: 

Приложение для андроид: 

Приложение для пк: 

Данный проект еще не закончен и продолжает совершенствоваться.

В планах использовать arduino mega, роутер mr3020, вебакамеру оставить как есть(возможно добавить сферическую линзу для большего обзора), задействовать шим для плавного и точного управления, использовать сервопривод для поворотов, добавить дальномер. Добавить видео на Android. 

Собирайте arduino своими руками — полный каталог плат

Источник: https://arduino-kit.com.ua/avtomobil-s-videokameroy-arduino.html

Ссылка на основную публикацию