Собираем Wi-Fi робота
Давно мечтал сделать Wi-Fi робота, которым можно было бы управлять удаленно. И вот наконец настал тот день когда я смог управлять роботом через интернет, видеть и слышать все что происходит вокруг него.
Заинтересовавшихся приглашаю под кат
Для создания робота использовались следующие комплектующие:
Набор для сборки платформы робота
Плата контроллера робота
Arduino Nano v.7
Драйвер двигателей
Маршрутизатор Nexx WT3020H
Миниатюрный USB 2.0 Hub Вот так выглядит собранный мной робот, без верхней крышки.
Теперь все по порядку:
Сборка платформы робота:Расположение компонентов на материнской плате. Я установил только Arduino Nano, драйвер двигателей и звуковой излучатель HC:Роутер wr703N прикрепил к нижней части платформы робота на двухсторонний скотч:Веб камера прикреплена на мебельный уголок, к штатным отверстиям платформы, предусмотренных для сервомоторов:
Прошил роутер прошивкой CyberWrt.
СyberWrt — это прошивка собранная на базе OpenWrt и предназначенная в первую очередь для роботов, умного дома и других устройств построенных на базе популярных моделей роутеров Tp-Link mr3020 b Wr703N. У СyberWrt максимально возможный объем свободного места для инсталляции пакетов — 1.25Мб.
По умолчанию установлен веб сервер и все операции можно проводить через встроенный веб интерфейс. Сразу после перепрошивки, роутер доступен в сети по кабелю и по WiFi, как точка доступа.
Через веб-интерфейс можно работать в режиме «командной строки» — через веб терминал и в файловом менеджере, в котором можно редактировать, загружать, удалять, создавать, копировать файлы и многое другое.
После прошивки роутера, он доступен как WiFi точка доступа с именем «CyberBot», подключаемся к нему заходим на главную страницу роутера. Вот так выглядит веб интерфейс сразу после прошивки.
Устанавливаем модули Драйвер FTDI, Драйвер video и CyberBot-2. Прошиваем контроллер ардуино. Код программы робота получился достаточно простым, но его достаточно для того что бы удаленно управлять роботом через локальную сеть или интернет.
Код адаптирован под контроллеры Arduino с ATmega168/328 на борту и использует библиотеку CyberLib.
Эта библиотека помогает из контроллера выжать максимум его возможностей и уменьшить объем конечного кода В коде используется WDT, для того что бы робот не смог зависнуть. Так же код поддерживает управление камерой по осям X и Y, но у меня не было свободных сервомоторов и я не смог воспользоваться этой функцией:Код для Arduino#include #include Servo myservo1; Servo myservo2; long previousMillis; http://cyber-place.ru/attachment.php?attachmentid=600&d=1389429469
uint8_t LedStep = 0; // Счетчик
int i; boolean light_stat;
uint8_t inByte; uint8_t speed=255; //максимальная скорость по умолчанию #define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;} void setup() { myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A6_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); if (LedStep == 0 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 1; } if (LedStep == 1 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 2; } if (LedStep == 2 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; } if (UART_ReadByte(inByte)) //Если что то пришло { switch (inByte) // Смотрим какая команда пришла { case 'x': // Остановка робота robot_stop(); break; case 'W': // Движение вперед robot_go(); break; case 'D': // Поворотjт влево robot_rotation_left(); break; case 'A': // Поворот вправо robot_rotation_right(); break; case 'S': // Движение назад robot_back(); break; case 'U': // Камера поднимается вверх myservo1.write(i -= 20); break; case 'J': // Камера опускается вниз myservo1.write(i += 20); break; case 'H': // Камера поворачивается вправо myservo2.write(i += 20); break; case 'K': // Камера поворачивается влево myservo2.write(i -= 20); break; case 'B': // Бластер D12_High; break; case 'C': // Клаксон horn(); break; case 'V': // Включить/Выключить фары if(light_stat) { D8_Low; light_stat=false; } else { D8_High; light_stat=true; } break; } if(inByte>47 && inByte
Источник: https://habr.com/post/252411/
Сборка wi-fi робота-шпиона
В сети выложено огромное количество инструкций по сборке различных моделей роботов.
Попробуем собрать свою собственную модель домашнего Wi-Fi робота используя информацию с форума Cyber-place, детали частично с интернет-магазина Сarduino.
Многие запчасти выгодно заказывать напрямую из Китая (Ebay, Aliexpress). Это значительно уменьшит бюджет.
Свой взгляд на теорию и проектирование современных роботов изложен здесь.
Функциональный вид робота
- Перемещение по поверхности согласно командам оператора,
- Трансляция видео с широким углом обзора.
Блок управления
Универсальный контроллер Carduino Nano V7
Микроконтроллер: ATmega328 Входное напряжение: от 5V до 30V Тактовая частота: 16 МГц Flash память: 32 KB
Оперативная память (SRAM): 2 Кб
Материнская плата робота «CyberBot»
Плата предназначена для подключения к ней различных устройств Arduino или аналогов устройств через стандартные интерфейсы.
Модуль управления двигателями — Motor Shield
К нему можно подключить и управлять двумя двигателями постоянного тока или 4 шаговыми двигателями. Содержит двухканальный драйвер двигателя HG7881. Питание: 2.5V до 12V
Потребление тока на один канал:: до 800 мА
Редукторные двигатели
Мотор-редуктор с передаточным соотношением 1:48 Диапазон напряжения от 3V до 6V. Скоростью вращения колеса 48 м/мин. Ток холостого хода (6в): 120mA
Уровень шума: /dev/ttyUSB0
Проблемы
Несовместимость микроконтроллера Arduino Nano V3 CH340 с маршрутизатором TP-LINK TL-MR3020
Найденные решения на форуме:
- Подключение резистора 100 Ом на пин RST и на +5V
- Понижение скорости соединения до 9600
- Удаление конденсатора или перерезка дорожки на Arduino
- Подключение микроконтроллера к маршрутизатору через UART интерфейс
Как показывала практика ни один из вышеописанных способов не помог. Только после замены микроконтроллера на Carduino Nano V7 робот начал работать через маршрутизатор.
Бюджет
1. Платформа | 450 руб. |
2. Управляющая микросхема | 300 руб. |
3. Carduino V7 | 1049 руб. |
4. Доставка по России | 200 руб. |
5. Двигатели, колеса, датчики | 629 руб. |
6. Электрические компоненты (разъемы, провода, резисторы) | 182 руб. |
7. Беспроводной WiFi маршрутизатор TP-Link 3020MR | 1425 руб. |
8. Usb хаб | 410 руб. |
9. Крепеж | 170 руб. |
хобби
Источник: http://it-donnet.ru/wifi-robot/
Готовые Arduino роботы
Начинать изучать Arduino можно не только с самой платы и подробных видео-уроков, но и с покупки готового полноценного робота на базе этой платы. Для детей начальной школы или дошкольного возраста такое готовые проекты Arduino даже предпочтительней, т.к. «неожившая» плата выглядит скучновато. Такой способ подойдет и для тех, кого электрические схемы не особо привлекают.
Приобретая работающую модель робота, т.е. фактически готовую высокотехнологичную игрушку, можно разбудить интерес к самостоятельному проектированию и созданию роботов.
Наигравшись в такую игрушку и разобравшись в том, как она работает, можно приступать к совершенствованию модели, разобрать все на части и начать собирать новые проекты на Arduino, используя высвободившиеся плату, приводы и датчики.
Открытость платформы Arduino позволяет из одних и тех же составных частей мастерить себе новые игрушки.
Мы предлагаем небольшой обзор готовых роботов на плате Arduino.
Машинка на Arduino, управляемая через Bluetooth
Машинка, управляемая через Bluetooth, стоимостью чуть менее $100. Поставляется в разобранном виде. Помимо корпуса, мотора, колес, литиевой батарейки и зарядного устройства, получаем плату Arduino UNO328, контроллер мотора, Bluetooth адаптер, пульт дистанционного управления и прочее.
Видео с участием этого и еще одного робота:
Более подробное описание игрушки и возможность купить на сайте интернет-магазина DealExtreme.
Аналогичный набор на Aliexpress чуть дороже. Аналогичные роботы с тремя колесами дешевле. Например, можно купить за $59.
Робот-черепаха Arduino
Комплект для сборки робота-черепахи стоимостью около $90. Не хватает только панциря, все остальное, необходимое для жизни этого героя, в комплекте: плата Arduino Uno, сервоприводы, датчики, модули слежения, ИК-приемник и пульт, батарея.
Черепаху можно купить на сайте DealExtreme, аналогичный более дешевый робот на Aliexpress.
Гусеничная машина на Arduino, управляемая с сотового телефона
Гусеничная машина, управляемая по Bluetooth с сотового телефона, стоимостью $94. Помимо гусеничной базы получаем плату Arduino Uno и плату расширения, Bluetooth плату, аккумулятор и зарядное устройство.
Гусеничную машину также можно купить на сайте DealExtreme, там же подробное описание. Может быть, более интересный железный Arduino-танк на Aliexpress.
Arduino-автомобиль, проезжающий лабиринты
Автомобиль, проезжающий лабиринты, стоимостью $83. Помимо моторов, платы Arduino Uno и прочего необходимого cодержит модули слежения и модули обхода препятствий.
Видео с этим роботом:
http://youtu.be/vct-eBO7-Hg
Страница машины на сайте DealExtreme, такой же робот на Aliexpress стоит чуть дороже.
Arduino насекомое
Оригинальный мини-робот насекомое на базе Arduino-совместимой схемы стоимостью менее $50. Помимо Arduino-совместимой платы имеет микросервоприводы и датчик для обнаружения препятствий.
Подробный обзор этого проекта на Arduino мы выполнили здесь. Приобрести можно на сайте DealExtreme или Aliexpress.
Готовый робот или каркас для робота
Помимо рассмотренного в обзоре варианта использования готовых комплектов для создания роботов Arduino, можно купить отдельно каркас (корпус) робота — это может быть платформа на колесиках или гусенице, гуманоид, паук и другие модели. В этом случае начинку робота придется делать самостоятельно. Обзор таких корпусов приведен в нашей статье.
Где еще купить готовых роботов
В обзоре мы выбрали наиболее дешевых и интересных на наш взгляд готовых Arduino-роботов из китайских интернет-магазинов. Если нет времени ждать посылку из Китая — большой выбор готовых роботов в интернет-магазинах Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Список рекомендованных магазинов здесь.
Возможно вас также заинтересуют наши обзоры проектов на Arduino:
Обучение Arduino
Не знаете, с чего начать изучение Arduino? Подумайте, что вам ближе — сборка собственных простых моделей и постепенное их усложнение или знакомство с более сложными, но готовыми решениями?
Учебный курс “Arduino для начинающих”: главная страница.
Посты по урокам:
Все посты сайта “Занимательная робототехника” по тегу Arduino.
Все цены приведены по состоянию на 30.03.14. Фото с сайта DealExtreme.
Источник: http://edurobots.ru/2014/04/gotovye-arduino-roboty/
Робо-рука с дистанционным управлением от перчатки и Arduino
Идея этого проекта появилась и увлекла меня во время отпуска.
Мысль была примерно следующая: “Было бы классно иметь робо-руку, которая управлялась бы моей собственной!”. И через некоторое время я принялся за разработку и реализацию этого проекта. Надеюсь, вам будет интересно!
Основные узлы проекта – перчатка и сама робо-рука. В качестве контроллера использовался Arduino. Движение робо-руки обеспечивается сервомоторами.
На перчатке установлены датчики изгиба: переменные резисторы, которые меняют свое сопротивление пи изгибе. Они подключены к одной стороне делителя напряжения и постоянным резисторам.
Arduino считывает изменение напряжения при изгибе датчиков и передает сигнал серводвигателям, которые пропорционально поворачиваются. Видео рабочего проекта приведено ниже.
Конструкция руки взята из open-source проекта InMoov. На странице проекта можно загрузить 3-D модели всех узлов и напечатать их на 3-D принтере.
Ниже приведены все шаги для реализации вашей собственной робо-руки с управлением от перчатки.
Для проекта вам понадобятся:
- 5 серводвигателей MG946R (или аналогичных – MG995 или MG996. При разработке руки у меня возникли некоторые проблемы с диапазоном перемещений. Так что лучше использовать сервы с большим углом поворота ). Сервы, которые использованы в этом проекте, покупались на hobbyking.com, но можно заказать на eBey или Aliexpress, подождать посылку недельки две-три и прилично сэкономить.
- 5 датчиков изгиба 4.5 дюймов.
- 1 плата Arduino Uno или ее аналог.
- 5 резисторов на 22 кОм.
- 1 6.0-7.2В батарейка (для серводвигателей).
- 1 монтажная плата (breadboard).
- 1 коннектор для батарейки.
- Коннекторы для макетки.
- 1 маленькая монтажная плата для распайки.
- 1 перчатка. Максимально подходящая по размеру руки.
- 1 длинный болт 8 мм в диаметре. Длина 55 мм.
- 1 длинный болт 8 мм в диаметре. Длина 60 мм.
- 1 длинный болт 8 мм в диаметре. Длина 80 мм.
- 14 болтов 3 мм в диаметре. Длина 20 мм.
- 20 болтов 4 мм в диаметре. Длина в диапазоне от 7 до 30 мм.
- Около 5 метров лески или нитей или веревок (надо подобрать такую, чтобы не порвалась)
- Супер клей
- Наждачная бумага
- Нитка и нить
- Дрель
- Паяльник
- Доступ к 3-D принтеру
…все! Вы можете начинать ваш проект робо-руки!
Печатаем руку
Рука является частью open-source проекта под названием InMoov. Это робот, который печатается на 3-D принтере. Рука – это лишь отдельный узел общей конструкции. Скачайте с этой страницы и напечатайте следующие детали:
robpart1.stl*
robpart4V2.stl
robpart5V2.stl
Auriculaire3.stl
Index3.stl
Majeure3.stl
ringfinger3.stl
WristsmallV3.stl
thumb5.stl
Wristlarge.stl
На всякий случай прилагаю кликабельный список деталей, потому-что некоторые из них удалены со страницы основного проекта.
И с этой страницы
RobCableFrontV1.stl
RobRingV3.stl (в этой детали пришлось сделать дополнительные отверстия, чтобы подошли мои сервы)
RobCableBackV2.stl
RobServoBedV4.stl
robpart3V3.stl
robpart4V3.stl
(Это две детали “обшивки” – они не обязательны с точки зрения жесткости конструкции и ее функционирования)
В общей сложности понадобилось около 13-15 часов для печати. Зависит от качества печати. Я использовал MakerBot Replicator 2X. Рекомендую печатать детали пальцев на стандартном или высоком разрешении, чтобы избежать нежелательного трения в конструкции.
Auriculaire3.stl
coverfinger1.stl
Index3.stl
Majeure3.stl
ringfinger3.stl
RobCableBackV2.stl
RobCableFrontV1.stl
robpart1.stl
robpart2V2.stl
robpart3V3.stl
robpart4V3.stl
robpart5V2.stl
robpart5V2.stl
RobServoBedV4.stl
thumb5.stl
topsurface4.stl
WristlargeV3.stl
WristsmallV3.stl
Подключаем датчики изгиба к Arduino
Для подключения датчиков изгиба к Arduino нам в схему надо включить делитель напряжения. Датчики изгиба по сути являются переменным резистором.
При использовании в паре с постоянным резистором, можно отслеживать разницу в напряжении двух резисторов. Отследить разницу можно с помощью аналоговых контактов Arduino.
Схема подключения приведена ниже (красный коннектор – это напряжение, черный – земля, голубой – коннектор самого сигнала, который подключается к аналоговому входу Arduino).
Резисторы на фото имеют номинал 22 кОм. Цвета проводов соответствуют цветам, приведенным на схеме подключения.
Все контакты GND от датчиков соединены в общую Землю. Земля идет к пину GND на Arduino. +5V на Arduino подключается к общему контакту питания от всех датчиков. Каждый голубой коннектор сигнала подключается к отдельному аналоговому входу на микроконтроллере.
Я собрал схему на небольшой монтажной плате. Размеры платы желательно выбрать поменьше, чтобы в дальнейшем закрепить на перчатку. Закрепить на перчатке нашу собранную схему можно с помощью элементарной нити и иголки. Кроме того, не поленитесь и сразу же используйте изоленту на оголенных контактах.
Устанавливаем сенсоры на перчатке
Можем приступать к установке датчиков и нашей монтажной платы на саму перчатку. Сначала просверлите небольшое отверстие в пластике датчиков. Отверстия сверлятся в местах, где чувствительный элемент закончился. ВАЖНО! Ни в коем случае не сверлите отверстие в чувствительном материале.
После этого оденьте перчатку. Сделайте отметки карандашом или ручкой на вершине каждого сустава. Эти места вы будете использовать для крепежа сенсоров. Датчики изгиба крепятся обычной ниткой. Пришейте сенсоры к перчатке. Используйте отверстие, которые вы сделали на концах датчика.
В местах, где отмечены суставы сенсоры “прихватываются” нитью поверх. Более детально все это показано на фото ниже. Монтажная плата пришивается к перчатке аналогично сенсорам. Учтите, что для движения пальцев надо оставить определенный запас длины проводников.
Это надо учесть при установке нашей монтажной платы и выборе длины коннекторов от нее к датчикам.
Собираем робо-руку
Я не буду детально останавливаться на этом шаге. Он очень подробно раскрыт на веб-сайте InMoov (в разделе “Assembly Sketches” и “Assembly Help”):
Когда соберете руку, убедитесь, что узлы установлены правильно с точки зрения ориентации в пространстве. Не забудьте рассверлить отверстия в пальцах робо-руки под крепеж 3 мм, чтобы уменьшить трение между сочленениями. С наружной стороны я залил болты клеем.
Не спешите устанавливать леску. Сначала проверьте работоспособность серводвигателей.
Проверка сервомоторов
На этом этапе сервы уже должны быть установлены в задней части вашей робо-руки. Для подключения серв к Arduino и источнику питания, я использовал небольшую макетную плату. Подключите каждый позитивный контакт серводвигателя (красный) к одной рельсе макетной платы, а негативный (черный или коричневый) – к другой рельсе.
ВАЖНО! Не забудьте подключить контакт Arduino к рельсе с отрицательным зарядом: помните, что все контакты Земля должны быть соединены между собой. Контакт VCC может подключаться к различным источникам питания, но GND должен быть одинаковым.
Загрузите программу на Arduino (файл с программой прилагается). Убедитесь, что подключение сенсоров, сервомоторов и т.п. Было правильным. Наденьте перчатку и включите Arduino. Серводвигатели должны вращаться в зависимости от того, каким пальцем вы будете двигать. Если сервы двигаются, значит все работает!
Если вы более искушенный пользователь Arduino и знаете как проверить текущие значения с датчиков изгиба, можете настроить диапазон в программе под ваши реалии. Предполагаю, что все сенсоры изгиба примерно одинаковые, но если это не так, калибровка датчиков вам однозначно поможет.
Если сервомоторы отрабатывают неправильно, убедитесь, что вы их правильно подключили (например, когда я работал над этим проектом, я, как обычно, забыл соединить пин GND Arduino с GND источника питания и всех серв. В этом случае работать ничего не будет). Убедитесь, что все отрабатывает перед тем, как двигаться дальше.
Добавляем леску
Добавить леску – это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто. Обратите внимание, что эта часть проекта требует сосредоточения и терпения.
Единственное отличие моего варианта от конструкции на InMoov – использование клея. Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает.
В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.
Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью “лежащем” состоянии руки натяжение было максимальным.
Объяснить процесс калибровки достаточно сложно. Кроме того, инструкция с InMoov мне, например, не подошла. То есть, при крепеже вам надо проявить фантазию и подстроиться под ваши реалии – как то: тип качалок, тип лески или ниток, погрешности конструкции и сборки, расстояние установки сервомоторов относительно суставов робо-руки.
К счастью – это последний этап проекта!
Послесловие
Несмотря на то, что существуют гораздо более сложные и точные (и дорогие в том числе) конструкции, приведенный проект очень интересен и имеет отличный потенциал для практического применения. Подобные конструкции не стоит использовать при непосредственном контакте с человеком, ввиду недостаточной точности самого концепта.
Но промышленности, медицине и т.п. для задач без повышенных требований к точности перемещений суставов, наша робо-рука вполне подойдет. Ну а с точки зрения дальнейшего “апгрейда” руки – тут поле вообще непаханое. Начиная от беспроводного управления, заканчивая заменой приводов, габаритов, разработки дополнительных степеней свободы.
Именно за это я люблю Arduino: вы можете очень быстро и за небольшие деньги собрать макет или прототип устройства, которое не только просто программируется, но и может выполнять реальные интересные задачи.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Источник: http://arduino-diy.com/arduino-robo-ruka-s-distantsionnym-upravleniyem-ot-perchatki
Сделай сам робота из смартфона и Arduino ⋆ Журнал научно-технического творчества педагогов и школьников “Главный конструктор”
В данной статье мы с вами построим картонного робота на трех сервоприводах, управляемых Arduino. Робот будет шевелить руками и поворачивать голову. Для конструирования управления будем использовать сервис RemoteXY, который позволит управлять нашим роботом со смартфона по Bluetooth.
Корпус робота
Робот состоит из четырех деталей, вырезанных из гофро-картона. Это туловище, голова и две руки. Все детали вырезаны при помощи ножа. Так же ножом необходимо надрезать места сгибов. Детали можно склеить пластиковым клеем используя пистолет для его разогрева. Для установки сервоприводов на туловище необходимо прорезать прямоугольные отверстия.
Для закрепления сервоприводов в отверстиях используется тот же пластиковый клей. На голове и руках, там, где присоединяется вал сервопривода, установлены качалки, которые клеятся изнутри к корпусу при помощи все того же пластикового клея. Мы не будем приводить точных размеров и чертежей, у вас не должно вызвать трудности повторить конструкцию.
В голове прорежьте два отверстия, в которые установите два светодиода. Это будут глаза. Глаза так же будут зажигаться дистанционно
Электрическая схема
Для устойчивой работы схемы, сервоприводы должны быть запитаны от отдельного источника питания 5V. Стабилизатор напряжения Arduino не может обеспечить необходимую силу тока для всех трех сервоприводов. Последовательно со светодиодами необходимо включить резистор номиналом 680 Ом.
Графический интерфейс управления
Откройте редактор интерфейса на сайте RemoteXY.com и создайте интерфейс управления, приведенный на рисунке ниже. На интерфейсе расположите правый и левый слайдер для правой и левой руки, слайдер для вращения головы. Установите две кнопки для управления глазами. Так же установите переключатель. Его мы будем использовать для включения режима автоматического моргания глазами.
Переименуйте слайдеры, назовите их slider_left, slider_right и slider_head соответственно. Так же переименуйте кнопки. Назовите их button_left и button_rightсоответственно.
Так как наш проект подразумевает использование библиотеки servo.h, выберите в настройках проекта формирование исходного кода для Arduino (Serial), library version. Напомню, что библиотека servo.h конфликтует с библиотекой SoftwareSerial.h, по этому мы ее использовать не будем.
Сформируйте и загрузите исходный код проекта графического интерфейса к себе на компьютер. Не забудьте загрузить и установить библиотеку RemoteXY для Arduino IDE. Скомпилируйте и загрузите скетч в плату Arduino.
Используя Android приложение RemoteXY проверьте, что ваш смартфон может соединиться с вашим новым проектом. Не забудьте, что модуль Bluetooth необходимо подключить к аппаратному последовательному порту к пинам 0(RX) и 1(TX).
Если смартфон соединился успешно, тогда идем дальше.
Сформированная структура для переменных RemoteXY в скетче проекта должна выглядеть следующим образом.
/* структура определяет все переменные вашего интерфейса управления */
struct {
/* input variable */ unsigned char slider_left; /* =0..100 положение слайдера */ unsigned char slider_right; /* =0..100 положение слайдера */ unsigned char slider_head; /* =0..100 положение слайдера */ unsigned char button_left; /* =1 если кнопка нажата, иначе =0 */ unsigned char button_right; /* =1 если кнопка нажата, иначе =0 */ unsigned char switch_1; /* =1 если переключатель включен и =0 если отключен *//* other variable */
unsigned char connect_flag; /* =1 if wire connected, else =0 */} RemoteXY;
Программа управления
Наша управляющая программа должна выполнять следующие задачи:
- Преобразовывать управляющие воздействие слайдеров в команды для сервоприводов.
- Преобразовывать нажатия кнопок управления глазами в зажигание двух глаз-светодиодов, если выключатель switch_1 выключен.
- Поочередно зажигать глаза-светодиоды, если выключатель switch_1 включен. При этом нажатие кнопок управления глазами не влияет на состояние светодиодов.
Также очень важно учесть, что программа должна выполняться непрерывно. Именно по этому в функции loop, главном цикле программы, нельзя использовать паузы. Например, паузу часто используют в режиме моргания двух светодиодов-глаз, ожидая время между переключениями светодиодов. В нашем случае такой подход приведет к ошибкам.
В каждом цикле loop вызывается функции RemoteXY_Handler (), которая отвечает за обмен данными со смартфоном через модуль Bluetooth. Если эта функция не будет вызвана в течении длительного времени, она не сможет корректно выполнить обмен данными. Как же решить проблему отсчета времени между переключениями светодиодов? Очень просто, используя встроенный таймер.
Далее приведен исходный код программы управления.
///////////////////////////////////////////// // RemoteXY include library //
/////////////////////////////////////////////
/* определение режима соединения и подключение библиотеки RemoteXY */ #define REMOTEXY_MODE__SERIAL #include /* настройки соединения */ #define REMOTEXY_SERIAL Serial #define REMOTEXY_SERIAL_SPEED 9600/* конфигурация интерфейса */ unsigned char RemoteXY_CONF[] = { 6,0,79,0,1,5,4,0,5,7 ,11,56,2,4,0,84,7,11,56,2 ,4,128,20,13,60,11,2,129,0,26 ,3,49,6,0,208,161,97,114,100,98 ,111,97,114,100,32,82,111,98,111,116 ,0,1,0,25,29,16,16,1,76,0 ,1,0,60,29,16,16,1,82,0,2 ,0,38,51,24,10,2,79,78,0,79 ,70,70,0 };/* структура определяет все переменные вашего интерфейса управления */ struct {/* input variable */ unsigned char slider_left; /* =0..100 slider position */ unsigned char slider_right; /* =0..100 slider position */ unsigned char slider_head; /* =0..100 slider position */ unsigned char button_left; /* =1 if button pressed, else =0 */ unsigned char button_right; /* =1 if button pressed, else =0 */ unsigned char switch_1; /* =1 if switch ON and =0 if OFF *//* other variable */ unsigned char connect_flag; /* =1 if wire connected, else =0 */} RemoteXY;///////////////////////////////////////////// // END RemoteXY include //
/////////////////////////////////////////////
#include
#define PIN_LED_LEFT 6
#define PIN_LED_RIGHT 7
#define PIN_LEFT_SERVO 8 #define PIN_RIGHT_SERVO 9
#define PIN_HEAD_SERVO 10
Servo left_servo; Servo right_servo;
Servo head_servo;
unsigned char led_state = 0; unsigned long led_time=0;
unsigned long prev_time=0;
void setup() {
RemoteXY_Init ();
// TODO you setup code
pinMode (PIN_LED_LEFT, OUTPUT);
pinMode (PIN_LED_RIGHT, OUTPUT);
left_servo.attach(PIN_LEFT_SERVO); right_servo.attach(PIN_RIGHT_SERVO);
head_servo.attach(PIN_HEAD_SERVO);
RemoteXY.slider_left=50; RemoteXY.slider_right=50;
RemoteXY.slider_head=50;
}
void loop() {
RemoteXY_Handler ();
// TODO you loop code
// используйте структуру RemoteXY для передачи данных
unsigned long time = millis(); unsigned long d_time = time — prev_time;
prev_time = time;
if (RemoteXY.switch_1==0) { digitalWrite(PIN_LED_LEFT, (RemoteXY.button_left==0)?LOW:HIGH); digitalWrite(PIN_LED_RIGHT, (RemoteXY.button_right==0)?LOW:HIGH); } else { led_time+=d_time; if (led_time>500) { if (led_state==0) led_state=1; else led_state=0; led_time-=500; } digitalWrite(PIN_LED_LEFT, (led_state==0)?LOW:HIGH); digitalWrite(PIN_LED_RIGHT, (led_state==1)?LOW:HIGH);
}
left_servo.writeMicroseconds(RemoteXY.slider_left*20+500); right_servo.writeMicroseconds(2500-RemoteXY.slider_right*20);
head_servo.writeMicroseconds(RemoteXY.slider_head*20+500);
}
В начале программы определяются номера пинов, которые будут использованы для глаз-светодиодов и для управления тремя сервоприводами. Функция setupинициализирует пины светодиодов как выходы, инициализирует классы сервоприводов. Так же устанавливаются начальные положения слайдеров в среднее положение.
В функции loop первым делом вызывается обработчик RemoteXY_Handler. Далее вычисляется интервал времени, прошедший с начала предыдущего цикла функции loop, в миллисекундах.
Как раз этот интервал используется для расчета момента времени, в который необходимо переключить светодиод. Если переключатель switch_1 не включен, то состояние кнопок button_left и button_right напрямую передается на пины управления глазами-светодиодами.
Если switch_1 включен, реализуется алгоритм моргания глазами. Длительность свечения одного глаза равна 500 миллисекунд.
Далее, положения слайдеров управления руками и головой преобразуются в длительность импульсов для управления соответствующими сервоприводами.
Слайдер изменяет свое положение от 0 до 100, в то время как длительность импульсов управления сервоприводом должна изменяться в пределах от 500 до 2500 мс.
Обратите внимание, что сервопривод правой руки двигается в противоположном направлении, и это отражено в формуле преобразования.
Загрузки
Проект для Arduino — Cardboard Robot
Источник: https://remotexy.com/ru/examples/cardboardrobot/
Источник: https://mirrobo.ru/pilot/karrobot/
Записки программиста
В заметке Мой первый радиоуправляемый робот на Arduino мы познакомились с электродвигателями и научились управлять ими при помощи микроконтроллера. Серводвигатель (он же сервопривод, сервомотор или сервомашинка) — не менее полезное механическое устройство.
В отличие от электродвигателя, который постоянно крутится, или, если питание не подано, не крутится, серводвигатель умеет поворачивается на заданный угол (часто от 0 до 180 градусов) и оставаться в таком положении.
Просто так управлять одним серводвигателем не очень-то интересно, поэтому давайте сразу рассмотрим пример использования четырех серводвигателей в робо-руке MeArm.<\p>
Немного теории
Серводвигатели имеют три провода:
- Черный или коричневый — земля;
- Красный — питание;
- Белый или желтый — управляющий сигнал;
Питаются серводвигатели от отдельного источника питания, часто на 7-9 В, в зависимости от серводвигателя. Управление осуществляется очень просто — раз в 20 мс микроконтроллер посылает логическую единицу, длительность которой определяет угол, на который должен повернуться серводвигатель. Сигнал длительностью 0.
5 мс означает крайнее левое положение, 2.5 мс означает крайнее правое, а все что посередине — промежуточные состояния. Зависимость угла поворота от длительности сигнала линейная. То есть, например, сигнал длительностью 1.
5 мс соответствует прямому углу, если серводвигатель умеет поворачиваться на угол от 0 до 180 градусов.
В мире Arduino, как обычно, есть готовая библиотека под названием Servo, которая делает все описанное выше за нас. Больше теории и иллюстраций вы можете найти в Википедии, а также на сайте wiki.amperka.ru.
Практика
Вернемся к робо-руке MeArm. Вот как это чудо техники выглядит в собранном состоянии:
MeArm является открытым проектом (KickStarter, GitHub) и потому его можно как изготовить самостоятельно, так и купить готовый набор для сборки.
В России комплект для сборки MeArm можно купить, например, на lartmaster.ru, а также chipdip.ru. На сайте arduino-kit.ru подается тот же MeArm, но стоит он дороже, и это более поздняя версия, чем у меня.
Есть предложения и на AliExpress, например раз и два.
На сайте продавца инструкция по сборки, к сожалению, оказалась не полной. В итоге собирал по этой инструкции. Если у вас немного другая версия MeArm, уверен, вы без труда найдете инструкцию по сборке и для нее. Робо-рука собирается за один, максимум два вечера. Потребуется только крестовая отвертка и немного терпения.
Плата, что идет в комплекте, эффективно представляет собой тестер серводвигателей. Будьте осторожны, при подключении серводвигателей не перепутайте пины! Где плюс, а где минус, проще всего посмотреть по дорожкам на плате, идущим от клеммника, а затем перепроверить мультиметром.
В моей робо-руке MeArm используются серво-двигатели Tower Pro 9g SG90. Их угол поворота ограничен диапазоном от 0 до 180 градусов. Информация в сети о том, на какое напряжение они рассчитаны, весьма противоречива. По своему опыту могу сказать, что при напряжении 9 В они работают исправно.
Пример прошивки для Arduino:
#include
#include “Servo.h”
#define DELAY_MS 20
Servo s1;
Servo s2;
Servo s3;
Servo s4;
int last_report = 0;
int loop_counter = 0;
void setup()
{
s1.attach(2);
s2.attach(3);
s3.attach(4);
s4.attach(5);
}
void loop()
{
int p1val = analogRead(A0);
int p2val = analogRead(A1);
int p3val = analogRead(A2);
int p4val = analogRead(A3);
loop_counter++;
if(loop_counter >= 1000 / DELAY_MS)
{
/* Skipped: print some debug info */
loop_counter = 0;
}
s1.write(map(p1val, 0, 1023, 0, 179));
s2.write(map(p2val, 0, 1023, 85, 179));
s3.write(map(p3val, 0, 1023, 50, 155));
s4.write(map(p4val, 0, 1023, 4, 23));
delay(DELAY_MS);
}
Здесь считывается текущее положение четырех потенциометров, затем четыре серводвигателя поворачиваются на соответствующий угол.
Угол поворота серводвигателей ограничивается при помощи процедуры map в соответствии с физическими ограничениями MeArm.
Серводвигатели лишний раз лучше не перегружать, иначе могут лопнуть зубчики у используемых в них пластиковых шестеренок. В этом случае серводвигатель придет в негодность.
Заключение
Как видите, все очень просто. При желании можно взять пару радиомодулей, например, NRF24L01, и управлять робо-рукой удаленно. А еще можно поставить робо-руку на нашего гусеничного робота.
Признаю, польза от такого робота будет все еще весьма сомнительной.
Зато смотреться такая конструкция будет просто потрясающе, поражая юные умы будущих изобретателей роботов своей неземной крутизной 🙂
Полную версию исходников к этой заметке вы найдете на GitHub. Как обычно, если у вас есть вопросы или дополнения, буду рад ознакомиться с ними в комментариях.
Дополнение: Как я собирал свой первый квадрокоптер на базе PixHawk
Источник: https://eax.me/arduino-robot-arm/
Я презираю arduino
[private] Магазин роботов и робототехники бытовые роботы квадрокоптеры гироскутеры конструкторы роботы игрушки новости [/private]
Я радуюсь, когда будущие инженеры создают свои устройства и расстраиваюсь, когда слышу, как кто-то говорит об использовании Arduino в них.
Это не первая моя статья на эту тему: у меня возникает желание написать такую сразу после прочтения фразы о безграничных возможностях платформы в DIY-топике на Хабре.
У меня возникает желание написать об истинной цене деталей после прочтения статьи о покупке конструктора за $200 почти ничего не содержащего (уж простите, запамятовал где видел).
Дело тут совсем не в том, что я считаю, что Arduino – это плохая идея. Наоборот – благодаря платформе многие познали мир микроконтроллеров, узнали, что собрать небольшое прикольное устройство может даже человек без специального образования, с минимальными познаниями в программировании и с отсутствием познаний в электронике.
Взгляните на наших роботов
Благодаря Arduino увидело свет множество проектов, которые пылились в банках памяти мозга их авторов.
Честно признаюсь, я иногда и сам пользовался кодом, написанным для Ардуино (к примеру, фирма InvenSense производит модульMPU6050, запустить нормально который получилось только у Jeff Rowberg).
Презираю я тех людей, которые, открыв для себя мир микроконтроллеров, не потрудились осмотреться в нём и тех, кто нагло наживается на подобных людях.
К нам в лабораторию заходил (и работал с нами) студент кафедры информационных технологий — поклонник Arduino. Человек тратил огромные деньги на покупку самих *дуин и модулей к ним. Я не без сожаления наблюдал, как будущий (я всё же надеюсь) создатель роботизированных систем не мог запустить ШИМ нужной частоты, хотя «лётных» часов работы с платформой он намотал немало.
Так вот, этот студент показал мне «измеритель уровня заряда батареи», или как-то так. Я специально нашёл его сейчас на ebay, где он называется «High Sensitivity Voltage Sensor Module -Arduino Compatible» и продаётся за $8.58. Вот он, на рисунке:
Кстати, центральный провод, который «+» — он просто висит в воздухе – всё сделано для максимального удобного подключения простого делителя напряжения, красная цена которому 2 цента за резисторы и 20 центов за разьём – это если в розницу покупать.
Взгляните на наших роботов
Это не единственный случай обмана нашего брата, ниже я приведу ещё несколько. Сейчас же, для любителей структурирования, я напишу основные недостатки Arduino.
- Библиотеки. Я люблю библиотеки – я пишу свои классы и функции, или использую грамотно написанный код моих коллег – это существенно ускоряет мою работу. Библиотеки Arduino просты в освоении, но на этом их плюсы заканчиваются. К примеру, вы можете всю жизнь формировать задержки с помощью delay-функций и не иметь простейшего представления, как работает таймер на микроконтроллере — из таких минусов состоят все библиотеки Arduino. Я имею в виду то, что таймер и другая периферия в микроконтроллере реализована так, чтоб компенсировать его однопоточность прерываниями. А люди тратят процессорное время на декрементацию неиспользуемой переменной. Деление и использование чисел с плавающей точкой на восьмибитных контроллерах AVR – это то, к чему надо прибегать только в самых крайних случаях, когда без этого обойтись никак нельзя. Строка в последовательный порт не посылается с помощью конечного автомата с множеством пустых циклов ожидания флага опустошения буфера в основном теле программы – это опять же пустое расходование ресурсов – ведь есть прерывания. Да, в Arduino можно включить прерывания, но кто это делает?
На Хабре есть хорошая статья о том, как ускорить работу библиотек Arduino. Меня она, если честно, поразила тем, что даже работники оборонной промышленности скатились до работы с платформой, но дать общие понятия о скорости работы этих библиотек она может.
- Среда разработки. Микроконтроллеры можно программировать в IAR, Eclipse, Keil и других, менее известных средах.
А IDE Arduino является кроссплатформенным и с подсветкой синтаксиса.
- Мощность. Причём, как аппаратная, так и рассеиваемая. Разработка любой встраиваемой системы начинается с выбора компонентов в зависимости от требуемых функций. Для моргания диодом Atmega328 (или 2560) – слишком мощно, а для создания системы реального времени с алгоритмами обработки изображений – слишком слабо.
- Расхолаживание программистов. Программирование микроконтроллера не требует особых навыков и умений, но потратить пару часов и изучить работу нескольких периферийных устройств, тем самым размяв свои мозги, всё же придётся. Зачем это делать, если можно написать что-то вроде analogRead и digitalWrite?
- Цена. Тут уже вопрос не только к производителям Arduino и клонов: цены на контроллеры AVR в целом завышены. К примеру, Atmega2560 обойдётся вам в $10. За такие же деньги можно купить два STM32F103. Так получилось потому – что людям лень учить другие контроллеры, а по этим кругом множество материалов и примеров.
Взгляните на наших роботов
На Hobbyking, где любителей различных моделизмов обманывают так-же как и в других магазинах любителей ардуино, продавался как-то обычный конденсатор, под видом какого-то фильтра. Не смог его сейчас уже найти. С трёхпиновым разьёмом, естественно. Всего за 3 доллара.
Arduino Compatible Mini Motor Speed counter Sensor AVR PIC – заменяется светодиодом и фототранзистором, подключающимися к центральному контроллеру и двадцатью строчками кода. Он не стоит 7.98.
2*4 Matrix Keyboard Push Buttons AVR ARM Arduino Compatible – это просто кнопки, которые можно купить по цене 10 штук за доллар.
Есть один девайс в мире, который я ненавижу больше чем Arduino – это mbed.
Его разработчики взяли контроллер LPC1768 (есть ещё на LPC11U24), припаяли его на плату с двумя стабилизаторами (о качестве разводки платы я говорить не буду), вывели половину ног наружу (вторая половина никуда не подключена, что очень раздражает), написали онлайн недо-IDE (впрочем, чуть лучше, чем у Arduino, хоть и требует подключения к интернету) и продают его за $64. Простите, но это уже совсем.
Что делать, если вы, вдруг, решили перестать топтаться на месте, и начать изучать микроконтроллеры?
- На Хабре был цикл статей «STM32F1xx — лечимся от ардуинозависимости вместе» — статьи хорошие и достаточно понятные, жаль, что автор забросил написание новых статей.
- Всех новичков посылают на easyelectronics.ru, где товарищ DIHALT публиковал учебный курс по микроконтроллерам AVR.
- «Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С» С. Ф. Баррет, Д. Дж. Пак – супер книга, помогает понять основы программирования на C для микроконтроллеров. Единственная проблема – вы вряд ли достанете микроконтроллеры Freescale, поэтому примеры придётся самостоятельно портировать примеры на AVR, PIC, MSP430 или любой другой контроллер.
- Перед покупкой чего бы то не было для своих устройств, почитайте об этом хотя-бы в Википедии — возможно эту же деталь можно купить дешевле, если назвать её по-другому.
Вообще знаете, что странно? Среди пользователей Arduino есть даже те, кто презирают Apple за их «направленность на недалёкогозанятого-для-таких-мелочей юзера».
Я не хочу никого обидеть или переубедить. Но я буду рад, если хоть один человек, дочитавший статью до этого момента, поменяет Arduino на простой микроконтроллер – может быть, из него получится хороший разработчик встраиваемых систем в будущем.
Взгляните на наших роботов
Источник: http://robot-russia.ru/2016/09/18/ya-prezirayu-arduino/
Собираем Wi-Fi робота
Давно мечтал сделать Wi-Fi робота, которым можно было бы управлять удаленно. И вот наконец настал тот день когда я смог управлять роботом через интернет, видеть и слышать все что происходит вокруг него.
Заинтересовавшихся приглашаю под кат
Для создания робота использовались следующие комплектующие:
Набор для сборки платформы робота Материнская плата робоконтроллера Arduino Nano v.7 Драйвер двигателей Маршрутизатор TP-Link TL-WR703N Миниатюрный USB 2.0 Hub
Покупал комплектующие здесь.
Вот так выглядит собранный мной робот, без верхней крышки.
Теперь все по порядку:
Сборка платформы робота
Расположение компонентов на материнской плате Я установил только Arduino Nano, драйвер двигателей и звуковой излучатель HC.
Роутер wr703N прикрепил к нижней части платформы робота на двухсторонний скотч
Веб камера прикреплена на мебельный уголок, к штанам отверстиям платформы, предусмотренных для сервомоторов.
Прошил роутер прошивкой CyberWrt.
СyberWrt — это прошивка собранная на базе OpenWrt и предназначенная в первую очередь для роботов, умного дома и других устройств построенных на базе популярных моделей роутеров Tp-Link mr3020 b Wr703N. У СyberWrt максимально возможный объем свободного места для инсталляции пакетов — 1.25Мб.
По умолчанию установлен веб сервер и все операции можно проводить через встроенный веб интерфейс. Сразу после перепрошивки, роутер доступен в сети по кабелю и по WiFi, как точка доступа.
Через веб-интерфейс можно работать в режиме «командной строки» — через веб терминал и в файловом менеджере, в котором можно редактировать, загружать, удалять, создавать, копировать файлы и многое другое.
После прошивки роутера, он доступен как WiFi точка доступа с именем «CyberBot», подключаемся к нему заходим на главную страницу роутера
Вот так выглядит веб интерфейс сразу после прошивки
Устанавливаем модули Драйвер FTDI, Драйвер video и CyberBot-2
Прошиваем контроллер ардуино. Код программы робота получился достаточно простым, но его достаточно для того что бы удаленно управлять роботом через локальную сеть или интернет
Код адаптирован под контроллеры Arduino с ATmega168/328 на борту и использует библиотеку CyberLib
Эта библиотека помогает из контроллера выжать максимум его возможностей и уменьшить объем конечного кода В коде используется WDT, для того что бы робот не смог зависнуть.
Так же код поддерживает управление камерой по осям X и Y, но у меня не было свободных сервомоторов и я не смог воспользоваться этой функцией
Код для Arduino#include #include Servo myservo1; Servo myservo2; long previousMillis; http://cyber-place.ru/attachment.php?attachmentid=600&d=1389429469
uint8_t LedStep = 0; // Счетчик
int i; boolean light_stat;
uint8_t inByte; uint8_t speed=255; //максимальная скорость по умолчанию #define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;} void setup() { myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A6_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); if (LedStep == 0 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 1; } if (LedStep == 1 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 2; } if (LedStep == 2 && currentMillis – previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; } if (UART_ReadByte(inByte)) //Если что то пришло { switch (inByte) // Смотрим какая команда пришла { case 'x': // Остановка робота robot_stop(); break; case 'W': // Движение вперед robot_go(); break; case 'D': // Поворотjт влево robot_rotation_left(); break; case 'A': // Поворот вправо robot_rotation_right(); break; case 'S': // Движение назад robot_back(); break; case 'U': // Камера поднимается вверх myservo1.write(i -= 20); break; case 'J': // Камера опускается вниз myservo1.write(i += 20); break; case 'H': // Камера поворачивается вправо myservo2.write(i += 20); break; case 'K': // Камера поворачивается влево myservo2.write(i -= 20); break; case 'B': // Бластер D12_High; break; case 'C': // Клаксон horn(); break; case 'V': // Включить/Выключить фары if(light_stat) { D8_Low; light_stat=false; } else { D8_High; light_stat=true; } break; } if(inByte>47 && inByte
Источник: http://www.pvsm.ru/arduino/85083
Автомобиль с видеокамерой. Управление через 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