Простейшая WiFi машинка с камерой своими руками! | Пикабу

Простейшая WiFi машинка с камерой своими руками! | Пикабу Вертолеты
Содержание
  1. С чего все начиналось
  2. Введение
  3. Вводная информация про p2p режим
  4. Wi-fi машинка на nodemcu, своими руками
  5. Wi-fi соединение
  6. Апгрейды, улучшения и т.п.
  7. Аппаратная часть
  8. Батарея, точнее уровень ее заряда
  9. Возможные усовершенствования в будущем
  10. Вращение камеры
  11. Дополнительные модули
  12. Измерения и тесты
  13. Иллюстрации различных типов коннекта
  14. Инвайты
  15. Итак, подопытный кролик
  16. Как добавить последовательный порт к роутеру
  17. Какой же танк без пушки
  18. Камера
  19. Клёвый снегоуборщик под управлением рцборды
  20. Наброски проекта
  21. Надо заставить это двигаться
  22. Настройка p2p режима, на борту стоит wi-fi
  23. Настройка p2p режима, на борту стоит yota
  24. Настройка виртурилки
  25. Настройка сервера рцборды
  26. Некоторые нюансы при связи по 4g
  27. Немного про задержку
  28. Обнаружение препятствий
  29. Обновление прошивки
  30. Питание
  31. Питание и проводка
  32. Подключаем камеру
  33. Предполагаемая конструкция и особенности
  34. Проверка подключения виртурилки к сети
  35. Прошивка для данного хака
  36. Разработка интерфейса для пк
  37. Сборка
  38. Сборка машинки
  39. Сигнал
  40. Создание сервера машинки
  41. Ссылки
  42. Схема с микроконтроллером
  43. Схемы
  44. Результаты и выводы

С чего все начиналось

Давным-давно была у меня мечта сделать робота на гусеничном шасси, которым можно было бы удаленно рулить. Основной проблемой было отсутствие непосредственно гусеничного шасси. В конце концов я уже решился купить радиоуправляемый танк на разборку, но мне повезло, в магазине среди хлама нашелся танк Snow Leopard (Pershing) — USA M26 с погоревшей электроникой, но полностью исправной механической частью. Это было ровно то, что нужно.

Вдогонку к шасси были докуплены два регулятора напряжения для коллекторных двигателей, штатив для камеры из двух сервоприводов, веб-камера с аппаратной поддержкой mjpeg и внешняя WiFi карточка TP-LINK TL-WN7200ND. Чуть позже к списку устройств добавились портативная колонка, USB звуковуха Creative SoundBlaster Play и простенький микрофон, а также пара USB хабов, чтоб все это подключить к модулю управления, которым стал Raspberry Pi.

Смотрите про коптеры:  Самолёт, HD FPV, линк 600 км по 4G / Блог компании Virt2real / Хабр

Сразу оговорюсь, что фотки делались, когда танк был почти готов, а не в процессе изготовления.

Введение

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

Некоторое время назад я нашел маршрутизатор Linksys WRT54GL. Он очень удобен для хака и модификации, т.к. он работает под управлением Linux. Для данного маршрутизатора была написана куча альтернативных прошивок. В этом проекте используется настраиваемая прошивка Linux Open-WRT.

Кроме больших возможностей модификации программного обеспечения этого маршрутизатора, есть куча возможных аппаратных модификаций и хаков. То есть в моем распоряжении был дешевый и взламываемый маршрутизатор со встроенным Linux – я знал, что делать что-то с ним хорошо и удобно.  Таким образом родилась идея Wi-Fi машинки.

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

Вводная информация про p2p режим

Так как для канала управления и для канала видео используется UDP — так и хотелось сделать полноценный P2P (Peer-to-peer) линк, чтоб не гонять видео от борта до сервера и обратно до клиента. Ну, раз хотелось — взял и сделал 🙂 Фактически, получился простой и лёгкий аналог адобовского RTMFP (не путать с RTMP). Только вот передачу звука добавить никак руки не дойдут, так что рцборда пока немая и глухая.

С UDP какая основная проблема — преодоление NAT. Так как на одном из концов линка (на передающей стороне или на приёмной) обязательно есть NAT — просто указать адрес и порт сервера (или клиента) не получится — NAT помешает. В виндовом Virt2real Player есть возможность с помощью UPnP сделать проброс порта, но это не совсем то чего я хотел.

А то что хотел — получилось только после вдумчивого курения технологии UDP Hole Punching. В итоге всё получилось как надо — неважно, какой роутер, неважно где клиент или сервер. Главное чтоб был выход в Интернет. Хотя вру, есть один единственный тип NAT, который пробить пока не удалось. Всё время забываю как он правильно называется, вроде бы симметричный NAT.

И да, обычные TURN и STUN серверы в рцборде не используются, только своя реализация. Как я обычно говорю: хочешь изучить технологию — сделай по своему, а потом сравни с общепринятыми решениями. Любители велосипедов меня поймут. Однако часто оказывается что велосипед не так уж плох и свои задачи выполняет лучше чем общепринятые решения.

Это так, лёгкий оффтоп был. Продолжаем про NAT. Поддержка P2P есть пока только в виндовом приложении Virt2real Player, в андроидное и айфонно-айпадное ещё не добавлял. Проверял работу с коннектом через свисток Yota, через свисток Beeline 4G, через точку доступа на смартфоне, который в инет выходил тоже через Beeline 4G.

Во всех этих случаях всё работает, но заметил что идеально только через Yota. Через билайн (в любом из опробованных видах) тоже работает, но коннект дольше времени занимает. Почему так происходит — пока не разбирался. Из печального — пока не удалось заставить работать линк (и команд, и видео) когда и клиент и сервер подключены через 4G свистки. Возможно, тут как раз симметричный NAT и подкрался.

Wi-fi машинка на nodemcu, своими руками

Wi-fi соединение

Для Wi-Fi сети мы использовали  Linksys WRT54GL v1.1. Этот роутер работает как сервер и взаимодействует с управляющим ноутбуком. Причиной использования данного роутера является то, что он очень легок для хака. Это роутер с открытыми исходниками, что позволяет работать со сторонними производителями и делать множественные хаки. Мы сделали на роутере последовательный порт, так что он может общаться с микроконтроллером, присутствующим на машинке.

Апгрейды, улучшения и т.п.

Далее шел долгий процесс написания серверной и клиентской части на Python’е c использованием библиотеки

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

Аппаратная часть

Машинка

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

В интернете можно найти б/у радиоуправляемые транспортные средства без пульта за 200-300 руб. Я купил несколько машинок для того, чтобы вытащить из них детали. Транспорт размера 1:10 или больше вполне подойдет, и вероятно вы не захотите меньше. Я купил эту машинку за 150 руб.

Я разобрал около 20 радиоуправляемых автомобилей. Почти в каждом из них используется чип Realtek RX2/TX2 или его полные аналоги с аналогичной цоколевкой. Документацию на них можно найти в интернете или по ссылкам. Это означает, что машинкой очень легко управлять при помощи штатной электроники без добавления собственных схем.

Маршрутизатор

Я модифицировал свой WRT54GL так, что он имеет 2 последовательных порта и SD карту на 1Гб (работает как жесткий диск на 1 Гб). В этом проекте SD карта не используется, но используется один из последовательных портов. У моего маршрутизатора есть два последовательных порта: консольный порт и TTS/1, который мы и будем использовать.

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

Выбор микроконтроллера

Я оценил три различных микроконтроллера для этого проекта. Ниже показано краткое изложение оценки.

Микроконтроллер

PIC16F628A

Arduino (ATmega168)
Freeduino MaxSerial

AVR Butterfly (ATmega169)

За

Цена.
Уровень программного управления.

Очень прост в программировании (C со множеством встроенных библиотек).
Интегрированный последовательный интерфейс.
Готовый комплект разработчика, практически нет необходимости в пайке.

Легче для программирования, чем PIC.
Интегрированный последовательный интерфейс.
Пайка необходима редко.

Против

Труден для  программирования (ассемблер).
Необходимо соединять цепи вручную.
Необходимы дополнительные аппаратные средства(MAX232A).
Требуется программатор.

Цена.

Ошибки загрузчика (см. ниже).
Интегрированные периферийные устройства имеют странные выходные напряжения.
Цена.

Я выбирал PIC16F628A по нескольким причинам:

  • У меня их было много.
  • Я имею небольшой опыт работы с ними.
  • Я хотел маленькую плату, и плата PIC оказалась самой маленькой из всех 3 вариантов.
  • Я хотел иметь полный контроль над действиями программы, и это вполне возможно при программировании на ассемблере.

Arduino (Freeduino MaxSerial) стал моим вторым выбором, который мне очень понравился простотой сборки и запуска. Также есть хорошая поддержка сообщества, и простота использования.

Первоначально я использовал отладочную плату AVR Butterfly. Она работала хорошо, пока один раз не разрядились батарейки.  В загрузчике AVR Butterfly существует ошибка, которая подробно описана тут.  Она портит код и не позволяет перепрограммировать его другим загрузчиком.

Машинка работала в один день, а на другой нет. Потребовалось некоторое время, чтобы найти проблему и совсем немного времени, чтобы исправить её, поэтому я не стал дальше использовать эту плату в качестве системы управления. Я также обнаружил, что выходное напряжение на выводах может быть непредсказуемыми, так как кроме управления периферийными устройствами, они управляют ЖК-экраном.

Ниже приведён исходный код для PIC и Arduino. Оба были протестированы, так что используйте то, в чем вы лучше разбираетесь и чувствуете себя комфортнее. Arduino (Freeduino MaxSerial) является наиболее оптимальным вариантом для быстрого старта. Я купил его.

Управляющая схема

На самом деле в моей машинке используется две управляющие платы. Так сделано потому, что я сжег управляющие транзисторы на штатной плате машинки. К счастью, я смог отпаять их и RX2 чип (который также сгорел) и сохранить схему управления. Большинство игрушечных радиоуправляемых машинок используют около 6 проводов для управления двигателем.

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

Я сжег транзисторы, подав напряжение питания 16В, вместо штатных 9.6В. Транзисторы рассчитаны на ток 5А, но вероятно я нагрузил их слишком сильно и они живописно задымились. Я взял плату из другой радиоуправляемой машинки и использовал транзисторы оттуда.

Аккумуляторы

Этот проект использует мощные аккумуляторы. Я купил их для радиоуправляемых машинок высокого класса за $ 50 доставка с eBay. Они имеют 3800 мАч и зарядное устройство 1,8А в комплекте. Их можно найти в поиске eBay. Одна батарея заряжается примерно 1.

Я заменил все разъемы на аккумуляторах на стандартные Molex ATX разъемы. Это сделано для того, чтобы использовать дешевые разъёмы которых у меня было много, которые позволяют легко сделать разветвитель для замера тока.  Батареи соединённые последовательно дают около 16В при полной зарядке.

Питание


(7805 1A)

9.2В
(из 12V от 7812)

12VВ
(7812 1A)

12В
(Регулятор LT1083 7.5A)

Микроконтроллер

Камера
Сигнал
Плата управления

Wi-Fi

Драйвер двигателя

Линия 9.6В получена путем установки 4 диодов последовательно с шиной 12В берущейся с 7812. Падение напряжения на диоде около 0.7В. Поставив 4 диода в ряд, мы теряем около 2.8В, и получаем 9В для устройств, которым необходимо меньше 12В. После того как я сжег транзисторы, я решил питать схему более низким напряжением.

7812 рассчитан на 1А, а двигатели потребляют значительно больше. Digikey продает регулятор 7.5A 12В примерно за 14$, и я купил его. Я прикрепил его к радиатору, потому что думал, что он может греться. После некоторого времени работы он даже не нагрелся, поэтому радиатор не требуется.

Вся силовая электроника собрана на макетной плате и находится в корпусе.

Батарея, точнее уровень ее заряда

На всех этапах оставалось непонятным, сколько еще можно кататься, не убив батарейку (Li-Po нельза разряжать ниже чем 3.3в на банку). Я не нашел способа замерить напряжение с помощью GPIO ног Raspberry, поэтому в качестве измерителя поставил Arduino Nano, к которому на будущее сразу подключил LCD экран c I2C адаптером.

Возможные усовершенствования в будущем

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

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

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

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

Датчик температуры:Датчики температуры также могут быть добавлены для измерения температуры в труднодоступных местах. Это зависит от применения робота.

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

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

Вращение камеры

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

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

Вам понадобится микроконтроллер, я использовал Atmel 89C51, с прошивкой. Подключите микроконтроллер к COM порту компьютера, для чего понадобится использовать конвертер уровней сигнала MAX232, как мы делали это ранее с PIC16F628A.Клиент машинки имеет все элементы управления для последовательной связи с микроконтроллером.

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

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

Дополнительные модули

Во вкладке «Дополнительные модули» находится список активных и неактивных модулей рцборды.

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

Измерения и тесты

Максимальная скоростьЧтобы вычислить максимальную скорость я сделал две отметки на расстоянии 3м друг от друга и несколько раз снимал машинку. Камера записывает 30 кадров в секунду, так что возможная ошибка камеры /- 3,3% и /- 1% ошибка расстояния.

Автомобиль проезжает 3м за 0,7 секунды (21 из 30 кадров за 1 секунду).Максимальная скорость: 4,3 м/с = 15.5 км/ч = 9.6 миль/ч

РасстояниеЯ взял маршрутизатор в большое поле. Я смог подключится со своего ноутбука на расстоянии до 500 м (по 1Мбит). Дальше этого расстояния, я уже не смог подключиться. Альтернативные прошивки (OpenWRT) позволяют увеличить выходную мощность.

Скорость передачи данныхУправляющий сигнал: 3.5 Кб/сКамера: 50-190 Кб/сКамера использует большую/меньшую пропускную способность в зависимости от того, сколько света в изображение. Если света много, она будет использовать более высокую пропускную способность.

Измерение энергопотребленияИзмерения энергопотребления проводились до тех пор, пока напряжение на контактах батареи не упало ниже необходимого. Измерения проводились, когда батареи использовались примерно 10 минут, и напряжение было 15.3В.

Камера:

Время
(сек)

Ток
(мА @ 15.3В)

Ток
(мА @ 9.2В)

Мощность
(Вт)

0

39

65

0.6

5

58

96

0.9

8

98

163

1.5

Маршрутизатор:

Время
(сек)

Ток
(мА @ 15.3В)

Ток
(мА @ 12В)

Мощность
(Вт)

0

185

235

2.8

23

263

335

4.0

30

250

319

3.8

Сигнал:

Время
(сек)

Ток
(мА @ 15.3В)

Ток
(мА @ 9.2В)

Мощность
(Вт)

0

40

66

0.6

Машинка:

Состояние

Ток
(мА @ 15.3В)

Ток
(мА @ 12В)

Мощность
(Вт)

Загрузка
0 – 23с

~400

510

6.1

PIC LED, регуляторы напряжения, 2 платы управления
(без маршрутизатора или камеры)

102

130

1.6

После загрузки, без езды

479

611

7.3

Езда – Ускорение

5500

7012

84.1

Езда – Постоянная скорость

4000

5100

61.2

Примечание: измерения при езде не очень точные, потому что трудно смотреть за показаниями мультиметра, держа ноутбук, управляя машинкой и бежать за ней.  Точность значений /- 0,1А.

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

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

Температура/Перегрев

Из приведенных выше измерений мощности видно, что ток на транзисторах составляет [email protected]В во время ускорения. Они рассчитаны на 5А, таким образом, они перегружены и могут перегреваться.Температура транзисторов после 25 минут работы в помещении (много ускорений при остановке и старте, и максимальная скорость достигается редко) была 89°C.

Двигатели также ощутимо нагрелись – до 85°C. При запуске машинки на улице кажется, что к ней нельзя подойти из-за температуры. Наверное, это потому, что на улице максимальная скорость достигается чаще, чем в помещении. Транзисторы рассчитаны на температуру до 150°C, и я думаю, что всё в порядке. Но у меня нет никакой информации о двигателе.

Стоимость проекта

Предмет

Стоимость*

Машинка

6

Плата управления
(из другой машинки)

6

Маршрутизатор

73

Камера

115

Батареи

67

Сигнал

3

Микроконтроллер PIC и обвязка

6

Разное: гайки, болты, винты, корпус, провода, разъемы.

20

Всего:

296

* Цена включает налог с продаж, доставку и округляется до доллара.

Оригинал статьи

Иллюстрации различных типов коннекта

К сожалению, дома у меня Yota еле-еле фурычит, так что полноценно не покатаешься. А вот Билайновский 4G отлично работает, поток 3 мегабита (и входящий, и исходящий) пролазит без проблем.

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

Инвайты

Чтобы было проще передать кому-то параметры для подключения к нашей машинке в режиме P2P, были созданы намётки механизма инвайтов. Что такое инвайты — знают все. Удобная штука. Так что сейчас попробую рассказать как этим пользоваться. В плеере это пока в тестовом, сыром, виде, но вроде как работает.

Итак, открываем виндовый Virt2real Player, щёлкаем правой кнопкой мыши по окну, выбираем «Инвайт» -> «Создать инвайт». Важный нюанс — плеер должен быть настроен на P2P режим, т.е. в настройках сети указаны все вышеописанные параметры для подключения к машинке.

Итак, подопытный кролик


Краулер для дистанционного управления хорош тем что он обладает очень высокой проходимостью.

У краулера полный привод, постоянная блокировка дифференциалов (все колёса крутятся одновременно) и постоянная «пониженная передача». Т.е. он ездит сравнительно медленно, но мощно и проходимо.

Как добавить последовательный порт к роутеру

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

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

Разборка:Удалите гарантийную наклейку! Отвинтите две Wi-Fi антенны. Передняя синяя лицевая панель является отдельной частью корпуса и держится на защелках. Для того, чтобы отделить её, необходимо приложить некоторое усилие.

Пайка разъема JP2:Найдите разъем JP2 на плате роутера. Его распиновка:

Pin 1: 3.3VPin 2: 3.3V
Pin 3: Tx (ttyS1)Pin 4: Tx (ttyS0)
Pin 5: Rx (ttyS1)Pin 6: Rx (ttyS0)
Pin 7: NCPin 8: NC
Pin 9: GNDPin 10: GND

Изменения в схемотехнике:В роутере используются 3.3В/GND в качестве последовательных уровней сигнала. Нам нужно использовать конвертер уровней сигнала, который преобразует 3.3В/GND в /-12В, стандартное для последовательной связи RS232 напряжение.

MAX232:

MAX233:

Пайка:

Какой же танк без пушки

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

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

То есть куда смотрим (по вертикали), туда и стреляем. Для прицеливания на ствол пушки был примотан лазерный светодиод от указки. Чтоб лишний раз не тратить батарею и не светить лазером куда не надо, нужно было сделать пушку отключаемой. Процесс выстрела также не совсем прост.

Надо включить питание двигателя и ждать замыкания контакта, после чего двигатель выключить. В итоге управление выстрелом и питанием сервы и лазера было повешено на ардуину, а сигнал для сервы генерирует Raspberry. Для двигателя пушки также пришлось проводить отдельный силовой провод и включать его постепенно, используя ШИМ, так как иначе прилетает помеха по питанию и Arduino уходит в ребут. Для подачи снарядов, то есть шариков, была использована коробочка от драже TicTac с дыркой в дне.

Наверное, для первого раза хватит. Если статья понравится, буду потихоньку писать детали в следующих постах. И еще немного фоток напоследок, а также свежеснятое видео. Правда, качество получилось не очень, так что у эстетов заранее прошу прощения. ссылка на github

Камера

Одним из основных аспектов этого проекта является то, что машинкой можно управлять без прямой видимости при помощи сетевой камеры Panasonic BL-C1A. Это почти самая дешевая проводная сетевая камера с хорошими отзывами. Программное обеспечение есть только для Windows – это небольшой, но терпимый минус.

Клёвый снегоуборщик под управлением рцборды

Кстати, сам снегоуборщик — разработка пермских ребят

Наброски проекта

Этот рисунок дает краткий ответ на вопрос “КАК ЭТО РАБОТАЕТ?” Управляющий компьютер и роутер(роутер WRT серии) установленный на роботе связаны по TCP/IP. Маршрутизатор получает и отправляет управляющие сигналы и общается с микроконтроллером через последовательную связь.

Этот проект был разработан в несколько этапов:

Создание Wi-Fi сети:- Хак роутера (добавление последовательного порта).- Обновление прошивки.- Тестирование добавленного последовательного порта.- Разработка сервера машинки (написание и установка в роутер).- Разработка графического интерфейса пользователя (GUI).

   Обнаружение препятствий:- Ультразвуковой метод.- ИК-метод.

Реакция на свет.Создание и настройка видеотрансляции.Вращение камеры.Создание источника питания.Объединение модулей.Тестирование расстояния, скорости и мощности.

Надо заставить это двигаться

Надо было как-то это завести. Raspberry был выбран не случайно. Во-первых он позволяет поставить нормальный полноценный линух, а во-вторых имеет кучу GPIO ног, которые в том числе могут генерировать импульсный сигнал для сервоприводов и регуляторов хода. Генерировать такой сигнал можно с помощью утилиты

. После запуска она создает файл /dev/servoblaster, в который можно писать что-то типа 0=150, где 0 — номер канала, а 150 — длина импульса в десятках микросекунд, то есть 150 — это 1.5 миллисекунды (у большинства сервоприводов диапазон значений 700-2300 мс).

Итак, подключаем регуляторы на 7 и 11 GPIO пины и запускаем servoblaster командой:

# servod --min=70 --max=230 --p1pins=7,11

Теперь, если записать в /dev/servoblaster строки 0=230 и 1=230, то танк рванет вперед.

Настройка p2p режима, на борту стоит wi-fi


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

Для включения p2p режима идём веб-панель управления рцборды, раздел «Локальные настройки». Там устанавливаем параметр

role=p2p

Настройка p2p режима, на борту стоит yota

К micro-USB порту Виртурилки на борту машинки подключаем свисток Yota (через переходник USB-OTG, само собой). Те свистки, которые сейчас в продаже у Yota

В остальном всё аналогично предыдущему пункту. Разве что в настройках рцборды в разделе «Дополнительные модули» хорошо бы убрать из активных скриптов модуль statuswifi и наоборот, поместить в активные скрипты модуль statusyota, для того чтоб в плеере видеть параметры сигнала Yota.

Настройка виртурилки

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

Итак, по пунктам:

Настройка сервера рцборды

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

Во вкладке «Общие настройки» можно задать имя устройства (отображается при обнаружении девайса в приложениях), указать надо ли запускать сервер рцборды автоматически при загрузке Виртурилки, задать тип конфигурации.

Некоторые нюансы при связи по 4g

После диких дропов при полёте на самолёте разобрались в чём проблема. Если коннект через 4G — надо параметр mtu устанавливать равным 1322 или меньше. Меньше не надо, ставим mtu=1322 и не паримся. В локальной сети я обычно вообще 16000 ставлю (максимальный размер Jumbo Frames), в локалке это нормально работает, а вот через Интернет уже проблемы будут с прохождением пакетов.

Немного про задержку

Главное требование к дистанционному управлению одно — как можно меньшая задержка от нажатия кнопки или перемещения джойстика до соответствующего изменения отображаемой с борта устройства картинки в видеопотоке. Когда публикуешь что-нибудь на тему удалённого управления обычно первый вопрос — «какая задержка?».

После многочисленных испытаний оказалось что задержки — штука субьективная и на комфортность управления влияет по разному. Само собой, всё зависит от максимальной скорости ездящего девайса. Для летающих девайсов (самолёты/коптеры) минимальность задержки очень важна, а вот при управлении ездящими устройствами — не всегда.

Когда я на очередной выставке Хобби-экспо рассекал по залу на переделанной радиоуправляемой багги, через десять минут руления поймал себя на мысли что задержка (какая бы она ни была) перестаёт ощущаться, начинаешь управлять «на упреждение». На почти половине скорости (а багги моя до 80 км/ч может разгоняться) спокойно гонял по залу, лавируя между павильонами, стульями, людьми.

Так что тут, скорее, важна стабильность задержки, а не её абсолютное значение в миллисекундах. Минимальная достигнутая задержка при коннекте к обычному роутеру через обычный Wi-Fi свисток была где-то в районе 200 мс, а при коннекте через общепризнанный эталон — мощные роутеры фирмы Ubiquity минимальная задержка при уверенном коннекте — около 100 мс.

Когда я управлял довольно скоростной багги в Шеньчжене, сидя дома в Москве, довольно комфортно было рулить, хотя только сетевой пинг от меня до сервера китайского 4G оператора был около 300 мс. Плюс ещё 100 мс наши — итого под полсекунды набегает. Однако отлично покатался 🙂

Обнаружение препятствий

Мы реализовали два разных метода, ультразвуковой и инфракрасный. Оба метода имеют свои плюсы и минусы.

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

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

Два tx rx ультразвуковых динамика похожих на эти с частотой 40кГц, доступны в магазине.

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

Инфракрасный метод обнаружения препятствий:Приемник состоит из интегрального таймера 555 работающего в качестве генератора с частотой около 38 кГц (также работает на частоте от 36кГц до 40кГц), которая должна быть отрегулирована с помощью переменного резистора 10кОм.

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

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

Обновление прошивки

Linksys позволяет обновить прошивку и установить неоригинальную прошивку, что дает нам дополнительные возможности, но после установки неоригинальной прошивки теряется гарантия. Мы использовали графическое расширение X-WRT для OPENWRT white Russianv0.9.

Почему используется неоригинальная прошивка? Ответом на этот вопрос является то, что только неоригинальная прошивка позволяет установить нужный код в память роутера, и, таким образом сделать его пригодным для наших целей. Во-вторых, для использования последовательного порта было необходимо внести некоторые изменения в загрузочный файл, используемый роутером, для чего был использован openwrt-xwrt.

Питание

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

Маршрутизатор12В 1.2A акумулятор
Для IP камеры2 аккумулятора (5В 1.2A)
соединенных параллельно для получения 5В и 2.5A
Схема обнаружения препятствий и поворот камеры9В батарейка типа кроны
Схема управления двигателямиВ моем случае это 9.6В аккумулятор. У вашей машинки может быть другое питание
DC двигателя12В аккумулятор, такой же как и для маршрутизатора
Питание ИК схемы12В аккумулятор маршрутизатора

Питание и проводка

image

В батарейный отсек я запихал самую большую Li-Po батарею, которая туда влезла. Ей оказалась двухбаночная батарейка на 3300 mAh в твердом корпусе, которая обычно используется в модельках машин. Паять мне было лень, поэтому для всей коммутации была использована стандартная макетная плата с шагом 2.54.

Позже появилась вторая на верхней крышке и шлейф, который их соединял. На каждый из двух двигателей у меня был свой регулятор напряжения, который в виде бонуса выдает стабилизированное питание около 5.6 вольт. С одного регулятора был запитан Raspberry и WiFi карта, питание со второго пошло на сервоприводы и USB хаб с периферией.

Подключаем камеру

Кататься взад-вперед было классно, но хотелось делать это хотя бы в соседней комнате, а в идеале вообще через интернет, поэтому надо было наладить видео в реальном времени. На просторах интернета нашелся простенький проект

Предполагаемая конструкция и особенности

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

Этот робот-машинка имеет следующие особенности:- Беспроводное управление при помощи ноутбука по Wi-Fi сети.- GUI разработанный в Visual Basic 6.0, через который можно управлять роботом.- Функция обнаружения препятствий, благодаря которой робот, увидев препятствие, останавливается.

– Передача видео в реальном времени по Wi-Fi  на контролирующий ноутбук или компьютер.- Поворот камеры на 360 градусов- Реакция на свет, что позволяет включать подсветку в темноте.- Встроенный звуковой сигнал.- Возможность увеличения дальности связи с помощью точки доступа.

Проверка подключения виртурилки к сети

  • В процессе загрузки Виртурилки на ней будут загораться светодиоды. При включении питания, если загрузочная флешка успешно прочиталась, загорится зелёный светодиод. Затем, в процессе загрузке ядра загорится синий светодиод. После полной загрузки если подключение к Wi-Fi сети прошло удачно — загорится красный светодиод. А когда запустится рцборда (она прописана в автозапуске) все светодиоды погаснут красный светодиод начнёт моргать).
  • Устанавливаем приложение для управления. Оно называется Virt2real Player и есть для Windows (дистрибутив или zip-архив), для Android, для IOS. Приложение для IOS в аппсторе ещё старой версии, новая проходит аппрув, так что пока ставить его бестолку — управление работать будет коряво.
  • Открываем Проводник (если на компе винда), если Виртурилка успешно подключилась к локальной сети по вайфаю — в разделе «Сеть» должно появиться устройство «RCboard (Virt2real)». В админку можно попасть, нажав правой кнопкой мыши на этом устройстве и выбрав пункт меню «Просмотр веб-страницы устройства»
  • Запускаем Virt2real Player для Windows или для Android, должен обнаружиться сервер RCboard. Обнаружение сервера в приложении под IOS пока не реализовано.

Прошивка для данного хака

В описанном здесь процессе будут проверяться последовательные порты используя X-WRT, дистрибутив Линукс для WRT54GL, имеющий хороший веб-интерфейс. Что бы знать, как установить прошивку на роутер смотрите раздел ‘Обновление прошивки’ ниже. Эти порты должны нормально работать и на других дистрибутивах.

Разработка интерфейса для пк

Компьютерный интерфейс выполнен в Visual Basic 6.0. Он использует TCP/IP связь для передачи управляющих сигналов роутеру. Я использовал не UDP, потому что в нем нет контроля потока данных, а также потому, что TCP является стандартным протоколом для Wi-Fi. Добавлены дополнительные функции последовательной связи для того, чтобы контролировать движение камеры.

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

Сборка

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

Плата микроконтроллера PIC также надежно закреплена болтами на другой стороне. Все провода были умышленно взяты длиннее чем требуется, для их легкого перемещения во время сборки. После сборки лишние куски провода были собраны и связаны. Было очень много проводов, вероятно около 30, которые нужно было провести из/в переднюю и заднюю часть машинки, не считая Ethernet кабеля.

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

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

Сборка машинки

Я попробовал заснять видео процесса сборки моего краулера. Не знаю, насколько там всё понятно, но лишним, думаю, не будет. Вот видеоролик про сборку:

Сигнал

Я добавил забавную возможность сигналить людям. Это довольно просто. Я купил зуммер за 3$ и подключил его к микроконтроллеру через транзистор для увеличения мощности.

Создание сервера машинки

Для работы машинки нам понадобится следующее ПО: VB6 Клиент WiFi робота (работает на Windows), сервер машинки, который работает на роутере под управлением X-WRT и прошивка микроконтроллера.

Установка сервера машинки в роутер:Для начала, роутер должен быть подключен для выполнения этой операции, поэтому первым делом подключитесь к интернету.

Ссылки

Так как текста получилось овер-чем-дофига, основные ссылки повторю.

Прошивка rcboard-0.01.002.zip для Виртурилки

Дистрибутив Virt2real Player для Windows. То же самое, но не установщик а просто архивПод Win8 некорректно проверяет наличие DirectX, так что можно просто архив распаковать. Требуется .Net 4.5 и DirectX.

Описание прошлой версии РЦборды и Virt2real PlayerЕщё описание рцборды, старый протокол

Приложение для Android. Только локальное управление.Приложение для IOS, только локальное управление, нет обнаружения девайсов. Сейчас там старая версия, новая проходит аппрув.

P.S. Эхх, жаль Тачка Бонда не дожила до появления рцборды 🙁

Схема с микроконтроллером

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

Для тестирования, 3.3В идущие от роутера, были преобразованы в 12В и теперь этот сигнал нельзя напрямую подавать на микроконтроллер, необходимо преобразовать его обратно, для чего снова используется max232 и разъем “папа” DB9, как показано на схеме выше.

Микросхема приемника машинки

Компьютер подключается к роутеру, роутер подключается к микроконтроллеру, а микроконтроллер подключается к микросхеме приемника машинки и дает на неё команды.  Разберите машинку и найдите микросхему приемника. Обычно для этого используется микросхема Realtek.

Подключите четыре контакта (вперед, назад, вправо, влево) микроконтроллера к соответствующим выводам этой микросхемы.

Схемы

PIC:

Arduino:

Подключение Arduino:Вперед – Pin 8Назад – Pin 9Влево – Pin 10Вправо – Pin 11Зеленый LED – Pin 7Красный LED – Pin 6Сигнал – Pin 5

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

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

Freeduino MaxSerial использует последовательный вывод  4 – DTR (Data Terminal Ready) для сброса микроконтроллера и разрешения на загрузку нового кода. При нормальной работе с компьютером на этом выводе либо 10 В либо -10В в зависимости от того, подключен ли последовательный порт.

Однако на последовательном порту маршрутизатора этот вывод заземлен и неактивен. Когда маршрутизатор начинает передачу данных через последовательный порт, MaxSerial сбрасывается. Это нам не подходит. Мы подтянем вывод DTR к 9В. Это простое изменение включает режим закрытой программы, то есть микроконтроллер не может быть перепрошит и сброшен по последовательному порту. Если необходимо перепрошить микроконтроллер, то достаточно просто щелкнуть выключателем.

Примечание: Если вы используете USB версию Arduino, вы можете просто подключить RX и TX контакты к MAX232A, а затем к последовательному порту маршрутизатора.

Результаты и выводы

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

Максимальная скорость:Мы провели тест скорости между двумя определенными точками и засекли время, потраченное роботом, чтобы покрыть это расстояние было рассчитано. Расстояние было 5м метров и роботу потребовалось 0.8с.Скорость=расстояние/времяСкорость=3м/0.9с = 3,3м/с или 12 км/ч

Рабочее расстояние:Мы протестировали этого робота в открытом поле для оценки максимального рабочего расстояния. Оно равно ~200м, после этого расстояния связь с роботом теряется и команды нельзя отправлять

Оригинал статьи

Оцените статью
Радиокоптер.ру
Добавить комментарий