Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ Вертолеты

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 нужен для подключения дополнительных кусков ленты или соединения матриц.

blank

2) Если в схеме возможна ситуация, при которой на ленту не будет подаваться питание 5V, но будет отправляться сигнал с микроконтроллера – лента начнёт питаться от дата-пина. В этом случае может сгореть как первый светодиод в ленте, так и пин контроллера. Не испытывайте удачу, поставьте резистор с сопротивлением 200-500 Ом. Точность резистора? Любая. Мощность резистора? Любая. Да, даже 1/4.

blank

2.1) Если между лентой и контроллером (Arduino) большое расстояние, т.е. длинные провода (длиннее 50 см), то сигнальный провод и землю нужно скрутить в косичку для защиты от наводок, так как протокол связи у ленты достаточно скоростной (800 кГц), на него сильно влияют внешние наводки, а экранирование земляной скруткой поможет этого избежать. Без этого может наблюдаться такая картина: лента не работает до тех пор, пока не коснёшься рукой сигнального провода.

blank

2.2) При подключении ленты к микроконтроллерам с 3.3V логикой (esp8266, ESP32, STM32) появляется проблема: лента питается от 5V, а сигнал получает 3.3V. В даташите указана максимальная разница между питанием и управляющим сигналом, если её превысить – лента не будет работать или будет работать нестабильно, с артефактами. Для исправления ситуации можно:

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

4) Питание. Один цвет одного светодиода при максимальной яркости кушает 12 миллиампер. В одном светодиоде три цвета, итого ~36 мА на диод. Пусть у вас есть метр ленты с плотностью 60 диод/метр, тогда 60*36 = 2.1 Ампера при максимальной яркости белого цвета, соответственно нужно брать БП, который с этим справится. Также нужно подумать, в каком режиме будет работать лента. Если это режимы типа «радуга», то мощность можно принять как половину от максимальной. Подробнее о блоках питания, а также о связанных с ними глюках читай здесь.

blank

5) Продолжая тему питания, хочу отметить важность качества пайки силовых точек (подключение провода к ленте, подключение этого же провода к БП), а также толщину проводов. Как показывает мой опыт, брать нужно провод сечением минимум 1.5 квадрата, если нужна полная яркость. Пример: на проводе 0.75 кв.мм. на длине 1.5 метра при токе 2 Ампера падает 0.8 вольта, что критично для 5 вольт питания. Первый признак просадки напряжения: заданный программно белый цвет светит не белым, а отдаёт в жёлтый/красный. Чем краснее, тем сильнее просело напряжение!

blank

6) Мигающая лента создаёт помехи на линию питания, а если лента и контроллер питаются от одного источника – помехи идут на микроконтроллер и могут стать причиной нестабильной работы, глюков и даже перезагрузки (если БП слабый). Для сглаживания таких помех рекомендуется ставить электролитический конденсатор 6.3V ёмкостью 470 мкФ (ставить более ёмкий нет смысла) по питанию микроконтроллера, а также более “жирный” конденсатор (1000 или 2200 мкФ) на питание ленты. Ставить их необязательно, но очень желательно. Если вы заметите зависания и глюки в работе системы (Ардуино лента другое железо), то причиной в 50% является как раз питание.

blank

7) Слой меди на ленте не очень толстый (особенно на модели ECO), поэтому от точки подключения питания вдоль ленты напряжение начинает падать: чем больше яркость, тем больше просадка. Если нужно сделать большой и яркий кусок ленты, то питание нужно дублировать медным проводом 1.5 (или больше, надо экспериментировать) квадрата через каждый метр.

blank

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

// ------ Дисплей ------
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 со смартфона; автономное движение робомобиля с объездом препятствий.

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Для реализации нам понадобится:

Комплект: рама, моторы, колёса, крепления (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.

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Крепим сервопривод к верхней части рамы, моторы к нижней, собираем раму, ставим колёса. Устанавливаем Motor Shield сверху Arduino Mega и крепим на раму, подключаем всё по схеме выше, заливаем соответствующий скетч (в конце статьи) — наслаждаемся.

Управление по Bluetooth — устанавливаете приложение на свой смартфон, запускаете, подключаетесь (Connect) к Bluetooth модулю (при необходимости вводите пин-код); управлять можно классическим способом по стрелкам (Buttons), а так же в меню программы можно выбрать Accelerometer и управлять с помощью наклонов смартфона.

Автономное движение с объездом препятствий — алгоритм следующий: дальномер измеряет расстояние впереди, если оно > 30 см (в скетче параметр const int vmindistance), то продолжаем двигаться вперед, если < 30 см, то: останавливаем моторы; крутим сервопривод на углы от 0° до 180° с шагом в 15° и измеряем расстояния на этих углах; заносим полученные значения в массив; поворачиваем сервопривод прямо на угол 90°; ищем в массиве позицию с максимальным значением данных; если это значение < 30 см, то едем назад, если > 30 см, то проверяем какому углу поворота сервопривода оно соответствует и в зависимости от этого поворачиваем влево или вправо.

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Bluetooth модуль HC-05: описание, подключение, схема, характеристики | ВИКИ

Небольшое видео

Управление по Bluetooth:

Автономное движение с объездом препятствий:

Ссылки для скачивания:

→ Библиотека AFMotor
Скетч — управление по Bluetooth
Скетч — автономное движение с объездом препятствий
Мануал по Bluetooth модулю HC-05

Сравнение модулей bluetooth hc 05 и hc 06

Модули HC 05 и HC 06 являются наиболее используемыми, их чаще остальных можно найти в продаже. Принцип действия этих модулей схож, оба модуля основаны на одинаковом чипе, но есть и важные отличия. В первую очередь, модуль HC 05  может работать в двух режимах работы – и в качестве ведущего (master), и в качестве ведомого (slave).

Оба модуля представляют собой две спаянные платы. Одна из них – заводская с микросхемой, другая нужна для самодельных устройств, она оснащена ножками GPIO со стандартным шагом 2,54 мм и стабилизатором напряжения.

Cравнение Bluetooth модулей HC-05 и HC-06
Модули HC-05 и HC-06

Модуль 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]. Трехпроводные шлейфы сервоприводов устанавливаются следующим образом:

  • Оранжевый провод подключается к выводу на белой колодке.
  • Красный провод подключается к выводу на красной колодке.
  • Коричневый провод подключается к выводу на чёрной колодке.
BluetoothTrema 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.

HC-06

Непосредственно сам 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В.

HC-06

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

HC-05

Отличие HC-05 от HC-06 состоит в том, что HC-05 можно использовать в качестве ведомого (master) или ведущего (slave). Данные режимы задаются с помощью АТ-команд. Кнопка на плате модуля переключает его в режим ввода АТ-команд. Режим master даёт возможность модулю самому обнаруживать подобное устройство и организовывать связь с ним. Модуль HC-06 может работать только в одном фиксированном режиме slave.

Так же существуют модели HC-03 и  HC-04, но они выпускаются для промышленных целей.

Обозначение контактов на плате HC-06.

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 адаптера.

HC-06 UART

Контакты соединяем следующим образом:

При подключении этой сборки к компьютеру, красный светодиод на плате  Bluetooth-модуля начнёт быстро мигать. Для ввода АТ-команд можно воспользоваться любой терминальной программой, я использую для этой цели Arduino IDE.

Arduino IDE

В настройках выбираем номер виртуального COM-порта, на котором подключен USB адаптер, в моём случае это COM44. Откроем окно «Монитора последовательного порта».

Arduino IDE

Введём заглавными буквами команду «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-модуль.

Arduino led

Если у вас нет на плате данного светодиода, подключите его к 13 пину по схеме, номиналы резисторов можно взять от 220 Ом до 1кОм.

Arduino HC-06

Обесточим Arduino и подключим HC-06. Контакт TX модуля подключаем к контакту RX Ардуино (пин 0 на плате UNO), а контакт RX, к контакту TX (пин 1). Контакты 5V и GND, подключаются к соответствующим пинам Ардуино.

Arduino HC-06

Конструкция в сборе. Подав питание на Ардуино, светодиод на HC-06 должен быстро мигать.

Управление Arduino через HC-06, с помощью компьютера.

Пример буду показывать на Windows XP. К компьютеру должен быть подключен любой USB Bluetooth-адаптер и установленны на него драйвера.

Bluetooth

В моём случае использовался вот такой адаптер.

Bluetooth

При его подключении к ПК, в трее (возле часов) появляется соответствующая иконка.

Bluetooth

Нажимаем правой кнопкой мыши на данной иконке и в контекстном меню выбираем «Добавить устройство Bluetooth».

Bluetooth

Ставим переключатель «Устройство установлено и готово к обнаружению» и нажимаем «Далее».

Bluetooth

В списке обнаруженных устройств отобразится наш Bluetooth-модуль, с новым именем, которое я поменял ранее. Выбираем его и нажимаем «Далее».

Bluetooth

В следующем окне вводим пин-код для подключения к модулю, выбрав пункт «Использовать ключ доступа из документации:». По-умолчанию это «1234», но я его сменил на «9999». Нажимаем «Далее».

Bluetooth

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.

Bluetooth

Сопрягаем HC-06 с блютузом смартфона.

1. В «Параметрах» смартфона выбираем пункт «Устройства».
2. Далее «Bluetooth и другие устройства».
3. Включаем ползунком блютуз смартфона и нажимаем на «плюс в квадрате» для поиска и добавления нового Bluetooth-устройства, в нашем случае  HC-06.

Bluetooth

4. В разделе «Добавить устройство» выбираем «Bluetooth».
5. Смартфон произведёт поиск Bluetooth-устройств находящихся в округе и отобразит их имена. В моём примере найден модуль HC-06, который я переименовал в «fox».

Bluetooth

6. Вводим пин-код устройства, к которому подключаемся, нажимаем кнопку «Подключиться».

BT Terminal

Устанавливаем и запускаем терминальную программу «BT Terminal». Подключенный к смартфону модуль HC-06, отображается в списке, выбираем его.

BT Terminal

Появится поле для ввода команд и кнопка для отправки. Вводим попеременно «1» и «0» и наблюдаем за светодиодом на 13 пине, который будет зажигаться или гаснуть.

Пример 2. Подключим к Arduino три светодиода и попробуем управлять ими через  Bluetooth-модуль HC-06.

Arduino leds

Светодиоды подключил к 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. По сути, у нас получится «умная розетка». К реле-модулям можно подключать различные нагрузки (лампочки, насосы, вентиляторы) и управлять ими на расстоянии.

Arduino smart house

Скетч по этому примеру появится в ближайшее время.

Оцените статью
Радиокоптер.ру
Добавить комментарий