Рация на ардуино своими руками

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

1 Описание и характеристики приёмопередатчика NRF24L01

NRF24L01 – миниатюрный (4×4 мм) приёмопередатчик на одном чипе. Он очень дешёвый, при этом обеспечивает устойчивую радиосвязь на расстояниях в десятки метров (а при усилении и с хорошей антенной – сотни метров в зоне прямой видимости), и поэтому получил широкое распространение среди радиолюбителей. Основные технические характеристики чипа nRF24L01:

  • частота ~2,4 ГГц, 126 радиоканалов;
  • программируемая выходная мощность передатчика 0, -6, -12 или -18 дБм;
  • 3 скорости передачи: 250 кбит/с, 1 Мб/с и 2 Мб/с;
  • автоматическая обработка пакетов;
  • частотная модуляция GFSK радиосигнала;
  • ультранизкое потребление;
  • напряжение питания 1,9…3,6 В;
  • порты ввода-вывода толерантны к 5 В;
  • совместимость с nRF2401A, nRF2402, nRF24E1 и nRF24E2;
  • управление по цифровому 4-проводному интерфейсу SPI , скорость до 10 Мб/с.

NRF24L01 можно приобрести в составе готового модуля. Назначение выводов модуля показано на иллюстрации. На обратной стороне модуля радиоэлементов нет.

Внешний вид и назначение выводов приёмопередатчика nRF24L01

Внешний вид и назначение выводов приёмопередатчика nRF24L01

Для организации приёма и передачи понадобятся как минимум два подобных модуля с nRF24L01.

По традиции, сначала подключим nRF24L01 к Arduino и проверим его работоспособность, используя существующие библиотеки. А затем детально рассмотрим протокол управления и научимся работать с приёмопередатчиком без библиотек.

2 Подключение приёмопередатчика nRF24L01к Arduino

Подключим модули к Arduino, как показано на рисунке. Каждый модуль к своему контроллеру.

Схема подключения nRF24L01 к Arduino

Схема подключения nRF24L01 к Arduino

Модули подключаются одинаково, как можно догадаться. А программы в Ардуино будут разные. Один модуль будет работать в режиме приёмника, а другой – передатчика. Но сначала необходимо загрузить библиотеку для nRF24L01 и установить её обычным способом. Библиотека прилагается также в конце статьи.

Скетч передатчика nRF24L01 (разворачивается)

В другую Ардуинку загрузим скетч приёмника:

Скетч приёмника nRF24L01 (разворачивается)

В моём случае макет с подключёнными модулями выглядит так:

Подключение передатчика и приёмника nRF24L01 к Arduino

Подключение передатчика и приёмника nRF24L01 к Arduino

Часто пользователи сообщают о проблемах в питании данных модулей nRF24L01. Это проявляется в том, что приёма нет. В таком случае попробуйте припаять на свободное место модуля конденсатор ёмкостью 1…2 пФ.

Передатчик nRF24L01 подключён к Arduino Nano

Передатчик nRF24L01 подключён к Arduino Nano

Запустим монитор последовательного порта для платы Arduino, которая управляет приёмником nRF24L01. В мониторе мы увидим, что 1 раз в секунду нам приходят пакеты, 31 байт в которых не меняется, а последний, 32-ой, байт содержит увеличивающийся счётчик.

Принимаемые радиоприёмником nRF24L01 пакеты в мониторе последовательного порта

Принимаемые радиоприёмником nRF24L01 пакеты в мониторе последовательного порта

3 Режимы работы и управление приёмопередатчиком nRF24L01

Приёмопередатчик может находиться в четырёх состояниях: выключен, ожидание, приём, передача. Чип nRF24L01 имеет встроенную машину состояний, которая обеспечивает корректный переход между этими состояниями. Пользователь управляет состояниями, загружая в управляющие регистры специальные команды.

Режим выключения (power down mode)

В этом режиме чип потребляет минимальный ток, но может принимать команды по SPI от контроллера.

Режим ожидания (standby mode)

Есть два режима ожидания.

Первый режим ожидания (Standby-I) используется для снижения потребления. В этом режиме чип принимает команды по SPI, быстро переходит в режим передачи, и так же быстро возвращается обратно в режим ожидания 1. Для перехода в этот режим нужно подать на CE "HIGH" и в регистре CONFIG установить бит PWR_UP в "1".

Второй режим ожидания (Standby-II) более энергозатратен по сравнению с первым: чип работает полностью, и устройство готово к приёму и передаче практически моментально (около 130 мкс). Как только в передающем буфере оказываются данные, микросхема nRF24L01 начинает передачу. Для перехода в этот режим нужно держать CE в "HIGH" и в регистре CONFIG должен быть установлен бит PWR_UP в "1".

Режим приёма (RX mode)

Это режим, в котором чип nRF24L01 используется как приёмник. При этом он постоянно сканирует эфир на наличие валидных пакетов. Как только валидный пакет будет найден, он помещается в свободный слот приёмного буфера. Если буфер полностью заполнен, то пакет игнорируется.

Для перехода в режим приёма нужно установить биты PWR_UP и PRIM_RX в "1", и вывод CE установить в "HIGH". Режим будет держаться до тех пор, пока контроллер не переключит его в другой (например, режим ожидания или выключения).

Режим передачи (TX mode)

Режим передачи используется для передачи данных.

Для перехода в режим приёма нужно установить бит PWR_UP в "1", бит PRIM_RX в "0", и вывод CE установить в "HIGH". Данные передаются пакетами максимальной длиной по 32 байта. Режим будет держаться до тех пор, пока передаётся пакет. По окончанию передачи пакета чип перейдёт в режим ожидания 2 (standby-II).

Важно не держать nRF24L01 в режиме передачи дольше 4 мс! Чип поддерживает расширенный режим Enhanced ShockBurst, который соблюдает это требование. Кроме того, этот режим обеспечивает автоматическую обработку пакетов.

Есть необходимость создать рации на базе радио модуля si4432 и Ардуино нано.

Основная задача: передавать аудио звук от плеера на расстояние допустимое радиомодулем, по возможности програмно зашифровать с помощью ардуино, а также выбрать частоту сигнала. Приёмников может быть несколько.

Второстепенная задача, превратить приёмники в передатчики и использовать как обычные рации.

Что посоветуете для реализации?

с обычными рациями уже пробовал: качество звука низкое, надо дорабатывать чтобы ввести аудио от плеера, аккумуляторы не держат (1,5 ч и всё). А хорошие рации стоят дорого.

Дополнительные вопросы: 1) какое потребление будет, хватит ли аккумулятора от Нокия или батареек для 4-5 часов вещания?
2) в случае если передатчик подключён к сети, а приёмник на батарейках, какой расход энергии будет у него, какое питание потребуется для 4-5 часов приёма?

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Последние посетители 0 пользователей онлайн

350 мало, как минимум 400, а лучше 450. А емкость - чем больше - тем лучше, в пределах разумного) Диоды на 1000В стоят 3 копейки, чего их там ковырять? Такого точно нет, если только не лампово-полупроводниковый телек.

ВасяШпунт

ВасяШпунт

У меня других пока и нет. Запас - ну наверное в размерах, что бы потом в этом же корпусе все уместилось. Силовик - прошу уточнить; конденсаторы 2 шт одинаковые 100m - 350v или все же другие нужно покупать, помнится были советы 220; 330; 470; 680 и напряжение "от 400v" какие все же желательнее, что бы потом не покупать другие. И дроссель - у меня тут "вдруг появился" старый телевизор, правда транзисторный, там он может быть?

Да, есть такое дело. Контроллер читает данные с Pololu VL53L1X и GY-49-MAX44009. Управляет ШИМ лазерным модулем. Устройство герметичное. Открывается раз в сезон. Включается/выключается герконом. Зарядка - Модуль питания XKT412-28 с Али. Во время зарядки устройство должно быть отключено. Как это реализовать средствами TinyS2 я не сообразил. А так два контура. Один: XKT412-28 -> BMS -> Li-Po. Второй: Li-Po -> BMS -> выключатель -> TinyS2. Магнитом выключил, поднес индуктор - заряжается. Убрал магнит - устройство в работе.

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

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

Радиомодуль на 433 МГц

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

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

Подключение

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

Распиновка передатчика 433МГц

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

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

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

Распиновка приемника 433МГц

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

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

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

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

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

Разберем программу. Первое что мы сделали — объявили объект для работы с передатчиком и назвали его mySwitch.

Затем, внутри стандартной функции setup включили передатчик и указали вывод, к которому он подключен:

Также send умеет принимать двоичные строки:

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

Теперь напишем программу для приемника. Для демонстрации факта передачи мы будем зажигать светодиод, подключенный к выводу №3 на плате Ардуино. Если приемник поймал код B1000 — включим светодиод, а если B0100 — выключим.

Функция available возвращает истину, если передатчик принял хоть какие-то данные:

Функция getReceivedValue извлекает из потока данных одну пачку и декодирует её в число. В программе мы присваиваем полученное число переменной value:

Задания

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

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

Заключение

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

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

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

Радио модули с частотой 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. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры

Отправка

Приём

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

Читайте также: