Беспроводной передатчик FS1000A и приемник MX-RM-5V

Содержание:


Обзор беспроводного передатчика и приемника 433 МГц

Для разработчикам Arduino-устройств существует множество модулей для организации различных технологий беспроводной связи: модули WiFi, GSM/GPRS, IR, Bluetooth, радиомодули для работы в различных частотных диапазонах.  Комплект радиомодулей : передатчик (FS1000A) и приемник (MX-RM-5V), предназначен для передачи данных по радиоканалу на частоте 433 МГц. Указанное производителем расстояние уверенного приема 50-100 м в пределах прямой видимости (в зависимости от условий связи и напряжения питания), которое можно увеличить  подключением антенн к передатчику и приёмнику. В качестве простейшей антенны можно использовать кусок провода длиной 17 см.

Преимуществом данного вида ридиомодулей является их дешевизна и простота подключения к платам Арудино. К недостаткам отнесем отсутствие обратной связи, низкую скорость передачи и наличие шумов от большого количества других устройств (радиолюстр, радиорозеток, брелков, радиоуправляемых  моделей), работающих на этой частоте.

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

Рисунок 1. Комплект радиомодулей: передатчик (FS1000A) и приемник (MX-RM-5V).


Технические характеристики модуля

  • Напряжение питания передатчика: 3-12 В;
  • Напряжение питания приемника: 5 В;
  • Несущая частота: 433 МГц;
  • Потребляемый ток передатчиков: 8 мА;
  • Потребляемый ток приемником: 4,5 мА;
  • Чувствительность приемника: −106…-110 дБм;
  • Выходная мощность передатчика: 32 мВт;
  • Макс пропускная способность передатчика: 8 кб/сек;
  • Макс пропускная способность приемника: 5 кб/сек;
  • Диапазон рабочих температур: −20…+80 °C.

Подключение

Передатчик FS1000A имеет 3 вывода и контакт для подпайки антенны (рисунок 2):

  • VCC — (питание 3-12 В);
  • GND — (земля).
  • DATA — вход для модуляции данных;
  • ANT — антенна.
Контакты передатчика FS1000A

Рисунок 2. Контакты передатчика FS1000A

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

Приемник MX-RM-5V имеет 4 вывода и контакт для подпайки антенны (рисунок 3):

  • VCC — (питание 3-12 В);
  • GND — (земля).
  • DATA — вход для модуляции данных;
  • ANT — антенна.
Контакты приемника MX-RM-5V

Рисунок 3. Контакты приемника MX-RM-5V

 

  • VCC — (питание 5 В);
  • GND — (земля).
  • DATA — вход данных;
  • ANT — антенна.

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

Для работы с Arduino cуществует несколько библиотек – VirtualWire, RemoteSwitch, RCSwitch.


Пример использования

Обычно передатчик (FS1000A) и приемник (MX-RM-5V) используют для передачи данных с одного Arduino-устройства на другое Arduino-устройствo. Но это не единственное их применение. Большое количество бытовых устройств (радиолюстры, радиорозетки, брелки), работают на частоте 433 МГц, и можно создавать с помощью данных модулей нестандартные устройства для управления бытовыми устройствами.

Рассмотрим пример создания самодельного пульта для управления радиорозетками UNIEL (рисунок 4). Если количества кнопок идущего в комплекте пульта не хватает, создадим пульт управления радиорозетками UNIEL на Arduino.

Радиорозетки UNIEL

Рисунок 4. Радиорозетки UNIEL

Нам понадобятся следующие детали:

для подготовительных работ будем использовать

Сначала немного о розетках UNIEL. Розетки UNIEL устанавливаются в любую розетку и к ним уже подключается электроприбор, включением и выключением которого можно управлять с дистанционного пульта. Радиус действия на открытой местности до 25м, частота приемо-передачи команд 433.9 Мгц.

В пульте с помощью переключателей устанавливается код группы. В каждой розетке код группы, равный коду группы пульта и индивидуальный код розетки (рисунок 5). Если несколько розеток включается/выключаются одновременно, им устанавливаем один код.

Установка кодов группы и индивидуальных кодов для радиорозеток

Рисунок 5. Установка кодов группы и индивидуальных кодов для радиорозеток.

Прежде чем управлять радиорозетками с платы Arduino, необходимо получить данные о протоколе передачи данных между пультом и розетками. Для этого нам и пригодится приемник MX-RM-5V. Соберем схему, показанную на рис. 6.

Схема подключения приемника MX-RM-5V к плате Arduino

Рисунок 6. Схема подключения приемника MX-RM-5V к плате Arduino.

в итоге получаем:

Схема в сборе

Рисунок 7. Схема в сборе.

Загрузим на плату 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.
Обработка данных со стандартного пульта UNIEL

Рисунок 8. Обработка данных со стандартного пульта UNIEL.

Теперь у нас все есть для создания своего пульта на Arduino для управления радиорозетками. Соберем схему согласно рис. 9.

Схема соединений для самодельного пульта для управления радиорозетками UNIEL

Рисунок 9. Схема соединений для самодельного пульта для управления радиорозетками UNIEL

Получаем следующие:

Схема в сборе

Рисунок 10. Схема в сборе.

Рисунок 10. Схема в сборе.

Загружаем на плату 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. Нет связи между модулями

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

     2. Связь исчезает при увеличении расстояния между модулями

  • Подпаяйте к приемнику и передатчику антенну длиной 17 см;
  • Превышено максимальное расстояние между модулями.

     3. В примере нет переключения радиорозеток

  • Проверьте правильность установки кода группы и кода розетки;
  • Проверьте правильность установки параметров радиопередачи.