Ардуино 433 мгц передатчик приемник arduino

Содержание

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, 5 630 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 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках и другие подобные системы.

  • Автор: source
  • Миниатюра:
  • Рубрика: Arduino от А до ЯArduino, MX-F01, MX-RM-5V, VirtualWire, передатчик, приемник —>
  • Опубликовано: 05.02.2022
  • Обновлено: 05.02.2022
  • Комментариев: 7
  • Просмотров: 72 592 searchПоисковые боты

Похожие записи

Комментариев: 7

Для “Пример 2” кода передатчика
у меня происходит странное явление. После увеличения разрядности счетчика (было 99ххх стало 100ххх) число полученных знаков остается старым (в нашем примере 5) и младший разряд не получается.
После перезагрузки приемника начинаем принимать 6 разрядов но при следующем увеличении разрядности история повторяется.
Хуже дело обстоит с перезагрузкой передатчика. Приемник принимает только 1 знак (думаю это связано с тем что время после включения =0 и первый раз передается только 1 знак)

Далее к передаче прибавляю текст и в начало и в конец. Получаю строку «HI 99123 LO». Проблема сохраняется — при увеличении длины переданной строки начинает резать последний символ.

Нашел ошибку
void loop()
<
if (vw_get_message(message, &messageLength)) // Если есть данные..

messageLength получает длину полученной строки. а в следующем цикле мы ее передаем как размер буфера (размер message) . в начале цикла надо заново инициализировать эту переменную
messageLength = VW_MAX_MESSAGE_LEN;

А можно как то без использования Arduino передать сигнал на приемник что бы при этом на приемнике светился светодиод?

К сожалению, без дополнительного контроллера не получится.

Источник

Arduino и радиомодули 433 МГц

Иногда создаваемые проекты требуют наличия беспроводной связи. Одним из самых простых и бюджетных решений для организации симплексной (односторонней) связи является использование радиомодулей с частотой 433 МГц. В этой статье мы разберём простой пример их применения совместно с Arduino.

Для реализации проекта из этой статьи нам потребуются следующие компоненты:

Для того, чтобы эти модули работали, необходимо припаять к каждому из них антенну, рекомендуемая длина – 17 см. Рабочее напряжение – до 12 вольт, но хватит и выхода Arduino на 5 вольт.

Дальность работы находится в прямой зависимости от величины напряжения.

Стоит заметить, что в городах дальность связи может быть снижена по причине забитости частоты 433 МГц – на этой частоте работают некоторые сигнализации, рации и т.п.

Также при использовании этих модулей с Arduino есть один неприятный момент – невозможность работы с сервоприводами посредством библиотеки “Servo”. Проблема решается использованием библиотеки “ServoTimer2“.

Итак, антенна припаяна, приступаем к подключению модулей. VCC обоих модулей подключаем к 5v, GND к одноимённому выводу Arduino. Можно запитать их от внешнего источника питания с повышенным напряжением для увеличения дальности.

К 12 выводу передающей платы подключаем вывод DATA передатчика, к 11 выводу принимающей платы – любой из двух выводов DATA приёмника.

Далее, нам потребуется скачать библиотеку VirtualWire:

Код для 433 МГц передатчика

После чего подключаем к компьютеру передающую плату и загружаем в неё следующий скетч:

Немного о том, что делает этот скетч. Мы будем отправлять переменную strMsg типа String командой vw_send. С этим типом проще работать, но перед отправкой нужно преобразовать его в массив символов командой toCharArray.

Все модули работают в одном диапазоне, поэтому приёмник будет получать данные ото всех передатчиков. Для того чтобы предотвратить получение лишней информации, в начале передаваемого сообщения будет записывать префикс, например, “z”.

Следующей частью сообщения отправим символ “c”, который может символизировать окончание выполнения какой-либо операции либо сигнал к выполнению команды приёмником, и число “123”, символизирующее её параметр.

Код для 433 МГц приемника

Настала очередь приёмника. Загружаем следующий скетч:

Источник

Радиомодули 433MHz RF Tx-Rx. Взаимодействие с Ардуино

Хотите добавить беспроводные возможности в ваш следующий проект Arduino, причем за меньшую цену, чем чашка кофе? Что ж, тогда модули передатчика и приемника 433 МГц для вас!

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

Обзор оборудования

Давайте подробнее рассмотрим модули передатчика и приемника 433 МГц.

Этот маленький модуль является передатчиком. Сердцем модуля является резонатор SAW, настроенный на работу в диапазоне 433.xx МГц. Есть переключающий транзистор и несколько пассивных компонентов, вот и все.

Когда на вход DATA поступает логическая 1, генератор начинает работать, генерируя постоянную РЧ несущую волну на частоте 433.xx МГц, а когда на входе DATA устанавливается логический 0, генератор останавливается. Этот метод известен как Amplitude Shift Keying, о котором мы вскоре поговорим подробнее.

Это приемный модуль. Хотя все выглядит сложным, но он так же просто, как модуль передатчика. Он состоит из радиочастотной схемы и пары операционных усилителей для усиления принимаемой несущей от передатчика. Усиленный сигнал подается на ФАПЧ (фазовая автоподстройка частоты), которая позволяет декодеру «выделить» поток цифровых битов, что обеспечивает лучшее декодирование и помехоустойчивость.

ASK — Amplitude Shift Keying

Как обсуждалось выше, для отправки цифровых данных по радиоканалу, эти модули используют технику, называемую Amplitude Shift Keying или ASK (амплитудная модуляция). Это когда амплитуда (то есть уровень) несущей волны (в нашем случае это сигнал 433 МГц) изменяется в ответ на входящий сигнал данных.

Это очень похоже на аналоговую технику амплитудной модуляции, с которой вы, возможно, знакомы, если вы собирали AM-радио. Иногда это называется двоичной амплитудной манипуляцией, потому что нам необходимо только два уровня. Вы можете представить это как переключатель ВКЛ / ВЫКЛ.

  • Для лог. 1 — несущая в полную силу
  • Для лог. 0 — несущая отключена

Амплитудная модуляция имеет преимущество в том, что она очень проста в реализации. На ее основе довольно просто спроектировать схему декодера. Также для ASK требуется меньшая полоса пропускания, чем другим методам модуляции, таким как FSK (частотная модуляция). Это одна из причин того дешевизны модулей.

Однако недостатком является то, что амплитудная модуляция подвержена помехам от других радиоустройств и фоновому шуму. Но пока вы обеспечиваете передачу данных на относительно медленной скорости, она может надежно работать в большинстве сред.

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

Давайте посмотрим на распиновку модулей передатчика и приемника RF 433 МГц.

  • DATA — принимает цифровые данные для передачи.
  • VCC — обеспечивает питание передатчика. Это может быть любое положительное постоянное напряжение от 3,5 до 12 В. Обратите внимание, что РЧ-выход пропорционален напряжению питания, т.е. чем выше напряжение, тем больше будет дальность.
  • GND — минус питания.
  • Антенна — это разъем для внешней антенны. Как обсуждалось ранее, вам понадобится припаять кусок проволоки длинной 17,3 см к этому контакту для улучшения дальности.

  • DATA — выводит полученные цифровые данные. Два центральных штифта внутренне связаны между собой, поэтому вы можете использовать любой из них для вывода данных.
  • VCC — обеспечивает питание приемника. В отличие от передатчика, напряжение питания для приемника должно быть 5 В.
  • GND — минус питания.
  • Антенна — это разъем для внешней антенны, который часто не обозначен. Это накладка в левом нижнем углу модуля, рядом с маленькой катушкой. Опять же, можно припаять кусок провода длинной 17,3 см к этому контакту для улучшения дальности.

Схема подключения передатчика и приемника 433 МГц к Arduino UNO

Теперь, когда мы знаем все о модулях, пришло время использовать их!

Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.

Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.

На следующем рисунке показана схема соединения.

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

Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.

Вот так должна выглядеть схема соединения для приемника.

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

RadioHead Library — универсальная библиотека для беспроводных модулей

Прежде чем мы начнем программировать, установим библиотеку RadioHead в Arduino IDE.

RadioHead — это библиотека, которая позволяет легко передавать данные между платами Arduino. Она настолько универсальна, что ее можно использовать для управления всеми видами устройств радиосвязи, включая наши модули на 433 МГц.

Библиотека RadioHead собирает наши данные, инкапсулирует их в пакет данных, который включает в себя CRC (проверку циклически избыточного кода), а затем отправляет его с необходимой преамбулой и заголовком на другую Arduino. Если данные получены правильно, принимающая плата Arduino проинформирует о наличии доступных данных и приступит к их декодированию и выполнению.

Пакет RadioHead формируется следующим образом: 36-битный поток из пар «1» и «0», называемый «обучающей преамбулой», отправляется в начале каждой передачи. Эти биты необходимы приемнику для регулировки его усиления до получения фактических данных. Затем следует 12-битный «Начальный символ», а затем фактические данные (полезная нагрузка).

Последовательность проверки или CRC добавляется в конец пакета, который пересчитывается RadioHead на стороне приемника, и если проверка CRC верна, приемное устройство получает предупреждение. Если проверка CRC не пройдена, пакет отбрасывается.

Весь пакет выглядит примерно так:

Скетч Arduino для радиочастотного передатчика 433 МГц

В нашем эксперименте мы отправим простое текстовое сообщение от передатчика к получателю. Будет полезно понять, как использовать модули, и это может послужить основой для более практических экспериментов и проектов.

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

Это довольно короткий набросок, но это все, что вам нужно для передачи сигнала.

Код начинается с подключения библиотеки RadioHead ASK. Мы также должны подключить библиотеку SPI Arduino, так как от нее зависит библиотека RadioHead.

Далее нам нужно создать объект ASK, чтобы получить доступ к специальным функциям, связанным с библиотекой RadioHead ASK.

В функции setup() нам нужно инициализировать объект ASK.

В функции loop() мы начинаем с подготовки сообщения. Это простая текстовая строка, которая хранится в char с именем msg. Знайте, что ваше сообщение может быть любым, но не должно превышать 27 символов для лучшей производительности. И обязательно посчитайте количество символов в нем, так как вам понадобится это количество в коде получателя. В нашем случае у нас 11 символов.

Затем сообщение передается с использованием функции send(). Он имеет два параметра: первый — это массив данных, а второй — количество байтов (длина данных), подлежащих отправке. За send() функцией обычно следует waitPacketSent() функция, которая ожидает завершения передачи любого предыдущего передаваемого пакета. После этого код ждет секунду, чтобы дать нашему приемнику время разобраться во всем.

Скетч Arduino для радиочастотного приемника 433 МГц

Подключите приемник Arduino к компьютеру и загрузите следующий код:

Как и код передатчика, код приемника начинается с подключения библиотек RadioHead и SPI и создания объекта ASK.

В setup() мы инициализируем объект ASK, а также настраиваем последовательный монитор, так как мы будем просматривать наше полученное сообщение.

В функции loop() мы создаем буфер размером передаваемого сообщения. В нашем случае это 11, помните? Вам нужно будет настроить это, чтобы соответствовать длине вашего сообщения. Обязательно укажите все пробелы и знаки препинания, поскольку все они считаются символами.

Далее мы вызываем функцию recv(). Это включает приемник, если он еще не включен. Если доступно сообщение, оно копирует сообщение в свой первый буфер параметров и возвращает true, иначе возвращает false. Если функция возвращает true, код вводит оператор if и печатает полученное сообщение на мониторе последовательного порта.

Затем мы возвращаемся к началу цикла и делаем все заново.

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

Увеличение дальности радиочастотных модулей 433 МГц

Антенна, которую вы используете как для передатчика, так и для приемника, может реально повлиять на дальность передачи, которую вы сможете получить с помощью этих радиочастотных модулей. На самом деле без антенны вы сможете общаться на расстоянии не более метра.

При правильной конструкции антенны вы сможете общаться на расстоянии до 50 метров. Конечно, это на открытом пространстве. Ваш диапазон в помещении, особенно через стены, будет слегка ослаблен.

Антенна не должна быть сложной. Простой кусок одножильного провода может послужить отличной антеной для передатчика и приемника. Диаметр антенны вряд ли имеет какое-либо значение, если длина антенны правильная.

Самая эффективная антенна имеет ту же длину, что и длина волны, для которой она используется. Для практических целей достаточно половины или четверти этой длины.

Длина волны частоты рассчитывается как:

Длина волны = скорость распространения (v) / частота (f)

В воздухе скорость передачи равна скорости света, которая, если быть точным, составляет 299 792 458 м/с. Итак, для частоты 433 МГц длина волны равна:

Длина волны = 299 792 458 м/с / 433 000 000 Гц = 0,6924 м

Полноволновая антенна длиной 69,24 см довольно длинная, ее использование не очень удобно. Вот почему мы выберем четвертьволновую антенну, длина которой составляет 17,3 см.

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

Даже 17,3 см антенна может показаться неудобной в вашем крошечном проекте Arduino. Но НЕ соблазняйтесь наматывать антенну, чтобы сделать ее более компактной, так как это серьезно повлияет на дальность действия. Прямая антенна всегда лучше!

Скачать библиотеку RadioHead (402,8 KiB, скачано: 793)

Источник

Adblock
detector