Урок 26.6 Соединяем две arduino по радиоканалу 433 МГц
При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.
В этом уроке мы научимся соединять две Arduino по радиоканалу, на частоте 433,920 МГц, используя радио модули FS1000A и MX-RM-5V , на расстоянии до 100 м. Данное расстояние можно увеличить, припаяв антенны к передатчику (FS1000A) и приёмнику (MX-RM-5V), см. схему подключения.
Преимущества:- Отсутствие проводов между Arduino.
- Простота подключения. Рассматриваемые модули, в отличии от nRF24L01+, питаются от напряжения 5 В.
- Доступность. Радио модули выпускаются множеством производителей, в различном исполнении и являются взаимозаменяемыми.
- На частоте 433,920 МГц работают множество других устройств (радио люстры, радио розетки, радио брелки, радио модели и т.д.), которые могут «глушить» передачу данных между радио модулями.
- Отсутствие обратной связи. Модули разделены на приёмник и передатчик. Таким образом, в отличии от модуля nRF24L01+, приемник не может отправить передатчику, сигнал подтверждения приёма.
- Низкая скорость передачи данных, до 5 кбит/сек. критичен даже к небольшим пульсациям на шине питания. Если Arduino управляет устройствами вносящими даже небольшие, но постоянные, пульсации в шину питания (сервоприводы, LED индикаторы, ШИМ и т.д.), то приёмник расценивает эти пульсации как сигнал и не реагирует на радиоволны передатчика. Влияние пульсаций на приёмник можно снизить одним из способов:
- Использовать, для питания Arduino, внешний источник, а не шину USB. Так как напряжение на выходе многих внешних источников питания контролируется или сглаживается. В отличии от шины USB, где напряжение может существенно «проседать».
- Установить на шине питания приёмника сглаживающий конденсатор.
- Использовать отдельное стабилизированное питание для приёмника.
- Использовать отдельное питание для устройств вносящих пульсации в шину питания.
-
х 1 комплект. х 2шт. х 2шт. х 1шт. х 1шт. х 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.