Управление реле ардуино: скетч. Управление по bluetooth Управление розеткой через блютуз и ардуино

1 Описание модуля bluetooth HC-06

Существует большое количество реализаций модулей Bluetooth. Каждая имеет свои особенности, но в общем и целом они все очень похожи. Рассмотрим представителя bluetooth модуля семейства HC-06 , который можно приобрести по отличной цене на этом сайте .

Данный модуль работает на частоте от 2,40 ГГц до 2,48 ГГц и поддерживает спецификацию bluetooth версии 2.1+EDR: пониженное потребление энергии, повышенный уровень защиты данных и лёгкое соединение Bluetooth-устройств. Устойчивый приём с модулем гарантирован в пределах 10 метров.

Назначение выводов bluetooth-модуля такое:

Последние два вывода могут быть не задействованы; часто можно встретить модули вообще без этих выводов.

2 Схема подключения bluetooth-модуля к Arduino

Подключим bluetooth модуль к Arduino по приведённой схеме. Обратите внимание, что передатчик (Tx) Ардуино подключается к приёмнику (Rx) модуля, и наоборот.


На выводе Status появляется высокий уровень, когда модуль сопряжён с другим bluetooth устройством, и низкий - когда не сопряжён. Можно считывать его значение, подключив к пину Arduino и назначив ему режим работы pinMode(pinStatus, INPUT) и таким образом узнавать состояние модуля. Но не на всех модулях индикатор статуса работает корректно, поэтому мы не будем его использовать в данном примере.

В результате должно получиться примерно как на фотографии.


3 Скетч для Arduino для работы по bluetooth

Напишем такой скетч и загрузим в память Arduino:

Const int ledPin = 13; // вывод встроенного светодиода char incomingbyte; // переменная для данных Bluetooth void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { // если порт доступен incomingbyte = Serial.read(); // считываем с порта данные switch(incomingbyte) { case "1": // если приходит "1" digitalWrite(ledPin, HIGH); // break; case "0": // если приходит "0" digitalWrite(ledPin, LOW); // break; } } }

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

4 Сопряжение с bluetooth-устройством

Теперь нужно добавить bluetooth-устройство в список доверенных устройств. Включаем Bluetooth на компьютере, идём в Параметры Устройства Bluetooth .

Если в области уведомлений при включении bluetooth на компьютере появилась иконка bluetooth, то можно кликнуть по ней правой кнопкой мыши и выбрать пункт :

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


Пароль по умолчанию для конкретного модуля может отличаться от "1234". Эту информацию должен предоставить изготовитель (продавец) модуля.

Если вы хотите подключиться к вашему модулю bluetooth со смартфона, то порядок действий аналогичный: включить bluetooth на смартфоне, обнаружить модуль, подключённый к Arduino, выполнить сопряжение с ним.

5 Подключаемся к bluetooth-модулю по bluetooth с компьютера

Для подключения к bluetooth модулю можно использовать различные программы, которые могут подключаться к COM-порту. Например, такие как HyperTerminal, PuTTY, Tera Term, Termite и другие. Они все бесплатные и свободно распространяются в интернете.

Удобство программы TeraTerm в том, что она автоматически выводит список COM-портов, которые назначены модулю bluetooth вашего компьютера. Запускаем программу, выбираем подключение Serial, из списка выбираем соответствующий bluetooth COM-порт, нажимаем OK.


Программа PuTTY при запуске также спрашивает номер порта (COM4, у вас будет свой), скорость подключения (9600), тип соединения (Serial). Затем нажимаем кнопку Соединиться .


В случае ошибки при подключении программа выведет соответствующее оповещение. Если соединение вашего компьютера с bluetooth-модулем произошло успешно, то вы увидите перед собой поле терминала. Введите с клавиатуры в это поле число 1 - и светодиод на 13 выводе Arduino загорится, введите 0 - погаснет.

6 Подключение со смартфона с помощью Bluetooth Terminal

Аналогично можно подключиться к модулю bluetooth со смартфона. Скачайте приложение для работы с bluetooth по терминалу, например Bluetooth Terminal . Подключайтесь к модулю и вводите команды 0 или 1.

Таким образом, мы научились подключаться по bluetooth к Arduino и передавать ему данные.

Эта статья будет иметь «итоговый» характер, то есть резюмировать столь невысокие, но мои достижения по работе с микроконтроллером Ардуино. Чтобы впоследствии, когда будет будет необходимо, можно было вернуться к этой платформе и реализовать не ней включение выключение каких-либо устройств.
Как я вижу сложившееся, с помощью Bluetooth модуля можно осуществлять управление устройствами для умного дома или сделать даже обычное открывание –закрывание ворот во дворе или гараже. То есть подъехал, открыл. Уезжаешь – закрыл. В принципе у меня пока нет ни частного дома, ни ворот, но как управлять ими я уже знаю:)

Итак, давайте теперь об этом я поведаю и вам.

Принцип включения выключении нагрузки по Bluetooth с помощью Arduino

Собственно принцип очень прост. Необходимо иметь какой либо девайс с возможностью установить управляющее ПО под системой Android. Скажем телефон или планшет. Далее берем Ардуино, а также блок Bluetooth, все это соединяем между собой и заливаем в Ардуино программку. Вот и все.

Схема подключения Arduino с модулем Bluetooth

Само собой в нашем случае первым делом будет физическое подключение, а затем и программное обеспечение. Так вот, начнем с подключения. Если у вас есть Ардуино UNO и модуль Bluetooth HC-06 или 05, то подключать надо будет следующим образом. При этом на схеме ни коим образом не отражено подключение для управляющих цепей. То есть приведено подключение непосредственно модуля Bluetooth HC-06 к Ардуинке.

Само собой если у вас управляющими будут выходы 11 и 13, как в нашем случае, смотрите статью далее, то к ним и будет подключаться силовой блок или просто светодиод. Важным будет то, что при подключении модуля RX на одном устройстве идет к TX на другом и наоборот. Учтите это!

Скетч для Arduino дабы он работал с модулем Bluetooth

Теперь о скетче, то есть о ПО, которое заставляет работать нашу аппаратную платформу, выразимся так. Все очень просто. Смотрим.

Int val; int LED = 13; int LED1 = 11; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); } void loop() { if (Serial.available()) { val = Serial.read(); // При символе "1" включаем светодиод 13 if (val == "1") { digitalWrite(LED, HIGH); } // При символе "0" выключаем светодиод 13 if (val == "0") { digitalWrite(LED, LOW); } // При символе "2" выключаем светодиод 11 if (val == "2") { digitalWrite(LED1, HIGH); } // При символе "0" выключаем светодиод 11 if (val == "3") { digitalWrite(LED1, LOW); } } }

Собственно здесь идет назначение переменных, два светодиода на 11 и на 13 ножку в нашем случае. Потом с помощью Serial.begin(9600) мы подключаем наш блютуф. Ну и собственно осталось найти программку для управления блютуф.

Программа для планшета или телефона (Android) для управления нагрузкой через Bluetooth

Вы собственно сами можете найти любую из программ, которая поддерживает управление блютуф модулем с телефона, это уже на ваше усмотрение. Я для себя нашел и прибрал (скачать ArduinoRC) тоже установочную программку. Именно ее я и поставил на телефон.

Собственно с помощью этой программки и можно будет задавать критерии-условия для скетча, а значит получать сигнал на выходных ножках 11 и 13. В нашем случае задействованы кнопки 0,1,2,3. Именно они включают и выключают светодиоды. Смотрите скетч.
Первый раз при подключении устройства возможно затребует пароль, типа 000 или 1234.

Траблы с заливкой программы в Arduino

Последнее о чем хотелось сказать и с чем столкнулся, то есть какая проблема возникла. Так это то, что при заливке программы необходимо было отключать модуль блютуф. Так как в противном случае при подключенном модуле и при заливке программы выпадала ошибка. Скетч просто не заливался.

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

Теперь тоже самое в видео...

Вам необходимо дистанционно управлять вашей Arduino платой, обмениваться данными с другими bluetooth устройствами? Блютуз модули HC-05, HC06 помогут справиться с этой задачей.

В первой части статьи мы расскажем о том, как установить беспроводное соединение между Arduino и компьютером, а во второй части как установить соединение между Arduino и телефоном на платформе Android. .

Данная статья будет составной частью в дальнейшей сборке дистанционно управляемой машинки.

Компоненты для повторения (купить в Китае):

Модули HC-05/06 представляют из себя голые блютузы с дополнительной обвязкой.

А именно: установлены на подложку, на которой расположен стабилизатор с 5 на 3.3Вольта, светодиод, указывающий на состояние модуля (образовано соединение или нет), и конденсаторы на линиях питания. Также на плате установлен mosfet транзистор (Q1), который при надобности может разрывать цепь питания блютуза, тем самым отключая его, но в нашем обзоре это задействовано не будет.

С лицевой стороны модуль выглядит вот так

Подключение к Arduino

Bluetooth HC-05/06 Arduino
VCC +5V
GND GND
TX RX
RX TX

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

1) C компьютером (операционка WIN7)

2) C телефоном (операционка ANDROID)

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

Часть 1. Соединение с компьютером (WIN7)

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

После установки драйверов на блютуз можно приступать к работе.

. Действие 1

Идем в панель управления, щелкаем на иконку блютуза и выбираем "Показать устройства Bluetooth"

Через некоторое время компьютер произведет поиск и вы увидите ваш модуль (У вашего модуля может быть другое имя).

Выбираем второй вариант - "Введите код образования пары устройства"

Для HC-06 этот код 1234

Завершается все такой картиной.

А за ним еще одно

Первый этап настройки завершен

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

Действия

P.S. Или посмотреть в диспетчере устройств

. Действие 2

Для передачи данных можно использовать любой терминал. Я использовал простой и бесплатный "Termite ".

В качестве примера мы будем изменять состояние встроенного на плату Arduino светодиода "LED 13". Включаться он будет при приеме символа "W", а отключаться при "S". Приведенный ниже скетч нужно залить в плату Arduino. При заливке в плату необходимо отсоединить питание от блютуз модуля , после заливки снова подсоединить.

пример программного кода:

int val; int LED = 13; void setup () { Serial .begin (9600); pinMode (LED, OUTPUT ); } void loop () { if (Serial .available ()) { val = Serial .read (); // При символе "W" включаем светодиод if (val == "W" ) { digitalWrite (LED, HIGH ); } // При символе "S" выключаем светодиод if (val == "S" ) { digitalWrite (LED, LOW ); } } } Открываем программу "Termite "

В настройках выбираем наш порт, скорость (9600).

Также модуль можно проверить и без Arduino просто замкнув выводы TX и RX. Termite отправляемые символы отмечает синим цветом, полученные зелеными. Т.е. если при закороченных выводах мы отправили и нам пришло тоже самое - значит что модуль работает исправно. На фото ниже это и продемонстрировано.

Часть 2. Соединение с телефоном (Android)

В качестве подопытного будет взят телефон Samsung Galaxy Ace 2 на операционке Android.

. Действие 1

Соединяем с телефоном

. Действие 2

В качестве терминала выберем опять-таки простой и бесплатный, но уже "Bluetooth Terminal "

P.S. В случае если не удается подключиться, отключайте питание от блютуза и подключайте заново.

Bluetooth — это пожалуй самый распространенный тип связи для коротких дистанций, которым пользуются большинство современных электронных устройств. Телефонные гарнитуры, наушники, клавиатуры и мышки, принтеры и бог знает какие еще гаджеты. Некоторое время назад bluetooth был распространен как средство передачи файлов между телефонами. Главными достоинствами BT можно назвать хорошую устойчивость к широкополосным помехам и простоту реализации. Первое значит, что куча устройств, находящихся в одном месте, могут одновременно общаться между собой, не мешая друг другу. Второе же помогло широкому распространению Bluetooth в среде DIY, и вообще во всех средах. Лично я использую BT для управления роботами со смартфона. В Google play уже есть несколько приложений с удобным интерфейсом именно для этих целей. Участники нашего хакспейса MakeItLab с помощью Bluetooth управляют удаленно светом и собирают телеметрию с борта квадрокоптеров. Самыми доступными на сегодня Bluetooth модулями можно назвать HC-05 и HC-06. Они в изобилии присутствуют в Китайских онлайн-магазинах и на ebay. Отличия между ними в том, что первый может работать как в режиме ведущего (slave), так и в режиме ведомого (master). Второй же является чисто ведомым устройством (но это поправимо!). Другими словами, HC-06 не может сам обнаружить парное устройство и наладить с ним связь, он может лишь подчиниться ведущему. Оба устройства базируются на чипе CSR BC417 , который поддерживает Bluetooth версии 2.0 со скоростью до 3 Мбит/сек. Именно об этих модулях далее и пойдет речь.

1. Варианты исполнения

Обычно модули продаются в виде двух спаянных вместе плат. Меньшая из них — заводской модуль, широко используемый в разных электронных устройствах. Большая — специальная макетная платка для DIY. Так выглядит меньшая плата с чипом BC417:
А так сами DIY модули HC-05 и HC-06:
Для своих коварных целей я обычно беру HC-05, так как они не сильно отличаются по цене от HC-06, и позволяют без лишних проблем связать вместе два устройства. Например, можно сделать робота и пульт к нему. Из Китая мне обычно приходят модули, точь в точь как на левой картинке, но иногда без кнопки. Очень распространен и другой вариант макетной платки. В отличие от показанных выше, в них нет ноги EN, но есть нога KEY, что немного удобнее.
Распиновка Итак, за что отвечают ноги у всех вариантов модулей.
  • EN — включение/выключение модуля;
  • VCC — питание +5В;
  • GND — земля;
  • TXD, RXD — UART интерфейс для общения с контроллером;
  • STATE — индикатор состояния;
  • KEY — нога для входа в режим AT-команд.
Настройка модуля осуществляется в режиме AT-команд, который включается с помощью ноги KEY. Отсюда, у многих счастливых обладателей модуля может возникнуть вопрос: что делать, если мне попался модуль без KEY? На самом деле, на малой плате эта нога конечно есть, просто она не разведена на большой плате. Черт знает зачем китайцы так сделали, но проблема решается легко. KEY-нога растет отсюда:

2. Подключение к Ардуино Уно

Ног не так много, так что запутаться не получится. Подключаем к bluetooth к Arduino Uno по следующей схеме:
Bluetooth GND VCC TXD RXD KEY
Ардуино Уно GND +5V 10 11
TX и RX подключаем к GPIO ногам 10 и 11, так как аппаратный UART на ногах 0 и 1 будет занят общением с компьютером. В рабочем режиме KEY никуда не подключается, так что в таблице я его не стал соединять с GPIO ногами Arduino.

3. Сопряжение уровней напряжения

Малая платка Bluetooth модуля имеет напряжение логики 3.3 Вольта. А это значит, что Ардуино Уно может либо сжечь у нее порты, либо просто неправильно передавать сигналы. К счастью, в большинстве случаев большая плата имеет на своем борту все необходимое, чтобы этого избежать. Указанные выше модули легко подключаются к Arduino, без лишних заморочек. Даже не смотря на то, что сами изготовители написали на платке предупреждение об уровне сигналов 3.3 Вольта. Однако, в некоторых ситуациях может потребоваться поставить на линию Ардуино TX — BT RX делитель напряжения для понижения логических уровней. На самом деле, даже если все работает и без делителя, лучше его все-таки поставить, для порядка. Схема делителя ниже:

4. Подготовка Arduino

Для того чтобы начать настройку, нам потребуется зашить в Ардуино вспомогательный скетч. По-сути — программу ретранслятор, которая будет осуществлять обмен данными между терминалом на компьютере и Bluetooth модулем. Программа крайне проста: #include #include int gLedPin = 13; int gRxPin = 10; int gTxPin = 11; SoftwareSerial BTSerial(gRxPin, gTxPin); void setup() { # 38400 - для метода №1, 9600 - для метода №2 BTSerial.begin(38400); Serial.begin(9600); delay(500); } void loop() { if (BTSerial.available()) { Serial.write(BTSerial.read()); } if (Serial.available()) { BTSerial.write(Serial.read()); } } Загружаем скетч на Ардуино и переходим к следующему шагу.

5. Подготовка терминала

В качестве терминала можно использовать встроенный в Arduino IDE монитор порта, а можно любой другой. Я использовал сторонний терминал TeraTerm. Перед соединением необходимо сделать две важные настройки:
  • скорость обмена: 9600;
  • символа перевода строки: CR+LF.
Вот как настройки выглядят в TeraTerm:
Когда все правильно настроено, подключаемся к COM-порту и проверяем соединение. Все дальнейшие манипуляции рационально поделить на две части: для ведомого модуля HC-06 и для ведущего HC-05.

6. Настройка HC-06

Проверка соединения

После подачи питания на модуль, светодиод начнет бодро мигать:
Теперь заходим в терминал и пишем команду: AT В ответ, модуль нам должен сказать: OK Следующая наша команда запросит у модуля его версию: AT+VERSION? Получаем что-то вроде такого: OKLinvor1.5 Получилось? Если нет, то проверяем:
  1. Скорость соединения с модулем, которая задается в программе-трансляторе: для связи с ведомым скорость должна быть 9600.
  2. Настройки символа перевода строки: не забываем про CR+LF!
  3. Нажимаем ли после каждой команды Enter? Мало ли…

Полезные команды

У ведомого Bluetooth модуля есть всего три параметра для настройки:
  • команда смены пароля на устройстве: AT+PIN<пароль>
  • смена скорости: AT+BAUD<скорость>
  • смена имени устройства: AT+NAME<имя>
Например, для смены пароля пишем: AT+PIN4321 В общем-то готово! Теперь можно соединиться с модулем, например, со смартфона. Об этом речь пойдет во второй части моего повествования.

7. Настройка HC-05

Переход в режим AT-команд

Чтобы получить доступ к настройка ведущего модуля, его необходимо перевести в режим AT-команд. Для входа в этот режим можно воспользоваться двумя методами (я всегда использую первый). Первый метод:
  1. Отключаем модуль от питания.
  2. Подаем на ногу KEY сигнал +3.3V.
  3. Включаем модуль.
В это варианте скорость обмена с модулем устанавливается в 38400. Второй метод
  1. Включаем модуль.
  2. Подаем на ногу KEY сигнал +3.3V;
В этом случае скорость обмена с модулем будет равна стандартной, установленной настройками. По-умолчанию 9600. После успешного перехода в режим AT-команд светодиод на модуле начнет мигать раз в две секунды.

Проверка соединения HC

Проверим командный режим HC-05 так же как и в случае ведомого модуля: >>: AT <<: OK >>: AT+VERSION? <<: +VERSION:2.0-20100601

Настройка HC-05 как ведомого (slave)

Для превращения модуля в ведомого потребуется выполнить несколько команд: Сброс предыдущих настроек: AT+ORGL Сброс спаренных устройств: AT+RMAAD Установка пароля: AT+PSWD=1234 Включение режима ведомого: AT+ROLE=0 Дополнительно можно узнать адрес устройства (понадобится для настройки спаренного модуля): AT+ADDR? В ответ получим сам адрес: ADDR=12:6:143117 После настройки, отключаем ногу KEY от +3.3В, и перезапускаем модуль. Готово!

Настройка HC-05 как ведущего (master)

С завода модуль идет ведомым, и чтобы сделать его ведущим потребуется выполнить следующие команды. Сброс предыдущих настроек: AT+ORGL Сброс спаренных устройств: AT+RMAAD Включение режима ведущего: AT+ROLE=1 Рестарт после смены роли: AT+RESET Если мы хотим связать ведомого и ведущего, пишем такие команды: Установка пароля ведомого: AT+PSWD=1234 Указываем парное устройство: AT+PAIR=<адрес>,<таймаут> (пример: AT+PAIR=12,6,143117, 5 ) Связываем с конкретным адресом: AT+BIND=<адрес> (пример: AT+BIND=12,6,143117 ) Запрещаем соединяться с другими адресами: AT+CMODE=0 Готово! Теперь модуль связан с ведомым, и при каждом включении будет пытаться с ним соединиться.

И работу с ним.

Модернизация 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

Подключение довольно простое.

Официальная схема подключения:

  • 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

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

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

    Установка скорости 10%

    Установка скорости 20%

    Установка скорости 30%

    Установка скорости 40%

    Установка скорости 50%

    Установка скорости 60%

    Установка скорости 70%

    Установка скорости 80%

    Установка скорости 90%

    Установка скорости 100%

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

#include // Подключаем библиотеку для управления двигателями
#include // Подключаем библиотеку для сервоприводов
#include // Подключаем библиотеку для работы с Serial через дискретные порты

//Создаем объекты для двигателей
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 - передний правый

// Создаем объект для сервопривода
Servo vservo;

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

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

void setup() {
// Устанавливаем скорость передачи данных по Bluetooth
BTSerial.begin(9600);
// Устанавливаем скорость передачи данных по кабелю
Serial.begin(9600);
// Выбираем пин к которому подключен сервопривод
vservo.attach(9); // или 10, если воткнули в крайний разъём
// Поворачиваем сервопривод в положение 90 градусов при каждом включении
vservo.write(90);
// Устанавливаем максимальную скорость вращения двигателей
vspeed(255,255);
}

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

// Вперед
if (vcmd == "F") {
vforward();
}
// Назад
if (vcmd == "B")
{
vbackward();
}
// Влево
if (vcmd == "L")
{
vleft();
}
// Вправо
if (vcmd == "R")
{
vright();
}
// Прямо и влево
if (vcmd == "G")
{
vforwardleft();
}
// Прямо и вправо
if (vcmd == "I")
{
vforwardright();
}
// Назад и влево
if (vcmd == "H")
{
vbackwardleft();
}
// Назад и вправо
if (vcmd == "J")
{
vbackwardright();
}
// Стоп
if (vcmd == "S")
{
vrelease();
}
// Скорость 0%
if (vcmd == "0")
{
vspeed(0,0);
}
// Скорость 10%
if (vcmd == "1")
{
vspeed(25,25);
}
// Скорость 20%
if (vcmd == "2")
{
vspeed(50,50);
}
// Скорость 30%
if (vcmd == "3")
{
vspeed(75,75);
}
// Скорость 40%
if (vcmd == "4")
{
vspeed(100,100);
}
// Скорость 50%
if (vcmd == "5")
{
vspeed(125,125);
}
// Скорость 60%
if (vcmd == "6")
{
vspeed(150,150);
}
// Скорость 70%
if (vcmd == "7")
{
vspeed(175,175);
}
// Скорость 80%
if (vcmd == "8")
{
vspeed(200,200);
}
// Скорость 90%
if (vcmd == "9")
{
vspeed(225,225);
}
// Скорость 100%
if (vcmd == "q")
{
vspeed(255,255);
}
}
}

// Вперед
void vforward() {
vspeed(vspdL,vspdR);
vforwardRL();
}

// Вперед для RL
void vforwardRL() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}

// Назад
void vbackward() {
vspeed(vspdL,vspdR);
vbackwardRL();
}

// Назад для RL
void vbackwardRL() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}

// Влево
void vleft() {
vspeed(vspdL,vspdR);
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}

// Вправо
void vright() {
vspeed(vspdL,vspdR);
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}

// Вперед и влево
void vforwardleft() {
if (vspdL > vspd) {
vspeed(vspdL-vspd,vspdR);
}
else
{
vspeed(0,vspdR);
}
vforwardRL();
}

// Вперед и вправо
void vforwardright() {
if (vspdR > vspd) {
vspeed(vspdL,vspdR-vspd);
}
else
{
vspeed(vspdL,0);
}
vforwardRL();
}

// Назад и влево
void vbackwardleft() {
if (vspdL > vspd) {
vspeed(vspdL-vspd,vspdR);
}
else
{
vspeed(0,vspdR);
}
vbackwardRL();
}

// Назад и вправо
void vbackwardright() {
if (vspdR > vspd) {
vspeed(vspdL,vspdR-vspd);
}
else
{
vspeed(vspdL,0);
}
vbackwardRL();
}

// Стоп
void vrelease(){
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}

// Изменение скорости
void vspeed(int spdL,int spdR){
if (spdL == spdR) {
vspdL=spdL;
vspdR=spdR;
}
motor1.setSpeed(spdL);
motor2.setSpeed(spdR);
motor3.setSpeed(spdL);
motor4.setSpeed(spdR);
}

Программа 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-остановка.

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

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