Ардуино: радиомодуль на 433 МГц
Содержание
На этом уроке мы решим задачу по передаче радиосигнала между двумя контроллерами Ардуино с помощью популярного приемопередатчика с частотой 433МГц.
На самом деле, устройство по передаче данных состоит из двух модулей: приемника и передатчика. Данные можно передавать только в одном направлении. Это важно понимать при использовании этих модулей.
Например, можно сделать дистанционное управление любым электронным устройством, будь то мобильный робот или, например, телевизор. В этом случае данные будут передаваться от пульта управления к устройству. Другой вариант — передача сигналов с беспроводных датчиков на систему сбора данных. Здесь уже маршрут меняется, теперь передатчик стоит на стороне датчика, а приемник на стороне системы сбора.
Модули могут иметь разные названия: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V, и т.п., но все они имеют примерно одинаковый внешний вид и нумерацию контактов. Также, распространены две частоты радиомодулей: 433 МГц и 315 МГц.
Подключение
Передатчик имеет всего три вывода: Gnd, Vcc и Data.
Подключаем их к первой плате Ардуино по схеме:
Передатчик MX-05V 433МГц | GND | VCC | Data |
Ардуино Уно №1 | GND | +5V | 2 |
У приемника четыре вывода, но один не используется.
Схема подключения ко второй плате Ардуино идентична первой:
Приемник XD-RF-5V 433МГц | GND | VCC | Data |
Ардуино Уно №2 | GND | +5V | 2 |
Собираем оба устройства на макетной плате и приступаем к написанию программ.
Программа для передатчика
Для работы с радиомодулями воспользуемся библиотекой RCSwitch. Напишем программу, которая будет каждую секунду по-очереди отправлять два разных сообщения.
Разберем программу. Первое что мы сделали — объявили объект для работы с передатчиком и назвали его mySwitch.
Затем, внутри стандартной функции setup включили передатчик и указали вывод, к которому он подключен:
Наконец, в основном цикле программы loop отправляем сначала одно сообщение, а затем и второе с помощью функции send:
Функция send имеет два аргумента. Первый — это отправляемое сообщение, которое будет отправляться в эфир в виде пачки импульсов. Второй аргумент — это размер отправляемой пачки.
В нашей программе мы указали сообщения в формате двоичного числа. На это указывает английская буква B в начале кода B1000. В десятеричном представлении это число превратится в восьмерку. Так что мы могли вызвать функцию send так:
Также send умеет принимать двоичные строки:
Программа для приемника
Теперь напишем программу для приемника. Для демонстрации факта передачи мы будем зажигать светодиод, подключенный к выводу №3 на плате Ардуино. Если приемник поймал код B1000 — включим светодиод, а если B0100 — выключим.
Функция available возвращает истину, если передатчик принял хоть какие-то данные:
Функция getReceivedValue извлекает из потока данных одну пачку и декодирует её в число. В программе мы присваиваем полученное число переменной value:
Задания
Теперь можно попробовать потренироваться и сделать разные полезные устройства. Вот несколько идей.
- Пульт для светильника. На стороне приемника модуль реле, включенный в цепь питания светильника (осторожно, 220 Вольт!). На стороне передатчика: тактовая кнопка. Написать программы для приемника и передатчика, которые по нажатию кнопки будут включать удаленное реле. При повторном нажатии кнопки реле будет выключаться.
- Уличный термометр с радиоканалом. На стороне передатчика разместить датчик температуры. Предусмотреть автономное питание от батареек. На стороне приемника: символьный ЖК дисплей. Написать программы для приемника и передатчика, которые позволят выводить показания температуры с удаленного датчика на дисплее.
Заключение
Итак, теперь мы знаем простой и недорогой способ передавать данные на расстоянии. К сожалению, скорость передачи и дистанция в таких радиомодулях весьма ограничены, так что мы не сможем полноценно управлять, например квадрокоптером. Однако, сделать радиопульт для управления простым бытовым прибором: светильником, вентилятором или телевизором, нам под силу.
На основе приемопередатчиков с частотой 433 МГц и 315 МГц работает большинство радиоканальных пультов управления. Имея Ардуино и приемник, мы можем декодировать сигналы управления и повторить их. Подробнее о том, как это сделать мы напишем в одном из следующих уроков!
Чтобы передавать много данных с большой скоростью и на большие расстояния рекомендуем использовать цифровые приемопередатчики: nrf24l01, тот же bluetooth, wi-fi или LoraWAN.
Источник: