[email protected]
Волгоград,
Баррикадная, 1Д. Оф. 3-54
+7 (961) 694-25-04



Новости

Главная Новости

Ардуино: радиомодуль на 433 МГц

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

видео Ардуино: радиомодуль на 433 МГц

Ардуино и радиомодули RF 433 МГц

На этом уроке мы решим задачу по передаче радиосигнала между двумя контроллерами Ардуино с помощью популярного приемопередатчика с частотой 433МГц.


Подключение радиомодулей на 433МГц к Ардуино

На самом деле, устройство по передаче данных состоит из двух модулей: приемника и передатчика. Данные можно передавать только в одном направлении. Это важно понимать при использовании этих модулей.

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

Модули могут иметь разные названия: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V, и т.п., но все они имеют примерно одинаковый внешний вид и нумерацию контактов. Также, распространены две частоты радиомодулей: 433 МГц и 315 МГц.

1. Подключение

Передатчик имеет всего три вывода: Gnd, Vcc и Data.

Подключаем их к первой плате Ардуино по схеме:

Передатчик MX-05V 433МГц GND VCC Data
Ардуино Уно №1 GND +5V 2

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

Схема подключения ко второй плате Ардуино идентична первой:

Приемник XD-RF-5V 433МГц GND VCC Data
Ардуино Уно №2 GND +5V 2

Собираем оба устройства на макетной плате и приступаем к написанию программ.

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 МГц работает большинство радиоканальных пультов управления. Имея Ардуино и приемник, мы можем декодировать сигналы управления и повторить их. Подробнее о том, как это сделать мы напишем в одном из следующих уроков!

 
 
rss