Самоделки ардуино блютуз

Добавил пользователь Владимир З.
Обновлено: 08.09.2024

Плата Arduino Uno является чрезвычайно удобным инструментом для тех, кто хочет попробовать свои силы в изучении и программировании микроконтроллеров. Но одним из ее недостатков является то, что для ее программирования необходимо подключение платы к компьютеру по USB кабелю, а это не всегда представляется возможным, например, в случаях, когда плата уже "упакована" внутрь какого-нибудь устройства в закрытом корпусе. Единственно возможным решением в данном случае является беспроводное программирование или, как его еще называют – "программирование по воздуху" (OTA – Over the Air). Подобный вид программирования достаточно легко реализуется в таких микроконтроллерах как ESP8266 и ESP32 поскольку они имеют встроенный контроллер Wi-Fi. Но в Arduino для реализации беспроводного программирования нам необходимо будет задействовать Bluetooth модуль – рассмотрением данных вопросов мы и займемся в данной статье.

Внешний вид беспроводного программирования платы Arduino Uno по Bluetooth

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Bluetooth модуль HC05 (купить на AliExpress).
  3. Резисторы 1 кОм, 2,2 кОм (купить на AliExpress).
  4. Конденсатор 0,1 мкФ (купить на AliExpress).
  5. Адаптер питания.
  6. Макетная плата.
  7. Соединительные провода.

Bluetooth модуль HC05

Модуль HC05 представляет собой модуль Bluetooth связи, передающий принятую информацию по последовательному порту, специально спроектированный для осуществления беспроводной связи между микроконтроллерами. Bluetooth модуль HC05 позволяет работать как в режиме ведущего (master), так и в режиме ведомого устройства (slave), и переключаться между этими режимами. Его можно подключить с использованием последовательного порта, работающего со скоростью 9600 бод, что позволяет без проблем подключать его к большинству современных микроконтроллеров. Модуль HC05 работает от питающего напряжения 3.3V, но мы можем непосредственно подключать его к напряжению 5V, поскольку в его составе есть встроенный понижающий регулятор напряжения с 5V до 3.3V.

Внешний вид Bluetooth модуля HC05

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

Программирование платы Arduino с помощью технологии Bluetooth

Для беспроводного программирования платы Arduino первым делом мы должны написать программу чтобы плата Arduino отвечала на AT команды. Для этого подключите плату Arduino к компьютеру с помощью USB кабеля и загрузите в нее следующий код программы:

В данной статье будет подробно расписано создание небольшого приложения для мобильной операционной системы Android и скетча для Arduino. На Arduino Uno будет стоять Wireless Shield с Bluetooth-модулем. Приложение будет подключаться к Bluetooth-модулю и посылать некую команду. В свою очередь скетч по этой команде будет зажигать или гасить один из подключенных к Arduino светодиодов.

Нам понадобится


Создание приложения для Android

Заготовка



Application Name — то имя приложения, которое будет показываться в Google Play Store. Но выкладывать приложение мы не собираемся, поэтому имя нам не особо важно.

Package Name — идентификатор приложения. Он должен быть составлен следующим образом: название Вашего сайта задом наперед, плюс какое-либо название приложения.

Все, наше приложение создано.

Настройка эмулятора

Отладка приложений для Android производится на реальном устройстве или, если такового нет, то на эмуляторе. Сконфигурируем свой.


В результате вы увидите окно эмулятора подобное этому:


Заполнение Activity


Это ни что иное, как наша Activity, которая отображается не в виде графики, а описанная в формате XML.

Сделаем имена компонентов более понятными. Изменим поля android:id следующим образом.

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


Пробный запуск



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

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


Написание кода для Android

Правка манифеста

Каждое Android-приложение должно сообщить системе о том, какие права необходимо ему предоставить. Перечисление прав идет в так называемом файле манифеста AndroidManifest.xml . В нем мы должны указать тот факт, что хотим использовать Bluetooth в своем приложении. Для этого достаточно добавить буквально пару строк:

Добавляем основной код

Пришла пора вдохнуть жизнь в наше приложение. Открываем файл MainActivity.java (src → ru.amperka.arduinobtled). Изначально он содержит следующий код:

Дополним код в соответствии с тем, что нам нужно:

Передавать на Arduino мы будем один байт с двузначным числом. Первая цифра числа — номер пина, к которому подключен тот или иной светодиод, вторая — состояние светодиода: 1 — включен, 0 — выключен.

Число-команда, рассчитывается очень просто: Если нажата красная кнопка, то берется число 60 (для красного светодиода мы выбрали 6-й пин Arduino) и к нему прибавляется 1 или 0 в зависимости от того, должен ли сейчас гореть светодиод или нет. Для зеленой кнопки всё аналогично, только вместо 60 берется 70 (поскольку зеленый светодиод подключен к 7 пину). В итоге, в нашем случае, возможны 4 команды: 60, 61, 70, 71.

Напишем код, который реализует всё сказанное.

Написание скетча

Данные, которые принимает Bluetooth-модуль, приходят через UART (он же Serial-соединение) на скорости 9600 бит/с. Настраивать Bluetooth-модуль нет никакой необходимости: он сразу готов к работе. Поэтому скетч должен уметь следующее:

Особенности заливки скетча

Результат


Заключение

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

Вы можете развить мысль и сделать более дружественный интерфейс на Android, управлять с его помощью гораздо более сложными устройствами, публиковать классные приложения в Android Market и ещё много-много всего интересного!

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International

PROJECT_PHOTO

Bluetooth машинка на Arduino своими руками

Bluetooth машинка с FPV камерой под управлением Arduino Особенности:

ВНИМАНИЕ! Если это твой первый опыт работы с Arduino, читай инструкцию

  • libraries - библиотеки проекта. Заменить имеющиеся версии
  • firmware - прошивки
  • schemes - схемы подключения
  • Android - все файлы с примерами для Android и Thunkable

SCHEME

Материалы и компоненты

Ссылки оставлены на магазины, с которых я закупаюсь уже не один год

Вам скорее всего пригодится

Как скачать и прошить

На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

  • Установить библиотеки в
    C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
    C:\Program Files\Arduino\libraries\ (Windows x86)
  • Подключить внешнее питание 5 Вольт
  • Подключить Ардуино к компьютеру
  • Запустить файл прошивки (который имеет расширение .ino)
  • Настроить IDE (COM порт, модель Arduino, как в статье выше)
  • Настроить что нужно по проекту
  • Нажать загрузить
  • Пользоваться

Настройки в коде

В: Как скачать с этого грёбаного сайта?
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

В: Скачался какой то файл .zip, куда его теперь?
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.

arduino робот

В этот раз я опишу процесс подключения к моему роботу "Ведроид-мобиль" модуля Bluetooth JY-MCU и реализую управление через смартфон на Android.

Модернизация Motor Shield

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

arduino робот

Меня этот нюанс совсем не устраивает. Именно поэтому я решил взяться за паяльник и привести Motor Shield к удобному для меня виду.

arduino робот

Аккуратно выдрал родные панельки контактов и выкинул их нафиг.

arduino робот

Установил на их место нормальные.

arduino робот

В таком виде модулем стало пользоваться гораздо удобнее. Теперь я смогу нормально подключить провода от Bluetooth в разъемы, а не припаивать их намертво к контактам на Motor Shield.

Bluetooth модуль JY-MCU для Arduino

arduino робот

Сам Bluetooth модуль JY-MCU довольно миниатюрный. В комплект поставки входит кабель для подключения. Назначение выводов расписано на обратной стороне.

arduino робот

Запитать его можно от источника питания 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 робот
arduino робот
arduino робот

Скетч для управления роботом на Arduino по Bluetooth через смартфон на Android

В своём скетче я реализовал следующие функции:

  • Движение вперед
  • Движение назад
  • Разворот влево
  • Разворот вправо
  • Плавный поворот влево при движении вперед
  • Плавный поворот вправо при движении вперед
  • Плавный поворот влево при движении назад
  • Плавный поворот вправо при движении назад
  • Остановка

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

Программа Bluetooth RC Car - управление роботом-машинкой со смартфона на Android

В свой смартфон я установил программу Bluetooth RC Car. На мой взгляд - это лучшая софтинка для управления роботом-машинкой.

arduino робот

Программа позволяет передавать команды при нажатии на кнопки или реагировать на данные с акселерометра в смартфоне, регулировать скорость движения ползунком, включать передние и задние фонари, включать и выключать звуковой сигнал, включать и выключать сигнал “аварийка”.

arduino робот

arduino робот

arduino робот

Для работы программы требуется 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-остановка.

Демонстрация работы

В следующий раз я планирую подключить к роботу ультразвуковой дальномер и реализовать алгоритм объезда препятствий.

Похожие записи

Комментариев: 73

Поскорее бы 4 часть =)

Кароче надо бы 4 часть поскорее =)

застрял пока
думаю наводка от двигателя прибавила Ведроиду разума и он начал жить своей жизнью
пока с этим разбираюсь

Припаяй прямо на клемы всех движков керамические кондеры на 0.1мкФ, они снимут помехи которые создают движки.

Oh please! we need translation to english.

Haute in the right corner you can select the language

А для L298N и 2 моторов можно такую же? Ну нету Motor Shield.

А 293 не греется? у меня после 20 секунд пылает!

думаю у вас + и - перепутан, у меня 7.1 вольт силовое, и не греется почти.

'vleft' was not declared in this scope - сплошные ошибки

закинул код с сайта в компилятор для проверки - все нормально. ошибок нет.

Супер проект, супер админ! Сделал себе тоже машинку и переделал android программу, а то фон странный какой-то =)

А куда часть 4 делась.

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

Скажите пожалуйста такой по дойдет модуль Bluetooth модуль BCD110SC-01. Заренее спасибо

подойдет, но учтите, что питание у него только 3,3 вольта - не тыкните случайно в 5 вольт.

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

что значит "при проверке и заливки не скидывается"?

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

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

Питания не хватает

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

Здравствуйте.А какой у вас стоит на компьютере компилятор?

Здравствуйте. Вы можете скинуть ссылку на ваш компилятор. Заранее спасибо!

Пользовался этим кодом все гуд

vforward() - функция движения вперед. Смотрите ниже по коду.

mit551
Вот я как написал для L298N

robot_go используйте для движения вперед

Я так понял это опечатка?

TXT на JY-MCU подключаем к RX (0) на Arduino
RXD на JY-MCU подключаем к TX (1) на Arduino

все верно написано

Отличный проект, все понял кроме одной мелочи - где взять "правильные" панельки контактов? На ебэе все варианты панелек типа "мама" с короткими ногами.

Большое спасибо. :)
Буду с нетерпением ждать следующих проектов в Вашем исполнении. ;)

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

С момента написания статьи программа управления несколько раз обновлялась. Посмотрите в ее настройках - может коды регулировки скорости поменялись.

Нет, скорость все так же задается цифрами от 0 до 9 и q - полная. С телефона сигнал приходит, но значение скорости не меняется, я даже в монитор его выводил для проверки.
Не знаю как раньше, сейчас программа с телефона постоянно спамит символ "S", то бишь остановка с частотой 50 мс. Может он и сбивает? По логике вроде не должен.

Все разобрался. На сайте разработчика программы управления прочитал, что он немного доработал программу. Теперь у него постоянно посылается символ "S" для проверки выхода машинки из диапазона блютус. Так же он соответствует команде стоп, поэтому переключение скорости теперь не работает в данном коде. Ссылка на его код есть в Play Маркет.

TXT на JY-MCU подключаем к дискретному PIN 50 на Arduino
RXD на JY-MCU подключаем к дискретному PIN 51 на Arduino

А где на Uno эти пины находятся? На плате обозначений таких нет, атмега тоже стольго ног не имеет.

Разобрался, все дело в плате. У Вас Mega.

да, Mega
в тот момент UNO просто не было

Еще пару вопросов по-ходу возникло.
Софт Bluetooth RC Car на планшете кто-нибудь пробовал юзать? Софт видимо заточен под телефон и поэтому на планшете отсутствует кнопка меню. Даже связь с блютузом установить не могу. Как можно решить проблему?
И второй вопрос. Переделываю машинку на радиоуправлении. Спереди будет стоять серва для поворота вправо-влево, сзади мотор. Если кто делал, поделитесь кодом, любопытно посмотреть как управление сервой реализовано.

Все работает, переделал код под uno. Скорость регулируется!

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

Привет всем! Помогите решить проблему. Раньше все работало, но щас блютус отказывается работать.в других программах на телефоне работает ( светодиод включает и выключает) ,а тут нет. Подключается в программе и все больше ничего моторчики не крутятся.В чем может быть дело, скетч тот же, пробовал на разные пины подключать tx и rx не помогает.питание для ардуино беру пока с ноутбука а моторшильд с аккумулятора . ( разбираюсь пока плохо не профи))

Да использую пока питание ардуино от ноута потому что спалил стабилизатор на ардуино перемычку не ставлю ( для полной информации) может быть дело в этом ?

А у меня всё время ошибка компиляции вылазит. Что делать? Плата Arduino Uno.

Что за ошибка? Ctal+C поможет её скопировать

sketch_jan06a.ino:1:77: fatal error: AFMotor.h: No such file or directory
compilation terminated.
Ошибка компиляции.

А я нашёл в чем проблема .вBTSerial убрал BT везде и поехало)))) странно раньше и так ездило )

BT убирал, не помогло

Может нет самой библиотеке для моторов у тебя ?

Во второй части

я скачал библиотеку, распаковал, скетч вгрузил, но машина не слушается, постоянно правые колёса крутятся назад

крутятся постоянно назад без перерыва?

Аналогичная проблема, правые колёса крутятся вперёд, остановить их не выходит, всё установил через uno и без шилда, использовал драйвер для моторчиков L293d

видимо используете выводы которые используются мотор шилдом

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

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

автор программки bluetooth RC controller написал:
(Please don't ask for the Android code)

взял - декомпилил, подшаманил для того, чтобы собиралась прога под android studio - работает! кое, что мне нафиг не нужно, и не нравится оформление программы. Короче поменял под себя
Так, что спасибо автору android приложения, что выложил программку на google play ха ха хахахаа :)

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

Та же проблема. Подключение блютуз есть, но машина не едет. Помогите кто может пожалуйста? В чем дело?

Как добавить команду передних фар??

int ledPin1 = 22; // передние фары
int ledPin2 = 24; // передние фары
int ledPin3 = 34; // задние фары
int ledPin4 = 35; // задние фары
int ledPin5 = A8; // клаксон
int ledPin6 = A9; // питание для клаксона
//Создаем объекты для двигателей
AF_DCMotor motor1(1); //канал М1 на Motor Shield — задний левый
AF_DCMotor motor2(2); //канал М2 на Motor Shield — задний правый
AF_DCMotor motor3(3); //канал М3 на Motor Shield — передний левый
AF_DCMotor motor4(4); //канал М4 на Motor Shield — передний правый

//Время мигания Аварийки
int blinkTime = 15; //частота мигания
int leftTime = 0;
boolean signalOn = LOW;
boolean avaOn = LOW;

SoftwareSerial BTSerial(50, 51); // RX, TX

// Создаем переменную для команд Bluetooth
char vcmd;
// Создаем переменные для запоминания скорости двигателей
int vspdL, vspdR;
/* Создаем переменную, на значение которой будет уменьшаться скорость при плавных поворотах.
Текущая скорость должна быть больше этого значения. В противном случае двигатели со стороны направления поворота просто не будут вращаться */
int vspd = 200;

void setup() pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
digitalWrite(ledPin6, HIGH);
// Устанавливаем скорость передачи данных по Bluetooth
BTSerial.begin(9600);
// Устанавливаем скорость передачи данных по кабелю
Serial.begin(9600);
// Устанавливаем максимальную скорость вращения двигателей
vspeed(255,255);
>

void loop() // Если есть данные
if (BTSerial.available())
// Читаем команды и заносим их в переменную. char преобразует код символа команды в символ
vcmd = (char)BTSerial.read();
// Отправляем команду в порт, чтобы можно было их проверить в "Мониторе порта"
//Serial.println(vcmd);

// Передние фары ВКЛ
if (vcmd == 'W') digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
>

// Передние фары ВЫКЛ
if (vcmd == 'w') digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
>

// Задние фары ВКЛ
if (vcmd == 'U') digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
>

// Задние фары ВЫКЛ
if (vcmd == 'u') digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
>

// Аварийка ВКЛ
if (vcmd == 'X') avaOn = HIGH;
>

// Аварийка ВЫКЛ
if (vcmd == 'x') avaOn = LOW;
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
>

Читайте также: