Ардуино управление освещением через блютуз

Обновлено: 03.07.2024



— Чайники, весы, игрушки, лампочки, кофемашины… В эти и другие устройства встраивают bluetooth-модули.
— Зачем?
— Чтобы дать пользователю управлять своими устройствами через приложение. К примеру, управлять освещением в комнате.
— Ой, а можно ли собрать какое-то своё простое устройство и управлять им прямо через браузер?
— Да! И эта статья как раз об этом.

Немного теории

Здесь я приведу несколько основных терминов, которые необходимы нам для воплощения задачи (о ней мы поговорим немного позже) в жизнь.

Bluetooth

Стандарт беспроводной радиосвязи, связывающий на коротком расстоянии различные типы устройств. Для управления железками через Web Bluetooth API нам потребуется Bluetooth v4.0.

The Generic Attributes — постоянно транслируемое дерево возможностей bluetooth-устройства.

Сервисы

Внутри bluetooth-устройства есть сервисы. Сам по себе сервис — это коллекция характеристик и связей с другими сервисами. У каждого сервиса есть свои UID и имя. Зачастую будут попадаться “Unknown services”. Это связано с тем, что количество устройств и вариантов их использования велико.

Характеристики

Внутри каждого сервиса есть характеристики, в которые можно писать, считывать их, а также подписаться на них. Характеристика также имеет свой UID.

Задача

В качестве задачи я выбрал реализацию сайта, который может:

  • Зажигать светодиоды разными цветами и гасить их.
  • Заставлять светодиоды переливаться разными цветами.

И, как можно понять из постановки задачи, необходимо научиться подключаться и отключаться от bluetooth-устройства.

Компоненты

Для выполнения задачи я выбрал следующий список необходимого:

  • Arduino.
  • Bluetooth-модуль v4.0 (HM-10 в моём случае).
  • Два трёхцветных светодиода.
  • Макетная плата.
  • Соединительные провода.
  • Резисторы.

Данный список не является строгим для реализации. Я уверен, что можно заменить Arduino чем-то другим и выбрать другой bluetooth-модуль. Но в статье будет рассматриваться взаимодействие именно с этими компонентами.

Как это должно работать

Вкратце суть такова: мы подключаемся к bluetooth-модулю и передаём некий код (от 1 до 4 включительно). Если код валиден, то зажигается один из трёх цветов или же светодиоды начинают мигать всеми возможными цветами (красный, зелёный, синий) в течение какого-то времени.

Приготовления

Для начала необходимо собрать рабочую схему и загрузить Arduino-скетч. Ниже я даю схему (рис. 1) и код скетча, которые у меня получились.


Рис. 1 (Схема для сборки)

Последнее приготовление

Итак, мы загрузили скетч, подключили схему к питанию. Что дальше? Для работы с Web Bluetooth API нам необходимо знать имя нашего устройства, и к какому сервису мы хотим получить доступ. Для этого можно воспользоваться приложением “nRF Connect”.

Включаем приложение и видим список bluetooth-устройств рядом с нами (рис. 2).


Рис. 2 (Список устройств, которое нашло приложение)

Устройство с именем “CC41-A” меня заинтересовало и не зря.

После подключения к устройству нам становится доступен список его сервисов (рис. 3). Вряд ли мы найдём что-то интересное в “Device information”, так что смело жмём в “Unknown service”.


Рис. 3 (Список сервисов устройства)

На скриншоте ниже (рис. 4) можно заметить самое главное для нас: запись в характеристику и её чтение.


Рис. 4 (Unknown характеристика)

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

  1. Имя устройства.
  2. UID сервиса.
  3. UID характеристики.

Реализация в web

Прежде чем начать писать JavaScript-код, стоит оговорить несколько моментов:

JavaScript

Работа с Web Bluetooth API построена на Promise. Ниже я буду приводить поэтапные примеры кода. Полный исходный код можно будет найти в репозитории, на который будет оставлена ссылка.

Для начала нам необходимо подключиться к устройству. Мы запрашиваем устройства и в фильтре передаём имя устройства и UID сервиса, с которыми будем работать. Если не указать сервис заранее, то в дальнейшем с ним нельзя будет взаимодействовать.

После того как мы нажмём на кнопку “Connect”, у нас откроется окно (рис. 5), в котором необходимо выбрать устройство и нажать на кнопку подключения.


Рис. 5 (Окно с доступным к подключению устройством)

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

После этого нам возвращается Promise, содержащий “server”. Затем мы у “server” запрашиваем “service”, передавая туда UID сервиса (который мы подсмотрели через приложение). Затем нам возвращается Promise, содержащий “service”, у которого мы запрашиваем “characteristic”, передавая её UID (который мы тоже подсмотрели через приложение).

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

В обработчиках кликов по кнопкам содержится следующий код:

В характеристику необходимо передавать массив uint8, поэтому для преобразования кода, который будет передан в неё, необходимо использовать Uint8Array.

По задумке, код 1 заставляет светодиоды мигать тремя цветами и затем гаснуть. Но как погасить светодиод, если в него был передан код 3 и светодиод всё ещё горит? Или включить другой цвет?

Я считываю значение, лежащее в характеристике, преобразую его с помощью getUint8 и, если код совпадает, отправляю любое невалидное значение (например 0). Если же значение валидное, то преобразую его в массив unit8 и записываю в характеристику.

Для окончательного решения поставленной задачи необходимо всего лишь научиться отключаться от устройства. У нас уже есть eventListener на кнопке “Disconnect”, в котором происходит отключение от bluetooth-устройства, снимаются eventListeners, кнопки управления прячутся, а в переменные записывается undefined.

Мы создали простую web-страницу, с помощью которой можно подключаться к bluetooth-устройству и управлять им. Как видите, это довольно просто. А устройства, которые вы можете собирать и управлять таким образом, ограничены лишь вашей фантазией!

Небольшой проект, в котором вы научитесь управлять светодиодом с помощью Arduino, Bluetooth и Android OS.

Для проекта вам понадобятся:

  • Arduino UNO;
  • 3 резистора на 300Ω;
  • 1 резистор на 150Ω;
  • Светодиод;
  • Коннекторы;
  • Bluetooth модуль (HC-06 или другой);
  • Смартфон на Android;
  • Приложение SPP Bluetooth Apk (в данном примере - unWired Lite);
  • Некоторые навыки программирования на C.

Подключаем HC-06 к Arduino

Bluetooth - один из видов беспроводного соединения, который передает данные с помощью радиоволн. Он часто используется в телефонах для звонков и передачи данных. Этот дешевый и надежный вид связи, который отлично подойдет для удаленного управления внешними девайсами с помощью Arduino.

Модуль HC-06 4 подключается к Arduino с помощью 4-х контактов:

HC-06 и Arduino

RXD служит для приема данных от Arduino; TXD - отправляет данные на плату Arduino; VCC - это контакт для источника питания (3.3 В - 6.6 В); GND - земля.

Обратите внимание на контакт RXD. Некоторые блютуз модули работаю от 5 В, но используемый в данном проекте работает с питанием 3.3 В. При этом Arduino TX отправляет управляющий сигнал 5 В, так что необходим делитель напояжения.

Делитель напряжения с R1 = 300Ω:

Vout = R2/(R2+R1) * Vin

Если у вас другой резистор:

Подключаем модуль HC-06 к Arduino (смотрите рисунок):

Подключаем HC-06 к Arduino

Скетч для Arduino

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

При использовании android смартфона с соответствующим spp bluetooth apk, команда подается на bluetooth (RX/TX). При этом bluetooth модуль налаживает связь с bluetooth нашего android'а, используя профиль под названием SPP (Serial Port Profile). Он эмулирует подключение по USB порту нашего Arduino и android.

Инициализируем все контакты и переменные.

Скорость передачи данных модуля HC-06 по умолчанию равна 9600 baud. Код функции void setup:

В скетче две функции. Их имена говорят сами за себя.

Приложение для android UnWired Lite

unWired - это приложение, которое дает возможность подключаться к bluetooth модулю Arduino. Это не единственное подобное приложение, так что можете пользоваться другим, если хотите.

Перед запуском приложения, подключите bluetooth модуль.

Первый экран приложения показан на рисунке ниже. Выберите пункт ‘Dispositivos Pareados’. Должны появится все подключенные к смартфону устройства. Среди этих устройств выбираем bluetooth модуль, который мы подключили до этого.

UnWired

На втором экране (рис. 2) вы будете непосредственно вводить команды для отправки через bluetooth. В нашем случае это две команды - LO для того, чтобы включить светодиод и LF - чтобы выключить светодиод.

UnWired 2

Теперь вы знаете как настроить работу bluetooth модуля и arduino и как дистанционно передавать команды плате.

Вы с тем же успехом можете получать данные от Arduino и отображать их в android приложении. Для этого надо просто немного изменить функции в скетче.

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

На первый взгляд, управление светодиодом с помощью голоса может показаться достаточно трудной задачей, но с помощью такой платформы как Arduino в этом нет ничего сложного. Все, что нам нужно будет сделать – это соединить плату Arduino по последовательному каналу связи с Bluetooth модулем HC-06 и с помощью смартфона передавать голосовые команды на Bluetooth модуль HC-06. Для приема голосовых команд мы будем использовать приложение на android “Arduino Bluetooth Voice Controller”, которое можно будет скачать по ниже приведенной ссылке.

Внешний вид проекта голосового управления светодиодом с помощью Arduino и Bluetooth

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Bluetooth модуль HC-06 (купить на AliExpress).
  3. Красный и зеленый светодиоды (купить на AliExpress).
  4. Резистор 220 Ом (2 шт.) (купить на AliExpress).
  5. Arduino Bluetooth Voice Controller (можно скачать с play store по этой ссылке или непосредственно скачать прямо из смартфона по названию приложения).
  6. Макетная плата.
  7. Соединительные провода.

Bluetooth модуль HC-06

Данный модуль может функционировать в двух режимах: режим команд и режим данных. В режиме команд мы можем настраивать различные свойства Bluetooth соединения: имя, пароль, скорость передачи и т.д. Режим данных позволяет осуществлять обмен данными между модулем и микроконтроллером (в нашем случае платой Arduino). Мы в данном проекте будем использовать только режим данных, свойства Bluetooth соединения будем использовать те, которые установлены в модуле по умолчанию. Имя устройства может быть HC-05 или HC-06 (в использованном нами модуле), пароль может быть 0000 или 1234, по умолчанию скорость передачи обычно выставлена 9600 бод/с.

Модуль работает от питающего напряжения 5V, а его сигнальные контакты работают с напряжением 3.3V. В модуле присутствует встроенный регулятор напряжения, поэтому нам не стоит беспокоиться о преобразовании этих напряжений. В режиме данных мы из 6 контактов модуля будем использовать только 4. Назначение контактов Bluetooth модуля HC-06 приведено в следующей таблице.

№ по порядку Назначение контакта
1 Vcc
2 Vcc
3 Tx
4 Rx
5 State
6 EN (Enable)

На нашем сайте вы также можете следующие проекты с использованием Bluetooth модуля:

Схема проекта

Схема голосового управления светодиодом с помощью Arduino и Bluetooth представлена на следующем рисунке. Перед загрузкой программы в плату Arduino отсоедините контакты Rx и Tx, а после загрузки программы снова их подсоедините.

Схема голосового управления светодиодом с помощью Arduino и Bluetooth
Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Сначала в программе необходимо определить контакты Arduino, на которых мы будем использовать последовательную связь (Rx и Tx).

Затем установим 2-й и 3-й контакты платы Arduino (к ним подключены светодиоды) в режим вывода данных.

Далее, в функции loop плата Arduino будет непрерывно проверять поступление данных от Bluetooth модуля (который, в свою очередь управляется с помощью голосовых команд) и в соответствии с ними управлять включением/выключением светодиодов. Все принимаемые команды мы будем сохранять в переменной “Value”.

Если значение этой переменной равно "all LED turn on", то мы будем включать оба светодиода. Аналогично этому при поступлении других голосовых команд мы будем соответствующим образом включать и выключать светодиоды в нашей схеме. Более подробно все эти процессы показаны на видео, приведенном в конце статьи.

Работа проекта

Тестирование работы проекта

Шаг 1. Соберите схему, приведенную на рисунке выше. Перед загрузкой кода программы в плату Arduino отсоедините контакты Rx и Tx. После загрузки программы снова их подсоедините.

Шаг 2. Скачайте по приведенной в начале статье ссылки приложение для смартфона под названием “Arduino Bluetooth Voice Controller”. Либо вы непосредственно можете скачать его со своего смартфона по его названию.

Шаг 3. Запустите скачанное приложение, у вас на смартфоне появится его экран, показанный на приведенном ниже рисунке. Кликните на “connect to Bluetooth device” (соединиться с Bluetooth устройством), выберите после этого свой Bluetooth модуль и затем проверьте подсоединился ли он к приложению или нет. Затем кликните на иконку микрофона и после этого вы можете передавать голосовые команды Bluetooth модулю HC-06.

Примечание : когда вы будете подключаться к Bluetooth модулю HC-06 в первый вам необходимо будет ввести пароль для подключения к модулю – используйте в качестве пароля 0000 или 1234.

Шаг 4. Передавая голосовые команды Bluetooth модулю HC-06, который затем транслирует их по последовательному порту связи плате Arduino, которая выполняет принятую команду по включению/выключению светодиодов. Список реализованных в программе команд и действия, которые при их поступлении следует выполнить, представлен в следующей таблице.

№ п/п Команда Действие
1 all LED turn on включить оба светодиода
2 all LED turn off выключить оба светодиода
3 turn on Red LED включить красный светодиод
4 turn on green LED включить зеленый светодиод
5 turn off red LED выключить красный светодиод
6 turn off green LED выключить зеленый светодиод

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

Примечание : статья переведена с иностранного сайта и насколько корректно представленное приложение “Arduino Bluetooth Voice Controller” и программа для Arduino может работать со словами на русском языке, лично я пока не пробовал. Но буду признателен если вы в комментариях к данной статье отпишитесь по этому поводу если попробуете сделать это.

Исходный код программы

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

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


Один из самых популярных и распространенных методов обмена данными посредством Bluetooth.

Сегодня мы разберем простые примеры как можно подключить Bluetooth модуль к Arduino и настроить дистанционное управление с телефона.

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

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

Подключать Bluetooth модуль к микроконтроллеру Arduino удобнее всего с помощью проводков ПАПА-МАМА.

Arduino Bluetooth
Pin 1 (TX) RXD
Pin 0 (RX) TXD
GND GND
5V VCC

Будьте внимательны, подключать подключать нужно TX -> RXD ,RX -> TXD.

Теперь необходимо записать пробный код программы:

Во время загрузки скетча необходимо что бы Bluetooth модуль был отключен от микроконтроллера arduino. В противном случае скетч не запишется, потому что связь с Bluetooth модулем происходит по одному и томуже порту RX и TX, что и USB.

После того как скетч записан и Bluetooth модуль подключен к Arduino, можно перейти к следующему шагу.

Подключение Bluetooth к телефону

Желательно в качестве источника питания для arduino использовать не USB, а внешний Блок питания на 9 В.

  1. Включаем Bluetooth на телефоне и ищем новые устройства
  2. Находим в списке расстройств "HC-06" и подключаемся к нему.
  3. Телефон спросит пин-код. необходимо ввести "1234" или "0000"
  4. Ура. Устройство подключено.

Теперь нужно скачать bluetooth terminal на ваш телефон. Мы рассмотрим на примере платформы Android.




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

После того как мы установили терминал, запускаем его выбираем наш bluetooth модуль HC-06 и подключаемся к нему.

Пришло время попробовать проект в деле. Пишем в терминале цифру "0" и отправляем. Светодиод L который находится на плате arduino рядом с pin 13, должен погаснуть. Теперь отправим через терминал цифру "1" и светодиод L должен зажечься.

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


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