Инструкция и руководство для Guard RF-311A на русском


Скетч Arduino для радиочастотного передатчика 433 МГц

В нашем эксперименте мы отправим простое текстовое сообщение от передатчика к получателю. Будет полезно понять, как использовать модули, и это может послужить основой для более практических экспериментов и проектов.

Вот скетч, который мы будем использовать для нашего передатчика:

// Подключаем библиотеку RadioHead Amplitude Shift Keying #include // Подключаем библиотеку SPI Library #include // Создаем объект управления смещением амплитуды RH_ASK rf_driver; void setup() { // Инициализируем объект ASK rf_driver.init(); } void loop() { const char *msg = «Hello World»; rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000); }

Это довольно короткий набросок, но это все, что вам нужно для передачи сигнала.

Код начинается с подключением библиотеки RadioHead ASK. Мы также должны подключить библиотеку SPI Arduino, так как от нее зависит библиотека RadioHead.

#include #include

Далее нам нужно создать объект ASK, чтобы получить доступ к специальным функциям, связанным с библиотекой RadioHead ASK.

// Создаем объект управления смещением амплитуды RH_ASK rf_driver;

В функции setup() нам нужно инициализировать объект ASK.

// Инициализируем объект ASK rf_driver.init();

В функции loop() мы начинаем с подготовку сообщения. Это простая текстовая строка, которая хранится в char с именем msg. Знайте, что ваше сообщение может быть любым, но не должно превышать 27 символов для лучшей производительности. И обязательно посчитайте количество символов в нем, так как вам понадобится это количество в коде получателя. В нашем случае у нас 11 символов.

// Готовим сообщение const char *msg = «Hello World»;

Затем сообщение передается с использованием функции send(). Он имеет два параметра: первый — это массив данных, а второй — количество байтов (длина данных), подлежащих отправке. За send() функцией обычно следует waitPacketSent() функция, которая ожидает завершения передачи любого предыдущего передаваемого пакета. После этого код ждет секунду, чтобы дать нашему приемнику время разобраться во всем.

rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); delay(1000);

Распиновка радиомодулей

В общем, все эти радиомодули имеют подключение 3 основных контакта (плюс антенна);

Передатчик

  • Напряжение vcc (питание +) 3В до 12В (работает на 5В)
  • GND (заземление -)
  • Приём цифровых данных.

Приемник

  • Напряжение vcc (питание +) 5В (некоторые могут работать и на 3.3 В)
  • GND (заземление -)
  • Выход полученых цифровых данных.

RadioHead Library — универсальная библиотека для беспроводных модулей

Прежде чем мы начнем программировать, установим библиотеку RadioHead в Arduino IDE.

RadioHead — это библиотека, которая позволяет легко передавать данные между платами Arduino. Она настолько универсальна, что ее можно использовать для управления всеми видами устройств радиосвязи, включая наши модули на 433 МГц.

Библиотека RadioHead собирает наши данные, инкапсулирует их в пакет данных, который включает в себя CRC (проверку циклически избыточного кода), а затем отправляет его с необходимой преамбулой и заголовком на другую Arduino. Если данные получены правильно, принимающая плата Arduino проинформирует о наличии доступных данных и приступит к их декодированию и выполнению.

Пакет RadioHead формируется следующим образом: 36-битный поток из пар «1» и «0», называемый «обучающей преамбулой», отправляется в начале каждой передачи. Эти биты необходимы приемнику для регулировки его усиления до получения фактических данных. Затем следует 12-битный «Начальный символ», а затем фактические данные (полезная нагрузка).

Последовательность проверки или CRC добавляется в конец пакета, который пересчитывается RadioHead на стороне приемника, и если проверка CRC верна, приемное устройство получает предупреждение. Если проверка CRC не пройдена, пакет отбрасывается.

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

Обзор оборудования

Давайте подробнее рассмотрим модули передатчика и приемника 433 МГц.

Этот маленький модуль является передатчиком. Сердцем модуля является резонатор SAW, настроенный на работу в диапазоне 433.xx МГц. Есть переключающий транзистор и несколько пассивных компонентов, вот и все.

Когда на вход DATA поступает логическая 1, генератор начинает работать, генерируя постоянную РЧ несущую волну на частоте 433.xx МГц, а когда на входе DATA устанавливается логический 0, генератор останавливается. Этот метод известен как Amplitude Shift Keying, о котором мы вскоре поговорим подробнее.

Это приемный модуль. Хотя все выглядит сложным, но он так же просто, как модуль передатчика. Он состоит из радиочастотной схемы и пары операционных усилителей для усиления принимаемой несущей от передатчика. Усиленный сигнал подается на ФАПЧ (фазовая автоподстройка частоты), которая позволяет декодеру «выделить» поток цифровых битов, что обеспечивает лучшее декодирование и помехоустойчивость.

Скетч Arduino для радиочастотного приемника 433 МГц

Подключите приемник Arduino к компьютеру и загрузите следующий код:

// Подключаем библиотеку RadioHead Amplitude Shift Keying #include // Подключаем библиотеку SPI Library #include // Создаем объект управления смещением амплитуды RH_ASK rf_driver; void setup() { // Инициализируем объект ASK rf_driver.init(); // Настройка Serial Monitor Serial.begin(9600); } void loop() { // Установить размер буфера ожидаемого сообщения uint8_t buf[11]; uint8_t buflen = sizeof(buf); // Проверка правильности размера полученного пакета if (rf_driver.recv(buf, &buflen)) { // Сообщение получено с правильной контрольной суммой Serial.print(«Message Received: «); Serial.println((char*)buf); } }

Как и код передатчика, код приемника начинается с подключения библиотек RadioHead и SPI и создания объекта ASK.

#include #include RH_ASK rf_driver;

В setap() мы инициализируем объект ASK, а также настраиваем последовательный монитор, так как мы будем просматривать наше полученное сообщение.

rf_driver.init(); Serial.begin(9600);

В функции loop() мы создаем буфер размером передаваемого сообщения. В нашем случае это 11, помните? Вам нужно будет настроить это, чтобы соответствовать длине вашего сообщения. Обязательно укажите все пробелы и знаки препинания, поскольку все они считаются символами.

uint8_t buf[11]; uint8_t buflen = sizeof(buf);

Далее мы вызываем функцию recv(). Это включает приемник, если он еще не включен. Если доступно сообщение, оно копирует сообщение в свой первый буфер параметров и возвращает true, иначе возвращает false. Если функция возвращает true, код вводит оператор if и печатает полученное сообщение на мониторе последовательного порта.

if (rf_driver.recv(buf, &buflen)) { Serial.print(«Message Received: «); Serial.println((char*)buf); }

Затем мы возвращаемся к началу цикла и делаем все заново.

После загрузки скетча откройте серийный монитор. Если все в порядке, вы должны увидеть ваше сообщение.

Схема подключения передатчика и приемника 433 МГц к Arduino UNO

Теперь, когда мы знаем все о модулях, пришло время использовать их!

Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.

Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.

На следующем рисунке показана схема соединения.

После подключения передатчика вы можете перейти к приемнику. Подключение приемника так же просто, как и передатчика.

Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.

Вот так должна выглядеть схема соединения для приемника.

Теперь, когда передатчик и приемник подключены, нам нужно написать код и отправить его на соответствующие платы Arduino. Поскольку у вас, вероятно, только один компьютер, мы начнем с передатчика. Как только код будет загружен, мы перейдем к приемнику. Arduino, к которому подключен передатчик, может питаться от источника питания или батареи.

Тестирование RF модулей

При испытаниях обоих модулей от +5В источника постоянного тока, а также с 173 мм вертикальной штыревой антенной. (для частоты 433,92 МГц это «1/4 волны»), было получено реальных 20 метров через стены, и тип модулей не сильно влияет на эти тесты. Поэтому можно предположить, что эти результаты типичны для большинства блоков. Был использован цифровой источник сигнала с точной частотой и 50/50 скважностью, это было использовано для модуляции данных передатчика.

Обратите внимание, что все эти модули, как правило, стабильно работают только до скорости 1200 бод или максимум 2400 бод серийной передачи, если конечно условия связи идеальные (высокий уровень сигнала).

Выше показан простой вариант блока для последовательной передачи информации микроконтроллеру, которая будет получена с компьютера. Единственное изменение — добавлен танталовый конденсатор 25 В 10 мкф на выводы питания (Vcc и GND) на оба модуля.

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями: