Описание
Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?
- Неприхотливы к питанию
- Потребляют небольшой ток
- Занимают один пин МК
- В два раза дешевле
- Выше дальность связи при той же мощности
- Более высокая проникающая способность
Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.
Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.
Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе. Правые модули, несмотря на самый высокий ценник, работают хуже всех и к покупке не рекомендуются.
Ток потребления модулей:
- FS1000A : передача 12 мА, холостой 10 мкА
- MX-RM-5V : 3.7 мА
- SYN115 : передача 14 мА, холостой 0.5 мкА
- SYN480R : 4.5 мА
Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:
RadioHead Library — универсальная библиотека для беспроводных модулей
Прежде чем мы начнем программировать, установим библиотеку RadioHead в Arduino IDE.
RadioHead — это библиотека, которая позволяет легко передавать данные между платами Arduino. Она настолько универсальна, что ее можно использовать для управления всеми видами устройств радиосвязи, включая наши модули на 433 МГц.
Библиотека RadioHead собирает наши данные, инкапсулирует их в пакет данных, который включает в себя CRC (проверку циклически избыточного кода), а затем отправляет его с необходимой преамбулой и заголовком на другую Arduino. Если данные получены правильно, принимающая плата Arduino проинформирует о наличии доступных данных и приступит к их декодированию и выполнению.
Пакет RadioHead формируется следующим образом: 36-битный поток из пар «1» и «0», называемый «обучающей преамбулой», отправляется в начале каждой передачи. Эти биты необходимы приемнику для регулировки его усиления до получения фактических данных. Затем следует 12-битный «Начальный символ», а затем фактические данные (полезная нагрузка).
Последовательность проверки или CRC добавляется в конец пакета, который пересчитывается RadioHead на стороне приемника, и если проверка CRC верна, приемное устройство получает предупреждение. Если проверка CRC не пройдена, пакет отбрасывается.
Весь пакет выглядит примерно так:
Передатчик WL102-341
Модуль передатчика WL102-341 работает на частоте 433 мГц и имеет мощность передачи более 11 дБм. Напряжение питания может варьироваться в пределах от 1.8 до 3.6 В. В режиме передачи данных, потребление при низком логическом уровне на линии DAT составляет 5 мА, при высоком 17 мА, в отключенном состоянии (низкий уровень на линии EN) потребление менее 1 мкА.
Технические характеристики WL102-341
- Поддержка ASK/ООК модуляции: мощность передачи больше 11dBm;
- Частота: 433.92 МГц;
- Диаппазрон входного напряжения: от 1.8 В до 3.6 В;
- Ток потребления: 17.0 mA;
- Ток покоя: 1 uA;
- Дальность передачи: до 200 м;
- Скорость передачи данных: до 20 кГц;
- Температурный диапазон: от -40 до +85 ° C;
- Размер: 16 × 12 × 1 (мм)
- Разем под внешнюю антену.
Распиновка передатчика WL102-341
Модуль передатчика WL102-341 имеет четыре вывода: «+» и «—» для подключения питания, EN — линия включение передатчика, DAT — вход для передачи данных. На данном модуле линия EN неактивна, так как на плате установлена перемычка, соединяющая 1-й вывод микросхемы (EN) с линией питания, то есть модуль постоянно работал при подаче питания. Можно отпаять перемычку, чтобы иметь возможность управления передатчиком.
Вывод/Пин | Описание |
---|---|
-/GND | Земля (Ground) |
+/VIN | Питание (Voltage Input) |
DAT | Вход для передачи данных (Data Input) |
EN | Линия включение передатчика (Enable) |
TOU | Антенна |
дешевый 315, 345 и 433.92 МГц ASK приемопередатчик с ФАПЧ с дробным коэффициентом деления
Отличительные особенности:
- Однополярное питание от +2.1 до +3.6 В или от +4.5 до +5.5 В
- Однокристальный приемопередатчик
- Предварительно настроенная при производстве частота (не требуется последовательный интерфейс)
- ASK/OOK модуляция
- Выходная мощность при работе на 50 Ом нагрузку +10 dBm
- Интегрированный коммутатор прием/передача
- Встроенные ФАПЧ приемника и передатчика, ГУН и следящий фильтр
- Подавление помех по зеркальному каналу > 45dB
- Типовая чувствительность приемника -114 dBm
- Выбираемая внешним фильтром ширина полосы пропускания тракта ПЧ
- Ток потребления в режиме передачи < 12.5 мА
- Ток потребления в режиме приема < 6.7 мА
- Ток потребления в дежурном режиме <800 нА
- Время запуска <250 мкс
- Миниатюрный 32 контактный тонкий QFN корпус
Области применения:
- Бесконтактные ключи
- Ключи для гаражных ворот
- Бытовая техника
- Локальные телеметрические системы
- Системы дистанционного управления
- Выносные датчики
- Системы обеспечения безопасности
- Дымовые сигнализаторы
Типовая схема включения MAX7030:
Назначение выводов MAX7030:
Общее описание:
MAX7030 — приемопередатчик с ФАПЧ с дробным коэффициентом деления, работающий от кварцевого резонатора и предназначенный для передачи и приема ASK/OOK данных на установленной при производстве частоте 315, 345 или 433.92 МГц со скоростью передачи данных до 33 кбит/с (при использовании манчестерского кода) или до 66 кбит/с (при использовании кода NRZ). Этот прибор имеет типовую выходную мощность +10 dBm при работе на 50 Ом нагрузку, а чувствительность — 114 dBm. MAX7030 имеет отдельные выводы выхода передатчика и входа приемника (PAOUT и LNAIN), а кроме того имеет встроенный РЧ коммутатор, позволяющий подключать эти выводы к приемопередающей антенне.
MAX7030 формирует выходной сигнал при помощи ФАПЧ с 16- битным дробным коэффициентом деления, а приемник использует ФАПЧ с целочисленным коэффициентом деления. Такая гибридная архитектура устраняет необходимость использовать отдельные кварцевые резонаторы для приемника и передатчика, который должен быть на 10.7 МГц выше, чем сигнал приемника. Сохранение установленного коэффициента деления ФАПЧ приемника позволяет избежать более высоких требований к ФАПЧ передатчика. Все времязадающие компоненты встроены, а из внешних требуется только кварцевый резонатор, 10.7 МГц фильтр ПЧ и несколько дискретных элементов.
MAX7030 доступен в маленьком 5×5 мм 32 контактном тонком QFN корпусе и имеет рабочий температурный диапазон от -40°C до +125°C.
Документация:
753 Kb Engl Описание микросхемы |
Главная —
Микросхемы —
DOC —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи
Использование
// ========= Gyver433_TX ========= void sendData(T &data); // отправить данные любого типа (CRC добавляется автоматически) void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется) // ========= Gyver433_RX ========= // приём в прерывании void tickISR(); // тикер приёма для вызова в прерывании по CHANGE uint8_t tickISRraw(); // ручной приём в прерывании по CHANGE. Вернёт 1 (начало приёма), 2 (принят байт), 3 (конец пакета) // приём в loop uint16_t tick(); // неблокирующий приём. Вернёт количество успешно принятых байт uint16_t tickWait(); // блокирующий приём. Вернёт количество успешно принятых байт bool readData(T &data); // прочитает буфер в любой тип данных (в указанную переменную) uint16_t getSize(); // получить размер принятых данных uint16_t gotData(); // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx) uint8_t getRSSI(); // получить качество приёма (процент успешных передач 0.. 100) uint8_t buffer[]; // доступ к буферу приёма uint8_t byteBuf; // доступ к буферу принятого байта // ============= CRC ============= // можно использовать встроенные функции для генерации байта CRC для ручной упаковки пакетов uint8_t G433_crc8(uint8_t *buffer, uint8_t size); // ручной CRC8 uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR // ====== ДЕФАЙНЫ-НАСТРОЙКИ ====== // вызывать перед подключением библиотеки #define G433_FAST // короткая синхронизация для зелёных модулей #define G433_MEDIUM // средняя синхронизация при отправке на SYN480R ЧАЩЕ 400мс (активно по умолчанию) #define G433_SLOW // длинная синхронизация при отправке на SYN480R РЕЖЕ 400мс #define G433_SPEED 1000 // [RX/TX] скорость, должна быть одинакова на RX и TX, 100-10000 бит/с, по умолч. 2000 бит/с #define G433_RSSI_COUNT 8 // количество успешно принятых пакетов для расчёта RSSI (по умолч. 8) #define G433_CUT_RSSI // убрать расчёт RSSI из кода (сэкономит чуть памяти)
Работа приёмника без прерываний
Для приёма данных достаточно вызывать в основном цикле метод , он сам опрашивает пин радио.
- Если в программе есть блокирующие места и loop() выполняется с задержками — будет потеря данных
- Для более надёжного приёма рекомендуется вызывать , она блокирует выполнение кода на время приёма.
Работа приёмника с прерываниями
Рекомендуется использовать приём в прерывании по CHANGE, для этого нужно вызывать в нём .
Тогда приём будет асинхронный и будет работать даже в загруженной программе.
Если стандартных пинов прерываний не хватает, можно задействовать PCINT. Вручную или с помощью библиотеки https://github.com/NicoHood/PinChangeInterrupt
Принципиальная схема
Таких устройств продается много разных моделей и торговых марок. Вот одно из них, — ZAMEL-ST-919. Схема данного устройства показана на рисунках 1 и 2. На рисунке 1 приводится схема беспроводной кнопки.
Схема весьма схожа со схемами брелков для недорогих автомобильных сигнализаций. Но в отличие от них она передает только одну команду, вернее даже не команду, а идентификационный код, который в схеме приемного узла (рис. 2) используется как командный.
При нажатии кнопки SW1 подается питание на схему кнопки. Микросхема CIR2262BM представляет собой кодер для передачи двух команд и идентификационного кода.
Идентификационный код задается системой перемычек, подключаемых к выводам с первого по восьмой. А для команд служат выводы 10 и 11, которые в данной схеме не используются.
Поэтому при нажатии SW1 передатчик передает только идентификационный код, данные которого передаются посредством маломощного передатчика на транзисторах Q1 и Q2, работающего на частоте 433,92 МГц.
Рис. 1. Принципаильная схема радиопередатчика команд.
Схема приемника показана на рисунке 2. Сигнал принимается сверхрегенеративным приемным трактом на транзисторах Q1-Q4 и поступает на декодер на микросхеме CIR2267GM.
Данная микросхема предназначена для приема кода идентификации и декодирования двух команд. Код идентификации, с которым ИМС сравнивает принимаемый задается перемычками на её выводах с первого по восьмой. На выводе 15 появляется единица при положительном результате сравнения идентификационного кода принятого, с тем что задан перемычками.
Рис. 2. Принципиальная схема приемника команд радиоуправления.
А выводы 11 и 10 служат для выходов команд. Эти выводы в данной схеме не используются. В качестве выходного использует вывод 15 (идентификации), единица с которого при приеме сигнала от своей беспроводной кнопки подается на звуковой модуль TR6210A, воспроизводящий при этом музыкальный фрагмент.
ASK — Amplitude Shift Keying
Как обсуждалось выше, для отправки цифровых данных по радиоканалу, эти модули используют технику, называемую Amplitude Shift Keying или ASK (амплитудная модуляция). Это когда амплитуда (то есть уровень) несущей волны (в нашем случае это сигнал 433 МГц) изменяется в ответ на входящий сигнал данных.
Это очень похоже на аналоговую технику амплитудной модуляции, с которой вы, возможно, знакомы, если вы собирали AM-радио. Иногда это называется двоичной амплитудной манипуляцией, потому что нам необходимо только два уровня. Вы можете представить это как переключатель ВКЛ / ВЫКЛ.
- Для лог. 1 — несущая в полную силу
- Для лог. 0 — несущая отключена
Амплитудная модуляция имеет преимущество в том, что она очень проста в реализации. На ее основе довольно просто спроектировать схему декодера. Также для ASK требуется меньшая полоса пропускания, чем другим методам модуляции, таким как FSK (частотная модуляция). Это одна из причин того дешевизны модулей.
Однако недостатком является то, что амплитудная модуляция подвержена помехам от других радиоустройств и фоновому шуму. Но пока вы обеспечиваете передачу данных на относительно медленной скорости, она может надежно работать в большинстве сред.
Блок питания 0…30В/3A
Набор для сборки регулируемого блока питания…
Подробнее
Гусеничное шасси для робота
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Сегодня хочу представить Вам на обозрение свое видение гусеничного шасси для робот. Года три искал готового решения, пока ряд событий сего года не подтолкнули меня к изучению и применению в быту САПР.
И так, спустя 3 месяца проектирования, печати, потом еще раз проектирования и печати, работа напильником, шуруповертом,ножовкой, и все это кривыми руками, родилось вот такое чудо:
Работы еще много, идей тоже, в отличии от свободного времени.Видео первых заездов не выкладываю пока, так как драйверы оказались с браком и двигается он только прямо, ну это отдельная история. Как только прибудут новые драйвера обязательно поделюсь с вами.
Печатал на TEVO Black Widow, принтер долгое время простаиввал, в связи с отсутствием свободного времени и вдохновения. Детали печатались PETG, ABS и SBS от ФДпласта с качеством 0.2мм.
Нуждаюсь в любой критике от сообщества. Любые вопросы, в любом виде, предложения о внесении конструкционных изменений, всегда ЗА.
Спасибо Вам за уделенное время.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Источник
Примеры
Остальные примеры смотри в examples!
Отправка
#include <Gyver433.h> Gyver433_TX<2> tx; // указали пин void setup() { } char data[] = "Hello from #xx"; // строка для отправки byte count = ; // счётчик для отправки void loop() { // добавляем счётчик в строку data = (count / 10) + '0'; data = (count % 10) + '0'; if (++count >= 100) count = ; tx.sendData(data); delay(100); }
Приём в прерывании
#include <Gyver433.h> Gyver433_RX<2, 20> rx; // указали пин и размер буфера void setup() { Serial.begin(9600); attachInterrupt(, isr, CHANGE); // прерывание пина радио по CHANGE } // спец. тикер вызывается в прерывании void isr() { rx.tickISR(); } void loop() { if (rx.gotData()) { // если успешно принято больше 0 Serial.write(rx.buffer, rx.size); // выводим Serial.println(); } delay(50); // имитация загруженного кода }
Схема доработки
В принципе, в схеме есть почти все, чтобы из радиозвонка сделать двухкомандную систему радиоуправления. Для этого в схему передатчика (беспроводной кнопки) нужно внести изменения, — добавить две кнопки SW2 и SW3 как это показано на схеме на рисунке 3. Кнопки включают между выводами 10, 11 и шиной питания микросхемы.
Теперь, чтобы передать команду нужно имеющейся ранее кнопкой SW1 включить питание, и одновременно с этим, нажать кнопку SW2 или SW3 чтобы передать команду. Кнопку SW1 можно заменить выключателем, которым подавать питание на время работы с системой радиоуправления.
В схему приемника тоже нужно внести изменения. В частности, необходимо вывести выводы 11 и 10 микросхемы CIR2267GM на какое-то исполнительное устройство, например, на два транзисторных ключа, как это показано на рис. 4. При приеме команды будет открываться соответствующий транзисторный ключ.
Рис. 3. Модифицированный вариант передатчика команд.
Рис. 4. Модифицированный вариант приемника команд.
В коллекторные цепи транзисторных ключей можно включить обмотки маломощных электромагнитных реле, светодиоды оптопар или просто резисторы для согласования логических уровней данной схемы, с внешней цифровой схемой, которая принимает сигнал управления, например, схемой охранного устройства или другого оборудования.
Если звуковое сопровождение приема команд не нужно, можно просто отключить динамик звонка или вообще его удалить из схемы.
Горчук Н. В. РК-2015-08.
Радиореле 433 МГц.
Пока нет электричества на стройке, используем бензогенератор. Для экономии бензина это выглядит примерно так: прибежал запустил бензогенератор, побежал в дом перемешал шпаклевку дрелью или отпилил что-нибудь болгаркой, побежал обратно выключать генератор.
Чтобы не бегать обратно каждый раз, а в место этого просто нажать на радиокнопку, мне и пришла эта идея с радиореле 433 МГц.
Радиореле может работать в нескольких предустановленных режимах:
- (1) Включено, пока удерживается кнопка. Кнопка отпущена — выключено.
- (2) Нажал кнопку — включено. Нажал еще раз выключено.
- (3) На одну кнопку включается. На другую выключается.
- (4) Режим с задержкой включения на 5 секунд, (5) 10 секунд , (6) 15 секунд.
Также можно «привязать» к устройству несколько радиопультов (50 штук).
Устройство может работать с разными радиокнопками на 433 МГц.
Я заказывал себе с такой радиокнопкой здесь. Есть выдвижная антенна. Имеется сдвижная защитная шторка, чтобы случайно не нажать на кнопку. Там же можно заказать и просто радиореле без пульта, если он у вас уже есть.
Еще есть варианты с другими радиокнопками. Например здесь можно заказать устройство с радиопультом, как на фото ниже.
Скетч Arduino для радиочастотного передатчика 433 МГц
В нашем эксперименте мы отправим простое текстовое сообщение от передатчика к получателю. Будет полезно понять, как использовать модули, и это может послужить основой для более практических экспериментов и проектов.
Вот скетч, который мы будем использовать для нашего передатчика:
// Подключаем библиотеку RadioHead Amplitude Shift Keying #include <RH_ASK.h> // Подключаем библиотеку SPI Library #include <SPI.h> // Создаем объект управления смещением амплитуды RH_ASK rf_driver; void setup() { // Инициализируем объект ASK rf_driver.init(); } void loop() { const char *msg = "Hello World"; rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000); }
Это довольно короткий набросок, но это все, что вам нужно для передачи сигнала.
Код начинается с подключения библиотеки RadioHead ASK. Мы также должны подключить библиотеку SPI Arduino, так как от нее зависит библиотека RadioHead.
#include <RH_ASK.h> #include <SPI.h>
Далее нам нужно создать объект ASK, чтобы получить доступ к специальным функциям, связанным с библиотекой RadioHead ASK.
// Создаем объект управления смещением амплитуды RH_ASK rf_driver;
В функции setup() нам нужно инициализировать объект ASK.
// Инициализируем объект ASK rf_driver.init();
В функции loop() мы начинаем с подготовки сообщения. Это простая текстовая строка, которая хранится в char с именем msg. Знайте, что ваше сообщение может быть любым, но не должно превышать 27 символов для лучшей производительности. И обязательно посчитайте количество символов в нем, так как вам понадобится это количество в коде получателя. В нашем случае у нас 11 символов.
// Готовим сообщение const char *msg = "Hello World";
Затем сообщение передается с использованием функции send(). Он имеет два параметра: первый — это массив данных, а второй — количество байтов (длина данных), подлежащих отправке. За send() функцией обычно следует waitPacketSent() функция, которая ожидает завершения передачи любого предыдущего передаваемого пакета. После этого код ждет секунду, чтобы дать нашему приемнику время разобраться во всем.
rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000);
Схема подключения передатчика и приемника 433 МГц к Arduino UNO
Теперь, когда мы знаем все о модулях, пришло время использовать их!
Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.
Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.
На следующем рисунке показана схема соединения.
После подключения передатчика вы можете перейти к приемнику. Подключение приемника так же просто, как и передатчика.
Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.
Вот так должна выглядеть схема соединения для приемника.
Теперь, когда передатчик и приемник подключены, нам нужно написать код и отправить его на соответствующие платы Arduino. Поскольку у вас, вероятно, только один компьютер, мы начнем с передатчика. Как только код будет загружен, мы перейдем к приемнику. Arduino, к которому подключен передатчик, может питаться от источника питания или батареи.
Подключение радиореле 433 Мгц к бензогенератору.
Итак режим запрограммирован. Один раз нажали включилось, еще раз нажали отключилось.
Для питания нашего устройства нам понадобиться источник питания на 12 вольт. Ток потребления очень низкий, подойдет практически любой источник постоянного напряжения на 12 вольт.
Размер платы примерно 6 на 3 см.
На плате радиореле все выходы подписаны и все интуитивно понятно. Итак ко входу питания естественно подаем 12 вольт с нашего блока питания.
Берем нормально разомкнутые контакты реле и подключаем их параллельно кнопке зажигания бензогенератора.
Работает так:
- Если нам не нужно радиоуправления, то ничего не делаем. Подключены нормально разомкнутые контакты и они не влияют на работу бензогенератора.
- Если хотим выключить бензогенератор радиокнопкой делаем так. Нажимаем переключатель зажигания на бензогенераторе и заводим ручным стартером (в общем запускаем как делаем это обычно). Затем нажимаем кнопку на радиопульте, реле радиомодуля переключается и подключенные к переключателю на генераторе контакты замыкаются. Потом переключаем переключатель на бензогенераторе. Бензогенератор не глохнет так как реле замыкает контакты. Теперь при нажатии на кнопку радиопульта, генератор выключиться.
Распиновка передатчика и приемника 433 МГц
Давайте посмотрим на распиновку модулей передатчика и приемника RF 433 МГц.
DATA — принимает цифровые данные для передачи.
VCC — обеспечивает питание передатчика. Это может быть любое положительное постоянное напряжение от 3,5 до 12 В. Обратите внимание, что РЧ-выход пропорционален напряжению питания, т.е. чем выше напряжение, тем больше будет дальность.
GND — минус питания.
Антенна — это разъем для внешней антенны. Как обсуждалось ранее, вам понадобится припаять кусок проволоки длинной 17,3 см к этому контакту для улучшения дальности.
- DATA — выводит полученные цифровые данные. Два центральных штифта внутренне связаны между собой, поэтому вы можете использовать любой из них для вывода данных.
- VCC — обеспечивает питание приемника. В отличие от передатчика, напряжение питания для приемника должно быть 5 В.
- GND — минус питания.
- Антенна — это разъем для внешней антенны, который часто не обозначен. Это накладка в левом нижнем углу модуля, рядом с маленькой катушкой. Опять же, можно припаять кусок провода длинной 17,3 см к этому контакту для улучшения дальности.
Обзор оборудования
Давайте подробнее рассмотрим модули передатчика и приемника 433 МГц.
Этот маленький модуль является передатчиком. Сердцем модуля является резонатор SAW, настроенный на работу в диапазоне 433.xx МГц. Есть переключающий транзистор и несколько пассивных компонентов, вот и все.
Когда на вход DATA поступает логическая 1, генератор начинает работать, генерируя постоянную РЧ несущую волну на частоте 433.xx МГц, а когда на входе DATA устанавливается логический 0, генератор останавливается. Этот метод известен как Amplitude Shift Keying, о котором мы вскоре поговорим подробнее.
Это приемный модуль. Хотя все выглядит сложным, но он так же просто, как модуль передатчика. Он состоит из радиочастотной схемы и пары операционных усилителей для усиления принимаемой несущей от передатчика. Усиленный сигнал подается на ФАПЧ (фазовая автоподстройка частоты), которая позволяет декодеру «выделить» поток цифровых битов, что обеспечивает лучшее декодирование и помехоустойчивость.
Скетч Arduino для радиочастотного приемника 433 МГц
Подключите приемник Arduino к компьютеру и загрузите следующий код:
// Подключаем библиотеку RadioHead Amplitude Shift Keying #include <RH_ASK.h> // Подключаем библиотеку SPI Library #include <SPI.h> // Создаем объект управления смещением амплитуды RH_ASK rf_driver; void setup() { // Инициализируем объект ASK rf_driver.init(); // Настройка Serial Monitor Serial.begin(9600); } void loop() { // Установить размер буфера ожидаемого сообщения uint8_t buf; uint8_t buflen = sizeof(buf); // Проверка правильности размера полученного пакета if (rf_driver.recv(buf, &buflen)) { // Сообщение получено с правильной контрольной суммой Serial.print("Message Received: "); Serial.println((char*)buf); } }
Как и код передатчика, код приемника начинается с подключения библиотек RadioHead и SPI и создания объекта ASK.
#include <RH_ASK.h> #include <SPI.h> RH_ASK rf_driver;
В setup() мы инициализируем объект ASK, а также настраиваем последовательный монитор, так как мы будем просматривать наше полученное сообщение.
rf_driver.init(); Serial.begin(9600);
В функции loop() мы создаем буфер размером передаваемого сообщения. В нашем случае это 11, помните? Вам нужно будет настроить это, чтобы соответствовать длине вашего сообщения. Обязательно укажите все пробелы и знаки препинания, поскольку все они считаются символами.
uint8_t buf; uint8_t buflen = sizeof(buf);
Далее мы вызываем функцию recv(). Это включает приемник, если он еще не включен. Если доступно сообщение, оно копирует сообщение в свой первый буфер параметров и возвращает true, иначе возвращает false. Если функция возвращает true, код вводит оператор if и печатает полученное сообщение на мониторе последовательного порта.
if (rf_driver.recv(buf, &buflen)) { Serial.print("Message Received: "); Serial.println((char*)buf); }
Затем мы возвращаемся к началу цикла и делаем все заново.
После загрузки скетча откройте серийный монитор. Если все в порядке, вы должны увидеть ваше сообщение.
Примеры
Рассмотрим тестовый пример, который отправляет строку Hello from #<счётчик>:
Отправка
#include <Gyver433.h> Gyver433_TX<2> tx; // указали пин void setup() { } char data[] = "Hello from #xx"; // строка для отправки byte count = 0; // счётчик для отправки void loop() { // добавляем счётчик в строку data = (count / 10) + '0'; data = (count % 10) + '0'; if (++count >= 100) count = 0; tx.sendData(data); delay(100); }
Приём
#include <Gyver433.h> Gyver433_RX<2, 20> rx; // указали пин и размер буфера void setup() { Serial.begin(9600); attachInterrupt(0, isr, CHANGE); // прерывание пина радио по CHANGE } // спец. тикер вызывается в прерывании void isr() { rx.tickISR(); } void loop() { if (rx.gotData()) { // если успешно принято больше 0 Serial.write(rx.buffer, rx.size); // выводим Serial.println(); } }
Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.