Из этой статьи мы с вами узнаем, о работе простого модуля радиочастотного передатчика-приемника, который используется в дистанционном управлении для автомобилей или для управления простыми задачами, такими как включение / выключение реле управления. Так же будет рассмотрена схема подключения его к Ардуино.
Инструменты и материалы:
-Две платы Arduino Uno;
-Модуль приемопередатчика RF 315MHz или 433MHz;-Перемычки;-Макетная плата;-Две батареи 9В;Шаг первый: спецификация модуля
На фото первый приемник, второй — передатчик.Эти модули имеет следующие характеристики:
Передатчик:
Рабочее напряжение: 3–12 В.
Потребляемая мощность: 12 В
Рабочий ток: макс. 40 мА и мин. 9 мА
Режим резонанса: SAW
Режим модуляции: ASK
Рабочая частота: 315 МГц или 433 МГц
Мощность передачи: 25 мВт (315 МГц при 12 В)
Погрешность частоты: +150 кГц (макс)
Скорость: менее 10 Кбит / с.
Таким образом, этот модуль будет передавать сигнал до 90 м на открытой местности.
Приемник:
Рабочее напряжение: 5,0 В постоянного тока
Рабочий ток: макс. ≤5,5 мА
Метод работы: OOK / ASK
Рабочая частота: 315–433,92 МГц
Полоса пропускания: 2 МГц
Чувствительность: 100 дБм (50 Ом)
Скорость передачи: <9,6 Кбит / с (на 315 МГц и -95 дБм)
Использование дополнительной антенны повысит эффективность беспроводной связи.
Шаг второй: схема
Подключение модулей очень простое:
передатчик
Vcc >>>> 5V
ATAD >>> D12 (можно изменить в коде)
Gnd >>> Gnd
приемник
Vcc >>>> 5V
Data >>> D12
Gnd >>> GndШаг третий: библиотека виртуальных проводов Arduino
Существует популярная библиотека для arduino под названием «VirtualWire», созданная Майком МакКоли.
VirtualWire — это библиотека Arduino, которая предоставляет функции для отправки коротких сообщений без адресации, повторной передачи или подтверждения. Поддерживает ряд недорогих радиопередатчиков и приемников.
Эта библиотека позволяет легко отправлять и получать данные.
Сначала нужно загрузить библиотеку отсюда.
Затем нужно извлечь папку и переместить ее в «Библиотеки» в папке arduino. Это простой код, он отправит символ «1», а через 2 секунды отправит символ «0» и так далее. Светодиод D13 на плате arduino должен быть включен, когда получен символ ‘1’ и выключен, когда получен символ ‘0’.
Код для передатчика:


//simple Tx on pin D12 //Written By : Mohannad Rawashdeh // 3:00pm , 13/6/2013 //http://www.genotronex.com/ //.................................. #include char *controller; void setup() { pinMode(13,OUTPUT); vw_set_ptt_inverted(true); // vw_set_tx_pin(12); vw_setup(4000);// speed of data transfer Kbps } void loop(){ controller="1" ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13,1); delay(2000); controller="0" ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13,0); delay(2000); }
Код для приемника:
//simple Tx on pin D12 //Written By : Mohannad Rawashdeh // 3:00pm , 13/6/2013 //http://www.genotronex.com/ //.................................. #include void setup() { vw_set_ptt_inverted(true); // Required for DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits per sec pinMode(13, OUTPUT); vw_rx_start(); // Start the receiver PLL running } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Non-blocking { if(buf[0]=='1'){ digitalWrite(13,1); } if(buf[0]=='0'){ digitalWrite(13,0); } } }
Шаг четвертый: один передатчик, несколько приемников
Можно подключить несколько приемников и отправлять данные с одного главного передатчика.
При этом понадобится декодер/энкодер.
Энкодер — это схема, которая преобразует набор сигналов в код.
Декодер — это схема, которая преобразует код в набор сигналов.
Если нужна микросхема кодировщика / декодера, можно использовать PT2262 и PT2272.
Ниже простой пример, для 1 главного передатчика, 2 приемников. Отправка команды через последовательный порт для приемника, чтобы включить / выключить светодиод.
Код передатчика:
//simple Tx on pin D12 //Written By : Mohannad Rawashdeh // 3:00pm , 13/6/2013 //http://www.genotronex.com/ //.................................. #include char *controller; void setup() { pinMode(13,OUTPUT); vw_set_ptt_inverted(true); // vw_set_tx_pin(12); vw_setup(4000);// speed of data transfer Kbps } void loop(){ controller="A1" ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13,1); delay(1000); digitalWrite(13,0); delay(1000); controller="B1" ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13,1); delay(1000); digitalWrite(13,0); delay(1000); }
Код первого приемника:
//simple Tx on pin D12 //Written By : Mohannad Rawashdeh // 3:00pm , 13/6/2013 //http://www.genotronex.com/ //.................................. #include void setup() { vw_set_ptt_inverted(true); // Required for DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits per sec pinMode(13, OUTPUT); vw_rx_start(); // Start the receiver PLL running } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Non-blocking { if((buf[0]=='A')&&(buf[1]=='1')){ digitalWrite(13,1); delay(1000); } } else{ digitalWrite(13,0); } }
Код второго приемника:
//simple Tx on pin D12 //Written By : Mohannad Rawashdeh // 3:00pm , 13/6/2013 //http://www.genotronex.com/ //.................................. #include void setup() { vw_set_ptt_inverted(true); // Required for DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits per sec pinMode(13, OUTPUT); vw_rx_start(); // Start the receiver PLL running } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Non-blocking { if((buf[0]=='B')&&(buf[1]=='1')){ digitalWrite(13,1); delay(1000); } } else{ digitalWrite(13,0); } }
Шаг пятый: о VirtualWire
VirtualWire — это библиотека Arduino, которая предоставляет функции для отправки коротких сообщений без адресации, повторной передачи или подтверждения, что немного похоже на UDP по беспроводной сети, с использованием ASK (амплитудная манипуляция). Поддерживает ряд недорогих радиопередатчиков и приемников.
Сообщения отправляются с обучающей преамбулой, длиной сообщения и контрольной суммой. Сообщения отправляются с кодированием от 4 до 6 бит для хорошего баланса постоянного тока и контрольной суммой CRC для целостности сообщения.
Можем ли мы использовать последовательную связь ?
Приемникам ASK требуется серия обучающих импульсов для синхронизации передатчика и приемника, а также требуется хороший баланс между 0 и 1 в потоке сообщений для поддержания баланса постоянного тока в сообщении. UARTs не предоставляет их. Они немного работают с ASK wireless, но не так хорошо, как этот код.
Поэтому ответ будет — нет.
Чтобы использовать библиотеку VirtualWire, необходимо
#include
Чтобы выбрать PIN-код приемника, аннулируем:
vw_set_tx_pin
Чтобы выбрать PIN-код приемника, аннулируем:


vw_set_rx_pin
Устанавливаем скорость передачи, скорость Tx должна быть такой же, как и On Rx.
Скорость будет составлять количество бит в секунду в диапазоне 0-9600. Для небольших расстояний можно использовать быструю скорость , для дальних расстояний «до 90 м» нужно использовать как можно более низкую скорость передачи.
vw_setup(uint16_t speed);
Запускаем программу PLL приемника:
vw_rx_start ();
Когда сообщение доступно, функция vw_have_message() вернет значение true:
vw_rx_stop ();
Блокируем и ждем пока передатчик не будет в режиме ожидания:
vw_wait_tx ();
Блокируем пока сообщение не станет доступным от получателя:
vw_wait_rx ();
Отправляем сообщение заданной длины:
vw_send (uint8_t * buf, uint8_t len);
Возвращает значение, если сообщение не прочитано:
vw_have_message ();

