- Arduino и радио модули 433 МГц
- Описание
- Подключение
- Библиотеки
- Примеры
- Урок 26.6 Соединяем две arduino по радиоканалу 433 МГц
- Преимущества:
- Недостатки:
- Нам понадобится:
- Антенна:
- Видео:
- Схема подключения:
- Алгоритм работы:
- Код программы:
- Проверка модулей:
- Arduino – передача данных по радиоканалу на частоте 433.920 МГц
- Технические характеристики передатчик MX-F01
- Назначение выводов передатчика MX-F01
- Технические характеристики приемника MX-RM-5V
- Назначение выводов приемника MX-RM-5V
- Подключение передатчика MX-F01 к Arduino
- Подключение приемника MX-RM-5V к Arduino
- Библиотека VirtualWire
- Примеры кода для работы с передатчиком MX-F01 с использованием библиотеки VirtualWire
- Пример 1
- Пример 2
- Пример кода для работы с приемником MX-RM-5V с использованием библиотеки VirtualWire
- Для “Пример 2” кода передатчика
Arduino и радио модули 433 МГц
Описание
Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?
- Неприхотливы к питанию
- Потребляют небольшой ток
- Занимают один пин МК
- В два раза дешевле
- Выше дальность связи при той же мощности
- Более высокая проникающая способность
Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.
Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.
Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе. Правые модули, несмотря на самый высокий ценник, работают хуже всех и к покупке не рекомендуются.
Ток потребления модулей:
- FS1000A [5V]: передача 12 мА, холостой 10 мкА
- MX-RM-5V [5V]: 3.7 мА
- SYN115 [3.3V]: передача 14 мА, холостой 0.5 мкА
- SYN480R [5V]: 4.5 мА
Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:
Подключение
Модули подключаются к питанию и data – на любой цифровой пин. “Зелёные” модули к Arduino подключаются напрямую, а синий передатчик – через делитель напряжения трёх 10к резисторах (есть в наборе). Для подключения к esp8266 делитель не нужен, там и так 3.3V на пине. На всех схемах передатчик слева, приёмник справа.
Библиотеки
Для данных модулей предлагается использовать библиотеку VirtualWire или RadioHead. Библиотеки очень сложные и тяжёлые по весу, и лично у меня китайские модули с ними не заработали. Причём со средними и правыми модулями с картинки из самого начала этого урока данные библиотеки в принципе не будут работать, так как у них слишком долгая синхронизация. Я написал свою библиотеку, Gyver433, которая работает даже в самых плохих условиях и выжимает максимум из этих модулей.
Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию Gyver433. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Рассмотрим тестовый пример, который отправляет строку Hello from # :
Отправка
Приём
Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.
Источник
Урок 26.6 Соединяем две arduino по радиоканалу 433 МГц
При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.
В этом уроке мы научимся соединять две Arduino по радиоканалу, на частоте 433,920 МГц, используя радио модули FS1000A и MX-RM-5V , на расстоянии до 100 м. Данное расстояние можно увеличить, припаяв антенны к передатчику (FS1000A) и приёмнику (MX-RM-5V), см. схему подключения.
Преимущества:
- Отсутствие проводов между Arduino.
- Простота подключения. Рассматриваемые модули, в отличии от nRF24L01+, питаются от напряжения 5 В.
- Доступность. Радио модули выпускаются множеством производителей, в различном исполнении и являются взаимозаменяемыми.
Недостатки:
- На частоте 433,920 МГц работают множество других устройств (радио люстры, радио розетки, радио брелки, радио модели и т.д.), которые могут «глушить» передачу данных между радио модулями.
- Отсутствие обратной связи. Модули разделены на приёмник и передатчик. Таким образом, в отличии от модуля nRF24L01+, приемник не может отправить передатчику, сигнал подтверждения приёма.
- Низкая скорость передачи данных, до 5 кбит/сек.
- Приёмник MX-RM-5V критичен даже к небольшим пульсациям на шине питания. Если Arduino управляет устройствами вносящими даже небольшие, но постоянные, пульсации в шину питания (сервоприводы, LED индикаторы, ШИМ и т.д.), то приёмник расценивает эти пульсации как сигнал и не реагирует на радиоволны передатчика. Влияние пульсаций на приёмник можно снизить одним из способов:
- Использовать, для питания Arduino, внешний источник, а не шину USB. Так как напряжение на выходе многих внешних источников питания контролируется или сглаживается. В отличии от шины USB, где напряжение может существенно «проседать».
- Установить на шине питания приёмника сглаживающий конденсатор.
- Использовать отдельное стабилизированное питание для приёмника.
- Использовать отдельное питание для устройств вносящих пульсации в шину питания.
Нам понадобится:
- Радио модули FS1000A и MX-RM-5V х 1 комплект.
- Arduino х 2шт.
- Trema Shield х 2шт.
- Trema Slider х 1шт.
- Trema потенциометр х 1шт.
- Trema четырехразрядный LED индикатор х 1шт.
- Trema светодиод (красный, оранжевый, зелёный, синий или белый) x 1шт.
- Набор проводов «мама-мама» для подключения радио модулей х 1 комплект.
Для реализации проекта нам необходимо установить библиотеки:
- Библиотека iarduino_RF433 (для работы с радио модулями FS1000A и MX-RM-5V).
- Библиотека iarduino_4LED, (для работы с Trema четырехразрядным LED индикатором).
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .
Антенна:
Первый усилитель любого приёмника и последний усилитель любого передатчика, это антенна. Самая простая антенна — штыревая (отрезок провода определённой длины). Длина антенны (как приёмника, так и передатчика), должна быть кратна четверти длины волны несущей частоты. То есть, штыревые антенны, бывают четвертьволновые (L/4), полуволновые (L/2) и равные длине волны (1L).
Длинна радиоволны вычисляется делением скорости света (299’792’458 м/с) на частоту (в нашем случае 433’920’000 Гц).
L = 299’792’458 / 433’920’000 = 0,6909 м = 691 мм.
Таким образом длина антенн для радио модулей на 433,920 МГц может быть: 691 мм (1L), 345 мм (L/2), или 173 мм (L/4). Антенны припаиваются к контактным площадкам, как показано на схеме подключения.
Видео:
Схема подключения:
Радиопередатчик подключён к выводу D12 (можно подключить к любому выводу Arduino). Радиоприёмник подключён к выводу D2 (при работе с библиотекой iarduino_RF433, его можно подключить только к выводам использующим внешние прерывания). Trema четырехразрядный LED индикатор подключён к цифровым выводам D6 и D7 (можно подключить к любым выводам Arduino). Светодиод подключён к цифровому выводу D11 (для изменения яркости нужны выводы, которые используют ШИМ). Trema потенциометр и слайдер подключены к аналоговым входам A1 и A0 (можно подключить к любым аналоговым входам).
У радиоприёмника имеются два выхода DATA, они электрически соединены между собой, так что Вы можете использовать любой выход.
Приёмник MX-RM-5V критичен даже к небольшим пульсациям на шине питания (см. раздел недостатки).
Для питания Arduino, используйте внешний источник питания, а не шину USB.
Библиотека iarduino_RF433 (а также библиотеки RemoteSwitch и RCSwitch) , в отличии от библиотеки VirtualWire, использует не аппаратный таймер, а внешнее прерывание. Это даёт возможность использовать другие библиотеки использующие первый аппаратный таймер и использовать любые выводы ШИМ, но радиоприёмник можно подключить только к тем выводам, которые используют внешнее прерывание:
Плата Arduino | Выводы использующие внешнее прерывание |
---|---|
Uno, ProMini, Nano, Ethernet | 2, 3 |
Leonadro, Micro | 2, 3, 0, 1, 7 |
Mega 2560 | 2, 3, 18, 19, 20, 21 |
Due | Любые выводы |
Алгоритм работы:
Передатчик:
При старте (в коде setup) скетч настраивает работу радиопередатчика, указывая скорость передачи данных и номер трубы. После чего, постоянно (в коде loop), считывает показания с Trema потенциометра и Trema слайдера, сохраняя их в массив data, и отправляет его радиопередатчику.
Приёмник:
При старте (в коде setup) скетч настраивает работу радиоприёмника, указывая те же параметры что и у передатчика, а также инициирует работу с LED индикатором. После чего, постоянно (в коде loop), проверяет нет ли в буфере данных, принятых радиоприёмником. Если данные есть, то они читаются в массив data, после чего значение 0 элемента (показания Trema слайдера) выводится на LED индикатор, а значение 1 элемента (показания Trema потенциометра) преобразуются и используется для установки яркости светодиода.
Код программы:
Передатчик:
Приемник:
Проверка модулей:
Работоспособность приёмника и передатчика можно проверить на одной плате Arduino. Для этого подключите приёмник к выводу D3, а передатчик к выводу D4 и загрузите скетч «check» из примеров библиотеки iarduino_RF433.
Источник
Arduino – передача данных по радиоканалу на частоте 433.920 МГц
GeekElectronics » Arduino от А до Я » Arduino – передача данных по радиоканалу на частоте 433.920 МГц
В этой статье я постараюсь подробно описать процесс организации передачи данных между контролерами Arduino по радиоканалу с использованием передатчика MX-F01 и приемника MX-RM-5V.
Эти модули планирую использовать в своей умной метеостанции, чтобы избавиться от лишних проводов.
Для начала, давайте познакомимся с железом.
Технические характеристики передатчик MX-F01
- Напряжение питания: 3-12 В
- Ток потребления в режиме ожидания: 0 мА
- Ток потребления в режиме передачи: 20-28 мА
- Рабочая частота: 433.920 МГц (Есть на частоту 315 МГц)
- Выходная мощность передатчика: 40 мВт
- Дальность передачи: до 500 м в зоне прямой видимости с дополнительной антенной длинной 17,5, 35 или 70 см
- Тип модуляции: амплитудная
- Температурный диапазон: –10…+70 °C
- Размеры: 19х19х8 мм
Назначение выводов передатчика MX-F01
- ATAD — данные
- VCC — питание «+»
- GND — питание «-«
- ANT — антенна
Технические характеристики приемника MX-RM-5V
- Напряжение питания: 5 В
- Ток потребления: 4 мА
- Рабочая частота: 433.920 МГц (Есть на частоту 315 МГц)
- Размеры: 30х14х7 мм
Назначение выводов приемника MX-RM-5V
- GND — питание «-«
- DATA — данные
- VCC — питание «+»
- ANT — антенна
Базовую информацию получили – пора приступать к практической части.
Подключение передатчика MX-F01 к Arduino
Для управления передатчиком MX-F01 я буду использовать Arduino Mega 2560.
Приступим к подключению:
- ATAD на MX-F01 подключаем к 12 дискретному выводу Arduino Mega 2560
- VCC на MX-F01 подключаем к +5V Arduino Mega 2560
- GND на MX-F01 подключаем к GND Arduino Mega 2560
- ANT на MX-F01 к антенне в виде куска провода длинной 17,5, 35 или 70 см (я пока антенну не припаивал)
Подключение приемника MX-RM-5V к Arduino
Для управления приемником я буду использовать Arduino Nano ATmega328.
- DATA на MX-RM-5V подключаем к 12 дискретному выводу Arduino Nano ATmega328
- VCC на MX-RM-5Vподключаем к +5V Arduino Nano ATmega328
- GND на MX-RM-5V подключаем к GND Arduino Nano ATmega328
- ANT на MX-RM-5V к антенне в виде куска провода длинной 17,5, 35 или 70 см (я пока антенну не припаивал)
Библиотека VirtualWire
Чтобы упростить написания кода для работы с радиомодулями, была создана библиотека: VirtualWire.
VirtualWire.rar (17,3 KiB, 4 809 hits)
Распакуйте содержимое архива в папку /libraries/, которая находится в каталоге среды разработки Arduino.
Примеры кода для работы с передатчиком MX-F01 с использованием библиотеки VirtualWire
Пример 1
Данный скетч будет отправлять раз в секунду сообщение «Hello World». Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.
const int led_pin = 13; // Пин светодиода
const int transmit_pin = 12; // Пин подключения передатчика
void setup()
<
vw_set_tx_pin(transmit_pin);
vw_setup(2000); // Скорость передачи (Бит в секунду)
pinMode(led_pin, OUTPUT);
>
void loop()
<
const char *msg = «Hello World»; // Передаваемое сообщение
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения
vw_wait_tx(); // Ожидаем окончания отправки сообщения
digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
delay(1000); // Пауза 1 секунда
>
Пример 2
Данный скетч будет отправлять раз в секунду сообщение, которое содержит количество миллисекунд, прошедшее с момента начала выполнения текущей программы. Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.
const int led_pin = 13; // Пин светодиода
const int transmit_pin = 12; // Пин подключения передатчика
void setup()
<
vw_set_tx_pin(transmit_pin);
vw_setup(2000); // Скорость передачи (Бит в секунду)
pinMode(led_pin, OUTPUT);
>
void loop()
<
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
String millisresult = String(millis()); // Присваиваем переменной значение, равное количеству миллисекунд с момента начала выполнения текущей программы
char msg[14];
millisresult.toCharArray(msg, 14);
vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения
vw_wait_tx(); // Ожидаем окончания отправки сообщения
digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
delay(1000); // Пауза 1 секунда
>
Пример кода для работы с приемником MX-RM-5V с использованием библиотеки VirtualWire
byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных
byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения
const int led_pin = 13; // Пин светодиода
const int receiver_pin = 12; // Пин подключения приемника
void setup()
<
Serial.begin(9600); // Скорость передачиданных
Serial.println(«MX-RM-5V is ready»);
vw_set_rx_pin(receiver_pin); // Пин подключения приемника
vw_setup(2000); // Скорость передачи данных (бит в секунду)
vw_rx_start(); // Активация применика
>
void loop()
<
if (vw_get_message(message, &messageLength)) // Если есть данные..
<
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале приема пакета
for (int i = 0; i
Для “Пример 2” кода передатчика
Не забудьте припаять антенны, а то без них дальность передачи будет всего несколько сантиметров.
На этом пока все.
Частота 433.920 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках и другие подобные системы.
Источник