Bluetooth модуль HM-10 (ZS-040). Урок 14. Ардуино
Привет! Как известно, все становится лучше, если добавить bluetooth. Поэтому пришло время добавить к нашим проектам bluetooth модуль HM-10. И попробовать управлять схемой на Ардуино через телефон.
В этом уроке мы будем модифицировать схему с rgb светодиодом. Поэтому, посмотрите урок с ней, если уже забыли или пропустили его.
Для того, чтобы выполнить этот урок нам понадобиться
- Ардуино UNO
- Макетная плата
- Перемычки
- 3 Резистора номиналом 220 Ом
- 3 Резистора номиналом 1 кОм
- RGB Светодиод
- Bluetooth модуль HM-10
- Кабель USB
В прошлом уроке мы настроили схему на Ардуино, которая управляется из последовательного порта. Мы записывали в последовательный порт данные через программу на Processing и плата Ардуино управляла цветом на rgb светодиоде.
Теперь заменим Processing программу на bluetooth модуль и программу в телефоне.
Программа и схема
Соберем схему для управления rgb светодиода и добавим в схему bluetooth модуль.
Контакт TXD подключаем напрямую к контакту 8 Ардуино. А RXD подключаем к 9 контакту через делитель напряжения. Используем сопротивление 1 кОм с одной стороны и 2 кОм с другой.
После подключения питания к Ардуино, лампочка на модуле начнет мигать. Значит питание к нему подключено, и, первоначально, все работает правильно.
После этого уже можно попробовать найти его среди других Bluetooth устройств. С помощью компьютера или телефона. В моем случае, он определяется как BT05
Но сначала напишем программу для Ардуино и загрузим на плату.
В программе используем библиотеку для bluetooth. И создадим все переменные, которые понадобятся в будущем.
#include SoftwareSerial BT(8, 9);// Контакты bluetooth модуля. 8 для TXD, 9 для RXD char c = ""; // Переменная для считывания символа из последовательного порта String str = ""; // Переменная для формирования целой строки int rgb[] = ; // Массив контактов rgb светодиода int light = 0; // Переменная для отправки на контакты светодиода int i = 0; // Счетчик цикла для переключения цветов светодиода
В функции setup() настроим основные параметры программы. Включим последовательные порты на ардуино и на bluetooth.
Сразу отправим тестовые сообщения в оба монитора.
Самое интересное будет в цикле loop(). Будем считывать информацию с последовательного порта bluetooth. Считывается только один символ. Поэтому нужно подумать, как считать всю строку и обработать уже ее. Для этого найдем символ перевода строки ‘\n’ . Все, что было до этого символа соберем в одну строку.
Кроме того, мы собираем только цифры, поэтому всю строку можно представить как число. Ограничим это число функцией constrain(), чтобы можно было написать в программе что угодно, но Ардуино записал на пин корректное значение.
С помощью счетчика цикла i будем переключать контакты rgb светодиода и сбрасывать счетчик, когда он будет равен 3.
Не забудем сбросить переменную для формирования строки перед следующим вводом данных.
void loop() < if (BT.available())< // На порту bluetooth есть что считать delay(50); // Задержка между считыванием символов c = BT.read(); // Считываем код символа в переменную типа int if (isDigit(c)) < // Если считана цифра str += (char)c; // символ присоединяем к строке >if (c == '\n') < // Если обнаружен символ конца строки if( i == 3 )// Сбрасываем счетчик на 0 light = constrain(str.toInt(), 0, 255 );// Ограничиваем значени Serial.println(light); // Выводим строку в монитор порта analogWrite(rgb[i], light); // Записываем на контакт светодиода i++; // Переходим к следующему цвету str = ""; // Очищаем строку > > >
Полный текст программы
#include SoftwareSerial BT(8, 9); // Контакты подключения bluetooth модуля. 8 для TXD, 9 для RXD char c = ""; // Переменная для считывания символа из последовательного порта String str = ""; // Переменная для формирования целой строки int rgb[] = ; // Массив контактов rgb светодиода int light = 0; // Переменная для отправки на контакты светодиода int i = 0; // Счетчик цикла для переключения цветов светодиода void setup() < BT.begin(9600); // Инициализация bluetooth последовательного порта Serial.begin(9600); // Инициализация arduino последовательного порта Serial.println("Test for Arduino"); BT.println("Test for Phone"); pinMode(rgb[0], OUTPUT); pinMode(rgb[1], OUTPUT); pinMode(rgb[2], OUTPUT); >void loop() < if (BT.available())< // На последовательном порту bluetooth есть что считать delay(50); // Задержка между считыванием символов c = BT.read(); // Считываем код символа в переменную типа int if (isDigit(c)) < // Если считана цифра str += (char)c; // Конвертируем байт в символ и присоединяем к строке >if (c == '\n') < // Если обнаружен символ конца строки if( i == 3 )// Если счетчик массива больше чем размер массива сбрасываем его на 0 light = constrain(str.toInt(), 0, 255 );// Ограничиваем значение для вывода на контакт Serial.println(light); // Выводим строку в монитор порта как цифру analogWrite(rgb[i], light); // Записываем значение на контакт светодиода i++; // Переходим к следующему цвету str = ""; // Очищаем строку перед следующим вводом > > >
Serial Bluetooth Terminal
Теперь нам понадобиться клиент для Android, который сможет подключиться к последовательному порту через bluetooth. Найдем такое приложение в Play Market.
Найдем наш модуль в меню devices. И попробуем к нему подключиться.
Попробуем подключиться, и если все правильно, то увидим сообщение Connected.
И наконец, отправим на наш модуль команды. На которые должна среагировать программа в Ардуино и изменить цвет rgb светодиода.
Каждая введенная цифра отвечает за свой цвет на rgb светодиоде. Как вы помните, цвета переключаются в цикле. Если на два цвета отправить 0, а на последний 250, то гореть должен только один цвет.
Заключение
Мы научились использовать Bluetooth модуль HM-10. И подключили его к Ардуино. Это дает возможности управлять схемой на Ардуино с помощью программы в телефоне или компьютере без подключенных проводов. Естественно, возможности использовать bluetooth почти не ограничены. Постараемся использовать его чаще в наших проектах.
СХЕМА УСТРОЙСТВА BLUETOOTH
Словом Bluetooth – называют технологию передачи данных по радиоканалу на небольшом расстоянии в несколько метров, для связи мобильных телефонов, компьютеров и других цифровых устройств. Интерфейс Bluetooth отличается низким уровнем энергопотребления и невысокой стоимостью. В настоящее время используется чаще всего для связи между сотовыми телефонами и беспроводными гарнитурами. Радиоинтерфейс Bluetooth предназначался для передачи данных и речевых сообщений.
В традиционном варианте гарнитуры модуль Bluetooth имеет микросхему, небольшой литий-ионный аккумулятор 3,7В 50 мА, микрофон, динамик и кнопку включения.
Низкая стоимость аппаратной части, хорошая степень защиты и простота в использовании — сделали весьма популярным этот стандарт. Bluetooth использует частоты в районе 2,4-2,48 ГГц и не требует лицензирования. На настоящее время мировое промышленное сообщество приняло эту технологию как общий стандарт.
Удобства для пользователей, которые обеспечивает технология Bluetooth, наверняка будет иметь огромную популярность. Скажем, когда вы приходите в офис, ваш карманный компьютер тут же автоматически синхронизируется с настольным ПК, передаются новые контакты на ваш мобильный телефон и т.д.
Bluetooth-модуль содержит формирующую, приёмо-передающую часть аппаратуры и встроенное программное обеспечение. Связь между модулем и хост-контроллером производится с помощью высокоскоростного USB-интерфейса или UART/PCM-интерфейса. Интерфейс хост-контроллера в модуле Bluetooth является командным интерфейсом. Хост через ИХК направляет команды, а в ответ принимает от модуля сообщения об их выполнении; менеджер связи устанавливает необходимую конфигурацию хост-контроллера.
Вluetooth имеет два варианта связи: синхронную и асинхронную. Первый вид рассчитан на установление симметричного соединения и служит для передачи голоса. Скорость передачи информации при этом 64 Кит/с. Асинхронный вариант предназначен для пакетной передачи данных, скорость передачи cоставляет 720 Кбит/с. В начале блока находится код доступа, за ним идёт заголовок пакета, содержащий контрольную сумму пакета и информацию о его параметрах, и в конце область, непосредственно содержащая пересылаемую информацию.
Схема одного из радиомодулей Bluetooth приведена ниже:
Спектр частот, выделенный для Bluetooth, имеет диапазон 2,402…2,480 ГГц, который разбит на несколько каналов. Полоса каждого канала 1 МГц. Смена каналов производится по псевдослучайному закону. Постоянное чередование частот позволяет радиоинтерфейсу транслировать информацию по всему диапазону и исключать воздействия помех со стороны других устройств. Если данный канал занят, система перейдёт на другой, свободный от помех.