Содержание
Обзор беспроводного передатчика и приемника 433 МГц
Для разработчикам Arduino-устройств существует множество модулей для организации различных технологий беспроводной связи: модули WiFi, GSM/GPRS, IR, Bluetooth, радиомодули для работы в различных частотных диапазонах. Комплект радиомодулей : передатчик (FS1000A) и приемник (MX-RM-5V), предназначен для передачи данных по радиоканалу на частоте 433 МГц. Указанное производителем расстояние уверенного приема 50-100 м в пределах прямой видимости (в зависимости от условий связи и напряжения питания), которое можно увеличить подключением антенн к передатчику и приёмнику. В качестве простейшей антенны можно использовать кусок провода длиной 17 см. Преимуществом данного вида ридиомодулей является их дешевизна и простота подключения к платам Арудино. К недостаткам отнесем отсутствие обратной связи, низкую скорость передачи и наличие шумов от большого количества других устройств (радиолюстр, радиорозеток, брелков, радиоуправляемых моделей), работающих на этой частоте.Технические характеристики модуля
- Напряжение питания передатчика: 3-12 В
- Напряжение питания приемника: 5 В
- Несущая частота: 433 МГц
- Потребляемый ток передатчиков: 8 мА
- Потребляемый ток приемником: 4,5 мА
- Чувствительность приемника: −106…-110 дБм
- Выходная мощность передатчика: 32 мВт
- Макс пропускная способность передатчика: 8 кб/сек
- Макс пропускная способность приемника: 5 кб/сек
- Диапазон рабочих температур: −20…+80 °C
Подключение
Передатчик FS1000A имеет 3 вывода и контакт для подпайки антенны (рисунок 1):- VCC — (питание 3-12 В);
- GND — (земля).
- DATA — вход для модуляции данных;
- ANT — антенна.
Рисунок 1. Контакты передатчика FS1000A
Передатчик собран на двух транзисторах, модуляция сигнала амплитудная, контакт ATAD является входом для модуляции данных, высокий логический уровень на этом выводе включает передатчик. Приемник MX-RM-5V имеет 4 вывода и контакт для подпайки антенны (рисунок 2):- VCC — (питание 3-12 В);
- GND — (земля).
- DATA — вход для модуляции данных;
- ANT — антенна.
Рисунок 2. Контакты приемника MX-RM-5V
- VCC — (питание 5 В);
- GND — (земля).
- DATA — вход данных;
- ANT — антенна.
Пример использования
Обычно передатчик (FS1000A) и приемник (MX-RM-5V) используют для передачи данных с одного Arduino-устройства на другое Arduino-устройствo. Но это не единственное их применение. Большое количество бытовых устройств (радиолюстры, радиорозетки, брелки), работают на частоте 433 МГц, и можно создавать с помощью данных модулей нестандартные устройства для управления бытовыми устройствами. Рассмотрим пример создания самодельного пульта для управления радиорозетками UNIEL (рисунок 3). Если количества кнопок идущего в комплекте пульта не хватает, создадим пульт управления радиорозетками UNIEL на Arduino.Рисунок 3. Радиорозетки UNIEL
Нам понадобятся следующие детали:- плата Arduino UNO
- плата прототипирования
- передатчик FS1000A
- клавиатура 4x4
- соединительные провода
- приемник MX-RM-5V
Рисунок 4. Установка кодов группы и индивидуальных кодов для радиорозеток.
Прежде чем управлять радиорозетками с платы Arduino, необходимо получить данные о протоколе передачи данных между пультом и розетками. Для этого нам и пригодится приемник MX-RM-5V. Соберем схему, показанную на рис. 5.Рисунок 5. Схема подключения приемника MX-RM-5V к плате Arduino.
В итоге получаем:
Рисунок 6. Схема в сборе.
Загрузим на плату Arduino скетч из листинга 1 –пример из библиотеки RCswitch – ReceiveDemo_Advanced. Листинг 1#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(),mySwitch.getReceivedRawdata(), mySwitch.getReceivedProtocol()); mySwitch.resetAvailable(); } }После загрузки скетча, открываем монитор последовательного порта Arduino IDE, нажимаем кнопки пульта и видим, что приемник принимает данные с пульта (рисунок 8). Для написания следующего скетча (пульт управления радиорозетками UNIEL на Arduino) нам понадобятся следующие параметры:
- Decimal – 24 Bit;
- PulseLength – 312 microseconds;
- Protocol – 1.
Рисунок 7. Обработка данных со стандартного пульта UNIEL.
Теперь у нас все есть для создания своего пульта на Arduino для управления радиорозетками. Соберем схему согласно рис. 8.Рисунок 8. Схема соединений для самодельного пульта для управления радиорозетками UNIEL
Получаем следующие:Рисунок 9. Схема в сборе.
Загружаем на плату Arduino скетч из листинга 2. В скетче используем библиотеки RCswitch и Keypad (для работы с клавиатурой). Мы можем назначать розеткам любую группу и любой код. Нажатие на клавишу вызывает изменение состояние радиорозетки (включение/выключение). Листинг 2#include <Keypad.h> const byte ROWS = 4; //4 rows const byte COLS = 4; //4 columns char keys[ROWS][COLS] = { {'1','2','3','a'}, {'4','5','6','b'}, {'7','8','9','c'}, {'*','0','#','d'} }; byte rowPins[ROWS] = {13, 12, 11, 10}; // контакты row byte colPins[COLS] = {7, 6, 5, 4}; //контакты row Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); // группы отправки по RF char kodGroup[][6] = {"00001","00001","00001","00001","00001", "00010","00010","00010","00010","00010", "00011","00011","00011","00011","00011", "00100" }; // коды отправки по RF char kodModule[][6] = {"10000","01000","00100","00010","00001", "10000","01000","00100","00010","00001", "10000","01000","00100","00010","00001", "10000","01000","00100","00010","00001", "10000" }; // состояние розеток int stat[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // для считывания нажатой клавиши char key; void setup() { // запуск последовательного порта Serial.begin(9600); // радиомодуль mySwitch.enableTransmit(10); mySwitch.setPulseLength(312); mySwitch.setProtocol(1); // выключить все розетки for(int i=0;i<16;i++) mySwitch.switchOff(kodGroup[i], kodModule[i]); } void loop() { // проверка на нажатие key = keypad.getKey(); if(key) { // если нажатие Serial.println(key); doForKey(key); } } // обработка нажатия кнопки void doForKey(char key) { int ind=16; switch(key) { case '1': ind=0; break; case '2': ind=1; break; case '3': ind=2; break; case '4': ind=3; break; case '5': ind=4; break; case '6': ind=5; break; case '7': ind=6; break; case '8': ind=7; break; case '9': ind=8; break; case '*': ind=9; break; case '0': ind=10; break; case '#': ind=11; break; case 'a': ind=12; break; case 'b': ind=13; break; case 'с': ind=14; break; case 'd': ind=15; break; default: break; } // изменить состояние розетки stat[ind]=1-stat[ind]; // отправка кодов if(stat[ind]==1) // включить mySwitch.switchOn(kodGroup[ind], kodModule[ind]); else // выключить mySwitch.switchOff(kodGroup[ind], kodModule[ind]); }
Часто задаваемые вопросы FAQ
1. Нет связи между модулями- Проверьте правильность подключения модулей приемника и передатчика.
- Подпаяйте к приемнику и передатчику антенну длиной 17 см;
- Превышено максимальное расстояние между модулями.
- Проверьте правильность установки кода группы и кода розетки;
- Проверьте правильность установки параметров радиопередачи.