Радиомодуль 433 мгц arduino радиоуправление.
На этом уроке мы решим задачу по передаче радиосигнала между двумя контроллерами Ардуино с помощью популярного приемопередатчика с частотой 433МГц. На самом деле, устройство по передаче данных состоит из двух модулей: приемника и передатчика. Данные можно передавать только в одном направлении. Это важно понимать при использовании этих модулей. Например, можно сделать дистанционное управление любым электронным устройством, будь то мобильный робот или, например, телевизор. В этом случае данные будут передаваться от пульта управления к устройству. Другой вариант — передача сигналов с беспроводных датчиков на систему сбора данных. Здесь уже маршрут меняется, теперь передатчик стоит на стороне датчика, а приемник на стороне системы сбора. Модули могут иметь разные названия: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V, и т.п., но все они имеют примерно одинаковый внешний вид и нумерацию контактов. Также, распространены две частоты радиомодулей: 433 МГц и 315 МГц.
1. Подключение
Передатчик имеет всего три вывода: Gnd, Vcc и Data.![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/09/transmitter_433_pinouts-1024x768.jpg)
![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/09/arduino_receiver_transmitter_433_1024-1024x768.jpg)
2. Программа для передатчика
Для работы с радиомодулями воспользуемся библиотекой RCSwitch . Напишем программу, которая будет каждую секунду по-очереди отправлять два разных сообщения. #include3. Программа для приемника
Теперь напишем программу для приемника. Для демонстрации факта передачи мы будем зажигать светодиод, подключенный к выводу №3 на плате Ардуино. Если приемник поймал код B1000 — включим светодиод, а если B0100 — выключим. #includeЗадания
Теперь можно попробовать потренироваться и сделать разные полезные устройства. Вот несколько идей.- Пульт для светильника. На стороне приемника , включенный в цепь питания светильника (осторожно, 220 Вольт!). На стороне передатчика: . Написать программы для приемника и передатчика, которые по нажатию кнопки будут включать удаленное реле. При повторном нажатии кнопки реле будет выключаться.
- Уличный термометр с радиоканалом. На стороне передатчика разместить . Предусмотреть автономное питание от батареек. На стороне приемника: . Написать программы для приемника и передатчика, которые позволят выводить показания температуры с удаленного датчика на дисплее.
Заключение
Итак, теперь мы знаем простой и недорогой способ передавать данные на расстоянии. К сожалению, скорость передачи и дистанция в таких радиомодулях весьма ограничены, так что мы не сможем полноценно управлять, например квадрокоптером. Однако, сделать радиопульт для управления простым бытовым прибором: светильником, вентилятором или телевизором, нам под силу. На основе приемопередатчиков с частотой 433 МГц и 315 МГц работает большинство радиоканальных пультов управления. Имея Ардуино и приемник, мы можем декодировать сигналы управления и повторить их. Подробнее о том, как это сделать мы напишем в одном из следующих уроков!Рано или поздно, в создаваемых проектах появится необходимость дистанционного управления. Одним из самых бюджетных решений является использование радиоприемника и радиопередатчика. Простейший пример их использования вы найдете в данной статье, а дальше все зависит только от ваших нужд и фантазии.
В первую очередь берем 2 платы Arduino и подключаем к ним приемник и передатчик, как показано на рисунке:
Компоненты для повторения (купить в Китае):
Перед тем как преступить к работе, нужно указать, что для полноценной работы, к модулям необходимо припаять антенну. Рекомендуемая длина антенны для передатчиков с частотой 433 МГц равна 17 см.
Библиотека необходимая для работы с модулем VirtualWire
Её необходимо распаковать и добавить в папку "libraries" в папке с Arduino IDE. Не забывайте перезагрузить среду, если на момент добавления IDEшка была открыта.
Пример программного кода
#include
Разберем этот код для полного понимания.
Во первых мы формируем строку strMsg. Используем тип String, т.к. с ним проще работать (можно конкатенировать его с числами, используя оператор "+").
Поскольку все передатчики работают в одном диапазоне частот, то каждый приемник будет принимать информацию с каждого передатчика находящегося в зоне досягаемости. Для того, чтобы отсеять лишние символы в простейшем случае можно просто предварить команды каким-то специальным символом. В нашем случае это символ "z".
После этого преобразовываем тип String к стандартному массиву символов при помощи метода toCharArray и передаем его в команду vw_send .
Наш код будет отправлять строку "z c 123".
Перейдем к коду приемника:
Пример программного кода
// Тестировалось на Arduino IDE 1.0.1
#include
Сообщение будет считано в буфер buf, который нужно разобрать.
В первую очередь проверяем наличие служебного символа "z", затем считываем код команды и затем преобразовываем строковое представление параметра в число.
Информация получена и разобрана, что делать дальше зависит от конкретной задачи.
В данной статье рассмотрен простейший вариант общения. В идеале нужно задуматься о кодировании передаваемой информации, т.к. её будут получать не только ваши приемники.
P.S. Работая с данными модулями, мы наткнулись на один не приятный подводный камень, а именно конфликт, невозможность работы с библиотекой "servo.h".
Приемник XD-RF-5V и передатчик FS1000A/XD-FST для радио частоты 433 МГц используется для передачи данных между двумя устройствами. Очень часто применяются для связи нескольких Arduino устройств.
Характеристики XD-RF-5V
Рабочее напряжение: 3V ~ 12V
Рабочий ток: 20 мА ~ 28mA
Резервное течение: 0mA
Рабочая частота: 433MHz
Расстояние передатчика: >500 м (чувствительность может быть выше-103dBm если в широком поле)
Выходная мощность: 16dBm (40 мВт)
Скорость Передатчик: Режим модуляции: ООК (AM)
Размер: 19 х 19 х 8 мм
Для подключения имеет выводы PIN1 DATA, PIN2 VCC, PIN3 GND. Встроенной антенны нет, но есть контакт для ее подключения. Зачастую для увеличения дальности передачи изготоваливают проволочные антенны.Передатчик применяется в устройствах умного дома, автоматических системах сбора данных. Главным преимуществом является неприхотливость, стабильность в работе и низкое энергопотребление. Из минусов стоит отметить его "аналоговость". Нужно усложнять программный код для кодирования потока данных, но это же и является преимуществом т.к. нет никаких ограничений на протокол связи.
Радио приемник FS1000A/XD-FST 433Mhz
Рабочее напряжение: DC 5V
Рабочий ток: 4 мА
Режим модуляции: ООК (AM)
Рабочая температура: -10 ° C ~ +70 ° C
Получать чувствительность:-110dB
Рабочая частота: 433MHz
Размер: 30 х 14 х 7 мм
Приемник работает на основе колебательного контура с усилителем. Подключается с помощью выводов PIN1 VCC, PIN2/3 DATA, PIN5 GND. Выход радио модуля логический по уровню, но сигнал принимает аналоговый. По тому задача декодирования послания лежит на плечах устройства (обычно Arduino) которое принимает сигнал.
![](https://i2.wp.com/diytimes.ru/uploads/default/posts/829/defaulttemp.jpg)
Схема подключения радио модулей 433 Mgz к Arduino представлена ниже. Выходы выходы приемника и передатчика подключаются к Digital портам Arduino, которые способны обрабатывать модулированный сигнал.
![](https://i1.wp.com/diytimes.ru/uploads/default/posts/830/defaulttemp.jpg)
Для существенного увеличения дальности приема можно к приемо-передающим устройствам подпаять антенну. Самый простой вариант - кусок провода длиной 17 см с сопротивлением 50 Ом. Такая длина будет резанировать на частоте 433 Mgz т.к. ее длина равна 1/4 волны.
Для кодирования.декодирования передаваемого сигнала на Arduino удобно применять библиотеку VirtualWire.h
Приведу пару примеров использования библиотеки для передачи цифровых данных.
Передатчик:
#include "VirtualWire.h" const int led_pin = 13; // Пин светодиода const int transmit_pin = 12; // Пин подключения передатчика void setup() { vw_set_tx_pin(transmit_pin); vw_setup(2000); // Скорость передачи (Бит в секунду) pinMode(led_pin, OUTPUT); } void loop() { const char *msg = "Hello, Arduinomania"; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда }
Приемник:
#include "VirtualWire.h" byte message; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения const int led_pin = 13; // Пин светодиода const int receiver_pin = 11; // Пин подключения приемника void setup() { Serial.begin(9600); // Скорость передачиданных Serial.println("Read 433mHz begin"); vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика } void loop() { if (vw_get_message(message, &messageLength)) // Если есть данные.. { digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале приема пакета for (int i = 0; i < messageLength; i++) { Serial.write(message[i]); // выводим их в одной строке } Serial.println(); digitalWrite(led_pin, LOW); // Гасим светодиод в конце } }
5 октября 2016 в 18:41Управление шлагбаумом с помощью Arduino UNO и радиопередатчика 433 МГц
- Программирование микроконтроллеров
Всем привет! У меня на работе есть автомобильная парковка. Конечно, цель данной статьи не хвастовство, учитывая тяжелую ситуацию на дорогах с парковочными местами, и не пиар моего руководства о том, что они заботятся о своих сотрудниках (не буду даже упоминать о месте свой работы!), дело совершено не в этом. Суть в том, что мешает любому другому человеку, не имеющему отношения к месту моей работы, припарковаться на этой парковке? А это шлагбаум, ограничивающий въезд и выезд с этой парковки.
И как во многих организациях, вход на мое предприятие осуществляется по обыкновенным пропускам, дабы контролировать меня и всех остальных. Ну и въезд на парковку сделали также, по этим же пропускам. То есть подъезжаешь к парковке, подносишь пропуск к считывателю, он срабатывает, шлагбаум открывается (закрывается автоматически), заезжаешь и все. Так думали они. Но мое увлечение электроникой и природная лень (это ведь каждый раз подъезжать, открывать окно, вытаскивать руку, закрывать окно, а если дождь, а если холодно) пошли против системы.
Итак, ближе к делу. Прежде всего, узнал, что шлагбаум оказался довольно-таки популярной фирмы Nice и начал искать о нем информацию. Однако, несмотря на популярность фирмы производителя, информации о его форматах кодов было очень мало. Выяснилось, что существуют 12-битные и 24-битные форматы кодов. 12-битные более древние, 24-битные – посовременней. Так как я знаю, что шлагбаум на работе стоит давно, решил начать с 12-битных кодов (впоследствии угадал). И так пакет данных состоит из 12 бит. Перед 12-битным кодом идет, так называемый, «пилотный период» и «стартовый импульс». «Пилотный период» состоит из 36 интервалов низкого уровня, «стартовый импульс» состоит из 1 интервала высокого уровня. Один пакет данных состоит из «пилотного периода», за ним «стартовый импульс» и за ним 12-битный код (для каждого шлагбаума свой). Пульты шлагбаумов передают сразу по 4 пакета данных, но я поставил больше, так как очень много устройств работают на данной частоте (в частности автомобильные сигнализации) и возможны помехи. Длительности импульсов для шлагбаумов Nice:
- Логическая «1» – 1400 мкс низкого уровня (два интервала) и 700 мкс высокого (один интервал)
- Логический «0» – это 700 мкс низкого уровня (один интервал) и 1400 мкс высокого (один интервал)
- «Пилотный период» – 25200 мкс (36 интервалов)
- «Стартовый импульс» – 700 мкс (1 интервал)
С помощью чего, вообще, все это можно реализовать? Недавнее мое увлечение платформами Arduino, не дали мне долго размышлять над этим вопросом.
Список компонентов:
1. Arduino Uno,
2. Радиопередатчик 433Мгц, самодельная антенна к нему,
3. Батарейка 9 вольт, в народе «Крона».
Данные радиопередатчики в известных китайских магазинах продаются очень дешево (порядка 50 руб.), совместно с радиоприемниками. Они очень простые, три контакта: питание, земля и сигнальный контакт. Питания от 5 до 12 вольт, чем выше напряжение питания, тем лучше дальнобойность. Собственно по этой причине была выбрана 9 вольтовая батарейка. Рекомендованное напряжения питания Arduino Uno от 7 до 12 вольт (контакт Vin), так что «Крона» вполне подходит. Также дальнобойность радиопередатчика зависит от наличия антенны (без нее дальность будет около 1 метра). Весь комплект обошелся порядка 300 руб.
Вот, собственно, и сам скетч для Arduino Uno:
Int send_code_pin = 13;
//int send_code = 3061; это код определенный методом перебора для моего шлагбаума
void setup()
{
pinMode(send_code_pin, OUTPUT);
}
void loop ()
{
for (int send_code = 0; send_code < 4096; send_code++) // этот цикл после того как код определен необходимо убрать
{
for (int j = 0; j <7; j++) // достаточно 4-х, но из-за помех поставил 7
{
digitalWrite(send_code_pin, HIGH); // стартовый импульс
delayMicroseconds(700);
digitalWrite(send_code_pin, LOW);
for (int i = 12; i > 0; i--)
{
boolean bit_code = bitRead(send_code, i - 1);
if (bit_code)
{
digitalWrite(send_code_pin, LOW); // единица
delayMicroseconds(1400);
digitalWrite(send_code_pin, HIGH);
delayMicroseconds(700);
}
else
{
digitalWrite(send_code_pin, LOW); // ноль
delayMicroseconds(700);
digitalWrite(send_code_pin, HIGH);
delayMicroseconds(1400);
}
}
digitalWrite(send_code_pin, LOW); // пилотный период
delayMicroseconds(25200);
}
}
//delay(10000); после определения кода поставить задержку
}
Перебор всех возможных вариантов занял около 1 недели, с учетом одного выхода в день к шлагбауму. Методика быстрого выбора правильного кода была очень простой. С помощью команды micros()
определил время передачи одного кода. Он составил примерно 0,25 сек. Общее перебора всех вариантов около 17 мин. Перед шлагбаумом запустил Arduino и засек время. Где-то на 12,5 минуте открылся шлагбаум. Исходя из этого, я отбросил сразу первые 2800 вариантов. И так далее. Когда вариантов осталось около 30, после каждой передачи данных ставил задержку в 1 секунду. Так как контакт передачи данных я установил 13-ым (со светодиодом), было видно каждый момент передачи, подсчитал и определил точный код.
Вот и все! В качестве демо - видео вскрытия.