Опубликовано

Имитация ИК-сигналов управления пульта ДУ

Раздел из главы 10 “Дистанционное управление” из книги “Arduino. Большая книга рецептов, 3-е изд.” (авторы Джепсон Брайан, Марголис Майкл, Уэлдин Николас Роберт)

Arduino. Большая книга рецептов, 3-издание

ЗАДАЧА

Требуется управлять с помощью платы Arduino телевизором или каким-либо другим устройством, эмулируя коды ИК-сигналов пульта ДУ. Эта задача противоположна рассмотренной в разд. 10.2 — здесь нам нужно не принимать команды, а отправлять их.

Для приема платой Arduino сигналов пульта ДУ используется модуль приемника ИК-сигналов. На рынке широко представлены приемники ИК-сигнала TSOP38238, TSOP4838, PNA4602 и TSOP2438. Первые три эти приемника имеют одинаковую схему расположения контактов, а у приемника TSOP2438 выводы питания (+5 В и GND) поменяны местами. При использовании какого-либо иного приемника ИК-сигналов уточните схему расположения его контактов в справочном листке (datasheet) на него и подключите его к плате Arduino, как там указано. Подключение приемников TSOP38238, TSOP4838 и PNA4602 к плате Arduino показано в схеме на рис. 10.1.

C:\Users\acer\Documents\#Electronics\Магазин электроники\фрагменты из книг\2788. Arduino Cookbook. Recipes to Begin, Expand, and Enhance\verstka\pic\10\10.1.png

Рис. 10.1. Подключение приемника ИК-сигнала к плате Arduino

РЕШЕНИЕ

Для решения этой задачи к плате Arduino нужно подключить пять кнопок и инфракрасный светодиод, как показано на рис. 10.2.

Скетч для управления этой схемой приводится в листинге 10.4. Для управления устройством в нем используются коды кнопок из скетча, приведенного в решении из разд. 10.2 (см. листинг 10.2). Коды для управления вашим устройством, скорее всего, будут другими, поэтому узнайте их, исполнив скетч из разд. 10.2, а затем замените ими коды в скетче из листинга 10.4. Нажатие одной из пяти кнопок выбирает и отправляет требуемый код.

Листинг 10.4. Скетч для эмулирования ИК-пульта ДУ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
* Скетч irSend
* Требует подключения ИК-светодиода к контакту 3
* и 5 кнопок к контактам 6-10
*/
#include <IRremote.h> // Подключаем библиотеку IRremote
const int numberOfKeys = 5;
const int firstKey = 6; // Номер первого из пяти последовательных
// контактов, к которым подключаются кнопки
bool buttonState[numberOfKeys];
bool lastButtonState[numberOfKeys];
long irKeyCodes[numberOfKeys] =
{
0x18E758A7, //0 key
0x18E708F7, //1 key
0x18E78877, //2 key
0x18E748B7, //3 key
0x18E7C837, //4 key
};
 
IRsend irsend;
void setup()
{
for (int i = 0; i < numberOfKeys; i++)
{
buttonState[i] = true;
lastButtonState[i] = true;
int physicalPin=i + firstKey;
pinMode(physicalPin, INPUT_PULLUP); // Включаем внутренние повышающие резисторы
}
Serial.begin(9600);
}
 
void loop()
{
for (int keyNumber=0; keyNumber<numberOfKeys; keyNumber++)
{
int physicalPinToRead = keyNumber + firstKey;
buttonState[keyNumber] = digitalRead(physicalPinToRead);
if (buttonState[keyNumber] != lastButtonState[keyNumber])
{
if (buttonState[keyNumber] == LOW)
{
irsend.sendSony(irKeyCodes[keyNumber], 32);
Serial.println("Sending"); // Посылаем команду
}
lastButtonState[keyNumber] = buttonState[keyNumber];
}
}
}

C:\Users\acer\Documents\#Electronics\Магазин электроники\фрагменты из книг\2788. Arduino Cookbook. Recipes to Begin, Expand, and Enhance\verstka\pic\10\10.2.png

Рис. 10.2. Подключение кнопок и инфракрасного светодиода к плате Arduino

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

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

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

Скетч Arduino управляет удаленным устройством, включая и выключая инфракрасный светодиод таким образом, чтобы имитировать сигналы, посылаемые ИК-пультом ДУ от этого устройства. Характеристики используемого ИК-свето­диода не являются критическими. Информация по подбору подходящего компонента приводится в приложении 1.

Преобразование числовых кодов в мигания ИК-светодиода реализует библиотека IRremote. Для этого в скетче требуется создать экземпляр объекта этой библиотеки. Такой экземпляр для управления светодиодом, подключенным к контакту 3 (выбирать контакт для подключения светодиода не представляется возможным, поскольку этот параметр жестко закодирован в библиотеке), создается следующей строкой кода:

IRsend irsend;
В зависимости от используемой платы Arduino, ИК-светодиод может потребоваться подключить к иному контакту, чем 3. Например, для плат Teensy 3.x ИК-светодиод надо подключать к контакту 5. Более подробная информация на этот счет содержится в файле README библиотеки IRremote (https://oreil.ly/XOfdd). Если для вашей платы ИК-светодиод нужно подключать к одному из контактов, который в скетче решения используется для подключения кнопок (контакты 6–10), следует взять другой диапазон номеров контактов для подключения кнопок.

Для хранения диапазона значений кодов управления в скетче используется массив irKeyCodes (см. также решение разд. 2.4). Скетч отслеживает состояние пяти кнопок и при обнаружении нажатия одной из них посылает соответствующий код кнопки следующим оператором:

irsend.sendSony(irKeyCodes[keyNumber], 32);

Объект irSend поддерживает разные функции для работы с различными популярными форматами ИК-кодов. В случае использования системы дистанционного управления с другими форматами кодов, посмотрите эти форматы в документации на библиотеку. Коды также можно узнать с помощью скетча из разд. 10.2, который выводит их в окно монитора порта.

При передаче функции кода кнопки из массива в конце кода также передается число, сообщающее функции количество битов в коде. Префикс 0x перед определениями кодов в массиве irKeyCodes в начале скетча означает шестнадцатеричный формат этих чисел (подробная информация о шестнадцатеричных числах приводится в главе 2). Каждый символ шестнадцатеричного числа представляет 4-битное значение. Восемь шестнадцатеричных цифр кода означает 32 бита.

Светодиод к плате Arduino подключается через токоограничивающий резистор (подробная информация о применении токоограничивающих резисторов со светодиодами приводится во введении главы 7 (разд. 7.0)).

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

Дополнительная информация

Дополнительная информация по управлению светодиодами приведена в главе 7.

Проект необычного ИК-пульта дистанционного управления для телевизоров представлен на веб-странице https://oreil.ly/7BzKh.

Опубликовано

Руководство по сопряжению модулей HC-05 (ver. 4.0 2019[1]) и HC-06 (BT SPP V3.0)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Для сопряжения модулей HC-05 (master-модуль) и HC-06 (slave-модуль) необходимо выполнить следующее:

  1. Установить одинаковую скорость передачи на обоих устройствах.
  2. Убедитесь, что пароли на HC-05 и HC-06 совпадают (при необходимости установить одинаковые)
  3. Определить MAC адрес HC-06
  4. Соединить HC-05 с HC-06
  5. Связать HC-06 с HC-05
  6. Настроить HC-05 на соединение только с сопряженным устройствам HC-06
  7. Соединить HC-05 с HC-06

Прежде чем приступить к сопряжению модулей, опишем их подключение к ПК для последующей настройки и тестирования соединения. Обращаем внимание, что кроме двух сопрягаемых модулей HC-05 и HC-06, нам понадобится дополнительный плата Arduino и модуль HC-05, который поможет определить MAC-адрес HC-06 в каждой паре. В качестве дополнительного модуля мы использовали HC-05 версии 3.0-20170601. Мы указываем конкретные версии модулей, т.к. выяснили, что порядок настройка модулей разных версий может немного отличаться.


Примечание

Также для определения MAC-адреса можно использовать смартфон на базе Android с установленной терминальной программой (например, Serial Bluetooth Terminal или Bluetooth Terminal HC-05)


1. Подключение модулей Bluetooth к ПК

1.1. Подключение модуля HC-06

# Действия Примечание
1 Подключаем Bluetooth HC-06 к преобразователю USB-UART с помощью проводов «мама-мама».

01_BT-USB-UART-HC06

Обратите внимание, контакт «Transmit Data» одного устройства подключен к контакту «Receive Data» другого!
2 Включаем преобразователь USB-UART в разъем USB ПК.
3 Запускаем Arduino IDE.
4 Выбираем порт, к которому подключен USB-UART (Инструменты | Порт)

5 Открываем монитор последовательного порта (Инструменты | Монитор порта). Выбираем настройки:.

Скорость 9600 бод

Режим «Нет конца строки»

6 Для контроля правильности подключения вводим команду

AT

и получаем в ответ отклик от модуля Bluetooth HC-06

OK

1.2. Подключение master-модуля HC-05 (ver. 4.0). Модуль брелка

# Действия Примечание
1 Подключаем Bluetooth HC-05 (ver. 4.0) к преобразователю USB-UART с помощью проводов «мама-мама» как показано на рис ниже.

01b_BT-USB-UART-HC05

Обратите внимание, контакт «Transmit Data» одного устройства подключен к контакту «Receive Data» другого!
2 Включаем преобразователь USB-UART в разъем USB ПК. Светодиод на BT будет медленно мигать. Обращаем внимание, что подача напряжения 3,3 В на контакт EN переводит BT при подключении к ПК в Режим AT-команд #1.

В этом режиме BT работает на скорости 38400 бод и реагирует на определенный набор команд.

3 Запускаем Arduino IDE.
4 Выбираем порт, которому подключен USB-UART (Инструменты | Порт)

5 Открываем монитор последовательного порта (Инструменты | Монитор порта). Настраиваем Arduino.

Скорость 38400 бод

Режим «NL & CR»

6 Для контроля правильности подключения вводим команду

AT

и получаем в ответ отклик от модуля Bluetooth HC-06

OK

1.3. Подключение master-модуля HC-05 (ver. 3.0 20170601). Модуль для определения MAC-адреса HC-06

Этот модуль мы используем, чтобы создать «испытательный стенд» для определения MAC-адреса модулей HC-06, которые мы будем сопрягать с «брелком». Он является «стационарным» устройством для определения адресов всех модулей HC-06 и настраивается только один раз перед началом работы.

1 этап

# Действия Примечание
1. Подключаем Bluetooth HC-05 (ver. 3.0) к плате Arduino Uno, как показано на рисунке.

Подключение HC-05 для для определения MAC-адреса

2. Запускаем Arduino IDE.
3. Откройте в Arduino IDE и загрузите скетч Bluetooth_INQ-1.ino на плату Arduino UNO (см. внизу)..
4 Переведите BT модуль в «первый» режим ввода команд. Для этого

– Отключите провод питания модуля BT (VCC)

– Подайте на пин EN напряжение 3,5В (можно и 5 В) и не отключайте. Напряжение можно подать от платы Arduino Uno (или кантакта 3V3 преобразователя USB-UART/TTL CP2102)

– Снова подключите провод питания модуля BT (VCC)

– Если вы успешно вошли в режим AT-команд #1, то светодиод будет медленно мигать, и вы сможете подключиться к нему со скоростью 38400 бод с помощью загруженного скетча..

BT V3.0 есть два AT-режима, которые «понимают» несколько разные наборы команд.

Вместо подачи на контакт EN напряжения +3,5 В можно при запуске держать нажатой кнопку на модуле BT и затем зафиксировать ее в таком положении, например прищепкой или «крокодилом».

5 Введите следующие AT-команды

AT
AT+UART=115000,0,0
AT+RMAAD
AT+ROLE=1
AT+RESET
AT+CMODE=1
AT+INQM=0,5,5

AT+UART=115000,0,0 устанавливает скорость. 115200.AT+RMAAD очищает все сохраненные соединения

AT+ROLE=1 устанавливает его в качестве ведущего

AT +RESET устройство перезапускается для перехода на master

AT+CMODE=1 принимает все виды устройств

AT+INQM=0,5,5 запрашивает в стандартном режиме, с 5 максимальными подключениями или 5 секундами


Листинг 1. Bluetooth_INQ-1.ino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX`
<strong>const long baudRate = 38400; </strong>
char c=' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
BTserial.println("AT");
delay(1000);
}
 
void loop()
{
// Read from the Bluetooth module and send to the Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Read from the Serial Monitor and send to the Bluetooth module
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
// Echo the user input to the main window. The "&gt;" character indicates the user entered text.
if (NL) { Serial.print("&gt;"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}

2 этап

1 Загрузите на плату Arduino скетч Bluetooth_INQ-2.ino.

По сравнению с Bluetooth_INQ-1.ino в нем изменен только один параметр.

const long baudRate = 115200;

т.к. вы на первом этапе уже задали для модуля BT скорость 115200 бод

2. Переведите BT модуль во «второй» режим ввода команд. Для этого:

  • включите питание (не удерживая кнопку и не подавая питание на пин EN). Светодиод LED на модуле BT начинет быстро мигать.
  • подайте питание +3,5 В на пин EN (или нажмите и удерживайте кнопку). Светодиод будет продолжать быстро мигать, но теперь вы можете подключиться к устройству с настроенной скоростью передачи данных.
Пример

Uploaded: Sep 3 2021
BTserial started at 9600
AT
OK
AT+STATE
+STATE:CONNECTED
OK
AT+INIT
ERROR:(17)
AT+INQ
+INQ:20:4:BDD6A7,1F00,7FFF
+INQ:20:4:BDD6A7,1F00,7FFF

Откройте Монитор последовательного порта и введите команды.

AT
AT+STATE?
AT + RMAAD
AT + ROLE= 1
AT + RESET
AT + RMAAD очищает все ранее сопряженные устройства.
AT + ROLE = 1 переводит HC-05 в режим Master.
AT + RESET сбрасывает HC-05. Иногда это необходимо после смены ролей.

HC-05_to_HC-06-HC-05_Connect01
AT + CMODE = 0
AT + INQM = 0,5,9
AT + INIT
AT + INQ
AT + CMODE = 0 позволяет HC-05 подключаться к любому устройству.
AT + INQM = 0,5,9 устанавливает запрос для поиска до 5 устройств в течение 9 секунд.
AT + INIT инициирует профиль SPP. Если SPP уже активен, вы получите сообщение об ошибке (17), которое можно игнорировать.
AT + INQ выполняет поиск других устройств Bluetooth.
HC-05_to_HC-06-HC-05_Connect02
На экране Монитора порта появится список обнаруженных устройств, например

+ INQ: A854: B2: 3FB035,8043C, 7FFF

Первая группа цифр определяет MAC- адрес найденного HС-06.

На приведенном выше снимке экрана видно, что HC-05 обнаружил 2 устройства Bluetooth.
+ INQ: A854: B2: 3FB035,8043C, 7FFF
+ INQ: 3014: 10: 171179,1F00,7FFFЧтобы узнать имя найденного устройства, мы можем использовать командуAT + RNAME?АдресДля первого устройства это будет команда

AT + RNAME?
A854, B2,3FB035

Для второго устройства

AT + RNAME?
3014,10,171179

Листинг 2. Bluetooth_INQ-2.ino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include &lt;SoftwareSerial.h&gt;
SoftwareSerial BTserial(2, 3); // RX | TX`
//const long baudRate = 38400;
<strong>const long baudRate = 115200; </strong>
char c=' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
}
void loop()
{
// Read from the Bluetooth module and send to the Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Read from the Serial Monitor and send to the Bluetooth module
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
// Echo the user input to the main window. The "&gt;" character indicates the user entered text.
if (NL) { Serial.print("&gt;"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}

2. Настройка модулей

2.1. Установка скорости и пароля HC-06

ATOKAT+VERSIONOKlinvorV1.8AT+BAUD8OK115200

# Действия Примечание
1 Отправляем команду AT, модуль отвечает OK. Все в порядке, можно продолжать.

Должен быть выбран режим ввода Мониторе порта «Нет конца строки»!

AT

OK

2 Изменяем скорость обмена на 115200

Вводим команду AT+BAUD8

AT + BAUD8 устанавливает скорость обмена 115200 для модуля Bluetooth HC-06

AT+VERSIONBT SPP V3.0
AT+BAUD4
OK9600
ATOKAT+VERSIONOKlinvorV1.8AT+BAUD8OK115200
3 Изменяем пароль на 1234

Вводим команду AT+PIN1234

AT+PIN1234

OK1234

Примечание

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

2.2. Определение MAC-адреса HC-06

1 Переведите модуль BT HC-05 (ver.3.0 2017 20170601) во «второй» режим ввода команд. Для этого:

  • включите питание (не удерживая кнопку и не подавая питание на пин EN). Светодиод LED на модуле BT начинает быстро мигать.
  • подайте питание +3,5 В на пин EN (или нажмите и удерживайте кнопку). Светодиод будет продолжать быстро мигать, но теперь вы можете подключиться к устройству с настроенной скоростью передачи данных.
2 Выключите и включите BT HC-06
3 Откройте Монитор порта и запишите MAC-адрес устройств, которые обнаружил ваш «измерительный стенд» на базе bluetooth HC-05 (ver.3.0 2017 20170601)

2.3. Настройка HC-05 (ver. 4.0) и сопряжение BT-модуля

1 этап

1. Подключите BT-модуль в режиме AT-команд #1 (на контакт EN при включении подано напряжение 3,3 В)

AT#1-BT-USB-UART

Если вы успешно вошли в режим AT, то светодиод на BT будет медленно мигать, и вы сможете подключиться к модулю со скоростью 38400 бод с помощью загруженного скетча.
2 Подключитесь к модулю с помощью Монитора порта (или другой терминальной программы, например Termite) на скорости 38400
3 Настройте скорость и пароль модуля HC-05 (ver. 4.0) с помощью следующих AT-команд:

AT
AT+NAME=HC-05-20-4-BDD6A7
AT+PSWD=1234
AT+STATE?
AT + RMAAD
AT + ROLE= 1
AT + CMODE = 1
AT+UART=115200,0,0
AT+RESET

AT + CMODE = 1 — модуль в роли ведущего (HC-05) подключается к любому ведомому Bluetooth устройству. В нашем случае — и к HC-06

В качестве имени HC-05 удобно использовать MAC-адрес подключенного к нему HC-06

2 этап

1 Отключите питание BT HC-06 slave, к которому вы подключаете HC-05
2. Подключите модуль HC-05 к ПК в Режиме AT#2, пошагово как показано на рис. ниже.

AT#2_BT-USB-UART

3 Соедините HC-05 (ver.4.0) с HC-06

Для создания пары мы используем команду

AT + PAIR = <addr>, <timeout>.

Введите команду

AT + PAIR = 20,4,BDD6A7,9

Если HC-05 не может соединиться с HC-06 в течение 9 секунд, вы получите сообщение об ошибке.

Если соединение прошло успешно, будет выведено «ОК».

MAC-адрес модуля HC-06 мы определили на предыдущем шаге 1.3 (2 этап). В нашем примере это 20,4,BDD6A7
4 Свяжите HC-06 (ver.4.0) с HC-05.

Привязка просходит с помощью команды

AT + BIND = <addr>

В нашем примере это будет команда

AT + BIND = 20,4,BDD6A7

5 Настройте HC-05 на подключение только к сопряженным устройствам.

Делаем это с помощью команды CMODE

AT + CMODE = 0

AT + CMODE = 0 — модуль в роли ведущего подключается только к тому Bluetooth устройству, адрес которого указан командой AT+BIND. В нашем случае HC-05 (ver.4.0) подключается к HC-06
6 Ссылка на HC-06

Используйте команду ссылки

AT + LINK = <addr>

В нашем случае

AT + LINK = 20,4,BDD6A7

Если все в порядке, вы получите ответ «ОК»

 

7
  • Для проверки соединения
  • 1. Подключите питание к вашему модуля BT HC-06. Светодиод на модуле начинает быстро мигать.
  • 2. Подключите питание к вашему модуля BT HC-05. Светодиод на модуле также начинает быстро мигать.
  • 3. Если вы все сделали правильно, то через 5-10 сек индикация изменится.
  • Светодиод на HC-05 (ver.4.0) будет мигать 2 раза подряд каждые 2 секунды.
  • Светодиод на HC-06 должен гореть постоянно.

Поздравляем Вы успешно настроили HC-05 и сопрягли его с HC-06!

Теперь HC-05 будет автоматически подключаться к HC-06 при каждом включении и входить в режим связи.

Если вы хотите продолжить работу в режиме AT, вам необходимо перезагрузить модуль с помощью контакта 34 HIGH или с замкнутым кнопочным переключателем.

3. Проверка работы пары HC05-HC-06

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

  1. Отключим питание slave-устройства HC-06.
  2. Отсоединим преобразователь USB-UART от компьютера и отсоединим провод «+3.3V — EN», больше мы в нем не нуждаемся. Master-модуль остается подключенным лишь четырьмя проводами к USB-UART, теперь это законченное устройство. Для удобства можно заменить провода на более короткие, скрепить изолентой.
1. Установите модуль HC-06 в плату LV. Включаем питание. Модуль часто замигал, он готов к новому сеансу связи. index
2 Извлеките и вновь установите «брелок» в USB ПК. Пара секунд, и светодиодная индикация изменилась. Работает!
3 Откройте mBlock и выберите номер порта, к которому подключен HC-05 (ver. 4.0).

Соединить | Serial Port | Номер COM-порта

(в нашем случае это COM13)

4
5 Выберите вкладку simpleBot Programm и нажмите на блок _on board BUZZER. В ответ вы должны услышать звук динамика на плате LV.

Это означате, что все в порядке!

6

Примечание

Обратите внимание, что компьютер вообще ничего не знает о существовании Bluetooth. Для него наш «брелок» — просто COM-порт. Соответственно, мы больше не нуждаемся ни в драйверах Bluetooth, ни в какой бы то ни было его настройке Bluetooth. И потраченное нами время с лихвой будет компенсировано во время занятий.


Примечание

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


HC05-HC06

  1. Речь идет об HC-05 версии 4.0-20190728
Опубликовано

Установка имени, скорости и пароля Bluetooth-модуля HC-06

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Вы можете самостоятельно с помощью AT-команд установить для модуля Bluetooth имя, пароль и скорость обмена.

Для этого:

1. Подключите модуль к плате, как показано на рисунке ниже. Включите питание на плате с помощью ползункового переключателя (ON).

2. Откройте среду разработки Arduino IDE.

3. Выберите плату Arduino UNO (Инструменты | Arduino AVR Boards | Arduino Uno) и номер Порта.

4. Загрузите на плату скетч для ввода AT-команд в модуль Bluetooth.


Примечание

В строке mySerial.begin(9600) указана скорость передачи данных, установленная на модуле Bluetooth. Набор комплектуется модулем, для которого уже установлена «правильная» скорость — 115 200 бод. В новом Bluetooth-модуле HC-06 по умолчанию установлена скорость 9600 бод.


Листинг 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "SoftwareSerial.h" // подключаем библиотеку
SoftwareSerial mySerial(9,10); // указываем пины tx и rx
 
void setup() {
pinMode(9,INPUT);
pinMode(10,OUTPUT);
Serial.begin(9600); // включаем hardware-порт
mySerial.begin(9600); // включаем software-порт
Serial.println("start setting");
}
 
void loop() {
if (mySerial.available()) {
char c = mySerial.read(); // читаем из software-порта
Serial.print(c); // пишем в hardware-порт
}
if (Serial.available()) {
char c = Serial.read(); // читаем из hardware-порта
mySerial.write(c); // пишем в software-порт
}
}

5. Откройте Монитор порта и выберите скорость обмена 9600 бод и режим ввода Нет конца строки.

6. Отправьте на модуль команду AT (без кавычек). Если модуль ответит OK, то всё в порядке, можно продолжать.

7. Для обмена Bluetooth-модуля HC-06 с приложением mBlock следует установить скорость модуля равной 115200 бод. Для этого в верхнем поле Монитора порта введите AT-команду

AT+BAUD8

и нажмите кнопку Отправить.

В ответ вы получите сообщение от модуля Bluetooth:

OK115200

Модуль готов к установке в стандартный разъём на плате робота.

В таблице ниже приведены AT-команды, доступные для модуля HC-06.

Список AT-команд для модуля HC-06

Назначение AT-команда Параметры Ответ от модуля
1 Изменение пароля AT+PIN1234 Здесь 1234 — пароль OK1234
2 Изменение имени AT+NAMEHC-06-1 Здесь HC-06-1 — новый пароль OKsetname
3 Узнать версию модуля AT+VERSION BT SPP V3.0
4 Изменение скорости AT+BAUDx BAUD1 – 1200 бод
BAUD2 – 2400 бод
BAUD3 – 4800 бод
BAUD4 – 9600 бод
BAUD5 – 19200 бод
BAUD6 – 38400 бод
BAUD7 – 57600 бод
BAUD8 – 115200 бод
BAUD9 – 230400 бод
OK1200

OK2400

OK4800

OK9600

OK19200

OK38400

OK57600

OK115200

OK230400

 


Совет

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

Опубликовано

Подключение робота к настольному компьютеру по каналу Bluetooth (Windows 11)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Для подключения робота к настольному персональному компьютеру (ПК) по каналу Bluetooth (без кабеля USB) вам потребуется приобрести внешний Bluetooth-адаптер, который подключается в USB-разъём ПК. В настоящее время в специализированных магазинах представлено большое количество подобных адаптеров. Мы тестировали подключение с недорогим адаптерами в ценовом диапазоне 250–300 руб.

Подключение осуществляется в четыре этапа:

  1. Установка драйверов для Bluetooth-адаптера.
  2. Сопряжение модуля Bluetooth HC-06 и компьютера.
  3. Настройка параметров.
  4. Подключение модуля HC-06 к компьютеру.

1. Установка драйвера адаптера Bluetooth

1. Установите Bluetooth-адаптер в разъём USB на настольном компьютере.

2. Практически во всех случаях для Windows 10/11 драйвер для Bluetooth установится автоматически, и в области уведомлений Windows появится значок Bluetooth .

3. В Диспетчере устройств должны появиться раздел Bluetooth и сам адаптер. Если адаптер не будет опознан и будет отображаться как неизвестное устройство (другое устройство), придётся устанавливать драйверы вручную.

2. Сопряжение модуля Bluetooth HC-06 и ПК

1. Установите модуль HC-06 на плату SPBot и включите питание. Светодиод на Bluetooth начинает часто мигать. Кабель USB подключать не надо.

2. Откроется окно Параметры | Bluetooth и другие устройства. Нажмите кнопку + Добавление Bluetooth или другого устройства.

3. Щёлкните по команде  Bluetooth.

4. Появится список устройств Bluetooth, обнаруженных компьютером поблизости. Среди обнаруженных устройств вы увидите и ваш модуль HC-06. Выберите его…

5. Введите пароль (обычно для HC-06 это 1234 или 0000) и нажмите кнопку Подключиться.

6. Появится сообщение «Ваше устройство готово к использованию!». Нажмите кнопку Готово внизу окна Добавить устройство. Светодиод на модуле Bluetooth HC-06 будет продолжать быстро мигать.

3. Настройка параметров

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

Установите флажки, как показано на рисунке справа.

Выберите вкладку COM-порты и запишите, какие именно COM-порты использует ваше сопряжение.

Знание номеров портов вам понадобится, чтобы установить скорость 115 200 бод. Именно на этой скорости идёт обмен информацией с mBlock.

Примечание

По умолчанию для HC-06 установлена скорость 9600 бод. Для набора скорость увеличена до 115 200 бод с помощью AT-команд.

3. Откройте Диспетчер устройств.

4. В окне Диспетчер устройств в группе Порты (COM и LPT) вы увидите порты, выделенные для модуля HC-06. В нашем случае это COM32 и COM33.

5. Дважды щёлкните мышью по названию порта, в открывшемся окне Свойства выберите вкладку Параметры порта и установите параметр Бит в секунду в значение 115200.

Выполните эти действия для обоих портов (в нашем случае для COM32 и COM33).

4. Подключение HC-06 к компьютеру с помощью mBlock

1. В меню программы mBlock выберите команды Соединить | Блютус | Discover.

2. Компьютер начнёт поиск устройств Bluetooth, расположенных поблизости.

3. По окончании поиска на экране появится окно со списком всех обнаруженных устройств Bluetooth с указанием их имени и MAC-адреса. Выберите из списка наш модуль HC-06-20190901.

4. Появится окно Bluetooth Connected, и в течение 15–20 секунд будет осуществляться подключение HC-06 к роботу SPBot. По окончании соединения светодиод на модуле Bluetooth перестанет мигать. Закройте окно Bluetooth Connected.

5. Всё готово! Модуль HC-06 подключен к программе mBlock.

При повторном запуске приложения mBlock наш модуль уже будет прописан в меню программы Соединить | Блютус. Выберите HC-06-20190901 (00:21:06:08:51:05), и через 15–20 секунд модуль будет подключен.

Опубликовано

Подключение модуля Bluetooth HC-06 к ноутбуку (Windows 10/11)

По материалам руководства к набору “Знакомьтесь! Я — Робот. Робототехнический набор + КНИГА

Все современные ноутбуки оборудованы модулем Bluetooth (BT). Это позволяет подключиться к роботу по каналу BT без кабеля USB. Ниже это показано на примере ОС Windows 11.

Подключение осуществляется в три этапа:

  1. Сопряжение модуля Bluetooth HC-06 и ноутбука.
  2. Настройка COM-порта ноутбука на скорость 115 200 бод.
  3. Подключение модуля HC-06 к ноутбуку.

1. Сопряжение модуля Bluetooth HC-06 и ноутбука в Windows 11

1. Установите модуль HC-06 на плату SPBot и включите питание. Светодиод на Bluetooth начинает часто мигать. Кабель USB подключать не надо.

2. Откройте окно Параметры | Bluetooth и устройства. Нажмите на кнопку + Добавить устройство.

3. Щёлкните по команде  Bluetooth.

4. Появится список устройств Bluetooth, обнаруженных ноутбуком поблизости. Среди обнаруженных устройств вы увидите и ваш модуль HC-06. Выберите его…

5. Введите пароль (обычно для HC-06 это 1234 или 0000) и нажмите кнопку Подключиться.

6. Появится сообщение «Ваше устройство готово к использованию!». Нажмите кнопку Готово внизу окна Добавить устройство. Светодиод на модуле Bluetooth HC-06 будет продолжать быстро мигать.

7. Окно Добавить устройство закроется, и вы увидите, что ваш модуль BT HC-06 появился в списке устройств Bluetooth, которые сопряжены с вашим компьютером.

2. Настройка для COM-портов скорости на 115 200 бод

1. Прежде всего необходимо определить номер COM-порта, к которому подключен модуль HC-06. Для этого выберите команду Параметры | Bluetooth и устройства | Устройства | Дополнительные параметры Bluetooth.

2. В окне Параметры Bluetooth щёлкните по вкладке COM-порты, и вы увидите номера COM-портов, выделенных на ноутбуке для вашего HC-06.

3. Откройте Диспетчер устройств. Для этого щёлкните правой кнопкой мыши по логотипу Windows (меню Пуск) или нажмите сочетание клавиш <Win>+<X> и выберите Диспетчер устройств из списка параметров.

4. В окне Диспетчер устройств вы увидите в группе Порты (COM и LPT) порты, выделенные для модуля HC-06. В нашем случае это COM3 и COM4.

5. Дважды щёлкните мышью по названию порта, в открывшемся окне Свойства выберите вкладку Параметры порта и установите параметр Бит в секунду в значение 115200. Выполните эти действия для обоих портов (в нашем случае для COM3 и COM4).

3. Подключение HC-06 к ноутбуку с помощью mBlock

1. В верхнем меню программы mBlock выберите команды Соединить | Блютус | Discover.

2. Ноутбук начнёт поиск устройств Bluetooth, расположенных поблизости.

3. По окончании поиска на экране появится окно со списком всех обнаруженных устройств Bluetooth с указанием их имени и MAC-адреса. Выберите из списка наш модуль HC-06.

4. Появится окно Bluetooth Connected, и в течение 15–20 секунд будет осуществлять подключение HC-06 к роботу SPBot. По окончании соединения светодиод на модуле Bluetooth перестанет мигать. Закройте окно Bluetooth Connected.

5. Всё готово! Модуль HC-06 подключен к программе mBlock.

При повторном запуске приложения mBlock наш модуль уже будет прописан в меню программы Соединить | Блютус. Выберите HC-06 (00:20:04:BD:D3:A9), и через 15–20 секунд модуль будет подключен.

Опубликовано

Воспроизведение звуковых файлов на Arduino

По материалам книги С. Монка «Мейкерство. Arduino и Raspberry Pi» (глава 15 «Звук»)

Мейкерство. Arduino и Raspberry Pi

Эксперимент: громкоговоритель без усилителя на Arduino

Для воспроизведения более или менее сложного звука понадобится какой-нибудь громкоговоритель. Громкоговорители, появившиеся почти сто лет назад, в большинстве своем работают на основе соленоида (см. разд. «Соленоиды» главы 7) — содержащаяся в них электромагнитная катушка с достаточно высокой частотой колеблет жесткий конус, создающий звуковые волны.

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

Обычно на громкоговорителях встречаются значения 4 или 8 ом. И если вы собираетесь подключить 8-омный громкоговоритель к выходу Arduino с напряжением 5 В, то с полным основанием можете ожидать возникновения тока, равного по силе:

I = V / R = 5 / 8 = 625 мА

То есть, тока намного большего, чем те 40 мА, которые рекомендуются для выходного контакта Arduino. Похоже, нам и здесь понадобится согласующий резистор!

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


Звуковые частоты

Частота звуковой волны в музыкальных терминах называется тоном и выражается в количестве звуковых волн, достигающих ваших ушей за одну секунду. Мне нравится представлять звуковые волны в виде ряби на пруду. Звук высокой частоты — скажем, 10 кГц (килогерц), создает 10 000 звуковых волн в секунду, а звук низкой частоты (скажем, 100 Гц) — всего 100 звуковых волн в секунду. Человек обычно слышит звуки в диапазоне от 20 Гц до 20 кГц, но верхняя граница с возрастом снижается. Звуки выше 20 кГц обычно называют ультразвуком.

У животных другие диапазоны слышимых звуков. Например, кошки могут слышать частоты вплоть до 55–79 кГц, а летучие мыши известны тем, что вообще пользуются ультразвуковой эхолокацией.

В музыке самая низкая нота «До» на обычном пианино соответствует частоте 32,7 Гц, а самая высокая — частоте 4186 Гц. Известное всем, имеющим хоть какое-то касательство к музыке, понятие октава означает удваивание частоты. Поэтому, если заставить на клавиатуре пианино зазвучать две ноты «До» смежных октав, то вторая нота будет звучать с удвоенной частотой первой ноты.


Комплектующие

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

Таблица 15.1. Комплектующие для работы с Arduino в эксперименте с громкоговорителем

Компонент схемы Источники
Небольшой громкоговоритель с импедансом 8 Ом Adafruit: 1891
Резистор 270 Ом 0,25 Вт Mouser: 291-270-RC
400-точечная беспаечная макетная плата Adafruit: 64
Перемычки «папа-папа» Adafruit: 758

Громкоговоритель я извлек из старого радиоприемника, и у него оказался разъем, в который можно было вставить штекерные наконечники перемычек. Вам может достаться громкоговоритель с припаянными к нему проводами, которые удастся воткнуть в разъемы Arduino, или же вам придется подпаять к этим проводам выводы, толщина которых позволит воткнуть их в гнезда монтажной платы.

Макетная схема эксперимента

Схема, собранная для проведения эксперимента на макетной плате, показана на рис. 15.1.

mkac_1501

Рис. 15.1. Схема эксперимента с громкоговорителем на Arduino в сборе

Один провод от громкоговорителя подключается к контакту GND (заземление) Arduino, а второй — к контакту D11 через резистор.

Программа для Arduino

Скетч Arduino для этого эксперимента находится в каталоге /arduino/experiments/ex_speaker (см. разд. «Код к книге» главы 2):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int soundPin = 11;
void setup() {
pinMode(soundPin, OUTPUT);
Serial.begin(9600);
Serial.println("Введите частоту ");
}
 
void loop() {
if (Serial.available()) {
int f = Serial.parseInt();
tone(soundPin, f); //<strong> 1</strong>
delay(2000);
noTone(soundPin); //<strong> 2</strong>
}
}

Незнакомая вам часть кода может находиться внутри цикла loop():

  1. tone настраивает один из выходных контактов Arduino на воспроизведение звука с указанной частотой (в данном случае, с частотой, набранной в окне монитора порта).
  2. После двухсекундной задержки команда noTone отменяет воспроизведение звука, возвращая умиротворяющую тишину.

Загружаем и выполняем программу

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

Продолжите эксперимент, вводя различные частоты и наблюдая изменение звука.

В случае, если вы попытаетесь получить в этом эксперименте частоты на границах слышимости, вас, к сожалению, будет ожидать разочарование, поскольку у громкоговорителя, скорее всего, окажется свой, еще более узкий диапазон звучания, и на частотах, превышающих примерно 10 кГц, громкость звука резко пойдет на спад. Небольшие громкоговорители также обычно не способны нормально воспроизводить звуки с частотой, ниже 100 Гц.


Синусоида и меандр

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

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


Звуковые волны в виде меандра и синусоиды

Рис. 15.2. Звуковые волны в виде меандра и в виде синусоиды

Усилители

Чтобы сделать генерируемый звук громче, требуется выдать на громкоговоритель больше мощности. Иными словами, сигнал нужно усилить.

В конструкции, собранной для эксперимента из разд. «Эксперимент: громкоговоритель без усилителя на Arduino», мощность звука, излучаемого громкоговорителем, можно существенно усилить, используя транзистор, как это делалось для включения и выключения реле или электродвигателя, — звук останется столь же неприятным, но станет значительно громче.

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

Усилитель можно собрать самостоятельно, но намного проще воспользоваться уже готовым изделием или же парой колонок, которыми оснащен ваш персональный компьютер. Задействовать такие колонки, в которые усилитель уже встроен, окажется особенно заманчиво, когда дело дойдет до использования Raspberry Pi, поскольку их входной штекер можно будет просто подключить к аудиоразъему Raspberry Pi.

Такой подход мы рассмотрим позже, когда кукла Пепе (из разд. «Проект: танцующая кукла Пепе на Raspberry Pi» главы 9) станет обретать голос (см. разд. «Проект: кукла Пепе обретает голос» далее в этой главе).

Эксперимент: воспроизведение звуковых файлов на Arduino

Звуковые файлы формата WAV можно проигрывать на Arduino с помощью оборудования из разд. «Эксперимент: громкоговоритель без усилителя на Arduino» и библиотеки Arduino под названием PCM (от англ. pulse code modulation, импульсно-кодовая модуляция). Для генерирования колебаний, способных вызвать звук, в этой библиотеке используется технология, слегка похожая на технологию широтно-импульсной модуляции (ШИМ). Флэш-памяти Arduino хватает приблизительно на 4 секунды записи, а если требуется проигрывать более длинные звуковые клипы, надо добавить к Arduino кардридер SD и следовать рекомендациям, приведенным на веб-сайте Arduino по адресу: https://www.arduino.cc/en/Tutorial/SimpleAudioPlayer.

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

Исходная статья с описанием такого подхода к воспроизведению звука опубликована на веб-сайте High-Low Tech (http://highlowtech.org/?p=1963). Наш эксперимент немного отличается от этого описания тем, что в нем для записи аудиоклипа используется свободно распространяемое приложение Audacity.

Оборудование и софт

В этом эксперименте используется то же самое оборудование, что и в разд. «Эксперимент: громкоговоритель без усилителя на Arduino». Но вам придется установить на компьютер следующие программы, позволяющие записывать и обрабатывать звуковые клипы:

  • приложение Audacity: audacityteam.org;
  • утилиту Audio Encoder — ссылку на версию под вашу операционную систему можно найти на веб-сайте highlowtech.org/?p=1963.

Создание звукового файла


Примечание

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


Чтобы создать звуковой файл, запустите программу Audacity, переключите режим записи в моно (Mono) и выберите частоту проекта (Project Rate) равной 8000 Гц. Эти варианты настройки выделены на рис. 15.3.

mkac_1503

Рис. 15.3. Программа Audacity: запись звукового клипа

Чтобы начать запись, щелкните на красной кнопке Record (Записать) и запишите свое сообщение. Учтите, что запись не должна быть длиннее 4 секунд. Как только запись будет сделана, в окне Audacity появится изображение звуковой волны. Можно выбрать любую «немую» область в начале или в конце записи и удалить ее, оставив только нужную часть звукового блока.

Записанный звук надо экспортировать в нужный формат. Для этого опять понадобится выполнить специальные настройки. Выберите в меню File (Файл) пункт Export (Экспорт аудио), затем в раскрывающемся меню выберите вариант Other uncompressed files (Прочие несжатые файлы), перейдите в область настроек Format options (Настройки формата) и укажите характеристики WAV (Microsoft) и Unsigned 8 bit PCM (рис. 15.4). Присвойте файлу имя и пропустите страницу, приглашающую ввести данные об исполнителе.

Только что сгенерированный файл представляет собой двоичные данные. Его нужно преобразовать в список чисел в текстовом виде, отделенных друг от друга запятыми, чтобы его можно было вставить в нашу программу. Запустите для этого утилиту Audio Encoder, загруженную с веб-сайта highlowtech.org. Она выведет на экран приглашение на выбор конвертируемого файла — выберите файл, который только что был экспортирован из Audacity.

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

Откройте программу /arduino/experiments/wav_arduino и замените всю строку, начинающуюся с последовательности 125, 119, 115, данными из буфера обмена. Это очень длинная строка, поэтому лучше всего выбрать ее, поместив курсор в начало строки, а затем, удерживая нажатой клавишу <Shift>, опустить курсор вниз и переместить его на последний символ строки. Для замены выбранного текста данными из буфера обмена, воспользуйтесь пунктом контекстного меню Insert (Вставить).

mkac_1504

Рис. 15.4. Программа Audacity: выбор параметров экспорта

Если нанести все вставленные числа на график, его форма будет напоминать ту, что вы уже видели в Audacity при записи звукового клипа.

Программа для Arduino

Перед тем как приступить к компиляции и запуску программы, нужно установить библиотеку PCM. Загрузите ZIP-архив из GitHub (https://github.com/damellis/PCM/zipball/master), распакуйте его, переименуйте папку в PCM и переместите ее в каталог своих библиотек Arduino, воспользовавшись рекомендациями, представленными во врезке «Установка библиотек Arduino» главы 12.

Программа для Arduino (если проигнорировать звуковые данные) имеет весьма скромный размер, но массив данных представлен очень длинной строкой!

1
2
3
4
5
6
7
8
9
#include &lt;PCM.h&gt;
const unsigned char sample[] PROGMEM = { //<strong> 1</strong>
125, 119, 115, 115, 112, 116, 114, 113, 124, 126, 136, 145, 139,
};
void setup() {
startPlayback(sample, sizeof(sample)); //<strong> 2</strong>
}
void loop() { //<strong> 3</strong>
}

Уточним некоторые моменты этого скетча по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:

  1. Данные хранятся в массиве типа char, состоящем из восьмиразрядных чисел без знака. Команда PROGMEM обеспечивает хранение данных во флэш-памяти Arduino (в ней должно быть доступно около 32 Кбайт).
  2. Проигрывание звукового сэмпла осуществляет библиотека PCM. Функции startPlayback передается массив проигрываемых данных и размер данных в байтах.
  3. Звуковой клип проигрывается однократно при каждом перезапуске Arduino, поэтому функция loop() остается пустой.

Загружаем и выполняем программу

Загрузите программу в свой Arduino, и как только загрузка завершится, звуковой клип будет воспроизведен!

Сразу же после загрузки программы в нижней части Arduino IDE появится сообщение о том, сколько флэш-памяти Arduino было задействовано, примерно следующего содержания: Binary sketch size: 11,596 bytes (of a 32,256 byte maximum) (Размер двоичной программы: 11596 байтов (из максимально возможных 32256 байтов)). Если звуковой файл окажется слишком большим, вы получите сообщение об ошибке.

Подключение Arduino к усилителю

Как ни удивительно, но только что проведенный эксперимент оказался успешным, хотя его удалось проделать с применением только лишь Arduino.

Ток звукового сигнала, поступающего от Arduino, ограничивается резистором, но напряжения 5 В, подводимого к выводному контакту Arduino, слишком много для подключения ко входу обычного усилителя звука. Поэтому, когда мы хотим подключить Arduino к звуковым колонкам с целью сделать звук громче, сначала, как ни странно, нужно уменьшить напряжение на выходе.

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


Делитель напряжения

Делителем напряжения называется устройство, в котором для уменьшения напряжения используются два резистора. По сравнению с напряжением, изменяющимся, скажем, пропорционально изменению звукового сигнала, делитель напряжения изменяет его в фиксированной пропорции.

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


Напряжение в точке соединения двух резисторов (Vout) вычисляется по формуле:

В данном случае, когда на цифровом выходе выставлен высокий уровень сигнала (high) и Vin = 5 В, то:

Vout = 5 × 1/(1+10)=0,45 В.

Делитель напряжения

Рис. 15.5. Делитель напряжения

Макетную плату из разд. «Эксперимент: громкоговоритель без усилителя на Arduino» можно приспособить под подключение к усилителю, поместив один резистор над другим, как показано на рис. 15.6, и подключив верхний резистор номиналом 10 кОм к выводу D11, а нижний вывод нижнего резистора — к выводу GND (заземление). После этого останется только выбрать способ подключения контактной линии GND и линии, на которой встретились резисторы, к усилителю.

mkac_1506

Рис. 15.6. Схема подключения Arduino ко входу усилителя звукового сигнала в сборе

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

Вам нужно найти только общий (GND) провод, поскольку провода для левого и правого каналов лучше соединить вместе, чтобы монофонический сигнал от Arduino был слышен в обоих колонках. Найти общий (GND) провод можно с помощью мультиметра, установленного в режим проверки наличия контакта (рис. 15.7).

mkac_1507

Рис. 15.7. Тестирование входного кабеля звукового сигнала

Прикрепите один из проводов мультиметра к самой дальней от конца штекера звукового кабеля контактной площадке. Затем по очереди прикасайтесь другим проводом мультиметра к каждому из трех проводов кабеля, пока не услышите звуковой сигнал мультиметра или не обнаружите наличие контакта по каким-либо другим признакам. Это и будет общий провод, который нужно вставить в гнездо контактной линии GND макетной платы. Два других провода нужно скрутить вместе и вставить в гнездо контактной линии материнской платы, служащей выходом, то есть, той линии, на которой соединяются два резистора.

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

Опубликовано

Подключение к Интернету с помощью платы расширения Arduino Ethernet shield

По материалам книги В. Петина “Проекты с использованием контроллера Arduino. 4-е изд.” (глава 13. Arduino и Интернет вещей)

Проекты с использованием контроллера Arduino. 4-е изд.

Самый распространенный метод обеспечить доступ платы Arduino к сети Интернет — использование платы Ethernet shield (рис. 13.1). Ethernet shield — это плата расширения, которая устанавливается на плату Arduino сверху. Она дает ей возможность выступать в роли сетевого устройства и общаться по проводной сети с аналогичными устройствами, с обычными компьютерами, принтерами, сервисами в Интернете и прочими сетевыми ресурсами. Последняя версия платы Ethernet Shield Rev3 полностью совместима с Arduino Mega2560.

Плата Ethernet shield основана на микросхеме Wiznet W5100, которая поддерживает как TCP-, так и UDP-протоколы. Одновременно открытыми могут быть до четырех подключений.

Плата обладает стандартным Ethernet-портом для подключения к сети с помощью патч-корда витой пары и набором контактов для подключения к Arduino. Для общения между собой Ethernet shield и Arduino задействуют контакты 4-й и с 10-го по 13-й, поэтому их использование в других целях в присутствии платы расширения невозможно.

Для программирования сетевого взаимодействия подключается библиотека Ethernet из стандартного дистрибутива. При использовании этой библиотеки необходимо указывать MAC-адрес платы (уникальный идентификатор любого сетевого устройства). В более новых версиях Ethernet-шилда MAC-адрес можно увидеть на наклейке на плате. Если такой наклейки нет, то просто введите любую похожую комбинацию, — главное, чтобы в вашей сети не было устройств с совпадающими MAC-адресами.
На плате размещен слот для карты памяти формата microSD, которая может быть использована для хранения ресурсов, раздаваемых по сети. Для взаимодействия с такой картой следует подключить, например, библиотеку sdfatlib.
Для отправки данных в облачные сервисы в примерах этого раздела мы воспользуемся веб-клиентом на основе платы Arduino c установленной на нее платой расширения Ethernet shield.

ris_04_04

Рис. 13.1. Плата Ethernet shield Rev3

13.1.1. Получение IP-адреса по DHCP

Соединим Ethernet shield с платой Arduino и создадим простой пример получения ими IP-адреса по DHCP. Соединяется Ethernet shield с платой Arduino так же просто, как и любой другой шилд, — просто состыкуйте их вместе. Cледует учесть, что установка других шилдов поверх Ethernet shield весьма затруднительна. Это связано с большими размерами имеющегося на плате Ethernet shield разъема RJ-45, служащего для подключения сетевого кабеля, поэтому, если вы хотите использовать совместно с Arduino еще и другие шилды, лучше их размещать между Arduino и Ethernet shield.

Итак, подключим плату Arduino к USB-порту компьютера, а Ethernet shield подсоединим c помощью сетевого кабеля к маршрутизатору, имеющему выход в Интернет (рис. 13.2).

Скетч, обеспечивающий получение IP-адреса по DHCP, представлен в листинге 13.1, а пример назначения статического IP-адреса — в листинге 13.2.

ris_04_05

Рис. 13.2. Подключение к плате Arduino платы расширения Ethernet shield Rev3

Листинг 13.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Получение IP-адреса по DHCP
// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или
// произвольный уникальный в сети
 
#include &lt;Ethernet.h&gt;
#include &lt;SPI.h&gt;
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
void setup() {
 
// Open serial communications and wait for port to open:
 
Serial.begin(9600);
}
 
// запуск Ethernet-соединения
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
for (;;)
;
}
 
// печать в последовательный порт полученного по DHCP адреса
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte &lt; 4; thisByte++) {
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
}
 
void loop() {;}

Электронный архив

Полный вариант рассмотренного скетча находится в папке examples\13\_13_01 сопровождающего книгу электронного архива (см. приложение 2).


Листинг 13.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Получение статического IP-адреса
// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или
// произвольный уникальный в сети
 
#include &lt;Ethernet.h&gt;
#include &lt;SPI.h&gt;
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
 
// IP-адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 0, 111 };
// IP-адрес dns сервера:
byte sdns[] = { 192, 168, 1, 1 };
// адрес шлюза:
byte gateway[] = { 192, 168, 0, 1 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };
 
void setup() {
Serial.begin(9600);
// запуск Ethernet-соединения
Ethernet.begin(mac, ip, sdns, gateway, subnet);
delay(1000);
Serial.println(Ethernet.localIP());
}
 
void loop() {;}

Электронный архив
Полный вариант рассмотренного скетча находится в папке examples\13\_13_02 сопровождающего книгу электронного архива (см. приложение 2).


Опубликовано

Термостатический охладитель напитков на модуле Пельтье

Раздел гл. 12 книги “Мейкерство. Arduino и Raspberry Pi” (автор Саймон Монк)

В этом проекте мы добавим термостатическое регулирование к проекту из разд. «Проект: охладитель напитков» главы 11, чтобы напитки могли более точно охлаждаться до нужной температуры (рис. 12.17). В главе 14 проект получит свое дальнейшее развитие — к нему будет добавлен дисплей, показывающий заданную и фактическую температуры.

Термостатический охладитель напитков в сбореРис. 12.17. Термостатический охладитель напитков в сборе

Как уже было сказано, этот проект реализуется с использованием Arduino, но учитывая, что вы уже научились использовать Raspberry Pi совместно с микросхемой DS18B20, у вас не должно возникнуть проблем и по изменению проекта под работу с Raspberry Pi.

Оборудование

Этот проект основывается на проекте из разд. «Проект: охладитель напитков» главы 11, но с добавлением в рабочий цикл платы Arduino и датчика температуры DS18B20, поэтому, если вы еще не проработали тот проект, следуйте инструкциям по его реализации, имеющимся в главе 11.

Комплектующие

В этом проекте для работы с Arduino понадобятся следующие комплектующие (табл. 12.2).

Таблица 12.2. Комплектующие для работы с Arduino в проекте по управлению термостатическим охладителем напитков

Обозначение Компонент схемы Источники
R1 Резистор 4,7 кОм Mouser: 291-4.7k-RC
R2 Резистор 1 кОм Mouser: 291-1k-RC
R3 Резистор 270 Ом Mouser: 291-270-RC
R4 Подстроечный резистор на 10 кОм Adafruit: 356

Sparkfun: COM-09806

Герметичный температурный датчик DS18B20 Adafruit: 381

eBay

Q1 МОП-транзистор FQP30N06L Mouser: 512-FQP30N06L
LED1 Зеленый светодиод Adafruit: 298

Sparkfun: COM-09650

Термоэлектрическое охлаждающее устройство на элементах Пельтье с двумя вентиляторами и с током потребления не более 4 А eBay
Переходник с круглым гнездом и винтовыми зажимами Adafruit: 368
Источник питания (12 В 5 A) Adafruit: 352
Двунаправленная клеммная колодка Магазин строительных или электротоваров
Большая емкость из-под молока или сока Б/у

Герметичный температурный датчик DS18B20 содержит точно такую же микросхему, что использовалась в экспериментах из разд. «Эксперимент: насколько хорош терморегулятор, основанный на включении и выключении?» и из разд. «Эксперимент: термостатический ПИД-регулятор», за исключением того, что он поставляется в удобной водонепроницаемой капсуле с длинными проводами, которые могут быть подключены непосредственно к макетной плате.

Если потребуется задействовать более мощный элемент Пельтье, чем тот, что указан в табл. 12.2, следует воспользоваться более мощным блоком питания, чтобы его максимально допустимый ток наверняка превышал ток, потребляемый элементом. Предусмотрите, как минимум, превышение в половину ампера для вентиляторов и еще в половину ампера на всякий случай.

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

Принципиальная схема этого проекта показана на рис. 12.18. В левой части схемы показан подстроечный резистор R4, который также называют потенциометром (см. далее врезку «Потенциометры»). Подвижный контакт потенциометра подключен к контакту A0, представляющему собой аналоговый вход Arduino (см. разд. «Аналоговые входы» главы 2). Положением ручки потенциометра на контакте A0 устанавливается напряжение, которое замеряется Arduino, а затем используется для установки нужной температуры охладителя.

Потенциометры

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

Область на рис. 12.18 вокруг R4, показывает, как потенциометр используется в качестве устройства ввода данных в Arduino: верхний контакт потенциометра подключен к линии 5 В, а нижний — к заземлению, при этом на среднем контакте потенциометра напряжение в зависимости от положения ручки будет изменяться в диапазоне от 0 до 5 В.

Правая часть схемы на рис. 12.18 очень похожа на схему эксперимента из разд. «Эксперимент: насколько хорош терморегулятор, основанный на включении и выключении?», за исключением того, что вместо маломощного транзистора MPSA14 используется мощный МОП-транзистор FQP30N06L. Этот транзистор способен коммутировать подводимый к охладителю ток силой 4 А и более, при этом степень его нагрева позволяет обойтись без радиатора.

Принципиальная схема термостатического охладителяРис. 12.18. Принципиальная схема термостатического охладителя

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

Предполагая, что вы уже реализовали проект из разд. «Проект: охладитель напитков» главы 11, для реализации этого проекта нужно выполнить лишь следующие дополнительные действия.

Шаг 1. Добавление температурного датчика

Физическая конструкция охладителя остается точно такой же, что и в проекте из разд. «Проект: охладитель напитков» главы 11, но теперь к ней добавляется температурный датчик, который следует разместить на дне контейнера — под ставящиеся на него охлаждаемые стаканы или бутылки (рис. 12.19). В данном случае я просто прикрепил датчик ко дну контейнера клейкой лентой, но лучше его все же основательно приклеить.

Добавление температурного датчикаРис. 12.19. Добавление температурного датчика

Шаг 2. Сборка схемы на макетной плате

На рис. 12.20 показана собранная на макетной плате схема, используемая для проекта, а также показаны соединения различных деталей проекта.

Схема проекта, собранная на макетной платеРис. 12.20. Схема проекта, собранная на макетной плате

Расположите компоненты на макетной плате, убедившись в правильном подключении МОП-транзистора и светодиода. Температурный датчик имеет в своем кабеле четыре провода. Провода с красной и черной изоляцией подключаются соответственно к общей линии питания (VCC) и к заземлению (GND), а провод с желтой изоляцией является цифровым выходом зонда. Четвертый провод никуда подключать не нужно.

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

Шаг 3. Подключение охладителя

У охладителя имеются три пары проводов: две — для вентиляторов, и одна — для самого элемента Пельтье. Чтобы упростить подключение охладителя, используется двунаправленная клеммная колодка, позволяющая подключить охладитель к макетной плате всего двумя проводами (рис. 12.21).

Подключение охладителяРис. 12.21. Подключение охладителя

Шаг 4. Подключение блока питания

Переходник с круглым гнездом и винтовыми зажимами, конечно, может быть подключен к макетной плате перемычками «папа-папа». С этим вариантом можно согласиться в случае использования высококачественных проводов-перемычек относительно большого поперечного сечения, однако многие соединительные провода содержат слишком тонкие проводники, которые могут сильно нагреваться от проходящего по ним тока силой в несколько ампер. Само по себе это не создает проблем до тех пор, пока эти провода не станут сильно греться, вместо того, чтобы быть просто теплыми. Но это означает, что из 12 В на элемент Пельтье станет попадать не все напряжение, и на то, чтобы войти в рабочий режим, охладителю потребуется больше времени.

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

Программа для Arduino

Использование ПИД-регулятора для охладителя напитков можно посчитать излишеством. Но вопрос в данном случае упирается только в программу, поэтому на использование «крутого» алгоритма поддержки напитков в охлажденном состоянии дополнительных затрат не предвидится.

Программа этого проекта во многом похожа на ту, что использовалась в экспериментах из разд. «Эксперимент: насколько хорош терморегулятор, основанный на включении и выключении?» и из разд. «Эксперимент: термостатический ПИД-регулятор», включая весь код для создания интерфейса с температурным датчиком DS18B20, поэтому, чтобы разобраться в этом коде, следует вернуться к описанию упомянутых экспериментов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include &lt;OneWire.h&gt;
#include &lt;DallasTemperature.h&gt;
#include &lt;PID_v1.h&gt;
const double minTemp = 0.0; //<strong> 1</strong>
const double maxTemp = 20.0;
const float tempOKMargin = 0.5;
double kp = 1500; //<strong> 2</strong>
double ki = 50.0;
double kd = 0.0;
const int tempPin = 2;
const int coolPin = 9;
const int ledPin = 10; //<strong> 3</strong>
const int potPin = A0;
const long period = 1000; // &gt;750
OneWire oneWire(tempPin);
DallasTemperature sensors(&amp;oneWire);
double setTemp = 0.0;
double measuredTemp = 0.0;
double outputPower = 0.0;
long lastSampleTime = 0;
PID myPID(&amp;measuredTemp, &amp;outputPower,
&amp;setTemp, kp, ki, kd, REVERSE); //<strong> 4</strong>
 
void setup() {
pinMode(coolPin, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
sensors.begin();
myPID.SetSampleTime(1000);
myPID.SetMode(AUTOMATIC);
}
 
void loop() { //<strong> 5</strong>
long now = millis();
if (now &gt; lastSampleTime + period) {
checkTemperature();
lastSampleTime = now;
}
setTemp = readSetTempFromPot(); //<strong> 6</strong>
}
 
void checkTemperature() { //<strong> 7</strong>
measuredTemp = readTemp();
Serial.print(measuredTemp);
Serial.print(", ");
Serial.print(setTemp);
Serial.print(", ");
Serial.println(outputPower);
myPID.Compute();
analogWrite(coolPin, outputPower);
float error = setTemp - measuredTemp; //<strong> 8</strong>
if (abs(error) &lt; tempOKMargin) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
double readSetTempFromPot() { //<strong> 9</strong>
int raw = analogRead(potPin);
double temp = map(raw, 0, 1023, minTemp, maxTemp);
return temp;
}
double readTemp() {
sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}

Уточним некоторые моменты программы по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:

  1. Диапазон температур, задаваемых с помощью потенциометра, устанавливается двумя константами: minTemp и maxTemp. Переменная tempOKMargin определяет значение выше или ниже заданной температуры, которое может иметь фактическая температура до того, как погаснет зеленый светодиод.
  2. Для kp установлено довольно высокое значение, чтобы включение и выключение охладителя происходило более четко. Сделано это в основном с тем, чтобы избавиться от унылого звучания моторов вентиляторов, когда они питаются в режиме низкого уровня выходной мощности. Вместо этого вентиляторы можно запитать отдельно, чтобы они постоянно работали, и заниматься только регулировкой мощности на элементе Пельтье.
  3. Определение дополнительных контактов для светодиода и потенциометра.
  4. ПИД-регулятор инициализируется в режиме REVERSE, а не DIRECT (как ранее), поскольку добавление выходной мощности будет снижать, а не повышать температуру.
  5. В основном цикле проверяется истечение секундного интервала, после чего для включения и выключения охладителя по мере надобности вызывается функция checkTemperature.
  6. При каждом прохождении цикла (которое должно осуществляться несколько раз в секунду), для установки значения переменной setTemp на основании позиции ручки потенциометра вызывается функция readSetTempFromPot.
  7. Функция checkTemperature производит измерение температуры, считывает полученные данные, а затем производит обновление ПИД-контроллера. Эта функция также записывает прочитанные данные в окно монитора порта, позволяя настроить охладитель или отследить его работу. Arduino не нуждается в подключении через порт USB, поскольку получает электропитание через свой контакт Vin, но если его подключить через порт USB, выводимые данные можно будет увидеть на экране в окне монитора порта.
  8. Остальная часть этой функции включает светодиод, если измеренная температура находится в пределах допустимого отклонения от заданной температуры, определяемого с помощью константы tempOKMargin. Функция abs (абсолютное значение) удаляет знак минуса перед числом.
  9. Код превращения позиции потенциометра в значение между minTemp и maxTemp. Необработанное аналоговое считывание (значения в диапазоне от 0 до 1023) производится в переменную raw. Затем для преобразования считанного значения в желаемый диапазон температур вызывается функция map (см. далее врезку «Функция map, используемая в Arduino»).

Функция map, используемая в Arduino

При управлении какими-либо устройствами с помощью Arduino или Raspberry Pi часто возникает проблема преобразования числа, имеющего один диапазон значений, в число в каком-нибудь другом диапазоне значений.

Например, на аналоговом входе Arduino установлен диапазон значений от 0 до 1023, и если нужно отобразить этот диапазон на температуру, например, между 0 и 20, можно просто разделить число на 51,15 (то есть, на 1023 / 20). Тогда 1023 превратится в 1023 / 51,15 = 20.

Задача усложняется, если оба диапазона начинаются не с нуля. И тут может пригодиться имеющаяся в Arduino функция map. Как далее показано, она получает пять параметров, которые преобразуют число в диапазоне от 0 до 1023 в число в диапазоне от 20 до 40:

map(value, 0, 1023, 20, 40);

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

В языке Python отсутствует встроенная функция диапазона, но ее довольно просто создать, а затем использовать в своей программе. Она должна выглядеть примерно так:

1
2
3
4
5
6
7
8
def map(value, from_low, from_high,
to_low, to_high):
from_range = from_high -
from_low
to_range = to_high - to_low
scale_factor = from_range / to_range
return to_low + (value /
scale_factor)

Затем эту функцию на языке Python можно будет вызвать с такими же параметрами, что и у ее двойника в Arduino. Например:

map(510, 0, 1023, 20, 40)

В результате будет возвращено значение 30, которое является средним значением для диапазона от 20 до 40, точно так же, как и значение 510, которое расположено примерно посредине между значениями в диапазоне от 0 до 1023.

Опубликовано

Охладитель напитков на элементе Пельтье

Глава из книги “Мейкерство. Arduino и Raspberry Pi” (автор Саймон Монк)

Элементы Пельтье

Элементы Пельтье (рис. 11.5) обладают очень полезным свойством — когда через них пропускается ток, одна сторона элемента становится более горячей, а другая — более холодной.

Чтобы это произошло, пропускаемый ток должен иметь солидную величину (обычно от 2 до 6 А при 12 В), т. е. для использования элемента Пельтье вам понадобится достаточно мощный блок питания. Такие элементы можно часто обнаружить в переносных холодильниках и в охладителях напитков. Элементы Пельтье в ряде случаев предпочтительнее обычных холодильников, поскольку у них нет движущихся частей, которые могут сломаться.

mkac_1105

Рис. 11.5. Элемент Пельтье

Как работают элементы Пельтье?

Когда электрический ток протекает через переход между двумя различными проводящими материалами, то материал с одной стороны перехода становится несколько горячее, а с другой — несколько холоднее. Это явление назвали эффектом Пельтье в честь французского физика Жана Пельтье, открывшего его в 1894 году. Явление это известно также как термоэлектрический эффект.

Термоэлектрический эффект относительно мал, и чтобы сделать его нам полезным, — например, для охлаждения напитков, его нужно многократно усилить. Это достигается за счет размещения групп переходов друг за другом — тогда при прохождении тока каждый переход вносит свой вклад в общий эффект. Обычные недорогие элементы Пельтье имеют, как правило, около 12 переходов (рис. 11.6). По обеим сторонам элемента Пельтье расположен базовый материал, образующий основу для блока групп переходов.

Устройство элемента Пельтье

Рис. 11.6. Устройство элемента Пельтье

Материалы, образующие стыки (переходы) элемента Пельтье, — это полупроводники двух типов, аналогичные тем, что используются при производстве транзисторов и микросхем, но оптимизированные для термоэлектрического эффекта. Они известны как полупроводники N-типа и P-типа — от слов Negative (отрицательный) и Positive (положительный).

Элементы Пельтье имеют еще одну очень интересную особенность — их можно использовать не только для охлаждения. Если нагреть одну сторону элемента Пельтье больше, чем другую, то элемент будет генерировать небольшое количество электроэнергии.

Особенности практического применения

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

Решением такой проблемы может может служить применение теплоотводящего радиатора (рис. 11.7). Такой радиатор представляет собой алюминиевую пластину с ребрами, увеличивающими площадь охлаждаемой поверхности, что способствует лучшему отводу тепла. Холодная сторона элемента сконструирована в виде блока, вдающегося внутрь теплоотводящего радиатора.

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

mkac_1107

Рис. 11.7. Элемент Пельтье на теплоотводящем радиаторе

mkac_1108

Рис. 11.8. Охлаждение элемента Пельтье двумя вентиляторами

Проект: охладитель напитков

В этом проекте не используется ни Raspberry Pi, ни Arduino. Проект просто демонстрирует, как нужно подключать элемент Пельтье, и как можно самому собрать простой охладитель напитков (рис. 11.9). Этот базовый проект мы дополним в главе 12, добавив в него контроль за температурой и термостабилизацию. Затем, в главе 14, в него будет добавлен OLED-дисплей для отображения температуры.

mkac_1109

Рис. 11.9. Охладитель напитков в сборе

Комплектующие

В этом проекте нам понадобятся следующие комплектующие (табл. 11.3).

Таблица 11.3. Комплектующие для работы с проектом охладителя напитков

Компонент схемы Источники
Элемент Пельтье с двумя охлаждающими вентиляторами (ток 4 А или меньше) eBay
Переходник с круглым гнездом и винтовыми зажимами Adafruit: 368
Источник питания (12 В 5 A) Adafruit: 352
Большая емкость из-под молока или сока Б/у
Освежающий напиток

Если потребуется задействовать более мощный элемент Пельтье, чем тот, что указан в табл. 11.3, следует воспользоваться более мощным блоком питания, чтобы его максимально допустимый ток наверняка превышал ток, потребляемый элементом. Предусмотрите, как минимум, превышение в половину ампера для вентиляторов и еще в половину ампера на всякий случай.

Конструкция

Рассмотрев провода, идущие к блоку охлаждения, можно выделить три пары проводов: одна пара идет к элементу Пельтье, и по паре проводов — к каждому из вентиляторов. Им всем требуется 12 В от источника питания, и самый простой способ подключения состоит в использовании винтового зажима на разъеме, идущем к блоку питания. Проще говоря, все три красных провода от охлаждающего устройства нужно зафиксировать в винтовой клемме с маркировкой (+), а все три черных провода — в винтовой клемме с маркировкой (–), как показано на рис. 11.10.

mkac_1110

Рис. 11.10. Подключение проводов в проекте охладителя напитков

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

mkac_1111

Рис. 11.11. Подготовка пластикового контейнера

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

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

Использование охладителя

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

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

Этот проект также несколько неэкономичен, на сохранять прохладным небольшого количества напитка расходует 50 Вт электрической энергии. В главе 12 мы сделаем наш проект несколько эффективней, добавив в него режим термостатирования.

Заключение

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

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

Опубликовано

Модуль реле в системе автополива

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

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

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

Внешний вид, назначение контактов

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

3-03-1-relay

Рис. M3.1. Назначение контактов одноканальных модулей реле

Основные характеристики

Наименование Значение
Рабочее напряжение, В 5
Потребляемый ток при переключении контактов, мА 5
Потребляемый ток в состоянии ожидания, мА 10 ÷ 13
Рабочая частота, МГц 13,56
Размеры (L×W×H), мм 50×26×18,5
Максимальная нагрузка AC 250 В/10 A
DC 30 В/10 A

 


Предупреждение

Модуль реле, входящий в набор, рассчитан на коммутирование небольших нагрузок. Вы можете подключать к нему бытовые приборы с рабочим напряжением 220 В, но нагрузка не должна превышать 3-х ампер (мощность до 660 Вт).
Имейте в виду, что мощность утюга составляет 1000÷1500 Вт, и поэтому такое реле не годится для создания устройства для включения/выключения утюга. Cуществуют специальные модули реле, рассчитанные на большие мощности.


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

3-03-2-relay

Рис. M3.2. Схема подключения реле

Программный код

Тестовая программа для включения и выключения лампочки через каждые 2 секунды приведена в листинге M3.1.

Листинг M3.1. Включение лампочки с помощью реле

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define relayPin 2 //номер пина для управления реле
 
void setup() {
 
pinMode(relayPin, OUTPUT); //настройка пина реле на выход
 
}
 
void loop() {
 
digitalWrite(relayPin, HIGH);// замыкаем реле
 
delay(3000); // ждем 3 секунды
 
digitalWrite(relayPin, LOW); // размыкаем реле
 
delay(3000); // ждем 3 секунды
 
}

«Умный горшок»

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

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

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

3-03-3-relay

Рис. M3.3. Система автоматического полива цветочного горшка

Программный код

Листинг M3.2. Система автоматического полива цветочного горшка

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//определения
 
// пин аналогового выхода датчика уровня воды
 
#define pinWaterLevel A0
 
//пин аналогового выхода датчик влажности почвы
 
#define pinSoilMoisture A1
 
//пин реле для управление насосом
 
#define pinRelayPump 12
 
 
 
//константы
 
const int delayPumpBefore=2; //время полива (в секундах)
 
const int delayPumpAfter=30; //время после полива, чтобы
 
//земля пропиталась (в секундах)
 
const int minMoisture=600; //минимальный порог влажности почвы
 
 
 
// переменные
 
int aLevel = 0; // значение датчика уровня воды
 
int aMoisture = 0; // состояние датчика влажности почвы
 
int levels[3]={600,500,400}; //массив значений уровней воды
 
 
 
//установки
 
void setup() {
 
//объявляем пин реле для включения насоса как выход:
 
pinMode(pinRelayPump, OUTPUT);
 
//объявляем пины датчиков глубины и влажности почвы как входы:
 
pinMode(pinWaterLevel, INPUT);
 
pinMode(pinSoilMoisture, INPUT);
 
Serial.begin(9600);
 
}
 
 
 
void loop() {
 
// считываем значение датчика уровня воды
 
aLevel=analogRead(pinWaterLevel);
 
// считываем состояния датчика влажности почвы
 
aMoisture = analogRead (pinSoilMoisture);
 
Serial.println(aMoisture); //выводим для тестирования
 
delay(100);
 
// если почва сухая, и вода в банке есть, то включаем полив
 
if ((aMoisture &gt;minMoisture)&amp;&amp;(aLevel&gt;levels[2])) {
 
digitalWrite(pinRelayPump, HIGH); //включаем насос
 
delay(delayPumpBefore*1000); //задержка на полив
 
digitalWrite(pinRelayPump, LOW); //выключаем насос
 
delay(delayPumpAfter*1000); //задержка на слив воды из
 
//шланга после выключения насоса
 
}
 
else {
 
digitalWrite(pinRelayPump, LOW);
 
}
 
}

Для адаптации программы к конкретному цветочному горшку надо произвести небольшую «тонкую настройку» системы:

  • во-первых, следует правильно установить время полива (delayPumpBefore), которое определяется паузой между включением и выключением насоса. Чем больше горшок, тем больше должна быть пауза и, как следствие, время полива;
  • во-вторых, надо установить правильное время после полива (delayPumpAfter), чтобы земля успела пропитаться, и система не включила повторный полив. Трубку подачи воды при этом удобно разместить рядом с датчиком влажности почвы, чтобы земля в районе датчика сразу пропитывалась.