Требуется управлять с помощью платы Arduino телевизором или каким-либо другим устройством, эмулируя коды ИК-сигналов пульта ДУ. Эта задача противоположна рассмотренной в разд. 10.2 — здесь нам нужно не принимать команды, а отправлять их.
Для приема платой Arduino сигналов пульта ДУ используется модуль приемника ИК-сигналов. На рынке широко представлены приемники ИК-сигнала TSOP38238, TSOP4838, PNA4602 и TSOP2438. Первые три эти приемника имеют одинаковую схему расположения контактов, а у приемника TSOP2438 выводы питания (+5 В и GND) поменяны местами. При использовании какого-либо иного приемника ИК-сигналов уточните схему расположения его контактов в справочном листке (datasheet) на него и подключите его к плате Arduino, как там указано. Подключение приемников TSOP38238, TSOP4838 и PNA4602 к плате Arduino показано в схеме на рис. 10.1.
Рис. 10.1. Подключение приемника ИК-сигнала к плате Arduino
РЕШЕНИЕ
Для решения этой задачи к плате Arduino нужно подключить пять кнопок и инфракрасный светодиод, как показано на рис. 10.2.
Скетч для управления этой схемой приводится в листинге 10.4. Для управления устройством в нем используются коды кнопок из скетча, приведенного в решении из разд. 10.2 (см. листинг 10.2). Коды для управления вашим устройством, скорее всего, будут другими, поэтому узнайте их, исполнив скетч из разд. 10.2, а затем замените ими коды в скетче из листинга 10.4. Нажатие одной из пяти кнопок выбирает и отправляет требуемый код.
/*
* Скетч irSend
* Требует подключения ИК-светодиода к контакту 3
* и 5 кнопок к контактам 6-10
*/#include <IRremote.h> // Подключаем библиотеку IRremoteconstint numberOfKeys =5;constint firstKey =6;// Номер первого из пяти последовательных// контактов, к которым подключаются кнопки
bool buttonState[numberOfKeys];
bool lastButtonState[numberOfKeys];long irKeyCodes[numberOfKeys]={0x18E758A7,//0 key0x18E708F7,//1 key0x18E78877,//2 key0x18E748B7,//3 key0x18E7C837,//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];}}}
/*
* Скетч 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];
}
}
}
Рис. 10.2. Подключение кнопок и инфракрасного светодиода к плате Arduino
Увидеть невооруженным глазом отправляемые коды невозможно, поскольку инфракрасный свет невидим для человеческого глаза.
Но в работе передатчика можно удостовериться, наблюдая за ИК-светодиодом на жидкокристаллическом дисплее видоискателя цифровой камеры.
Обсуждение работы решения и возможных проблем
Скетч Arduino управляет удаленным устройством, включая и выключая инфракрасный светодиод таким образом, чтобы имитировать сигналы, посылаемые ИК-пультом ДУ от этого устройства. Характеристики используемого ИК-светодиода не являются критическими. Информация по подбору подходящего компонента приводится в приложении 1.
Преобразование числовых кодов в мигания ИК-светодиода реализует библиотека IRremote. Для этого в скетче требуется создать экземпляр объекта этой библиотеки. Такой экземпляр для управления светодиодом, подключенным к контакту 3 (выбирать контакт для подключения светодиода не представляется возможным, поскольку этот параметр жестко закодирован в библиотеке), создается следующей строкой кода:
IRsend irsend;
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.sendSony(irKeyCodes[keyNumber], 32);
Объект irSend поддерживает разные функции для работы с различными популярными форматами ИК-кодов. В случае использования системы дистанционного управления с другими форматами кодов, посмотрите эти форматы в документации на библиотеку. Коды также можно узнать с помощью скетча из разд. 10.2, который выводит их в окно монитора порта.
При передаче функции кода кнопки из массива в конце кода также передается число, сообщающее функции количество битов в коде. Префикс 0x перед определениями кодов в массиве irKeyCodes в начале скетча означает шестнадцатеричный формат этих чисел (подробная информация о шестнадцатеричных числах приводится в главе 2). Каждый символ шестнадцатеричного числа представляет 4-битное значение. Восемь шестнадцатеричных цифр кода означает 32 бита.
Светодиод к плате Arduino подключается через токоограничивающий резистор (подробная информация о применении токоограничивающих резисторов со светодиодами приводится во введенииглавы 7 (разд. 7.0)).
Зону действия передатчика можно увеличить, используя несколько светодиодов или более мощный светодиод.
Дополнительная информация
Дополнительная информация по управлению светодиодами приведена в главе 7.
Проект необычного ИК-пульта дистанционного управления для телевизоров представлен на веб-странице https://oreil.ly/7BzKh.
Для сопряжения модулей HC-05 (master-модуль) и HC-06 (slave-модуль) необходимо выполнить следующее:
Установить одинаковую скорость передачи на обоих устройствах.
Убедитесь, что пароли на HC-05 и HC-06 совпадают (при необходимости установить одинаковые)
Определить MAC адрес HC-06
Соединить HC-05 с HC-06
Связать HC-06 с HC-05
Настроить HC-05 на соединение только с сопряженным устройствам HC-06
Соединить 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 с помощью проводов «мама-мама».
Обратите внимание, контакт «Transmit Data» одного устройства подключен к контакту «Receive Data» другого!
2
Включаем преобразователь USB-UART в разъем USB ПК.
3
Запускаем Arduino IDE.
4
Выбираем порт, к которому подключен USB-UART (Инструменты | Порт)
Для контроля правильности подключения вводим команду
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, как показано на рисунке.
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 секундами
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2,3);// RX | TX`<strong>constlong 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 Monitorif(BTserial.available()){
c = BTserial.read();
Serial.write(c);}// Read from the Serial Monitor and send to the Bluetooth moduleif(Serial.available()){
c = Serial.read();
BTserial.write(c);// Echo the user input to the main window. The ">" character indicates the user entered text.if(NL){ Serial.print(">"); NL =false;}
Serial.write(c);if(c==10){ NL =true;}}}
#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 ">" character indicates the user entered text.
if (NL) { Serial.print(">"); 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. Иногда это необходимо после смены ролей.
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.
На экране Монитора порта появится список обнаруженных устройств, например
+ 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?АдресДля первого устройства это будет команда
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2,3);// RX | TX`//const long baudRate = 38400;<strong>constlong 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 Monitorif(BTserial.available()){
c = BTserial.read();
Serial.write(c);}// Read from the Serial Monitor and send to the Bluetooth moduleif(Serial.available()){
c = Serial.read();
BTserial.write(c);// Echo the user input to the main window. The ">" character indicates the user entered text.if(NL){ Serial.print(">"); NL =false;}
Serial.write(c);if(c==10){ NL =true;}}}
#include <SoftwareSerial.h>
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 ">" character indicates the user entered text.
if (NL) { Serial.print(">"); 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
Полезно сразу пометить подготовленный модуль. Например, приклеить скотчем кусочек бумаги и записать прямо на нем всю нужную информацию.
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, то светодиод на 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, пошагово как показано на рис. ниже.
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 модулей.
Отключим питание slave-устройства HC-06.
Отсоединим преобразователь USB-UART от компьютера и отсоединим провод «+3.3V — EN», больше мы в нем не нуждаемся. Master-модуль остается подключенным лишь четырьмя проводами к USB-UART, теперь это законченное устройство. Для удобства можно заменить провода на более короткие, скрепить изолентой.
1.
Установите модуль HC-06 в плату LV. Включаем питание. Модуль часто замигал, он готов к новому сеансу связи.
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.
Вы можете самостоятельно с помощью 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 бод.
#include "SoftwareSerial.h" // подключаем библиотеку
SoftwareSerial mySerial(9,10);// указываем пины tx и rxvoid 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-порт}}
#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.
Для подключения робота к настольному персональному компьютеру (ПК) по каналу Bluetooth (без кабеля USB) вам потребуется приобрести внешний Bluetooth-адаптер, который подключается в USB-разъём ПК. В настоящее время в специализированных магазинах представлено большое количество подобных адаптеров. Мы тестировали подключение с недорогим адаптерами в ценовом диапазоне 250–300 руб.
Подключение осуществляется в четыре этапа:
Установка драйверов для Bluetooth-адаптера.
Сопряжение модуля Bluetooth HC-06 и компьютера.
Настройка параметров.
Подключение модуля 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 (BT). Это позволяет подключиться к роботу по каналу BT без кабеля USB. Ниже это показано на примере ОС Windows 11.
Подключение осуществляется в три этапа:
Сопряжение модуля Bluetooth HC-06 и ноутбука.
Настройка COM-порта ноутбука на скорость 115 200 бод.
Подключение модуля 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
Для воспроизведения более или менее сложного звука понадобится какой-нибудь громкоговоритель. Громкоговорители, появившиеся почти сто лет назад, в большинстве своем работают на основе соленоида (см. разд. «Соленоиды» главы 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.
Рис. 15.1. Схема эксперимента с громкоговорителем на Arduino в сборе
Один провод от громкоговорителя подключается к контакту GND (заземление) Arduino, а второй — к контакту D11 через резистор.
Программа для Arduino
Скетч Arduino для этого эксперимента находится в каталоге /arduino/experiments/ex_speaker (см. разд. «Код к книге» главы 2):
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():
tone настраивает один из выходных контактов Arduino на воспроизведение звука с указанной частотой (в данном случае, с частотой, набранной в окне монитора порта).
После двухсекундной задержки команда 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». Но вам придется установить на компьютер следующие программы, позволяющие записывать и обрабатывать звуковые клипы:
утилиту Audio Encoder — ссылку на версию под вашу операционную систему можно найти на веб-сайте highlowtech.org/?p=1963.
Создание звукового файла
Примечание
Если записывать свой собственный звуковой клип желания у вас нет, вы можете сразу перейти к разд. «Загружаем и выполняем программу», входящему в состав этого эксперимента, и запустить программу wav_arduino, содержащую в закодированном виде небольшое звуковой блок.
Чтобы создать звуковой файл, запустите программу Audacity, переключите режим записи в моно (Mono) и выберите частоту проекта (Project Rate) равной 8000 Гц. Эти варианты настройки выделены на рис. 15.3.
Рис. 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 (Вставить).
Рис. 15.4. Программа Audacity: выбор параметров экспорта
Если нанести все вставленные числа на график, его форма будет напоминать ту, что вы уже видели в Audacity при записи звукового клипа.
Программа для Arduino
Перед тем как приступить к компиляции и запуску программы, нужно установить библиотеку PCM. Загрузите ZIP-архив из GitHub (https://github.com/damellis/PCM/zipball/master), распакуйте его, переименуйте папку в PCM и переместите ее в каталог своих библиотек Arduino, воспользовавшись рекомендациями, представленными во врезке «Установка библиотек Arduino»главы 12.
Программа для Arduino (если проигнорировать звуковые данные) имеет весьма скромный размер, но массив данных представлен очень длинной строкой!
Уточним некоторые моменты этого скетча по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:
Данные хранятся в массиве типа char, состоящем из восьмиразрядных чисел без знака. Команда PROGMEM обеспечивает хранение данных во флэш-памяти Arduino (в ней должно быть доступно около 32 Кбайт).
Проигрывание звукового сэмпла осуществляет библиотека PCM. Функции startPlayback передается массив проигрываемых данных и размер данных в байтах.
Звуковой клип проигрывается однократно при каждом перезапуске 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 и линии, на которой встретились резисторы, к усилителю.
Рис. 15.6. Схема подключения Arduino ко входу усилителя звукового сигнала в сборе
Для этого можно пожертвовать входным кабелем усилителя, укоротив его наполовину и зачистив провода на конце, чтобы их можно было вставить в гнезда монтажной платы. Обычно такой кабель имеет три жилы, поскольку большинство звуковых систем рассчитано на работу со стереосигналом. То есть, в нем имеется один общий (GND) провод и два отдельных провода: для левого и правого звуковых каналов (они обычно имеют изоляцию красного и белого цвета).
Вам нужно найти только общий (GND) провод, поскольку провода для левого и правого каналов лучше соединить вместе, чтобы монофонический сигнал от Arduino был слышен в обоих колонках. Найти общий (GND) провод можно с помощью мультиметра, установленного в режим проверки наличия контакта (рис. 15.7).
Прикрепите один из проводов мультиметра к самой дальней от конца штекера звукового кабеля контактной площадке. Затем по очереди прикасайтесь другим проводом мультиметра к каждому из трех проводов кабеля, пока не услышите звуковой сигнал мультиметра или не обнаружите наличие контакта по каким-либо другим признакам. Это и будет общий провод, который нужно вставить в гнездо контактной линии GND макетной платы. Два других провода нужно скрутить вместе и вставить в гнездо контактной линии материнской платы, служащей выходом, то есть, той линии, на которой соединяются два резистора.
Повторите теперь один из ранее проводившихся в этой главе экспериментов с Arduino, и получите намного более громкий и чистый звук.
Самый распространенный метод обеспечить доступ платы 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.
Рис. 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.
Рис. 13.2. Подключение к плате Arduino платы расширения Ethernet shield Rev3
// Получение IP-адреса по DHCP// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или// произвольный уникальный в сети#include <Ethernet.h>#include <SPI.h>
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 <4; thisByte++){
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");}
Serial.println();}void loop(){;}
// Получение IP-адреса по DHCP
// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или
// произвольный уникальный в сети
#include <Ethernet.h>
#include <SPI.h>
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 < 4; thisByte++) {
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
}
void loop() {;}
В этом проекте мы добавим термостатическое регулирование к проекту из разд. «Проект: охладитель напитков» главы 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 А и более, при этом степень его нагрева позволяет обойтись без радиатора.
Предполагая, что вы уже реализовали проект из разд. «Проект: охладитель напитков» главы 11, для реализации этого проекта нужно выполнить лишь следующие дополнительные действия.
Шаг 1. Добавление температурного датчика
Физическая конструкция охладителя остается точно такой же, что и в проекте из разд. «Проект: охладитель напитков» главы 11, но теперь к ней добавляется температурный датчик, который следует разместить на дне контейнера — под ставящиеся на него охлаждаемые стаканы или бутылки (рис. 12.19). В данном случае я просто прикрепил датчик ко дну контейнера клейкой лентой, но лучше его все же основательно приклеить.
Рис. 12.19. Добавление температурного датчика
Шаг 2. Сборка схемы на макетной плате
На рис. 12.20 показана собранная на макетной плате схема, используемая для проекта, а также показаны соединения различных деталей проекта.
Рис. 12.20. Схема проекта, собранная на макетной плате
Расположите компоненты на макетной плате, убедившись в правильном подключении МОП-транзистора и светодиода. Температурный датчик имеет в своем кабеле четыре провода. Провода с красной и черной изоляцией подключаются соответственно к общей линии питания (VCC) и к заземлению (GND), а провод с желтой изоляцией является цифровым выходом зонда. Четвертый провод никуда подключать не нужно.
На ручку потенциометра я наколол небольшой клочок бумаги, соорудив из него примитивную шкалу с рисками, позволяющими увидеть задаваемую температуру охладителя.
Шаг 3. Подключение охладителя
У охладителя имеются три пары проводов: две — для вентиляторов, и одна — для самого элемента Пельтье. Чтобы упростить подключение охладителя, используется двунаправленная клеммная колодка, позволяющая подключить охладитель к макетной плате всего двумя проводами (рис. 12.21).
Рис. 12.21. Подключение охладителя
Шаг 4. Подключение блока питания
Переходник с круглым гнездом и винтовыми зажимами, конечно, может быть подключен к макетной плате перемычками «папа-папа». С этим вариантом можно согласиться в случае использования высококачественных проводов-перемычек относительно большого поперечного сечения, однако многие соединительные провода содержат слишком тонкие проводники, которые могут сильно нагреваться от проходящего по ним тока силой в несколько ампер. Само по себе это не создает проблем до тех пор, пока эти провода не станут сильно греться, вместо того, чтобы быть просто теплыми. Но это означает, что из 12 В на элемент Пельтье станет попадать не все напряжение, и на то, чтобы войти в рабочий режим, охладителю потребуется больше времени.
Для подключения макетной платы к переходнику питания можно вместо простых соединительных проводов-перемычек воспользоваться каким-нибудь одножильным изолированным проводом большого сечения. То же самое касается и соединительных проводов, подводимых к охладителю.
Программа для Arduino
Использование ПИД-регулятора для охладителя напитков можно посчитать излишеством. Но вопрос в данном случае упирается только в программу, поэтому на использование «крутого» алгоритма поддержки напитков в охлажденном состоянии дополнительных затрат не предвидится.
Программа этого проекта во многом похожа на ту, что использовалась в экспериментах из разд. «Эксперимент: насколько хорош терморегулятор, основанный на включении и выключении?» и из разд. «Эксперимент: термостатический ПИД-регулятор», включая весь код для создания интерфейса с температурным датчиком DS18B20, поэтому, чтобы разобраться в этом коде, следует вернуться к описанию упомянутых экспериментов:
Уточним некоторые моменты программы по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:
Диапазон температур, задаваемых с помощью потенциометра, устанавливается двумя константами: minTemp и maxTemp. Переменная tempOKMargin определяет значение выше или ниже заданной температуры, которое может иметь фактическая температура до того, как погаснет зеленый светодиод.
Для kp установлено довольно высокое значение, чтобы включение и выключение охладителя происходило более четко. Сделано это в основном с тем, чтобы избавиться от унылого звучания моторов вентиляторов, когда они питаются в режиме низкого уровня выходной мощности. Вместо этого вентиляторы можно запитать отдельно, чтобы они постоянно работали, и заниматься только регулировкой мощности на элементе Пельтье.
Определение дополнительных контактов для светодиода и потенциометра.
ПИД-регулятор инициализируется в режиме REVERSE, а не DIRECT (как ранее), поскольку добавление выходной мощности будет снижать, а не повышать температуру.
В основном цикле проверяется истечение секундного интервала, после чего для включения и выключения охладителя по мере надобности вызывается функция checkTemperature.
При каждом прохождении цикла (которое должно осуществляться несколько раз в секунду), для установки значения переменной setTemp на основании позиции ручки потенциометра вызывается функция readSetTempFromPot.
Функция checkTemperature производит измерение температуры, считывает полученные данные, а затем производит обновление ПИД-контроллера. Эта функция также записывает прочитанные данные в окно монитора порта, позволяя настроить охладитель или отследить его работу. Arduino не нуждается в подключении через порт USB, поскольку получает электропитание через свой контакт Vin, но если его подключить через порт USB, выводимые данные можно будет увидеть на экране в окне монитора порта.
Остальная часть этой функции включает светодиод, если измеренная температура находится в пределах допустимого отклонения от заданной температуры, определяемого с помощью константы tempOKMargin. Функция abs (абсолютное значение) удаляет знак минуса перед числом.
Код превращения позиции потенциометра в значение между 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 отсутствует встроенная функция диапазона, но ее довольно просто создать, а затем использовать в своей программе. Она должна выглядеть примерно так:
Затем эту функцию на языке Python можно будет вызвать с такими же параметрами, что и у ее двойника в Arduino. Например:
map(510,0,1023,20,40)
map(510, 0, 1023, 20, 40)
В результате будет возвращено значение 30, которое является средним значением для диапазона от 20 до 40, точно так же, как и значение 510, которое расположено примерно посредине между значениями в диапазоне от 0 до 1023.
Элементы Пельтье (рис. 11.5) обладают очень полезным свойством — когда через них пропускается ток, одна сторона элемента становится более горячей, а другая — более холодной.
Чтобы это произошло, пропускаемый ток должен иметь солидную величину (обычно от 2 до 6 А при 12 В), т. е. для использования элемента Пельтье вам понадобится достаточно мощный блок питания. Такие элементы можно часто обнаружить в переносных холодильниках и в охладителях напитков. Элементы Пельтье в ряде случаев предпочтительнее обычных холодильников, поскольку у них нет движущихся частей, которые могут сломаться.
Рис. 11.5. Элемент Пельтье
Как работают элементы Пельтье?
Когда электрический ток протекает через переход между двумя различными проводящими материалами, то материал с одной стороны перехода становится несколько горячее, а с другой — несколько холоднее. Это явление назвали эффектом Пельтье в честь французского физика Жана Пельтье, открывшего его в 1894 году. Явление это известно также как термоэлектрический эффект.
Термоэлектрический эффект относительно мал, и чтобы сделать его нам полезным, — например, для охлаждения напитков, его нужно многократно усилить. Это достигается за счет размещения групп переходов друг за другом — тогда при прохождении тока каждый переход вносит свой вклад в общий эффект. Обычные недорогие элементы Пельтье имеют, как правило, около 12 переходов (рис. 11.6). По обеим сторонам элемента Пельтье расположен базовый материал, образующий основу для блока групп переходов.
Рис. 11.6. Устройство элемента Пельтье
Материалы, образующие стыки (переходы) элемента Пельтье, — это полупроводники двух типов, аналогичные тем, что используются при производстве транзисторов и микросхем, но оптимизированные для термоэлектрического эффекта. Они известны как полупроводники N-типа и P-типа — от слов Negative (отрицательный) и Positive (положительный).
Элементы Пельтье имеют еще одну очень интересную особенность — их можно использовать не только для охлаждения. Если нагреть одну сторону элемента Пельтье больше, чем другую, то элемент будет генерировать небольшое количество электроэнергии.
Особенности практического применения
Основная проблема элементов Пельтье состоит в том, что горячая и холодная его стороны находятся в тесном контакте, вследствие чего горячая сторона очень быстро нагревает холодную. Чтобы уменьшить этот неприятный эффект, нужно снимать тепло с холодной стороны как можно скорее.
Решением такой проблемы может может служить применение теплоотводящего радиатора (рис. 11.7). Такой радиатор представляет собой алюминиевую пластину с ребрами, увеличивающими площадь охлаждаемой поверхности, что способствует лучшему отводу тепла. Холодная сторона элемента сконструирована в виде блока, вдающегося внутрь теплоотводящего радиатора.
Простой радиатор сам по себе не столь эффективен, как тот же радиатор, но с вентилятором. Вентилятор уносит от пластин радиатора нагретый за счет конвекции воздух и заменяет его новой порцией холодного воздуха. На практике некоторые устройства имеют вентиляторы с обеих сторон элемента Пельтье, что позволяет повысить эффективность его работы (рис. 11.8).
Рис. 11.7. Элемент Пельтье на теплоотводящем радиаторе
Рис. 11.8. Охлаждение элемента Пельтье двумя вентиляторами
Проект: охладитель напитков
В этом проекте не используется ни Raspberry Pi, ни Arduino. Проект просто демонстрирует, как нужно подключать элемент Пельтье, и как можно самому собрать простой охладитель напитков (рис. 11.9). Этот базовый проект мы дополним в главе 12, добавив в него контроль за температурой и термостабилизацию. Затем, в главе 14, в него будет добавлен OLED-дисплей для отображения температуры.
Рис. 11.9. Охладитель напитков в сборе
Комплектующие
В этом проекте нам понадобятся следующие комплектующие (табл. 11.3).
Таблица 11.3. Комплектующие для работы с проектом охладителя напитков
Компонент схемы
Источники
Элемент Пельтье с двумя охлаждающими вентиляторами (ток 4 А или меньше)
eBay
Переходник с круглым гнездом и винтовыми зажимами
Adafruit: 368
Источник питания (12 В 5 A)
Adafruit: 352
Большая емкость из-под молока или сока
Б/у
Освежающий напиток
Если потребуется задействовать более мощный элемент Пельтье, чем тот, что указан в табл. 11.3, следует воспользоваться более мощным блоком питания, чтобы его максимально допустимый ток наверняка превышал ток, потребляемый элементом. Предусмотрите, как минимум, превышение в половину ампера для вентиляторов и еще в половину ампера на всякий случай.
Конструкция
Рассмотрев провода, идущие к блоку охлаждения, можно выделить три пары проводов: одна пара идет к элементу Пельтье, и по паре проводов — к каждому из вентиляторов. Им всем требуется 12 В от источника питания, и самый простой способ подключения состоит в использовании винтового зажима на разъеме, идущем к блоку питания. Проще говоря, все три красных провода от охлаждающего устройства нужно зафиксировать в винтовой клемме с маркировкой (+), а все три черных провода — в винтовой клемме с маркировкой (–), как показано на рис. 11.10.
Рис. 11.10. Подключение проводов в проекте охладителя напитков
Крышку пластикового контейнера, предназначенного для охлаждения емкости с напитком, нужно отрезать, а в его боковой стенке вырезать квадратное отверстие с таким расчетом, чтобы охлаждающая часть элемента Пельтье в этом отверстии плотно держалась (рис. 11.11). Контейнер должен быть достаточно большим, чтобы в нем можно было разместить для охлаждения любимый стакан или бутылочку.
Рис. 11.11. Подготовка пластикового контейнера
Если на охлаждающей стороне элемента Пельтье имеются отверстия под винты для крепления, то под них нужно проделать отверстия также и в контейнере, — с помощью винтов элемент можно будет закрепить на контейнере надежнее. При правильно вырезанном отверстии дно контейнера и основание элемента Пельтье окажутся на одном уровне, и в собранном виде у контейнера не будет причин опрокидываться.
Огромное преимущество использования одного их серии бывших в употреблении пластиковых контейнеров заключается в том, что если сделать вырез в неправильном месте, то для исправления ошибки всегда можно взять другой контейнер и начать все с начала.
Использование охладителя
Когда вся конструкция будет собрана, подключите блок питания, — оба вентилятора должны начать вращаться, и если опустить в контейнер руку, то сразу же можно будет почувствовать холодный воздух, идущий от меньшего вентилятора.
Как показали расчеты, проведенные при попытке вскипятить воду, изменение температуры даже относительно небольшого количества воды занимает много времени. И хотя наш охладитель способен охладить и теплый напиток, гораздо лучше до использования сохранять напиток прохладным, чем дожидаться, пока до нужной температуры охладится теплый напиток.
Этот проект также несколько неэкономичен, на сохранять прохладным небольшого количества напитка расходует 50 Вт электрической энергии. В главе 12 мы сделаем наш проект несколько эффективней, добавив в него режим термостатирования.
Заключение
В этой главе мы узнали, что быстрый нагрев и охлаждение требуют довольно высокой мощности, и что схемы с использованием транзисторов и реле могут успешно использоваться для управления как нагревателями, так и элементами Пельтье.
В следующей главе мы рассмотрим способы точного регулирования температуры и узнаем, как можно улучшить охладитель напитков, используя терморегулятор.
Реле позволяет электрическому сигналу или импульсу включать (или выключать) электрический ток. Для управления реле используется низкое напряжение или слабый ток, чтобы с его помощью управлять высоким напряжением и/или сильным током.
В электромеханическом реле ток протекает через катушку, которая действует как электромагнит, замыкающий (или размыкающий) контакты силовой части реле. Кроме электромеханических существуют и твердотельные реле использующие твердотельную электронику (без катушки и механических движущихся частей).
Внешний вид, назначение контактов
Для удобства управления и подключения к Arduino реле устанавливаются на платы, где, кроме самого реле, расположены контакты для подключения нагрузки и другие элементы (рис. M3.1). На одной плате могут размещаться несколько реле.
Рис. 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уществуют специальные модули реле, рассчитанные на большие мощности.
Схема подключения
Рис. M3.2. Схема подключения реле
Программный код
Тестовая программа для включения и выключения лампочки через каждые 2 секунды приведена в листинге M3.1.
С помощь модуля реле можно создать систему автоматического полива растений в цветочном горшке. Для этого, кроме модуля реле, мы задействуем микронасос, помещенный в банку с водой, и датчик влажности почвы (рис. M3.3). Как только влажность почвы опускается ниже заданных значений, Arduino включает микронасос и выключает его, когда почва становится снова достаточно влажной.
Систему можно усложнить, добавив датчик глубины, чтобы сигнализировать об окончании воды в банке и недопустить сгорания микронасоса.
Схема подключения
Рис. M3.3. Система автоматического полива цветочного горшка
Программный код
Листинг M3.2. Система автоматического полива цветочного горшка
//определения// пин аналогового выхода датчика уровня воды#define pinWaterLevel A0//пин аналогового выхода датчик влажности почвы#define pinSoilMoisture A1//пин реле для управление насосом#define pinRelayPump 12//константыconstint delayPumpBefore=2;//время полива (в секундах)constint delayPumpAfter=30;//время после полива, чтобы//земля пропиталась (в секундах)constint 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 >minMoisture)&&(aLevel>levels[2])){
digitalWrite(pinRelayPump, HIGH);//включаем насос
delay(delayPumpBefore*1000);//задержка на полив
digitalWrite(pinRelayPump, LOW);//выключаем насос
delay(delayPumpAfter*1000);//задержка на слив воды из//шланга после выключения насоса}else{
digitalWrite(pinRelayPump, LOW);}}
//определения
// пин аналогового выхода датчика уровня воды
#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 >minMoisture)&&(aLevel>levels[2])) {
digitalWrite(pinRelayPump, HIGH); //включаем насос
delay(delayPumpBefore*1000); //задержка на полив
digitalWrite(pinRelayPump, LOW); //выключаем насос
delay(delayPumpAfter*1000); //задержка на слив воды из
//шланга после выключения насоса
}
else {
digitalWrite(pinRelayPump, LOW);
}
}
Для адаптации программы к конкретному цветочному горшку надо произвести небольшую «тонкую настройку» системы:
во-первых, следует правильно установить время полива (delayPumpBefore), которое определяется паузой между включением и выключением насоса. Чем больше горшок, тем больше должна быть пауза и, как следствие, время полива;
во-вторых, надо установить правильное время после полива (delayPumpAfter), чтобы земля успела пропитаться, и система не включила повторный полив. Трубку подачи воды при этом удобно разместить рядом с датчиком влажности почвы, чтобы земля в районе датчика сразу пропитывалась.