Bluetooth машинка на Arduino с двумя моторами
Самая простая машинка на Arduino с дистанционным управлением со смартфона по Bluetooth. Лёгкая схема, простой скетч. Едет на двух электромоторах, питается от кроны. Рама, на которой всё держится, изготавливается из подручных материалов и ограничивается лишь фантазией.
Комплектующие
- Arduino Uno — https://bit.ly/2P3rCI5
- драйвер моторов L298N — https://bit.ly/3dvbDMg
- Bluetooth модуль HC-06 или HC-05 или подобный — https://bit.ly/3x4nhFX
- моторы постоянного тока с редуктором и с колёсами — 4 шт — https://bit.ly/2P4e9Qr
- провода папа-папа, мама-мама, папа-мама 10-30 см — https://bit.ly/3n3z0jl
- аккумулятор 9В, я использовал с разъёмом micro-USB для зарядки — https://bit.ly/2QeFbF6
- зажим для аккумулятора 9В — https://bit.ly/32rmwZi
- тумблер — 1 шт — https://bit.ly/3artZfr
Для изготовления рамы машинки можно использовать разнообразные материалы:
- листовой лёгкий материал, который легко обрабатывать — оргстекло, фанера, текстолит, оргалит и т.п.
- третье колесо, которое будет опорным — оно должно уметь ехать во всех стороны (хорошо подходят мебельные колёсики);
- крепёжные элементы — болты, гайки, шурупы.
Схема подключения
Питание платы берётся от «Кроны» и подаётся на Arduino через пины VIN и GND. Также подаётся отдельно на драйвер двигателей через порты +12V и GND.
Blutooth модуль HC-06 получает питание в 3,3 вольта от Arduino. Если подключить к 5 вольтам, то тоже работает нормально. Выход RX модуля подключается к TX на Arduino, а TX — в RX, то есть наоборот.
На драйвере двигателей нужно снять две боковые перемычки — Enable. Пины под ними позволят нам управлять скоростью вращения двигателей. И эти пины подключаются к Arduino обязательно к ШИМ-портам (обозначенные знаком ~). На схеме это порты 3 и 5.
Питание моторов подаётся на Input драйвера от Arduino с портов 2 и 4, 6 и 7. А сами моторы подключаются к Output A и Output B драйвера.
Если после сборки и прошивки, вы подаёте на машинку сигнал двигаться вперёд, а оба колеса при этом вращаются в разных направления, то нужно поменять местами провода на одном из моторов в выходе Output.
Если при движении вперёд машинка едет назад, то нужно поменять местами провода Output обоих двигателей (хотя, кто знает, где у ней перед, а где зад…).
Если при повороте налево, машинка едет направо, то нужно поменять местами Output A и Output B.
Если подключить всё по схеме, то скетч переделывать не нужно будет.
Скетч
Перед прошивкой обаятельно отключите питание у Blutooth модуля. Для этого надо просто отсоединить один из его проводов питания.
В скетче прописанные необходимые поясняющие комментарии.
Движение и остановка колёс осуществляется за счёт функций. А в дальнейшем нужные комбинации функций просто вызываются в нужных местах кода одной строкой. Получается просто и компактный код. Ниже фрагмент кода примером двух таких функций:
void rightWheelForward () < // Правое колесо вперёд. digitalWrite (motorRight1, LOW); digitalWrite (motorRight2, HIGH); analogWrite(enableRight, motorSpeed); >void leftWheelForward () < // Левое колесо вперёд. digitalWrite (motorLeft1, LOW); digitalWrite (motorLeft2, HIGH); analogWrite(enableLeft, motorSpeed); >
Со смартфона приложение по Bluetooth посылает сигналы в виде латинских букв (W, S, E и т.д.). В зависимости от пришедшей команды, с помощью оператора if, вызываются комбинации тех или иных функции. Если вы будете использовать другое приложение, не то, которое я предоставлю ниже, то оно будет посылать другие команды, другие буквы. Соответственно, придётся переписать их в скетче.
Например, когда по Bluetooth приходит ‘ W ‘ вызываются две функции rightWheelForward (); и leftWheelForward (); что заставит оба мотора крутится вперёд.
А если приходит ‘E’, то вызываются функции rightWheelStop (); и leftWheelForward (); что заставит остановиться правый мотор и вращаться вперёд только левый, от чего машинка поведет вперёд вправо.
Есть три вида скорости, которые включаются, когда приходят команды ‘1’, ‘2’ и ‘3’. Скорость можно задавать от 0 до 250. На каждую и трёх команд в скетче прописаны скорости 120, 170 и 250, соответственно.
Если у вас уровень заряда аккумулятора уже на исходе, то при скорости 120 может не поехать или поехать, но не стабильно. Тогда лучше увеличить значение для первой скорости.
Скорость приходит в виде переменной motorSpeed в функцию analogWrite() и запускает двигатель с заданными оборотами.
Приложение
Так как я не владею навыком написания приложение под Anroid, то для создания пульта управления использовать уже известный у многих начинающих разработчиков инструмент визуального программирования — App inventor.
Что-то подсмотрел у других в интернете, что доработал, и получилось такое простое приложение.
Сначала нужно включить машинку и сделать сопряжение по Bluetooth со смартфоном. Пароль модуля 0000 или 1234. После этого откройте приложение и нажмите «Подключиться к машинке». Подключитесь к модулю HC-06. Светодиод на нём должен перестать мигать.
Если сразу начать нажимать на стрелки направлений движения, то не поедет. В первую очередь нужно нажать на одну из трёх скоростей, а уже потом на стрелки направления. Тогда поедет.
И, так как я не публиковал это приложение в Google Play, смартфон может ругаться на его безопасность. Но можно смело устанавливать. В нём всё работает безопасно.
Сборка
Можно купить готовое шасси для машинки сразу вместе с моторами и колёсами. Останется только установить электронику и всё подключить.
Но намного интереснее создать это самому. Для изготовления подойдёт любой листовой материал, который вам будет легко обрабатывать, и который достаточно лёгкий. Например, оргалит, текстолит, фанера. Я выбрал оргстекло, что сделало мою машинку даже очень похожей на шасси из магазина.
Из инструментов могут понадобиться:
- Ручной или электрический лобзик (я пользовался ручным), чтобы отрезать нужные куски от материала.
- Дрель или шуроповёрт, свёрла.
- Крепёжные элементы — болты, гайки и саморезы любого подходящего диаметра.
Получилось дёшево и сердито. А главное работает.
Паять я тоже ничего не стал, чтобы потом можно было бы легко разобрать эту машинку и модернизировать. Припаивал только провода к моторам.
В магазинном наборе для крепления моторов используются специальный кронштейны, к которым сам мотор прикручивается болтами диаметром 3 мм. Но болтов нужного диаметра и длины у меня не оказалось, хоть и можно было изготовить аналогичный кронштейн. Поэтому пришлось изощряться и использоваться даже детали детского конструктора, чтобы надёжно прикрепить моторы. На видео крепление моторов рассмотрено лучше.
Платы в идеале лучше прикручивать короткими болтами с диаметром 3 мм. Но и таких у меня не оказалось. Поэтому пришлось делать в оргстекле отверстия 2 мм и прикручивать платы саморезами. Держится вполне нормально.
У модуля Bluetooth особая проблема крепления — там отверстий для крепления нет вообще. Пришлось прижимать плату к раме другой деталью из оргстекла. Тут главное не сжать слишком сильно, чтобы не повредить.
Аккумулятор крепится аналогично Bluetooth модулю, только снизу.
И обязательно прикручиваем мебельное поворотное колесо, которое станет опорным, и не будет приводным. Следите за тем, чтобы вся конструкция была в горизонтальном положении, когда стоит на всех трёх колёсах.
Видео
Bluetooth машинка на Arduino с двумя моторами : 19 комментариев
- arduino Автор записи 04.11.2021 в 19:00 Здравствуйте! Два аккумулятора по 3,7 вольт, полагаю, не хватает для питания двух таких моторов.
- arduino Автор записи 04.11.2021 в 23:56 Надо тогда в мониторе порта посмотреть, приходят ли от блютуза сигнал в ардуину.
- arduino Автор записи 05.12.2021 в 20:17 Здравствуйте! Скетч на Android? Не знаю, что это ) Скетч на Arduino есть в статье.
- arduino Автор записи 04.04.2022 в 20:26 Здравствуйте! Все исходники даются в статье. Если htm о мобильном приложении, то оно делалось в визуальном редакторе, а не с помощью кода.
- arduino Автор записи 13.12.2022 в 19:03 Не обязательно, если удобен какой-то другой способ отключения от питания.
- arduino Автор записи 17.02.2023 в 10:32 Здравствуйте! Убедитесь, что блютуз-модуль исправен — попробуйте к другому телефону подключить.
- arduino Автор записи 15.05.2023 в 14:35 Здравствуйте! С моим скетчем должно работать, но скоростью моторов нельзя будет управлять.