Робот на Arduino, управляемый по Bluetooth со смартфона
Всем привет! Сегодня я покажу вам как создать робота, управляемого по Bluetooth со смартфона. В этом уроке использованы:
1. Плата Arduino Uno с кабелем для подключения к компьютеру
2. Компьютер с установленной Arduino IDE и драйверами для плат
4. Драйвер двигателей L298N
5. Bluetooth модуль HC-05 или HC-06
8. Аккумуляторы 18650 2 штуки и бокс для них
Ссылки на уроки по L298N и Bluetooth модулю
Вот ссылки на мои уроки по Bluetooth модулю и драйверу L298N:
Описание робота
Корпус робота, двигатели и электронные компоненты я взял из набора «Мобильные роботы на базе Arduino». Натолкнулся я на этот набор когда ещё только начал заниматься Arduino. Помню, как провозился целый месяц, чтобы робот наконец-то начал слушаться смартфона))) Заказать его можно как в некоторых интернет магазинах, так и на официальном сайте . Вместе с набором идут компоненты для сборки роботов, о которых я расскажу в своих дальнейших статьях.
Вот как выглядит робот из набора (извиняюсь за качество фото, лучше сделать не могу):
Робот имеет четыре мотора с четырьмя колёсами. Управляться он будет со смартфона с помощью программы Bluetooth RC Controller, о которой я уже писал в статье про Bluetooth модуль. Давайте же приступим к написанию программы для нашего робота, но сначала нужно его собрать.
Инструкция по сборке робота
Вот инструкция по сборке робота из набора (листайте по стрелочкам):
Картонный робот под управлением смартфона
В данной статье мы с вами построим картонного робота на трех сервоприводах, управляемых 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. Используя мобильное приложение RemoteXY проверьте, что ваш смартфон может соединиться с вашим новым проектом. Не забудьте, что модуль Bluetooth необходимо подключить к аппаратному последовательному порту к пинам 0(RX) и 1(TX). Если смартфон соединился успешно, тогда идем дальше.
Сформированная структура для переменных RemoteXY в скетче проекта должна выглядеть следующим образом.
Программа управления
Наша управляющая программа должна выполнять следующие задачи:
- Преобразовывать управляющие воздействие слайдеров в команды для сервоприводов.
- Преобразовывать нажатия кнопок управления глазами в зажигание двух глаз-светодиодов, если выключатель switch_1 выключен.
- Поочередно зажигать глаза-светодиоды, если выключатель switch_1 включен. При этом нажатие кнопок управления глазами не влияет на состояние светодиодов.
Также очень важно учесть, что программа должна выполняться непрерывно. Именно по этому в функции loop, главном цикле программы, нельзя использовать паузы. Например, паузу часто используют в режиме моргания двух светодиодов-глаз, ожидая время между переключениями светодиодов. В нашем случае такой подход приведет к ошибкам. В каждом цикле loop вызывается функции RemoteXY_Handler (), которая отвечает за обмен данными со смартфоном через модуль Bluetooth. Если эта функция не будет вызвана в течении длительного времени, она не сможет корректно выполнить обмен данными. Как же решить проблему отсчета времени между переключениями светодиодов? Очень просто, используя встроенный таймер. Далее приведен исходный код программы управления.
В начале программы определяются номера пинов, которые будут использованы для глаз-светодиодов и для управления тремя сервоприводами. Функция setup инициализирует пины светодиодов как выходы, инициализирует классы сервоприводов. Так же устанавливаются начальные положения слайдеров в среднее положение.
В функции loop первым делом вызывается обработчик RemoteXY_Handler. Далее вычисляется интервал времени, прошедший с начала предыдущего цикла функции loop, в миллисекундах. Как раз этот интервал используется для расчета момента времени, в который необходимо переключить светодиод. Если переключатель switch_1 не включен, то состояние кнопок button_left и button_right напрямую передается на пины управления глазами-светодиодами. Если switch_1 включен, реализуется алгоритм моргания глазами. Длительность свечения одного глаза равна 500 миллисекунд.
Далее, положения слайдеров управления руками и головой преобразуются в длительность импульсов для управления соответствующими сервоприводами. Слайдер изменяет свое положение от 0 до 100, в то время как длительность импульсов управления сервоприводом должна изменяться в пределах от 500 до 2500 мс. Обратите внимание, что сервопривод правой руки двигается в противоположном направлении, и это отражено в формуле преобразования.