Рейтинг@Mail.ru
Радио приёмник XY-MK-5V и передатчик  FS1000A
Радио приёмник XY-MK-5V и передатчик FS1000A

Подключение радиомодуля XY-MK-5V / FS1000A к Arduino

Print Friendly, PDF & Email

Сегодня мы займёмся подключением радиомодуля, а точнее, двух модулей – приёмника XY-MK-5V и передатчика FS1000A – к Arduino. Тоже к двум.

Нам понадобится:

  • компьютер с установленной Arduino IDE или другой средой разработки;
  • 2 платы Arduino UNO или другой модификации (недорого купить можно на этом сайте);
  • радиопередатчик FS1000A и радиоприёмник XY-MK-5V, приобретаются здесь;
  • соединительные провода (рекомендую вот такой набор, в котором есть все комбинации «мама-мама», «папа-папа», «папа-мама»).

1Описание радиопередатчика FS1000A и приёмника XY-MK-5V

Эта пара отличается очень низкой стоимостью, при этом имеет весьма неплохой радиус передачи (около 50-ти метров в условиях города). Радиопередатчик FS1000A и радиоприёмник XY-MK-5V должны работать на одной частоте. «Из коробки» они настроены на несущую частоту 433 МГц. Это распространённая частота для радиосвязи. Например, она используется для связи домашней метеостанцией типа Oregon Scientific с выносными метеодатчиками (мы к ним ещё вернёмся), в некоторых системах автоматического управления воротами, и в других «умных» приборах и системах, передающих данные «по воздуху».

Внешний вид приёмника XY-MK-5V и передатчика FS1000A
Внешний вид приёмника XY-MK-5V и передатчика FS1000A

2Подключение к Arduino радиопередатчика FS1000A и приёмника XY-MK-5V

Прежде чем подключать передатчик FS1000A к Arduino, необходимо к контактной площадке, обозначенной на плате ANT, припаять отрезок провода сечением примерно 0,25…0,5 мм и длиной 17,3 см. Это будет антенной.

Частоте 433 МГц соответствует длина волны, равная примерно 69 см. При длине антенны, равной 1/4 от длины волны, волновой вибратор (антенна) находится в резонансе с длиной волны, и её эффективность максимальна. Отсюда число 17,3 см (= 69 / 4).

Передатчик FS1000A можно запитать напряжением от 3,3 до 12 В. В зависимости от поданного напряжения дальность передачи может несколько меняться: при большем напряжении – большая дальность. Мы подадим на передатчик напряжение 5 В, и остальные выводы подключим согласно схеме.

Схема подключения передатчика FS1000A к Arduino
Схема подключения передатчика FS1000A к Arduino

Приёмник XY-MK-5V подключается тоже просто. Вывод "DATA" на модуле сдвоен, можно подключаться к любой из двух ножек. Питание также подадим 5 В от платы Arduino.

Схема подключения приёмника XY-MK-5V к Arduino
Схема подключения приёмника XY-MK-5V к Arduino

3Пример простейшей передачи данных по радиоканалу с помощью Arduino

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

Для первого эксперимента возьмём стандартный скетч мигания светодиодом Blink и немного модифицируем его: каждые 5 секунд будем посылать команду с одного Arduino (передатчика) к другому (приёмнику). По принятии команды приёмник будет либо зажигать светодиод, если он погашен, либо гасить. То есть каждые 5 секунд приёмник будет менять своё состояние по принятой команде. Сделать это немного сложнее, чем кажется, ведь нам нужно выделить команду из постоянно присутствующего в эфире шума.

Первый скетч – для передатчика. Он довольно простой.

#define prd 4 // пин DATA передатчика FS1000A 
#define ledPin 13 // вывод встроенного светодиода Arduino

void setup() {
  pinMode(ledPin, OUTPUT); 
  pinMode(prd, OUTPUT); 
}

void loop() {
  sendCommand(); // отправляем команду
  delay(5000); // делаем задержку на 5 сек
}

// посылает команду в эфир 
void sendCommand() {
  digitalWrite(ledPin, HIGH); // на время отправки команды зажигаем встроенный светодиод
  // команда представляет собой три импульса наподобие «тире-точка-тире»
  digitalWrite(prd, HIGH);
  delay(100); 
  digitalWrite(prd, LOW);
  delay(50); 
  digitalWrite(prd, HIGH);
  delay(50); 
  digitalWrite(prd, LOW);
  delay(50); 
  digitalWrite(prd, HIGH);
  delay(100); 
  digitalWrite(prd, LOW);
  delay(50); 
  digitalWrite(ledPin, LOW);  // по окончании передачи команды гасим светодиод
}

Временная диаграмма команды приведена на рисунке:

Передаваемая в радиоэфир команда
Передаваемая в радиоэфир команда
Временная диаграмма двух идущих подряд команд
Временная диаграмма двух идущих подряд команд

Скетч для приёмника, ввиду описанных выше причин, сложнее. Поэтому для начала давайте просто периодически читать данные на входе приёмника и выводить то, что принимаем, в последовательный порт.

#define prm 2 // пин DATA приёмника XY-MK-5V
#define ledPin 13 // встроенный светодиод

void setup() {
  Serial.Begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int data = digitalRead(prm); // читаем данные с входа приёмника
  Serial.println(data);
  delay(10);
}

В мониторе последовательного порта мы увидим череду из быстро сменяющихся единиц и нулей. Если полученные за примерно 17 секунд данные отобразить графически, то увидим следующее:

Данные+шум на входе приёмника
Данные+шум на входе приёмника

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

Однако, выделение полезного сигнала из шума с помощью аппаратуры не так просто, как на глаз.

Существует т.н. теорема Котельникова, которая говорит о том, что при дискретизации аналогового сигнала потерь информации не будет только в том случае, если частота полезного сигнала равна половине или меньше частоты дискретизации (т.н. «частоты Найквиста»).

Для простоты возьмём период опроса данных 50 мс (период дискретизации) – это число равно длительности самой короткой части команды, которую мы каждые 5 секунд отправляем передатчиком в радиоэфир.Беря по одному отсчёту на 50 мс мы, конечно же, нарушаем теорему Котельникова, и период дискретизации надо брать хотя бы 25 мс. Но так как мы всё делаем вручную, для максимального упрощения и сокращения количества кода, оставим так и посмотрим, сможем ли мы выделить из шума в радиоэфире нашу команду.

Длительность логических уровней передаваемой команды
Длительность логических уровней передаваемой команды

Таким образом, опрашивая данные с приёмника каждые 50 мс, мы должны увидеть последовательность "110101100" (в конце можно для верности добавить ещё нулей, вспомните предыдущий рисунок).

Продолжение следует...

Последнее изменениеВоскресенье, 16 Декабрь 2018 17:41 Прочитано 2018 раз

Поделиться

Print Friendly, PDF & Email

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev