- Javascript
- Беспроводное программирование arduino через bluetooth
- Гайд по адресной светодиодной ленте | alexgyver
- Настройки в коде
- Отправка данных
- Подключение угла и код
- Робомобиль на базе arduino mega 2560 с bluetooth управлением и автономным движением с объездом препятствий
- Сравнение модулей bluetooth hc 05 и hc 06
- Схема подключения робота quadruped:
- Управление:
- Управляем arduino через bluetooth hc-06, с компьютера или смартфона
Javascript
Работа с Web Bluetooth API построена на Promise. Ниже я буду приводить поэтапные примеры кода. Полный исходный код можно будет найти в репозитории, на который будет оставлена ссылка.
Для начала нам необходимо подключиться к устройству. Мы запрашиваем устройства и в фильтре передаём имя устройства и UID сервиса, с которыми будем работать. Если не указать сервис заранее, то в дальнейшем с ним нельзя будет взаимодействовать.
navigator.bluetooth.requestDevice({
filters:
[
{ name: MY_BLUETOOTH_NAME },
{ services: [SEND_SERVICE] },
]
})
После того как мы нажмём на кнопку “Connect”, у нас откроется окно (рис. 5), в котором необходимо выбрать устройство и нажать на кнопку подключения.
Рис. 5 (Окно с доступным к подключению устройством)
При подключении возвращается Promise, содержащий “device”, к которому можно подключиться. Окей, давайте запишем его в переменную и создадим соединение.
.then(device => {
myDevice = device;
return device.gatt.connect();
})
После этого нам возвращается Promise, содержащий “server”. Затем мы у “server” запрашиваем “service”, передавая туда UID сервиса (который мы подсмотрели через приложение). Затем нам возвращается Promise, содержащий “service”, у которого мы запрашиваем “characteristic”, передавая её UID (который мы тоже подсмотрели через приложение).
.then(server => server.getPrimaryService(SEND_SERVICE))
.then(service => service.getCharacteristic(SEND_SERVICE_CHARACTERISTIC))
И вот только теперь мы можем уже начинать что-то делать. Например, я запоминаю характеристику в переменную и вешаю обработчики кликов на кнопки. В своих data-атрибутах они содержат код, который будет записан в характеристику при клике.
В обработчиках кликов по кнопкам содержится следующий код:
const code = Number(event.target.dataset.code);
if (code === 1) {
toggleLigthCharacteristic.writeValue(Uint8Array.of(code));
return;
}
toggleLigthCharacteristic.readValue()
.then(currentCode => {
const convertedCode = currentCode.getUint8(0);
toggleLigthCharacteristic.writeValue(
Uint8Array.of(convertedCode === code ? 0 : code)
);
});
В характеристику необходимо передавать массив uint8, поэтому для преобразования кода, который будет передан в неё, необходимо использовать Uint8Array.
По задумке, код 1 заставляет светодиоды мигать тремя цветами и затем гаснуть. Но как погасить светодиод, если в него был передан код 3 и светодиод всё ещё горит? Или включить другой цвет?
Я считываю значение, лежащее в характеристике, преобразую его с помощью getUint8 и, если код совпадает, отправляю любое невалидное значение (например 0). Если же значение валидное, то преобразую его в массив unit8 и записываю в характеристику.
Для окончательного решения поставленной задачи необходимо всего лишь научиться отключаться от устройства. У нас уже есть eventListener на кнопке “Disconnect”, в котором происходит отключение от bluetooth-устройства, снимаются eventListeners, кнопки управления прячутся, а в переменные записывается undefined.
myDevice.gatt.disconnect();
toggleItemsEventListeners('removeEventListener');
toggleButtonsVisible();
toggleLigthCharacteristic = undefined;
myDevice = undefined;
Беспроводное программирование arduino через bluetooth
один раз настроенный модуль и схема смонтирована , следующее, что нужно сделать, это беспроводное программирование Arduino через Bluetooth .
На этом этапе предполагается, что Модуль HC-05 уже был в паре с компьютером .
Таким образом, вам придется пройти процесс сопряжения, и таким же образом есть последовательный порт через Блютуз где он правильно отображается в диспетчере устройств. Процедура сопряжение устройства Bluetooth варьируется в зависимости от операционной системы.
Там виртуальные последовательные порты должны отображаться правильно, как это видно на изображении, которое мы представляем ниже:
- Следующее, что нужно будет открыть IDE Arduino и там вам нужно выбрать новый последовательный порт, который был создан, когда HC-05 имеет был связан с компьютером.
Загрузка программы должна продолжаться обычным образом до тех пор, пока программа не будет запущена. код, загруженный на Arduino начинать . Теперь, если возникает ошибка, возможно, это связано с тем, что был подключен плохой сигнал или полярность статусный пин не было выполнено правильно в конфигурации .
Если по какой-то причине эскиз не может быть сохранен в Arduino , тогда необходимо будет испытать емкость конденсатора , очень хорошей идеей для этого является увеличение его значения до тех пор, пока оно не будет гарантировать, что Arduino сбрасывается правильно при открытии последовательного порта на Блютуз , в этом случае рекомендуемые значения От 100 нФ до 1 мкФ .
Гайд по адресной светодиодной ленте | alexgyver
1) Команды в ленте передаются от диода к диоду, паровозиком. У ленты есть начало и конец, направление движение команд на некоторых моделях указано стрелочками. Для примера рассмотрим ws2812b, у нее три контакта. Два на питание, а вот третий в начале ленты называется DI (digital input), а в конце – DO (digital output). Лента принимает команды в контакт DI! Контакт DO нужен для подключения дополнительных кусков ленты или соединения матриц.
2) Если в схеме возможна ситуация, при которой на ленту не будет подаваться питание 5V, но будет отправляться сигнал с микроконтроллера – лента начнёт питаться от дата-пина. В этом случае может сгореть как первый светодиод в ленте, так и пин контроллера. Не испытывайте удачу, поставьте резистор с сопротивлением 200-500 Ом. Точность резистора? Любая. Мощность резистора? Любая. Да, даже 1/4.
2.1) Если между лентой и контроллером (Arduino) большое расстояние, т.е. длинные провода (длиннее 50 см), то сигнальный провод и землю нужно скрутить в косичку для защиты от наводок, так как протокол связи у ленты достаточно скоростной (800 кГц), на него сильно влияют внешние наводки, а экранирование земляной скруткой поможет этого избежать. Без этого может наблюдаться такая картина: лента не работает до тех пор, пока не коснёшься рукой сигнального провода.
2.2) При подключении ленты к микроконтроллерам с 3.3V логикой (esp8266, ESP32, STM32) появляется проблема: лента питается от 5V, а сигнал получает 3.3V. В даташите указана максимальная разница между питанием и управляющим сигналом, если её превысить – лента не будет работать или будет работать нестабильно, с артефактами. Для исправления ситуации можно:
3) Самый важный пункт, который почему то все игнорируют: цифровой сигнал ходит по двум проводам, поэтому для его передачи одного провода от ардуины мало. Какой второй? Земля GND. Как? Контакт ленты GND и пин GND Ардуино (любой из имеющихся) должны быть обязательно соединены. Смотрим два примера.
4) Питание. Один цвет одного светодиода при максимальной яркости кушает 12 миллиампер. В одном светодиоде три цвета, итого ~36 мА на диод. Пусть у вас есть метр ленты с плотностью 60 диод/метр, тогда 60*36 = 2.1 Ампера при максимальной яркости белого цвета, соответственно нужно брать БП, который с этим справится. Также нужно подумать, в каком режиме будет работать лента. Если это режимы типа «радуга», то мощность можно принять как половину от максимальной. Подробнее о блоках питания, а также о связанных с ними глюках читай здесь.
5) Продолжая тему питания, хочу отметить важность качества пайки силовых точек (подключение провода к ленте, подключение этого же провода к БП), а также толщину проводов. Как показывает мой опыт, брать нужно провод сечением минимум 1.5 квадрата, если нужна полная яркость. Пример: на проводе 0.75 кв.мм. на длине 1.5 метра при токе 2 Ампера падает 0.8 вольта, что критично для 5 вольт питания. Первый признак просадки напряжения: заданный программно белый цвет светит не белым, а отдаёт в жёлтый/красный. Чем краснее, тем сильнее просело напряжение!
6) Мигающая лента создаёт помехи на линию питания, а если лента и контроллер питаются от одного источника – помехи идут на микроконтроллер и могут стать причиной нестабильной работы, глюков и даже перезагрузки (если БП слабый). Для сглаживания таких помех рекомендуется ставить электролитический конденсатор 6.3V ёмкостью 470 мкФ (ставить более ёмкий нет смысла) по питанию микроконтроллера, а также более “жирный” конденсатор (1000 или 2200 мкФ) на питание ленты. Ставить их необязательно, но очень желательно. Если вы заметите зависания и глюки в работе системы (Ардуино лента другое железо), то причиной в 50% является как раз питание.
7) Слой меди на ленте не очень толстый (особенно на модели ECO), поэтому от точки подключения питания вдоль ленты напряжение начинает падать: чем больше яркость, тем больше просадка. Если нужно сделать большой и яркий кусок ленты, то питание нужно дублировать медным проводом 1.5 (или больше, надо экспериментировать) квадрата через каждый метр.
Настройки в коде
// ------ Дисплей ------
LCD_BACKL 1 // автоотключение подсветки дисплея (1 - разрешить)
BACKL_TOUT 60 // таймаут неактивности отключения дисплея, секунды
CONTRAST 150 // контрастность (яркость) дисплея 0-255
ROTATE_DISP 1 // 0 или 1 - повернуть дисплей на 180 градусов
I2C_ADDRESS 0x3C // адрес дисплея
// примерно на 200 строке можно поменять шрифт дисплея
// ------ Драйвер ------
HIGH_FREQUENCY 2 // 0 - 490 Гц, 1 - 7.8 кГц, 2 - 31.4 кГц, 3 - ручная настройка
PWM_FREQUENCY 15000 // частота ШИМ на настройке №3, Герц
DRIVER_DIRECTION 0 // 0 - обычный (мосфеты), 1 - реверс (LED amplifier)
// ------ Лента ------
MAX_CURRENT 0 // макс. ток в мА, при значении 0 фича не активируется
NUM_LEDS 60 // кол-во светодиодов для расчёта ограничения тока (только для диодов 5050!!!)
SMOOTH_K 0.25 // коэффициент плавности огня
// ------ Bluetooth ------
USE_BT 0 // 1 - использовать Bluetooth, 0 - нет
// ------ ИК пульт ------
USE_IR 1 // 1 - использовать ИК пульт, 0 - нет
IR_STEP 10 // шаг изменения настроек с пульта
// ------ Энкодер ------
USE_ENC 1 // 1 - использовать энкодер, 0 - нет
ENC_REVERSE 1 // 1 - инвертировать направление энкодера
ENC_TYPE 1 // 0 или 1 - тип энкодера
// ------ Напряжение ------
VOLTMETER 0 // 0 или 1 - вкл/выкл вольтметр (делитель напряжения в пин А0)
CHARGE_VAL 1 // вывод напряжения: 0 - в процентах, 1 - в вольтах
CONSTANT_BRIGHT 0 // 0 или 1 - вкл/выкл поддержание яркости при разрядке АКБ (только для диодов 5050!!!) (в схеме должен стоять делитель)
VREF 5.1 // напряжение на пине 5V
R1 10010 // точное значение 10 кОм
R2 4700 // точное значение 4.7 кОм
Отправка данных
Отправка данных девайсу осуществляется путём записи значения в характеристику, а конкретнее вызовом метода
writeValue()
объекта характеристики с
ArrayBuffer
в качестве аргумента. Для преобразования строки в
ArrayBuffer
проще всего воспользоваться
TextEncoder
// Отправить данные подключенному устройству
function send(data) {
data = String(data);
if (!data || !characteristicCache) {
return;
}
writeToCharacteristic(characteristicCache, data);
log(data, 'out');
}
// Записать значение в характеристику
function writeToCharacteristic(characteristic, data) {
characteristic.writeValue(new TextEncoder().encode(data));
}
На всякий случай приводим данные к строковому типу, используя глобальный объект
String
В такой реализации также будет действовать ограничение в 20 байт: всё, что выходит за рамки, просто будет обрезано. Поэтому в случае, если сообщение длиннее 20 байт, стоит разбить его на куски и последовательно отправить с некоторой задержкой:
// Отправить данные подключенному устройству
function send(data) {
data = String(data);
if (!data || !characteristicCache) {
return;
}
data = 'n';
if (data.length > 20) {
let chunks = data.match(/(.|[rn]){1,20}/g);
writeToCharacteristic(characteristicCache, chunks[0]);
for (let i = 1; i < chunks.length; i ) {
setTimeout(() => {
writeToCharacteristic(characteristicCache, chunks[i]);
}, i * 100);
}
}
else {
writeToCharacteristic(characteristicCache, data);
}
log(data, 'out');
}
Чтобы облегчить обработку сообщений на стороне контроллера, добавим в конец отправляемого сообщения символ подачи строки (
n
Далее сообщение разбивается на куски с помощью регулярного выражения, корректно обрабатывающего символы возврата каретки (CR, r) и подачи строки (LF, n), после чего первая часть отправляется сразу, а на отправку других выставляются таймеры с задержкой, кратной 100 миллисекундам.
Обмен данными между терминалом и браузером, кликабельно
Работает! Мы получили полнофункциональный двусторонний обмен данными с устройством и на этом с JS всё.
Подключение угла и код
Для каждого уровня был выбран свой цвет: нижний – зеленый, первый снизу – красный, второй – черный, третий – белый. На начальном этапе использовались breadboard и светодиоды для визуальной отладки.
Схема подключения показана на рисунке. Плюс тянем к зеленому, остальные протягиваем к минусу. Через резистор, установленный для устранения помех и отсутствия КЗ, подключаем провода к выходам A0-A2. Выбраны они просто из экономии остальных портов.
Код дан с комментариями. Подключаем пины и опрашиваем их через digitarRead(). Если напряжение есть, вернется значение true. Далее смотрим, если результат означает, что колеса в крайних положениях, запрещаем дальнейший поворот в эту сторону.
Небольшая хитрость: поскольку выходы на 5В и 3.3В понадобятся в будущем, можно поставить плюс на один из digital-пинов. Перед каждой проверкой угла выдавать ток через digitalWrite(whitePin), потом проверять угол и убирать ток.
int speedTurn = 180; //скорость поворота, от 0 до 255
//пины для определения поворота
int pinRed = A0;
int pinWhite = A1;
int pinBlack = A2;
int pinAngleStop = 12; //выводит ток на светодиод, если достигнут максимальный угол, нужен
//только для отладки
void setup() {
//пины поворота на считывание
pinMode(pinRed, INPUT);
pinMode(pinBlack, INPUT);
pinMode(pinWhite, INPUT);
//светодиод
pinMode(pinAngleStop, OUTPUT);
//пины драйвера двигателя, направление и скорость
pinMode(angleDirection, OUTPUT);
pinMode(angleSpeed, OUTPUT);
Serial.begin(9600);
}
//функция вызывается из loop(), когда приходит команда с андроида
void turn(int angle) {
digitalWrite(pinAngleStop, HIGH); //выдаем ток на провод, подключенный к плюсу
delay(5); //немного ждем, чтобы ток "успел" дойти
if(angle > 149) {
if( digitalRead(pinWhite) == HIGH && digitalRead(pinBlack) == LOW && digitalRead(pinBlack) == LOW) {
//если достигнуто крайне правое положение, выйти из функции не подавая ток, чтобы не
//сжечь мотор
return;
}
//если угол не максимальный, поворачиваем
digitalWrite(angleDirection, HIGH);
analogWrite(angleSpeed, speedTurn);
} else if (angle < 31) {
if(digitalRead(pinRed) == HIGH && digitalRead(pinBlack) == HIGH && digitalRead(pinWhite) == HIGH) {
//если достигнуто крайне левого положение, выйти из функции не подавая ток, чтобы не
//сжечь мотор
return;
}
//если угол не максимальный, поворачиваем
digitalWrite(angleDirection, LOW);
analogWrite(angleSpeed, speedTurn);
}
digitalWrite(pinAngleStop, LOW); //убираем ток с определителя угла
delay(5);
}
Робомобиль на базе arduino mega 2560 с bluetooth управлением и автономным движением с объездом препятствий
Представляю свой проект робомобиля на Arduino. На просторах интернета есть масса подобных статей, наткнувшись на одну из них решил реализовать увиденное со своими изменениями в конструкцию и функционал. Реализованы следующие возможности: управление робомобилем по Bluetooth со смартфона; автономное движение робомобиля с объездом препятствий.
Для реализации нам понадобится:
Комплект: рама, моторы, колёса, крепления (Car Chassis Kit for Arduino — фото)
Arduino Mega 2560
Motor Control Shield for Arduino L293D
Сервопривод MG995
Ультразвуковой дальномер HC-SR04
Bluetooth модуль HC-05 JY-MCU
Active High Level Buzzer Alarm / Speaker Buzzer Module
Диоды для фар
Соединительные провода
Держатели для дальномера и Bluetooth модуля (делал сам)
Блок питания (я взял от кассового аппарата)
Приложение на Android для управления робомобилем по Bluetooth Arduino Bluetooth RC Car (фото, при подключении к Bluetooth модулю пин-код по умолчанию «1234»)
Подключение комплектующих
Процесс сборки
К моторам припаиваем провода, обратите внимание, на всех нижних контактах у меня чёрные провода, на верхних — красные, не перепутайте полярность при подключении к Motor Shield.
Крепим сервопривод к верхней части рамы, моторы к нижней, собираем раму, ставим колёса. Устанавливаем Motor Shield сверху Arduino Mega и крепим на раму, подключаем всё по схеме выше, заливаем соответствующий скетч (в конце статьи) — наслаждаемся.
Управление по Bluetooth — устанавливаете приложение на свой смартфон, запускаете, подключаетесь (Connect) к Bluetooth модулю (при необходимости вводите пин-код); управлять можно классическим способом по стрелкам (Buttons), а так же в меню программы можно выбрать Accelerometer и управлять с помощью наклонов смартфона.
Автономное движение с объездом препятствий — алгоритм следующий: дальномер измеряет расстояние впереди, если оно > 30 см (в скетче параметр const int vmindistance), то продолжаем двигаться вперед, если < 30 см, то: останавливаем моторы; крутим сервопривод на углы от 0° до 180° с шагом в 15° и измеряем расстояния на этих углах; заносим полученные значения в массив; поворачиваем сервопривод прямо на угол 90°; ищем в массиве позицию с максимальным значением данных; если это значение < 30 см, то едем назад, если > 30 см, то проверяем какому углу поворота сервопривода оно соответствует и в зависимости от этого поворачиваем влево или вправо.
Небольшое видео
Управление по Bluetooth:
Автономное движение с объездом препятствий:
Ссылки для скачивания:
→ Библиотека AFMotor
→ Скетч — управление по Bluetooth
→ Скетч — автономное движение с объездом препятствий
→ Мануал по Bluetooth модулю HC-05
Сравнение модулей bluetooth hc 05 и hc 06
Модули HC 05 и HC 06 являются наиболее используемыми, их чаще остальных можно найти в продаже. Принцип действия этих модулей схож, оба модуля основаны на одинаковом чипе, но есть и важные отличия. В первую очередь, модуль HC 05 может работать в двух режимах работы – и в качестве ведущего (master), и в качестве ведомого (slave).
Оба модуля представляют собой две спаянные платы. Одна из них – заводская с микросхемой, другая нужна для самодельных устройств, она оснащена ножками GPIO со стандартным шагом 2,54 мм и стабилизатором напряжения.
Модуль HC-05 стоит несколько дороже, но он имеет большее количество полезных рабочих функций.
Распиновка модуля HC-05:
- EN – управление питанием;
- Питание VCC;
- GND;
- RX, TX;
- STATE – индикация;
- KEY – активирует режим управления при помощи АТ-команд. При KEY=0 – передача данных, при KEY=1 – АТ-команды.
Скорость передачи АТ команд по умолчанию для HC-05 равна 38400, для HC-06 – 9600. Важным моментом является то, что в конце АТ команд для HC-05 должны быть символы CRLF.
Основные характеристики HC-05:
- Рабочие частоты 2,4 – 2,48 ГГц;
- Мощность передачи 0,25 – 2,5мВт;
- Дальность 10 м;
- Максимальная скорость обмена данными 115200 бод;
- Питание 3,3В;
- Ток 30-40 мА;
- Рабочие температуры от -25С до 75С.
Подключение обоих модулей к плате Ардуино одинаково.
Вариант подключение модуля с использованием делителя.Представлен вариант для Arduino Nano, но он подойдет и к плате Uno.
Схема подключения робота quadruped:
Соберите механику, подключите Tream-Power Shield, сервоприводы, датчик расстояния и откалибруйте робота, как это описано на странице Сборка QUADRUPED. Электроника Калибровка. Далее на боковые панели установите Bluetooth HC-05 и кнопку, первый модуль подключается к шине UART (в примере используется аппаратная шина UART), а второй к любому выводу Arduino Uno (в примере используется вывод D12).
Вы можете изменить выводы 2 и 3 для подключения датчика HC-SR04 на любые другие, указав их в скетче при объявлении объекта objSensor.
Сервоприводы | Trema Power Shield | |
---|---|---|
1 конечность | Горизонтальный сустав (№ 0) | вывод 4 на белой колодке |
Вертикальный сустав (№ 1) | вывод 5 на белой колодке | |
2 конечность | Горизонтальный сустав (№ 2) | вывод 6 на белой колодке |
Вертикальный сустав (№ 3) | вывод 7 на белой колодке | |
3 конечность | Горизонтальный сустав (№ 4) | вывод 8 на белой колодке |
Вертикальный сустав (№ 5) | вывод 9 на белой колодке | |
4 конечность | Горизонтальный сустав (№ 6) | вывод 10 на белой колодке |
Вертикальный сустав (№ 7) | вывод 11 на белой колодке |
Вы можете изменить выводы 4-11 для подключения сервоприводов на любые другие, указав их в скетче при объявлении массива объектов pinServo[8]. Трехпроводные шлейфы сервоприводов устанавливаются следующим образом:
- Оранжевый провод подключается к выводу на белой колодке.
- Красный провод подключается к выводу на красной колодке.
- Коричневый провод подключается к выводу на чёрной колодке.
Bluetooth | Trema Power Shield | |
---|---|---|
Bluetooth HC-05 | вывод RX | вывод TX на колодке Serial |
вывод TX | вывод RX на колодке Serial | |
вывод K (Key) | вывод A0 на белой колодке | |
вывод V (Vcc) | любой вывод на красной колодке | |
вывод G (GND) | любой вывод на чёрной колодке |
Вы можете изменить вывод A0 для подключения Bluetooth на любой другой, указав его в скетче при объявлении объекта objHC05.
Выводы RX и ТХ модуля подключаются проводами к выводам TX и RX колодки с надписью Serial. Трёхпроводной шлейф подключённый к выводам K, V, G, устанавливается следующим образом:
- Вывод K (Key) подключается к выводу на белой колодке.
- Вывод V (Vcc) подключается к выводу на красной колодке.
- Вывод G (GND) подключается к выводу на чёрной колодке.
Кнопка | Trema Power Shield | |
---|---|---|
Trema-кнопка | вывод S (Signal) | вывод 12 на белой колодке |
вывод V (Vcc) | любой вывод на красной колодке | |
вывод G (GND) | любой вывод на чёрной колодке |
Вы можете изменить вывод D12 для подключения кнопки на любой другой, указав его в скетче при определении константы pinK.
Трёхпроводной шлейф подключённый к выводам S, V, G, устанавливается следующим образом:
- Вывод S (Signal) подключается к выводу на белой колодке.
- Вывод V (Vcc) подключается к выводу на красной колодке.
- Вывод G (GND) подключается к выводу на чёрной колодке.
Представленная ниже схема совпадает со схемой из инструкции по сборке QUADRUPED, но к ней добавились два модуля: bluetooth (подключается к выводам A0, TX и RX) и кнопка (подключается к выводу D12).
Элементы схемы: «Э0»…«Э7» – сервоприводы, «Э8» – датчик расстояния, «Э9» – Trema bluetooth модуль, «Э10» Trema кнопка.
Управление:
Сразу после сборки, загрузки скетча и подачи питания на пульт, и QUADRUPED, суставы робота будут ослаблены, и он не будет реагировать на команды с пульта, так как Bluetooth модулям требуется сопряжение (создание пары). Сопряжение достаточно выполнить только один раз, bluetooth модули запомнят созданную пару в своей энергонезависимой памяти и будут пытаться соединится друг с другом при каждой последующей подаче питания.
- Отключите питание пульта (если оно было подано), нажмите на джойстик (как на кнопку) и подайте питание пульта. После выполнения этих действий bluetooth модулю пульта будет назначена роль мастера и он начнёт поиск ведомого с именем «QUADRUPED» и PIN-кодом «1212».
- Подключите питание робота (если оно не было подано), нажмите и удерживайте кнопку сопряжения не менее 1 секунды (её можно нажимать в любое время). После нажатия на кнопку, bluetooth модулю робота будет назначена роль ведомого с именем «QUADRUPED» и PIN-кодом «1212», и он будет ожидать подключение мастера.
- Для выполнения повторного сопряжения (если оно потребуется) нужно выполнить те же действия как для пульта, так и для робота.
- Как только связь будет установлена, суставы робота «оживут» и он будет выполнять команды пульта. Если Вы отключите питание пульта, то суставы робота ослабнут и вновь оживут при подаче питания пульта.
Управление роботом с пульта выполняется следующим образом:
- Если отклонить джойстик вперёд, то и робот пойдёт вперёд, а скорость будет зависеть от степени отклонения джойстика.
- Если отклонить джойстик назад, то и робот пойдёт назад, а скорость будет зависеть от степени отклонения джойстика.
- Если отклонить джойстик вперёд и влево, или вправо, то и робот пойдёт вперёд заворачивая влево, или вправо. Скорость будет зависеть от степени отклонения джойстика вперёд, а радиус поворота от степени отклонения джойстика влево, или вправо.
- Если отклонить джойстик назад и влево, или вправо, то и робот пойдёт назад заворачивая влево, или вправо. Скорость будет зависеть от степени отклонения джойстика назад, а радиус поворота от степени отклонения джойстика влево, или вправо.
- Если отклонить джойстик влево или вправо, но не отклонять его вперёд, или назад, то робот начнёт разворачиваться на месте влево, или вправо, а скорость разворота будет зависеть от степени отклонения джойстика.
- Если нажать на джойстик (при включённом питании), то все суставы конечностей робота установятся в центральные положения.
- Если поворачивать ручку потенциометра по часовой стрелке, то корпус робота будет подниматься, вне зависимости от положения джойстика.
- Если поворачивать ручку потенциометра против часовой стрелке, то корпус робота будет опускаться, вне зависимости от положения джойстика.
Управляем arduino через bluetooth hc-06, с компьютера или смартфона
Для беспроводного обмена информации, между различными устройствами на небольших дистанциях, можно использовать Bluetooth-технологию. Для этих целей китайской промышленностью выпускаются различные Bluetooth-модули, среди которых широкую популярность получили модели HC-05 и HC-06. В своё время на Алиэкспресс я приобрёл HC-06, на котором и буду проводить дальнейшие эксперименты, а так же подключать к своему китайскому аналогу Arduino.
Непосредственно сам Bluetooth-модуль. В таком виде он может использоваться в различных устройствах, где впаивается непосредственно в плату. Модуль имеет 34 вывода, среди которых: выводы для соединения с компьютером по UART, передачи звука по методу PCM (импульсно кодовая модуляция), аналоговый вход и выход, контакты для подключения к USB разъёму, SPI интерфейс, а также порты общего назначения. На самом деле не все эти выводы доступны к использованию, заблокирован доступ к выводам передачи звука (5-8), аналоговым входу и выходу (9, 10), а так же к группе контактов для подключения к USB (15, 20).
HC-06 построен на чипе BC417 (BlueCore4-External device), спецификация Bluetooth V2.0. На борту так же имеется кварц на 26 МГц и флеш-память на 8 Мб. Питание осуществляется от 3,3В.
Для своих конструкций удобнее всего использовать модуль с макетной платой, на которой выведены необходимые контакты для подключений, а так же имеется стабилизатор напряжения, который позволяет питаться от 5 вольт.
При покупки подобных модулей, можете столкнуться с различными их маркировками. По сути это одно и то же устройство, отличающееся прошивкой, которая определяет режим модуля (master / slave).
Отличие HC-05 от HC-06 состоит в том, что HC-05 можно использовать в качестве ведомого (master) или ведущего (slave). Данные режимы задаются с помощью АТ-команд. Кнопка на плате модуля переключает его в режим ввода АТ-команд. Режим master даёт возможность модулю самому обнаруживать подобное устройство и организовывать связь с ним. Модуль HC-06 может работать только в одном фиксированном режиме slave.
Так же существуют модели HC-03 и HC-04, но они выпускаются для промышленных целей.
Обозначение контактов на плате HC-06.
STATE – проверка состояние модуля. На этом контакте дублируется сигнал, который отображает встроенный на плате светодиод. Если он очень быстро мигает, значит модуль находится в активном состоянии. В режиме установления связи ток составляет 30-40 мА. Когда модуль устанавливает связь с другим устройством, светодиод просто горит. В режиме передачи данных ток составляет 8 мА.
RX – получение данных.
TX – передача данных.
GND – подключается к земле.
5V – питание 5 Вольт
EN – включение / выключение модуля. Если на этот контакт подать логическую 1 (5 вольт), модуль выключится, если подать логический 0 или не подключаться к этому контакту, модуль будет работать.
По-умолчанию HC-06 имеет имя для обнаружения другими устройствами «HC-06», с пин-кодом «1234».
Для изменения этих данных нужно модуль подключить к компьютеру и с помощью программы-терминала ввести АТ-команды. Это можно сделать с помощью переходника USB to COM с TTL уровнями. Для этих целей подойдёт адаптер на PL2303HX, CH340G, либо другой подобный. На компьютере к этому моменту уже должен быть установлен драйвер для USB адаптера.
Контакты соединяем следующим образом:
При подключении этой сборки к компьютеру, красный светодиод на плате Bluetooth-модуля начнёт быстро мигать. Для ввода АТ-команд можно воспользоваться любой терминальной программой, я использую для этой цели Arduino IDE.
В настройках выбираем номер виртуального COM-порта, на котором подключен USB адаптер, в моём случае это COM44. Откроем окно «Монитора последовательного порта».
Введём заглавными буквами команду «AT», если устройство удачно подключилось, в ответ должно возвратится «ОК». По-умолчанию скорость обмена данными 9600 бод.
Для проверки версии прошивки, введём команду «AT VERSION», в моём случае ответ возвратился «OKlinvorV1.8».
Командой «AT NAMEyyy», где ууу — произвольный набор символов на латинице, можем сменить имя, по которому будут находить наш модуль bluetooth-устройства (по-умолчанию HC-06). В своём примере я ввёл «AT NAMEfox», ответ возвращается OKsetname.
Командой «AT PINxxxx», где xxxx – произвольный набор цифр, можно сменить пин-код (по-умолчанию 1234). В ответ возвращается «OKsetPIN».
Командой «AT BAUDx», где x – значение от 1 до 9, можно изменить скорость в бодах (по-умолчанию 9600).
1 – 1200
2 – 2400
3 – 4800
4 – 9600
5 – 19200
6 – 38400
7 – 57600
8 – 115200
9 – 230400
Допустим, если ведём команду «AT BAUD8», где 8 — скорость 115200 бод, в ответ возвратится «OK115200».
Подключение HC-06 к Arduino.
Пример 1. Зальём в Arduino скетч, с помощью которого будем включать и выключать светодиод, распаянный на 13 пине Arduino, через Bluetooth-модуль.
Если у вас нет на плате данного светодиода, подключите его к 13 пину по схеме, номиналы резисторов можно взять от 220 Ом до 1кОм.
Обесточим Arduino и подключим HC-06. Контакт TX модуля подключаем к контакту RX Ардуино (пин 0 на плате UNO), а контакт RX, к контакту TX (пин 1). Контакты 5V и GND, подключаются к соответствующим пинам Ардуино.
Конструкция в сборе. Подав питание на Ардуино, светодиод на HC-06 должен быстро мигать.
Управление Arduino через HC-06, с помощью компьютера.
Пример буду показывать на Windows XP. К компьютеру должен быть подключен любой USB Bluetooth-адаптер и установленны на него драйвера.
В моём случае использовался вот такой адаптер.
При его подключении к ПК, в трее (возле часов) появляется соответствующая иконка.
Нажимаем правой кнопкой мыши на данной иконке и в контекстном меню выбираем «Добавить устройство Bluetooth».
Ставим переключатель «Устройство установлено и готово к обнаружению» и нажимаем «Далее».
В списке обнаруженных устройств отобразится наш Bluetooth-модуль, с новым именем, которое я поменял ранее. Выбираем его и нажимаем «Далее».
В следующем окне вводим пин-код для подключения к модулю, выбрав пункт «Использовать ключ доступа из документации:». По-умолчанию это «1234», но я его сменил на «9999». Нажимаем «Далее».
Bluetooth-модуль успешно связался с компьютером, о чём можно узнать с соответствующего окна. Следует обратить внимание, при образовании связи между двумя Bluetooth-устройствами, на компьютере создастся два новых виртуальных COM-порта (будут отображаться в диспетчере устройств), один для исходящих данных, другой для входящих. Нам понадобится порт для исходящих данных, в моём случае это COM45.
Вновь открываем какую-нибудь программу-терминал, я воспользуюсь Arduino IDE. В настройках выбираем исходящий порт (у меня COM45), открываем «Монитор последовательного порта», вводим переменно команды «1» и «0». При команде «1» светодиод загорается, при «0» гаснет.
Управление Arduino через HC-06 с помощью смартфона.
Наверное уже все современные смартфоны имеют в своём составе встроенный Bluetooth. Остаётся только установить программу терминал. В моём случае использовалась Lumia 640 DS, с установленной Windows mobile 10. В качестве программы терминала использую «BT Terminal». На Android-смартфонах всё аналогично, в качестве программы можно использовать «Bluetooth Terminal».
Для обладателей смартфонов компании Apple не получится работать с Bluetooth-модулями HC-05 и HC-06 (Bluetooth V2.0), для них придётся использовать адаптеры с технологией BLE (Bluetooth low energy), спецификация Bluetooth 4.0. Ярким представителем является модуль HM-10.
Сопрягаем HC-06 с блютузом смартфона.
1. В «Параметрах» смартфона выбираем пункт «Устройства».
2. Далее «Bluetooth и другие устройства».
3. Включаем ползунком блютуз смартфона и нажимаем на «плюс в квадрате» для поиска и добавления нового Bluetooth-устройства, в нашем случае HC-06.
4. В разделе «Добавить устройство» выбираем «Bluetooth».
5. Смартфон произведёт поиск Bluetooth-устройств находящихся в округе и отобразит их имена. В моём примере найден модуль HC-06, который я переименовал в «fox».
6. Вводим пин-код устройства, к которому подключаемся, нажимаем кнопку «Подключиться».
Устанавливаем и запускаем терминальную программу «BT Terminal». Подключенный к смартфону модуль HC-06, отображается в списке, выбираем его.
Появится поле для ввода команд и кнопка для отправки. Вводим попеременно «1» и «0» и наблюдаем за светодиодом на 13 пине, который будет зажигаться или гаснуть.
Пример 2. Подключим к Arduino три светодиода и попробуем управлять ими через Bluetooth-модуль HC-06.
Светодиоды подключил к 9, 11 и 13 пину, если будите использовать другие пины, их нужно указать в скетче.
int data; int LED1 = 9; int LED2 = 11; int LED3 = 13; void setup() { Serial.begin(9600); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); } void loop() { if (Serial.available()) { data = Serial.read(); if (data == ‘1’) { digitalWrite(LED1, HIGH); } if ( data == ‘2’) { digitalWrite(LED1, LOW); } if (data == ‘3’) { digitalWrite(LED2, HIGH); } if ( data == ‘4’) { digitalWrite(LED2, LOW); } if (data == ‘5’) { digitalWrite(LED3, HIGH); } if ( data == ‘6’) { digitalWrite(LED3, LOW); } } } |
При заливке скетча модуль HC-06 нужно отсоединить от Ардуино, потому что и компьютер, и блютуз работают по UART. Ардуина не может на одном UART работать с несколькими устройствами.
Запускаем программу-терминал и пробуем скетч в действии. Смысл управления светодиодами следующий, имеется три светодиода, каждый из которых может быть либо включенный, либо выключенный. Получается 6 команд. Команды представляют из себя цифры от 1 до 6 ( 1, 3, 5 – зажечь 1, 2 и 3 светодиоды. 2, 4, 6 – погасить). Цифры можно вводить по одной, либо в виде комбинаций. Например: 145 – зажечь первый, погасить 2-й, зажечь 3-й.
Пример 3. Подключим к Arduino реле-модуль из статьи «Подключаем мощную нагрузку к Arduino, через реле модуль» и попробуем управлять мощной нагрузкой через Bluetooth. По сути, у нас получится «умная розетка». К реле-модулям можно подключать различные нагрузки (лампочки, насосы, вентиляторы) и управлять ими на расстоянии.
Скетч по этому примеру появится в ближайшее время.