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

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

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

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

Подключение

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

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

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

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

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

Программа для передатчика

Для работы с радиомодулями воспользуемся библиотекой 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 на плате Ардуино. Если приемник поймал код 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 извлекает из потока данных одну пачку и декодирует её в число. В программе мы присваиваем полученное число переменной :

int value = mySwitch.getReceivedValue();

Задания

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

1. Пульт для светильника. На стороне приемника модуль реле, включенный в цепь питания светильника (осторожно, 220 Вольт!). На стороне передатчика: тактовая кнопка. Написать программы для приемника и передатчика, которые по нажатию кнопки будут включать удаленное реле. При повторном нажатии кнопки реле будет выключаться.

2. Уличный термометр с радиоканалом. На стороне передатчика разместить датчик температуры. Предусмотреть автономное питание от батареек. На стороне приемника: символьный ЖК дисплей. Написать программы для приемника и передатчика, которые позволят выводить показания температуры с удаленного датчика на дисплее.

Заключение

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

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

Чтобы передавать много данных с большой скоростью и на большие расстояния рекомендуем использовать цифровые приемопередатчики: nrf24l01, тот же bluetooth, wi-fi или LoraWAN.

# data[].attributes.attachment_link.keywords[]
уроки робототехники

# data[].attributes.attachment_link.keywords[]
робот своими руками

# data[].attributes.attachment_link.authors[].name
Олег Евсегнеев

# data[].attributes.attachment_link.title
Ардуино: радиомодуль на 433 МГц

# data[].attributes.attachment_link.description
Передаем данные между двумя Ардуино с помощью популярного и дешевого радиомодуля на 433 МГц. Автор Олег Евсегнеев. Место хакспейс MakeItLab. Уроки и курсы на Ардуино и Raspberry Pi. Статьи по электронике и робототехнике. Учебный портал хакспейса MakeItLab. Магазин деталей и запчастей для роботов.Уроки и курсы на Ардуино и Raspberry Pi.

# data[].attributes.headline
Измеритель количества мусора

# data[].attributes.subject
Измеритель количества мусора

# data[].attributes.headline
вывод данных

# data[].attributes.subject
вывод данных

# data[].attributes.headline
Обработка данных с датчиков

# data[].attributes.subject
Обработка данных с датчиков

# data[].attributes.headline
настройка Iot платформы

# data[].attributes.subject
настройка Iot платформы

# data[].attributes.headline
передача данных в мусорную компанию

# data[].attributes.subject
передача данных в мусорную компанию

# data[].attributes.headline
Питание бака

# data[].attributes.subject
Питание бака

# data[].attributes.headline
Датчик заполненности корзины

# data[].attributes.subject
Датчик заполненности корзины

# data[].attributes.headline
интернет сервис

# data[].attributes.subject
интернет сервис

# data[].attributes.headline
мусорные баки

# data[].attributes.subject
мусорные баки