Ардуино: радиомодуль на 433 МГцОпубликовано: 27.08.2018 На этом уроке мы решим задачу по передаче радиосигнала между двумя контроллерами Ардуино с помощью популярного приемопередатчика с частотой 433МГц. Подключение радиомодулей на 433МГц к Ардуино На самом деле, устройство по передаче данных состоит из двух модулей: приемника и передатчика. Данные можно передавать только в одном направлении. Это важно понимать при использовании этих модулей. Например, можно сделать дистанционное управление любым электронным устройством, будь то мобильный робот или, например, телевизор. В этом случае данные будут передаваться от пульта управления к устройству. Другой вариант — передача сигналов с беспроводных датчиков на систему сбора данных. Здесь уже маршрут меняется, теперь передатчик стоит на стороне датчика, а приемник на стороне системы сбора. Модули могут иметь разные названия: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V, и т.п., но все они имеют примерно одинаковый внешний вид и нумерацию контактов. Также, распространены две частоты радиомодулей: 433 МГц и 315 МГц. 1. ПодключениеПередатчик имеет всего три вывода: Gnd, Vcc и Data. Подключаем их к первой плате Ардуино по схеме:
У приемника четыре вывода, но один не используется. Схема подключения ко второй плате Ардуино идентична первой:
Собираем оба устройства на макетной плате и приступаем к написанию программ. 2. Программа для передатчикаДля работы с радиомодулями воспользуемся библиотекой RCSwitch . Напишем программу, которая будет каждую секунду по-очереди отправлять два разных сообщения. #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { mySwitch.enableTransmit(2); } void loop() { mySwitch.send(B0100, 4); delay(1000); mySwitch.send(B1000, 4); delay(1000); }Разберем программу. Первое что мы сделали — объявили объект для работы с передатчиком и назвали его mySwitch. RCSwitch mySwitch = RCSwitch();Затем, внутри стандартной функции setup включили передатчик и указали вывод, к которому он подключен: mySwitch.enableTransmit(2);Наконец, в основном цикле программы loop отправляем сначала одно сообщение, а затем и второе с помощью функции send : mySwitch.send(B1000, 4);Функция send имеет два аргумента. Первый — это отправляемое сообщение, которое будет отправляться в эфир в виде пачки импульсов. Второй аргумент — это размер отправляемой пачки. В нашей программе мы указали сообщения в формате двоичного числа. На это указывает английская буква «B» в начале кода B1000. В десятеричном представлении это число превратится в восьмерку. Так что мы могли вызвать функцию send так: mySwitch.send(8, 4);Также send умеет принимать двоичные строки: mySwitch.send("1000", 4);3. Программа для приемникаТеперь напишем программу для приемника. Для демонстрации факта передачи мы будем зажигать светодиод, подключенный к выводу №3 на плате Ардуино. Если приемник поймал код B1000 — включим светодиод, а если B0100 — выключим. #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { pinMode( 3, OUTPUT ); mySwitch.enableReceive(0); } void loop() { if( mySwitch.available() ){ int value = mySwitch.getReceivedValue(); if( value == B1000 ) digitalWrite( 3, HIGH ); else if( value == B0100 ) digitalWrite( 3, LOW ); mySwitch.resetAvailable(); } }Функция available возвращает истину, если передатчик принял хоть какие-то данные: mySwitch.available()Функция getReceivedValue извлекает из потока данных одну пачку и декодирует её в число. В программе мы присваиваем полученное число переменной value : int value = mySwitch.getReceivedValue();ЗаданияТеперь можно попробовать потренироваться и сделать разные полезные устройства. Вот несколько идей. Пульт для светильника. На стороне приемника модуль реле , включенный в цепь питания светильника (осторожно, 220 Вольт!). На стороне передатчика: тактовая кнопка . Написать программы для приемника и передатчика, которые по нажатию кнопки будут включать удаленное реле. При повторном нажатии кнопки реле будет выключаться. Уличный термометр с радиоканалом. На стороне передатчика разместить датчик температуры . Предусмотреть автономное питание от батареек. На стороне приемника: символьный ЖК дисплей . Написать программы для приемника и передатчика, которые позволят выводить показания температуры с удаленного датчика на дисплее.ЗаключениеИтак, теперь мы знаем простой и недорогой способ передавать данные на расстоянии. К сожалению, скорость передачи и дистанция в таких радиомодулях весьма ограничены, так что мы не сможем полноценно управлять, например квадрокоптером. Однако, сделать радиопульт для управления простым бытовым прибором: светильником, вентилятором или телевизором, нам под силу. На основе приемопередатчиков с частотой 433 МГц и 315 МГц работает большинство радиоканальных пультов управления. Имея Ардуино и приемник, мы можем декодировать сигналы управления и повторить их. Подробнее о том, как это сделать мы напишем в одном из следующих уроков! |