Данный урок предназначен для изучения основных приемов работы с радиомодулем FS1000A/RF-5V.
ПЕРЕЧЕНЬ КОМПОНЕНТОВ СХЕМЫ
- ARDUINO NANO (чипсет ATmega328P Old bootloader )
- Передатчик FS1000A
- Приемник RF-5V
- Светодиод + резистор 10 кОм (для передатчика)
- Светодиод + резистор 1 кОм (для приемника)
- Соединительные провода
- Монтажная плата
ТЕОРИЯ
Теория передачи данных по радиоканалу весьма обширна и ее изучение не является целью данного урока. Используемые в уроке передатчик и приемник работают на частоте 433 МГц, что на сегодняшний день наверное не самое удачное решение. С другой стороны данный диапазон не перекрывается современными устройствами, которые работают на частотах 2,4 ГГц и выше, а значит не создают помех при изучении принципов передачи радиосигнала.
ВНИМАНИЕ! При работе передатчика обязательно наличие антенны или хотя бы простого провода )))))) Это связано с так называемым эффектом стоячих волн. Если волнам, генерируемым передатчиком некуда будет распространяться, то возможна ситуация, когда их энергия начнет нагревать элементы на плате и передатчик просто сгорит.
МАКЕТ СХЕМЫ
КОД ПРОГРАММЫ
Для проверки работоспособности схемы напишем небольшие скетчи. Для передатчика код программы выглядит следующим образом:
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { mySwitch.enableTransmit(8); pinMode(2,OUTPUT); } void loop() { digitalWrite(2,LOW); mySwitch.send(B0100, 4); delay(1000); digitalWrite(2,HIGH); mySwitch.send(B1000, 4); delay(1000); }
В данном примере контакт DATA передатчика подключен к pin8 платы Ардуино, а светодиод к pin2. В случае необходимости порты можно менять местами.
Цифра 4 к команде mySwitch.send(B0100, 4) указывает на количество бит в передаваемом двоичном числе. Надо понимать, что, даже если мы будем передавать десятичное число, то в радиоэфир будет выдаваться последовательность 1 и 0, соответствующих двоичному эквиваленту передаваемого числа. Если количество указанных разрядов будет меньше нужного, то передатчик будет принимать не верные данные.
Далее предлагается простейший код для приемника:
#include <Wire.h> #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { mySwitch.enableReceive(0); pinMode(4,OUTPUT); } void loop() { if(mySwitch.available()) { int value = mySwitch.getReceivedValue(); if( value == B1000 ){digitalWrite( 4, HIGH );} else if( value == B0100 ){digitalWrite( 4, LOW );} } }