Управление сервоприводом через блютуз ардуино
В этом уроке мы дополним робота QUADRUPED модулем Bluetooth и создадим пульт дистанционного управления на базе аналогичного Bluetooth модуля. Управление направлением и скоростью движения робота будет осуществляться с помощью джойстика, а высота робота будет регулироваться потенциометром. При обнаружении препятствий робот откажется идти прямо, но согласится пойти назад или развернуться.
Bluetooth модуль пульта будет выполнять роль мастера, а Bluetooth модуль робота - роль ведомого. Сопряжение мастера и ведомого достаточно выполнить только один раз. В дальнейшем, при подаче питания робота и питании пульта, устройства будут соединяться самостоятельно.
Скорость и направление движения робота будет зависеть от степени и направления отклонения джойстика. Робот сможет выполнять такие команды как движение вперёд или назад, с заворотом или без, разворот на месте влево или вправо, установка всех суставов в центральные положения, ослабление всех суставов, подъем и опускание корпуса. При разрыве связи между bluetooth модулями пульта и робота, робот перестанет идти, а все его сервоприводы ослабнут.
Подробно об управлении роботом и сопряжении Bluetooth модулей рассказано ниже, в разделе «Управление».
Видео:
Нам понадобится:
-
Робот «QUADRUPED»: x1 шт. x1 шт. x1 шт. x1 шт. x1 шт.
- Элементы питания:
- либо 2 аккумулятора Li-ion размером 18650.
- либо 5 аккумуляторов Ni-MH размером AA.
-
Пульт: x1 шт. x1 шт. x1 шт. x1 шт. x1 шт.
- Элементы питания:
- либо 1 аккумулятор Ni-MH размером крона и переходник под DC-jack.
- либо иной источник питания для Arduino Uno.
Для реализации проекта нам необходимо установить библиотеки:
-
- для работы с Trema Bluetooth модулем HC-05.
- iarduino_HC_SR04 - для работы с ультразвуковым датчиком расстояния HC-SR04+.
- Библиотеки SoftwareSerial и Servo входят в базовый набор Arduino IDE и не требуют установки.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.
Схема подключения пульта дистанционного управления:
- Установите Trema-Set Shield на Arduino Uno.
- Установите Trema-модуль потенциометр на 2 посадочную площадку Trema-Set Shield.
- Установите Trema-модуль джойстик на 4 посадочную площадку Trema-Set Shield.
- Установите Trema-модуль Bluetooth HC-05 на 6 посадочную площадку Trema-Set Shield.
- При желании все установленные на Trema-Set Shield модули можно закрепить, используя нейлоновые винты и стойки.
Благодаря применению Trema-Set Shield все модули устанавливаются без проводов, а наличие на каждой площадке всего двух колодок с разным количеством выводов, гарантирует правильность установки модулей.
Схема подключения робота QUADRUPED:
Соберите механику, подключите Tream-Power Shield, сервоприводы, датчик расстояния и откалибруйте робота, как это описано на странице Сборка QUADRUPED. Электроника + Калибровка. Далее на боковые панели установите Bluetooth HC-05 и кнопку, первый модуль подключается к шине UART (в примере используется аппаратная шина UART), а второй к любому выводу Arduino Uno (в примере используется вывод D12).
Датчик расстояния | Trema Power Shield | |
---|---|---|
Датчик HC-SR04+ | вывод Echo | вывод 2 на белой колодке |
вывод Trig | вывод 3 на белой колодке | |
вывод Vcc | любой вывод на красной колодке | |
вывод Gnd | любой вывод на чёрной колодке |
Вы можете изменить выводы 2 и 3 для подключения датчика HC-SR04+ на любые другие, указав их в скетче при объявлении объекта objSensor.
Сервоприводы | Trema Power Shield | |
---|---|---|
1 конечность | Горизонтальный сустав (№ 0) | вывод 4 на белой колодке |
Вертикальный сустав (№ 1) | вывод 5 на белой колодке | |
2 конечность | Горизонтальный сустав (№ 2) | вывод 6 на белой колодке |
Вертикальный сустав (№ 3) | вывод 7 на белой колодке | |
3 конечность | Горизонтальный сустав (№ 4) | вывод 8 на белой колодке |
Вертикальный сустав (№ 5) | вывод 9 на белой колодке | |
4 конечность | Горизонтальный сустав (№ 6) | вывод 10 на белой колодке |
Вертикальный сустав (№ 7) | вывод 11 на белой колодке |
Вы можете изменить выводы 4-11 для подключения сервоприводов на любые другие, указав их в скетче при объявлении массива объектов pinServo[8]. Трехпроводные шлейфы сервоприводов устанавливаются следующим образом:
- Оранжевый провод подключается к выводу на белой колодке.
- Красный провод подключается к выводу на красной колодке.
- Коричневый провод подключается к выводу на чёрной колодке.
Вы можете изменить вывод A0 для подключения Bluetooth на любой другой, указав его в скетче при объявлении объекта objHC05.
Выводы RX и ТХ модуля подключаются проводами к выводам TX и RX колодки с надписью Serial. Трёхпроводной шлейф подключённый к выводам K, V, G, устанавливается следующим образом:
- Вывод K (Key) подключается к выводу на белой колодке.
- Вывод V (Vcc) подключается к выводу на красной колодке.
- Вывод G (GND) подключается к выводу на чёрной колодке.
Вы можете изменить вывод D12 для подключения кнопки на любой другой, указав его в скетче при определении константы pinK.
Трёхпроводной шлейф подключённый к выводам S, V, G, устанавливается следующим образом:
- Вывод S (Signal) подключается к выводу на белой колодке.
- Вывод V (Vcc) подключается к выводу на красной колодке.
- Вывод G (GND) подключается к выводу на чёрной колодке.
Представленная ниже схема совпадает со схемой из инструкции по сборке QUADRUPED, но к ней добавились два модуля: bluetooth (подключается к выводам A0, TX и RX) и кнопка (подключается к выводу D12).
Элементы схемы: «Э0». «Э7» - сервоприводы, «Э8» - датчик расстояния, «Э9» - Trema bluetooth модуль, «Э10» Trema кнопка.
Код программы для пульта дистанционного управления:
В данном коде показания джойстика и потенциометра постоянно сохраняются в массив arrData после чего он отправляется по радиоканалу через bluetooth модуль. Скетч калибрует джойстик при старте, считывая показания для осей X и Y, которые до отключения питания считаются центральными. Показания осей X и Y отправляются в пределах значений от -100 до +100. Показания потенциометра отправляются в пределах значений от 0 до +100. Состояние кнопки отправляется как число 0 или 1.
Если подать питание с нажатой кнопкой джойстика, то в коде setup выполнится код вызова функции createMaster, которая установит bluetooth модулю роль мастера, инициирует поиск ведомого с именем "QUADRUPED" и PIN-кодом "1212", и если такое ведомое устройство будет доступно, то произойдёт сопряжение и соединение с этим ведомым bluetooth модулем (именно такое имя и PIN будут присвоены bluetooth модулю на роботе). Если не нажимать на джойстик при подаче питания, то функция createMaster будет пропущена, а bluetooth модуль будет принимать попытки создать соединение на основе своих последних настроек. Таким образом сопряжение с bluetooth модулем робота достаточно выполнить всего один раз.
Функции begin(), createMaster() и checkConnect() объекта objHC05 возвращают true или false, и вызываются как условие оператора while(), то есть инициализация, назначение роли и проверка соединения bluetooth модулей выполняются до тех пор пока не будет получен положительный результат. Эти функции можно вызывать однократно только в том случае если Вы уверены что второй bluetooth модуль (модуль робота) точно включён, ему назначена роль ведомого, он готов к соединению и находится в радиусе действия связи. Иначе функция вернёт false, а код продолжит выполняться не отреагировав на ошибку.
Функция send() объекта objHC05 способна отправлять массивы и переменные любых типов, и так же возвращает true или false, сообщая о результате приёма данных вторым bluetooth модулем. В нашем случае данную функцию нет необходимости вызывать в условии оператора while(), так как эта функция и так постоянно вызывается в коде цикла loop().
С подробным описанием всех функций объекта objHC05 библиотеки iarduino_Bluetooth_HC05 можно ознакомиться на странице Wiki - Trema-модуль bluetooth HC-05.
Код программы для робота QUADRUPED:
Так как Trema-модуль Bluetooth HC-05 подключён к аппаратной шине UART, то перед загрузкой данного скетча нужно отсоединить провод, либо от вывода TX модуля, либо от вывода RX на плате Tream-Power Shield, а после загрузки скетча, подсоединить обратно.
Значения массива cenAngle должны быть изменены (откалиброваны) на действительные углы сервоприводов в градусах, при которых все суставы робота находятся в центральном положении. Это выполняется с использованием калибровочного скетча, как описано на странице Сборка QUADRUPED. Электроника + Калибровка.
В данном коде управление роботом осуществляется через функции:
- funLimbMove - установка одного сустава выбранной конечности в значение от -100 до 100.
- Если указать funLimbMove(4,1,100), то у 4 конечности, вертикальный сустав, поднимется максимально вверх.
- Если указать funLimbMove(4,0,-100), то у 4 конечности, горизонтальный сустав, сдвинется максимально влево.
- Если указать funLimbStep(4,x,0,50), где x будет увеличиваться от 0 до 255, то 4 конечность совершит следующие действия: плавный сдвиг внизу назад, резкий подъём, быстрый проход сверху вперёд и резкий спуск, остановившись в той же позиции с которой начинались движения. Что похоже на реальное движение лап при движении вперёд.
- Если указать funLimbStep(4,x,0,50), где x будет уменьшаться от 255 до 0, то 4 конечность совершит те же действия, но в обратном порядке. Что похоже на реальное движение лап при движении назад.
- Предпоследний аргумент функции можно указывать в пределах от -100 до +100, он будет ограничивать амплитуду движений левых или правых конечностей, что вызовет заворачивание (поворот) влево (-100. 0) или вправо (0. +100).
- Последний аргумент функции можно указывать в пределах от 0 до 100, это высота подъёма корпуса в процентах, если указать 0, то QUADRUPED будет «ползти», чем больше значение, тем выше QUADRUPED. Средний подъём корпуса соответствует значению 50.
- Если указать funLimbGait(1, x, 0, 50), где x будет увеличиваться от 0 до 255, то все конечности совершат действия при которых QUADRUPED пройдёт вперёд и прямо на один полный шаг, а его конечности вернутся в ту же позицию с которой этот шаг начинался.
- Если указать funLimbGait(1, x, 0, 50), где x будет уменьшаться от 255 до 0, то все конечности совершат те же действия, но в обратном порядке. Следовательно, QUADRUPED пройдёт тот же шаг но назад.
- Если указать funLimbGait(0, x, 0, 50), где x будет увеличиваться от 0 до 255, то все конечности совершат действия при которых QUADRUPED выполнит разворот вправо на один полный шаг, а его конечности вернутся в ту же позицию с которой этот разворот начинался.
- Последний и предпоследний аргументы выполняют те же действия что и аргументы функции funLimbStep той же позиции, а именно, выполняют заворот (поворот) и поднятие корпуса.
- Вы можете дополнить функцию funLimbGait придумав свои варианты походок.
Получение данных и работа с Trema-модулем Bluetooth HC-05 осуществляется через функции и методы объекта objHC05 библиотеки iarduino_Bluetooth_HC05, с подробным описанием которых можно ознакомиться на странице Wiki - Trema-модуль bluetooth HC-05.
Управление:
Сразу после сборки, загрузки скетча и подачи питания на пульт, и QUADRUPED, суставы робота будут ослаблены, и он не будет реагировать на команды с пульта, так как Bluetooth модулям требуется сопряжение (создание пары). Сопряжение достаточно выполнить только один раз, bluetooth модули запомнят созданную пару в своей энергонезависимой памяти и будут пытаться соединится друг с другом при каждой последующей подаче питания.
- Отключите питание пульта (если оно было подано), нажмите на джойстик (как на кнопку) и подайте питание пульта. После выполнения этих действий bluetooth модулю пульта будет назначена роль мастера и он начнёт поиск ведомого с именем «QUADRUPED» и PIN-кодом «1212».
- Подключите питание робота (если оно не было подано), нажмите и удерживайте кнопку сопряжения не менее 1 секунды (её можно нажимать в любое время). После нажатия на кнопку, bluetooth модулю робота будет назначена роль ведомого с именем «QUADRUPED» и PIN-кодом «1212», и он будет ожидать подключение мастера.
- Для выполнения повторного сопряжения (если оно потребуется) нужно выполнить те же действия как для пульта, так и для робота.
- Как только связь будет установлена, суставы робота «оживут» и он будет выполнять команды пульта. Если Вы отключите питание пульта, то суставы робота ослабнут и вновь оживут при подаче питания пульта.
Управление роботом с пульта выполняется следующим образом:
- Если отклонить джойстик вперёд, то и робот пойдёт вперёд, а скорость будет зависеть от степени отклонения джойстика.
- Если отклонить джойстик назад, то и робот пойдёт назад, а скорость будет зависеть от степени отклонения джойстика.
- Если отклонить джойстик вперёд и влево, или вправо, то и робот пойдёт вперёд заворачивая влево, или вправо. Скорость будет зависеть от степени отклонения джойстика вперёд, а радиус поворота от степени отклонения джойстика влево, или вправо.
- Если отклонить джойстик назад и влево, или вправо, то и робот пойдёт назад заворачивая влево, или вправо. Скорость будет зависеть от степени отклонения джойстика назад, а радиус поворота от степени отклонения джойстика влево, или вправо.
- Если отклонить джойстик влево или вправо, но не отклонять его вперёд, или назад, то робот начнёт разворачиваться на месте влево, или вправо, а скорость разворота будет зависеть от степени отклонения джойстика.
- Если нажать на джойстик (при включённом питании), то все суставы конечностей робота установятся в центральные положения.
- Если поворачивать ручку потенциометра по часовой стрелке, то корпус робота будет подниматься, вне зависимости от положения джойстика.
- Если поворачивать ручку потенциометра против часовой стрелке, то корпус робота будет опускаться, вне зависимости от положения джойстика.
Примечание:
Так как Trema-модуль Bluetooth HC-05 установленный на роботе, подключён к аппаратной шине UART, то перед загрузкой скетча робота нужно отсоединить провод, либо от вывода TX модуля, либо от вывода RX на плате Tream-Power Shield, а после загрузки скетча, подсоединить его обратно. Не рекомендуется использовать программную шину UART в устройствах управляющих сервоприводами, так как библиотека SoftwareSerial влияет на поведение библиотеки Servo во время передачи данных.
Можно обойтись без добавления кнопки сопряжения к роботу «QUADRUPED», тогда в скетче нужно выполнять сопряжение автоматически при каждой подаче питания робота и пульта. Делается это следующим образом:
В скетче пульта исключите оператор «if» из предпоследней строки кода setup, оставив только тело оператора:
В скетче робота исключите целиком все строки в которых встречается константа «pinK» или функция «funWaitMaster()», а код setup() перепишите так:
После внесения этих изменений к роботу можно не подключать кнопку, а при подаче питания не требуется нажимать на джойстик (или кнопку робота), но установка связи между пультом и роботом будет занимать больше времени.
В этом пошаговом руководстве рассматривается создание дистанционно управляемого робота на основе двухколёсного шасси и манипулятора. Управляется робот по Bluetooth из мобильного Android-приложения.
Программы и онлайн-сервисы:
Arduino IDE
App InventorВступление
Из этого пошагового руководства вы узнаете, как создать робота с манипулятором и управлением с Android устройства. Приложение создано с помощью App Inventor. Каждая часть проекта будет рассмотрена отдельно:
- Как управлять сервоприводами
- Как управлять мотор-редукторами с коллекторными моторами
- Как использовать Bluetooth модуль HC-05
- Как управлять роботом с помощью мобильного телефона
Надеюсь, что это руководство раскрывает все аспекты, необходимые для создания подобного робота.
Управление
Прежде всего, мы должны знать, как робот будет принимать команды. Для передачи данных используется модуль Bluetooth, который подключается к Android устройству (смартфон, планшет), на котором запущено приложение, созданное в App Inventor. На данный момент нам нужно знать, что мы отправляем команды роботу с нашего мобильного приложения по Bluetooth.
Электроника
Комплект шасси очень прост в сборке, но это занимает некоторое время. Наборов шасси много, следуйте инструкциям по сборке, прилагаемым к вашему набору шасси.
Собранное шасси, используемое мной, выглядит так:
MotorShield для Arduino позволяет управлять мотор-редукторами, установленными на нашем шасси. Если вы подключите такие мотор-редукторы на прямую к плате Arduino, она выйдет из строя. Это связано с тем, что каждому такому мотору требуется не менее 80 мА, а максимальный ток, который может обеспечить каждый порт или вывод Arduino, составляет 30мА. Суммарный ток всего микроконтроллера, не более 150ма. Поэтому не пытайтесь подключить такие или более мощные моторы напрямую к плате Arduino.
Шилд моторов помогает вам управлять направлением движения шасси, например, двигаться вперед, назад, повернуть или остановиться.
Драйвер моторов L293D позволяет управлять двумя коллекторными моторами. На плате таких драйвера два, т.е. суммарно можно управлять до 4 коллекторными моторами. Драйвер позволяет задавать направление вращения для каждого мотора, а также использовать ШИМ для регулировки скорости вращения.
Шилд разработан для установки в некоторые платы Arduino, например, Uno или Mega. Для удобства подключения, и чтобы иметь возможность использовать контакты Arduino, к выводам сверху припаять PLS штекер.
Сам шилд моторов устанавливается на Arduino следующим образом:
Если используется другая плата, например, NANO, подключить к ней шилд моторов можно с помощью соединительных проводов.
Модуль Bluetooth HC-05
Это модуль UART-моста, который позволяет без проводов управлять роботом.
Вместо модуля HC-05 можно использовать другой подобный. Модули HC-05 бывают немного разные, но это не существенно. У используемого модуля выведено 6 контактов, для работы используется только средние четыре контакта (RX, TX, GND, +5V):
Подключение:
5В на модуле Bluetooth к 5v на Arduino
GND на модуле Bluetooth к GND на Arduino
Rx на модуле Bluetooth к Tx на Arduino
Tx на модуле Bluetooth к Rx на ArduinoОбратите внимание, что Rx подключается к Tx, а не Tx к Tx и Rx к Rx. Вывод Rx (receiver, приёмник) служит только для приёма данных, а Tx (transmitter, передатчик) только для передачи. По аналогии, это как динамик и микрофон - динамик излучает звуки, а микрофон их регистрирует и «соединять» микрофон с микрофоном или динамик с динамиком не имеет смысла.
Сервоприводы манипулятора
У сервоприводов 3 провода: красный (плюс питания), коричневый (земля), желтый или оранжевый (управляющий).
Не запитывайте сервоприводы от платы Arduino или она выйдет из строя, т.к. не рассчитана на такие большие токи - каждый сервопривод может потреблять два и более ампера, на что схема питания Arduino совершенно не рассчитана.
Для питания используйте внешний источник питания. В данном случае используется аккумулятор, а для тестов можно подключить к внешнему блоку питания или сразу. Земля (GND) источника питания (аккумулятора или внешнего блока питания) и Arduino должны быть соединены.
Красный провод к плюсу питания внешнего источника питания. Коричневый провод и к земле внешнего источника питания и к земле Arduino. Оранжевые провода к любым цифровым выводам на Arduino.
Я подключил сервоприводы к выводам d9 и d10:
Если вы подключите к другим выводам, не забудьте в этих двух строчка поменять числа, в соответствии с тем, куда вы подключили сервоприводы.
Мотор-редукторы
В зависимости от набора, провода к моторам уже могут быть припаяны или как в моём случае, их нужно было припаять самостоятельно.
У коллекторных моторов нет полярности, т.е. нет положительного и отрицательного выводов. В зависимости от того, на какие выводы будет подано + и -, от этого будет зависеть направление вращения мотора.
После того, как провода припаяны к моторам, подключаем их к мотор-шилду.
Моторы можно подключить к выводам «Мотор 1» и «Мотор 2» или «Мотор 3» и «Мотор 4». В данном случае моторы подключены к выводам «Мотор 1» и «Мотор 2», если подключите к 3 и 4, не забудьте внести изменения в коде.
Аккумулятор подключается к специальному разъёму на плате шилда. Что бы было легко отключать питание, аккумулятор можно подключать через разъём или на проводе «+питания» припаять выключатель.
Сервоприводы можно подключить на прямую к шилду моторов, для этого на нём есть два разъёма.
В случаях, когда напряжение аккумулятора проседает из-за сильно мощных сервоприводов или для сервоприводов хочется использовать аккумулятор с большим напряжением, можно использовать второй аккумулятор. При использовании двух аккумуляторов, сигнальные провода от сервоприводов подключаются к выводам шилда, а +питания и земля к аккумулятору. Также обязательно соединить землю аккумулятора с землёй Arduino или сервошилда (на разъёме к которому подключаются моторы, средний вывод — это земля).
Bluetooth
Схема подключения модуля bluetooth к плате Arduino:
Модуль подключается к аппаратному последовательному интерфейсу Arduino, по которому загружается скетч. Чтобы модуль не мешал программированию, перед загрузкой скетча отключите ему питание (провод +5В), а после загрузки скетча снова подключите.
Это демонстрационный проект, возможно вам захочется на его основе сделать что-то своё и при программировании нужно будет часто загружать скетч. В таком случае постоянно отключать питание будет не очень удобно и модуль блютуза можно подключить к другим выводам Arduino – загрузка скетча будет производиться по аппаратному UART, а для блютуза использовать программную реализацию. Программный UART реализован в библиотеке SoftwareSerial.
Программа
Приложение для Android можно скачать по следующей ссылке.
Скетч:
Для работы скетча нужны две библиотеки, AFMotor и Servo. Если они не подключены, подключить их можно в диспетчере библиотек. AFMotor в менеджере библиотек называется «Adafruit Motor Shield library», для используемого шилда подходит первая версия библиотеки.
В этот раз я опишу процесс подключения к моему роботу "Ведроид-мобиль" модуля Bluetooth JY-MCU и реализую управление через смартфон на Android.
Модернизация Motor Shield
Получилось так, что производители модуля Motor Shield лишили своих покупателей возможности устанавливать поверх своего продукта другой модуль. Видимо им нравится быть сверху или просто зажали нормальную панельку контактов.
Меня этот нюанс совсем не устраивает. Именно поэтому я решил взяться за паяльник и привести Motor Shield к удобному для меня виду.
Аккуратно выдрал родные панельки контактов и выкинул их нафиг.
Установил на их место нормальные.
В таком виде модулем стало пользоваться гораздо удобнее. Теперь я смогу нормально подключить провода от Bluetooth в разъемы, а не припаивать их намертво к контактам на Motor Shield.
Bluetooth модуль JY-MCU для Arduino
Сам Bluetooth модуль JY-MCU довольно миниатюрный. В комплект поставки входит кабель для подключения. Назначение выводов расписано на обратной стороне.
Запитать его можно от источника питания 3,6-6В. Это предоставляет нам возможность подключить его напрямую к Arduino без использования стабилизатора или делителя напряжения.
Код, используемый при подключении к устройству: 1234.
Подключение Bluetooth JY-MCU к Arduino Mega 2560
Подключение довольно простое.
Официальная схема подключения:
- VCC на JY-MCU подключаем к +5В Arduino
- GND на JY-MCU подключаем к GND Arduino
- TXT на JY-MCU подключаем к RX (0) на Arduino
- RXD на JY-MCU подключаем к TX (1) на Arduino
При таком варианте подключения придется каждый раз отключать питание модуля Bluetooth перед загрузкой скетча. Не забывайте про это.
Меня такой вариант не устраивает, поэтому я решил использовать дискретные порты с поддержкой Serial.
Неофициальная схема подключения:
- VCC на JY-MCU подключаем к +5В Arduino
- GND на JY-MCU подключаем к GND Arduino
- TXT на JY-MCU подключаем к дискретному PIN 50 на Arduino
- RXD на JY-MCU подключаем к дискретному PIN 51 на Arduino
Вот теперь можно загружать скетчи без отключения питания модуля Bluetooth.
Чтобы закрепить Bluetooth, я решил использовать плату Proto Shield и миниатюрную беспаечную макетную плату. К ней в будущем и буду подключать остальное оборудование, элементы управления и индикации.
Скетч для управления роботом на Arduino по Bluetooth через смартфон на Android
В своём скетче я реализовал следующие функции:
- Движение вперед
- Движение назад
- Разворот влево
- Разворот вправо
- Плавный поворот влево при движении вперед
- Плавный поворот вправо при движении вперед
- Плавный поворот влево при движении назад
- Плавный поворот вправо при движении назад
- Остановка
В скетче использовал функции, чтобы не дублировать код при схожих событиях.
Программа Bluetooth RC Car - управление роботом-машинкой со смартфона на Android
В свой смартфон я установил программу Bluetooth RC Car. На мой взгляд - это лучшая софтинка для управления роботом-машинкой.
Программа позволяет передавать команды при нажатии на кнопки или реагировать на данные с акселерометра в смартфоне, регулировать скорость движения ползунком, включать передние и задние фонари, включать и выключать звуковой сигнал, включать и выключать сигнал “аварийка”.
Для работы программы требуется Android версии 2.3.3 или выше. Размер программы 3 мегабайта.
- F – вперед
- B – назад
- L – влево
- R – вправо
- G – прямо и влево
- I – прямо и вправо
- H – назад и влево
- J – назад и вправо
- S – стоп
- W – передняя фара включена
- w – передняя фара выключена
- U – задняя фара включена
- u – задняя фара выключена
- V – звуковой сигнал включен
- v – звуковой сигнал выключен
- X – сигнал “аварийка” включен
- x - сигнал “аварийка” выключен
- 0 – скорость движения 0%
- 1 – скорость движения 10%
- 2 – скорость движения 20%
- 3 – скорость движения 30%
- 4 – скорость движения 40%
- 5 – скорость движения 50%
- 6 – скорость движения 60%
- 7 – скорость движения 70%
- 8 – скорость движения 80%
- 9 – скорость движения 90%
- q – скорость движения 100%
Как вы видите, полигон для творчества вполне неплохой. Я бы еще добавил возможность раздельного включения правых и левых фонарей для передних и задних фар.
Жирным я выделил команды, поддержка которых уже реализована в скетче. Остальные я собираюсь использовать по другому назначению.
Принцип передачи команд: при нажатии на кнопку в программе, команда передается по Bluetooth один раз, а при отпускании кнопки сразу передается команда S-остановка.
Демонстрация работы
В следующий раз я планирую подключить к роботу ультразвуковой дальномер и реализовать алгоритм объезда препятствий.
Сервоприводы один из важных исполнительных механизмов умных устройств. Разберемся в некоторых приемах управления ими на базе платформы Ардуино. В статье показаны три типовых подхода: управление по заданной программе, по сигналу внешнего датчика и удаленное управление по цифровому интерфейсу. Показан подход для контроля фактического угла поворота.
Что такое сервопривод?
Вначале определимся, что представляет из себя сервопривод. Это умный двигатель, который может поворачивать свой ротор на заданный угол. Есть правда сервоприводы, вращающиеся непрерывно в разные стороны, с регулируемой скоростью, но сейчас речь не о них.
Структура сервоприводаУправление сервоприводом по заданной программе
Когда последовательность действий заранее известна, можно записать её в массив и затем поочередно передавать сервоприводу.
Подключение одного сервопривода к АрдуиноДля программного управления можно использовать следующую программу:
Команды можно легко убирать и добавлять, программа сама рассчитает их число.
Управление несколькими сервоприводами сигналом с датчика
Схема подключения выглядит так:
Подключение двух сервоприводов и датчика к АрдуиноАлгоритм реализован в программе Ардуино:
Поворачивая ручку потенциометра сервоприводы приведутся в движение и станут следить за углом поворота.
Удаленное управление сервоприводом по последовательному порту Ардуино
Иногда нужно удаленно управлять исполнителем, подавая команды по последовательному порту UART Ардуино. Управлять можно с ПК и мобильных телефонов, а также с других устройств по USB, UART или Bluetooth.
Схема не отличается от первой:
Подключение сервопривода к Ардуино для удаленного управления по USBПрограмма принимает по последовательному порту строку с числом равным углу требуемого отклонения сервопривода, а затем постепенно переводит рычаг на нужный угол. Затем опять ждет команд.
Благодаря этому, есть возможность определить угол поворота сервопривода.Управление может осуществляться через монитор последовательного порта Ардуино, терминал порта или терминал Bluetooth на мобильном устройстве, если подключить Bluetooth модуль к Ардуино.
Читайте также: