Данный урок предназначен для изучения основных приемов работы с радиомодулем  FS1000A/RF-5V.

ПЕРЕЧЕНЬ КОМПОНЕНТОВ СХЕМЫ

  • ARDUINO NANO (чипсет ATmega328P Old bootloader )
  • Передатчик FS1000A
  • Приемник RF-5V
  • Светодиод + резистор 10 кОм (для передатчика)
  • Светодиод + резистор 1 кОм (для приемника)
  • Соединительные провода
  • Монтажная плата

ТЕОРИЯ

Теория передачи данных по радиоканалу весьма обширна и ее изучение не является целью данного урока. Используемые в уроке передатчик и приемник работают на частоте 433 МГц, что на сегодняшний день наверное не самое удачное решение. С другой стороны данный диапазон не перекрывается современными устройствами, которые работают на частотах 2,4 ГГц и выше, а значит не создают помех при изучении принципов передачи радиосигнала.

ВНИМАНИЕ! При работе передатчика обязательно наличие антенны или хотя бы простого провода )))))) Это связано с так называемым эффектом стоячих волн. Если волнам, генерируемым передатчиком некуда будет распространяться, то возможна ситуация, когда их энергия начнет нагревать элементы на плате и передатчик просто сгорит.

МАКЕТ СХЕМЫ

Схема приемника
Схема передатчика
Сборка схемы для исследования

КОД ПРОГРАММЫ

Для проверки работоспособности схемы напишем небольшие скетчи. Для передатчика код программы выглядит следующим образом:

  1. #include <RCSwitch.h>
  2. RCSwitch mySwitch = RCSwitch();
  3.  
  4. void setup()
  5. {
  6. mySwitch.enableTransmit(8);
  7. pinMode(2,OUTPUT);
  8. }
  9.  
  10. void loop()
  11. {
  12. digitalWrite(2,LOW);
  13. mySwitch.send(B0100, 4);
  14. delay(1000);
  15.  
  16. digitalWrite(2,HIGH);
  17. mySwitch.send(B1000, 4);
  18. delay(1000);
  19. }

В данном примере контакт DATA передатчика подключен к pin8 платы Ардуино, а светодиод к pin2. В случае необходимости порты можно менять местами.

Цифра 4 к команде mySwitch.send(B0100, 4) указывает на количество бит в передаваемом двоичном числе. Надо понимать, что, даже если мы будем передавать десятичное число, то в радиоэфир будет выдаваться последовательность 1 и 0, соответствующих двоичному эквиваленту передаваемого числа. Если количество указанных разрядов будет меньше нужного, то передатчик будет принимать не верные данные. 

Далее предлагается простейший код для приемника:

  1. #include <Wire.h>
  2. #include <RCSwitch.h>
  3. RCSwitch mySwitch = RCSwitch();
  4.  
  5. void setup()
  6. {
  7. mySwitch.enableReceive(0);
  8. pinMode(4,OUTPUT);
  9. }
  10.  
  11. void loop()
  12. {
  13. if(mySwitch.available())
  14. {
  15. int value = mySwitch.getReceivedValue();
  16. if( value == B1000 ){digitalWrite( 4, HIGH );}
  17. else if( value == B0100 ){digitalWrite( 4, LOW );}
  18. }
  19. }