Как я собираю умный дом с алисой за копейки. впечатления

Сборка конструкции передающей части проекта

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

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

Это – нижняя часть печатной платы для передающей части нашего проекта.

Характеристики xd-rf-5v

Рабочее напряжение: 3V ~ 12VРабочий ток: 20mA ~ 28mARБегущий ток: 0mAOперационная частота: 433MHzДальность действия передатчика: >500м (чувствительность может быть выше-103дБм, если в широком поле)Выходная мощность: 16дБм (40мВт)Скорость передатчика: Режим модуляции: OOC (AM)Рабочая температура: -10 ° C ~ 70 ° Cs Размер: 19 x 19 x 8 мм

Контакты 1 DATA, 2 VCC и 3 GND предназначены для подключения. Контакт обеспечивает подключение антенны, но она не является встроенной. Когда необходимо увеличить дальность передачи, создаются проволочные антенны. Передатчик используется в устройствах “умного дома” и автоматизированных системах сбора данных.

Основные преимущества – неприхотливость, стабильность работы, низкое энергопотребление. Из недостатков полезно отметить его “аналог”. Код для кодирования потока данных сложен, но у него есть и преимущество – он не ограничивает протокол связи.

Изготавливаем катер на Ардуино своими руками

Фото. Изготавливаем корпус радиоуправляемого катера Для начала необходимо изготовить корпус для катера из куска пеноплекса толшиной 50 мм. В пеноплексе необходимо вырезать полости, где потом будет размещаться микроконтроллер, аккумулятор крона и моторы. На фото представлен вид катера до монтажа на корпусе моторов и электрической «начинки» проекта для начинающих. Скачать и распечатать шаблон катера вы можете на этой странице далее.

Фото. Изготавливаем катер на Ардуино своими руками

Далее необходимо разместить всю «начинку» в корпусе катера. Чтобы защитить микроконтроллер и все модули от попадания брызг воды, поверх корпуса укладывается лист линолеума, вырезанный по габаритам пеноплекса. Поэтому необходимо делать достаточной глубины вырезы в пеноплексе для установки платы Arduino. Схему подключения Bluetooth модуля и моторов к Ардуино смотрите далее.

Схема катера с радиоуправлением на Ардуино

Скопировать готовый скетч для катера на Bluetooth управлении можно далее. Для создания приложения на Андроид использовалась программа App Inventor. Скачать скетч для катера на Ардуино, файл с приложением для Androida и шаблон катера можно скачать одним архивом здесь. Приложение сохранено в формате .apk, этот файл необходимо распаковать из архива, загрузить на телефон и установить.

Пример кода для работы с приемником MX-RM-5V с использованием библиотеки VirtualWire

byte message; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения

const int led_pin = 13; // Пин светодиода const int receiver_pin = 12; // Пин подключения приемника

void setup() <Serial.begin(9600); // Скорость передачиданных Serial.println(«MX-RM-5V is ready»); 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

Для “Пример 2” кода передатчика

Не забудьте припаять антенны, а то без них дальность передачи будет всего несколько сантиметров.

На этом пока все.

Частота 433.920 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках и другие подобные системы.

Пример кода для работы с приемником MX-RM-5V с использованием библиотеки VirtualWire

byte message; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения

const int led_pin = 13; // Пин светодиода const int receiver_pin = 12; // Пин подключения приемника

void setup() Serial.begin(9600); // Скорость передачиданных Serial.println(«MX-RM-5V is ready»); 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

Для “Пример 2” кода передатчика

Не забудьте припаять антенны, а то без них дальность передачи будет всего несколько сантиметров.

Частота 433.920 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках и другие подобные системы.

Источник

Как подключить

Питать от ОТДЕЛЬНОГО источника 3.3В, а не от преобразователя!

Наиболее просто пока что не использовать МК, а просто подключить один модуль в качестве приемника к ПК/телефону через преобразователь и проверить
АТ-команды.

Настройки ПО

Скорость: 9600 бод/с
Данные: 8 бит
Парность нет
Стоп-бит 1
Также включить

при передаче

CR+LF (Перевод каретки + Возврат строки)

После успешного присоединения отправляем
команду и получаем ответ. Можно что-то изменить, но пока что не нужно.

AT+BAUD+BAUD=4 Скорость обмена 1: 1200 бод/с

2: 2400 бод/с

3: 4800 бод/с
4: 9600 бод/с5: 14400 бод/с
6: 19200 бод/с

AT+RFID+RFID=8899 Идентификатор сети (0000-FFFF)

(0-65535)

AT+DVID+DVID=1122 Идентификатор устройства (0000-FFFF)

(0-65535)

AT+RFC+TFC=001 Канал (1-128)
AT+POWE+POWE=9 Мощность 0: — 25 дБ

1: -15 дБ

2: -5 дБ

3: 0 дБ

4: +3 дБ

5: +6 дБ

6: +9 дБ

7: +10 дБ

8: +10 дБ
9: + 12 дБ

AT+CLSS+CLSS=A0 Режим работы A0: Передача данных через УАПП между модулями
C0: Управление (со светодиодной индикацией)

C1: Управление (без светодиодной индикацией)

C2: При нажатии кнопки создается импульс длительностью 30 мс (переход от низкого уровня в высокий)

C3: При нажатии кнопки создается импульс длительностью 30 мс (переход из высокого уровня в низкий)

C4: Высокий уровень при нажатой кнопке, низкий при отпущенной

C5: Переключение уровня при нажатия

Кстати, если отключить вывод
CS от минуса, то модуль переходит в спящий режим (пониженное энергопотребление), а когда просыпается, то отправляет слово:

Wake

Обновление 2021.07.12

Некоторые версии могут присылать START:

Всё прекрасно, модуль послушно отвечает. Менять пока что ничего не будем.

Пример 2

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

#include

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(){digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи

String millisresult = String(millis()); // Присваиваем переменной значение, равное количеству миллисекунд с момента начала выполнения текущей программыchar msg;millisresult.toCharArray(msg, 14);

vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщенияvw_wait_tx(); // Ожидаем окончания отправки сообщенияdigitalWrite(led_pin, LOW); // Гасим светодиод в конце передачиdelay(1000); // Пауза 1 секунда}

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

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

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

// Подключаем библиотеку RadioHead Amplitude Shift Keying#include <RH_ASK.h>// Подключаем библиотеку SPI Library #include <SPI.h> // Создаем объект управления смещением амплитуды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 <RH_ASK.h>#include <SPI.h>

Далее нам нужно создать объект 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);

Шаг 1. Комплектующие

Модуль ESP8266 WiFi представляет собой полноценную сеть Wi-Fi, а вы можете легко подключиться в качестве обслуживающего адаптера Wi-Fi, интерфейса беспроводного доступа в Интернет к любому устройству на основе микроконтроллера благодаря простому подключению через последовательный интерфейс или интерфейс UART.

Добавление этого модуля в проекты где используется Arduino откроет новые интересные возможности.

Детали, используемые в проекте Arduino WiFi мы перечислим ниже. Компоненты оборудования:

  • Arduino UNO × 1
  • ESP8266 ESP-01 × 1
  • Перемычки (на выбор) × 1
  • Резистор 10 кОм × 1
  • Резистор 1 кОм × 2

Программные приложения:

Arduino IDE

Настройка точки доступа на смартфоне

Иногда в прямой досягаемости нет Wi-Fi сети, а сделать эксперименты из набора очень хочется. Что же делать в таком случае?
Поднять такую сеть самому при помощи смартфона!

Некоторые операторы блокируют возможность раздавать Wi-Fi с телефона. Если у тебя в меню нет нужных пунктов — свяжись со службой поддержки оператора.

iOS

Настройки общего доступа к сотовой сети твоего телефона находятся в меню «Настройки» «Сотовая связь» «Режим модема» .
В этом меню можно включить режим точки доступа и задать ей пароль. Именем (SSID) точки доступа будет имя телефона.
Рекомендуем не закрывать это меню до тех пор, пока клиент не подключится к точке доступа.

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

Android

Особенность телефонов на ОС Android — практически у каждого производителя свой интерфейс. Это значит, что невозможно точно сказать, где в твоем телефоне находится кнопка «Раздать интернет» (или даже как она называется). Обычно её можно найти в настройках под названиями вроде «Режим модема и переносная точка доступа».

Принципы работы дистанционно управляемой лодки на arduino

У лодок два двигателя – правый и левый. С пропеллером, имеющим форму, как у двигателя, который вращается по часовой стрелке, двигатель втягивает воздух спереди и выталкивает его сзади. Это создает силу, направленную вперед.

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

Обратное движение: Если оба двигателя вращаются против часовой стрелки, лодка движется назад.

Левостороннее движение: если вращается только правый двигатель, привод производится только на правую сторону, поэтому лодка поворачивает налево.

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

Подключите четыре выходных бита декодера (D8-D11) к входным контактам драйвера двигателя. Это достигается путем замыкания контактов AD8-AD11 в передающей части проекта на землю. Замыкание AD8 на землю, например, приводит к срабатыванию D8.

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

ASK — Amplitude Shift Keying

Как обсуждалось выше, для отправки цифровых данных по радиоканалу, эти модули используют технику, называемую Amplitude Shift Keying или ASK (амплитудная модуляция). Это когда амплитуда (то есть уровень) несущей волны (в нашем случае это сигнал 433 МГц) изменяется в ответ на входящий сигнал данных.

Это очень похоже на аналоговую технику амплитудной модуляции, с которой вы, возможно, знакомы, если вы собирали AM-радио. Иногда это называется двоичной амплитудной манипуляцией, потому что нам необходимо только два уровня. Вы можете представить это как переключатель  ВКЛ / ВЫКЛ.

  • Для лог. 1 — несущая в полную силу
  • Для лог. 0 — несущая отключена

Амплитудная модуляция имеет преимущество в том, что она очень проста в реализации. На ее основе довольно просто спроектировать схему декодера. Также для ASK требуется меньшая полоса пропускания, чем другим методам модуляции, таким как FSK (частотная модуляция). Это одна из причин того дешевизны модулей.

Однако недостатком является то, что амплитудная модуляция подвержена помехам от других радиоустройств и фоновому шуму. Но пока вы обеспечиваете передачу данных на относительно медленной скорости, она может надежно работать в большинстве сред.

Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

Подробнее

Примеры

Остальные примеры смотри в examples!

Отправка

#include <Gyver433.h>
Gyver433_TX<2> tx;  // указали пин

void setup() {
}

char data[] = "Hello from #xx"; // строка для отправки
byte count = ;                 // счётчик для отправки

void loop() {
  // добавляем счётчик в строку
  data = (count / 10) + '0';
  data = (count % 10) + '0';
  if (++count >= 100) count = ;
  tx.sendData(data);
  delay(100);
}

Приём в прерывании

#include <Gyver433.h>
Gyver433_RX<2, 20> rx;  // указали пин и размер буфера

void setup() {
  Serial.begin(9600);  
  attachInterrupt(, isr, CHANGE);  // прерывание пина радио по CHANGE
}

// спец. тикер вызывается в прерывании
void isr() {
  rx.tickISR();
}

void loop() {
  if (rx.gotData()) {                   // если успешно принято больше 0
    Serial.write(rx.buffer, rx.size);   // выводим
    Serial.println();
  }  
  delay(50);                            // имитация загруженного кода
}

Принцип работы наших радиостанций

  • они работают в диапазоне ISM 2.4 ГГц (а на западе в этом диапазоне можно работать без получения лицензии);
  • доступные скорости передачи для этих модулей составляют 250 Кбит/с, 1 Мбит/с и 2 Мбит/с;
  • в данных модулях доступно 125 возможных каналов с шагом сетки частот 1 МГц, что позволяет развернуть в одном месте 125 независимо работающих модемов.

Также одним из достоинств наших радиостанций будет то, что их диапазон работы не будет перекрываться с используемыми частотными диапазонами других УКВ радиостанций, тех, которые используют полиция, экстренные службы, рыбаки, охотники и т.д. Одиночный модуль nRF24L01 может одновременно взаимодействовать с 6-ю другими такими же модулями, находящимися в зоне его действия, то есть он будет передавать информацию, а 6 других модулей будут ее принимать. Также к достоинствам модулей nRF24L01 относится их низкое энергопотребление.

Существуют два типа модулей nRF24L01: NRF24L01+ и NRF24L01+PA+LNA (показанный на рисунке ниже) со встроенной и внешней антеннами.

Модуль NRF24L01+ имеет только встроенную в плату антенну, поэтому диапазон его действия составляет около 100 метров, что подходит для его применения внутри помещений, но является явно недостаточным для связи на большие расстояния на открытом воздухе. Модуль NRF24L01+PA+LNA с внешней антенной имеет в своем составе параметрический усилитель (PA), который усиливает уровень сигнала перед его передачей в антенну. Также этот модуль содержит малошумящий усилитель (LNA — Low Noise Amplifier), который с минимальными шумами усиливает слабые сигналы и тем самым значительно улучшает чувствительность модуля. Таким образом, с внешней антенной (с коэффициентом усиления 2 дБ) и двумя дополнительными усилителями дальность действия модуля NRF24L01+PA+LNA составляет примерно 1000 метров, что вполне подходит для проектируемых нами радиостанций.

Примеры

Рассмотрим тестовый пример, который отправляет строку Hello from #<счётчик>:

Отправка

#include <Gyver433.h>
Gyver433_TX<2> tx;  // указали пин

void setup() {
}

char data[] = "Hello from #xx"; // строка для отправки
byte count = 0;                 // счётчик для отправки

void loop() {
  // добавляем счётчик в строку
  data = (count / 10) + '0';
  data = (count % 10) + '0';
  if (++count >= 100) count = 0;
  tx.sendData(data);
  delay(100);
}

Приём

#include <Gyver433.h>
Gyver433_RX<2, 20> rx;  // указали пин и размер буфера

void setup() {
  Serial.begin(9600);  
  attachInterrupt(0, isr, CHANGE);  // прерывание пина радио по CHANGE
}

// спец. тикер вызывается в прерывании
void isr() {
  rx.tickISR();
}

void loop() {
  if (rx.gotData()) {                   // если успешно принято больше 0
    Serial.write(rx.buffer, rx.size);   // выводим
    Serial.println();
  }
}

Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.

Сборка корпуса передающей части проекта

Чтобы управлять лодкой дистанционно (с помощью пульта дистанционного управления), необходимо построить подходящий корпус – он может быть любым. В качестве материала для корпуса можно использовать фанеру, пенокартон или картон, или даже 4-миллиметровые листы МДФ.

Эти листы были разрезаны на две части длиной 10 см и шириной 5 см, на которых мы отметили расположение кнопок. На левой стороне листа мы разместили кнопки “право-лево”, а на правой – “вперед-назад”. С другой стороны листа мы соединили кнопки с основной схемой.

После этого мы поместили основную плату нашего пульта дистанционного управления между двумя кусками МДФ и закрепили их длинными болтами.

Подключение приемника

Так как уже на небольшом расстоянии сигнал будет гораздо меньше помехи, понятно, что мы с помехами должны бороться по всем фронтам: и схемотехническими и программными методами. Последнее за нас делают библиотеки, но какая бы математика не применялась в программной обработке, желательно сначала сделать все для того, чтобы логическая единица на выходе появлялась только при всплеске полезного сигнала и не появлялась при наличии помехи. Иными словами, классно было бы от помех при приеме отстроиться заранее по максимуму.

Стандартный метод снижения помех, известный в мои времена каждому школьнику, собравшему хоть один радиоприемник или усилитель, заключается в том, что для чувствительных к помехам узлов необходимо делать отдельное питание, по максимуму изолированное от остальных схем. Можно его делать разными методами: когда-то ставили отдельный стабилитрон, сейчас часто изолируют питание проблемного узла LC-фильтром (так рекомендуется поступать, например, для АЦП, посмотрите даташиты на AVR-контроллеры). Но в наших условиях, когда современные компоненты невелики и дешевы, проще просто поставить на приемник отдельный от всего остального стабилизатор.
Стабилизатор, например, типа LP2950-5.0 плюс два необходимых конденсатора к нему в самом дешевом варианте (когда оба конденсатора — керамические, в диапазоне 1–3,3 мкФ) добавит к стоимости вашей схемы рублей шестьдесят максимум. Но я предпочитаю не экономить: на выходе ставлю обычный керамический, а на входе электролит (10–100 мкФ), причем твердотельный (полимерный) или танталовый. Обойтись керамическими конденсаторами и там и там можно, если входное напряжение 7-12 вольт поступает с батареек-аккумуляторов или с другого аналогового стабилизатора. Импульсные стабилизированные источники и простейшие нестабилизированные выпрямители требуют дополнительной фильтрации. Можно использовать дешевый алюминиевый электролит, если ставить параллельно ему керамический 0,1 мкФ, еще лучше поставить на входе последовательную индуктивность в несколько долей или единиц миллигенри.

Стабилизатор следует устанавливать прямо около приемника, длина проводников должна быть минимальна

Вместо LP2950 можно взять LM2931 или аналогичный с маленьким проходным напряжением (это особенно важно, если схема питается от батареек — для обычного LM78L05 входное напряжение должно быть не менее 7,5, а лучше 8-9 вольт)

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

В простейшем варианте в качестве антенн можно обойтись обрезками одножильного провода сечением не меньше 0,5 мм и длиной 17 см ± 1-3 мм. Не следует употреблять многожильный монтажный провод! В продаже имеются более компактные спиральные антенны, но я лично их эффективность не испытывал. Кончик антенны и у передатчика и у приемника запаивается в соответствующее отверстие в углу платы (не ошибитесь в модернизированном варианте передатчика — там слово ANT тоже не на месте, см. рис. выше).

Использование

// ========= Gyver433_TX =========
void sendData(T &data);                 // отправить данные любого типа (CRC добавляется автоматически)
void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется)

// ========= Gyver433_RX =========
// приём в прерывании
void tickISR();             // тикер приёма для вызова в прерывании по CHANGE
uint8_t tickISRraw();       // ручной приём в прерывании по CHANGE. Вернёт 1 (начало приёма), 2 (принят байт), 3 (конец пакета)

// приём в loop
uint16_t tick();            // неблокирующий приём. Вернёт количество успешно принятых байт
uint16_t tickWait();        // блокирующий приём. Вернёт количество успешно принятых байт

bool readData(T &data);     // прочитает буфер в любой тип данных (в указанную переменную)
uint16_t getSize();         // получить размер принятых данных
uint16_t gotData();         // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx)
uint8_t getRSSI();          // получить качество приёма (процент успешных передач 0.. 100)

uint8_t buffer[];           // доступ к буферу приёма
uint8_t byteBuf;            // доступ к буферу принятого байта

// ============= CRC =============
// можно использовать встроенные функции для генерации байта CRC для ручной упаковки пакетов
uint8_t G433_crc8(uint8_t *buffer, uint8_t size);       // ручной CRC8
uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size);    // ручной CRC XOR

// ====== ДЕФАЙНЫ-НАСТРОЙКИ ======
// вызывать перед подключением библиотеки
#define G433_FAST           //  короткая синхронизация для зелёных модулей
#define G433_MEDIUM         //  средняя синхронизация при отправке на SYN480R ЧАЩЕ 400мс (активно по умолчанию)
#define G433_SLOW           //  длинная синхронизация при отправке на SYN480R РЕЖЕ 400мс
#define G433_SPEED 1000     // [RX/TX] скорость, должна быть одинакова на RX и TX, 100-10000 бит/с, по умолч. 2000 бит/с 
#define G433_RSSI_COUNT 8   //  количество успешно принятых пакетов для расчёта RSSI (по умолч. 8)
#define G433_CUT_RSSI       //  убрать расчёт RSSI из кода (сэкономит чуть памяти)

Работа приёмника без прерываний

Для приёма данных достаточно вызывать в основном цикле метод , он сам опрашивает пин радио.

  • Если в программе есть блокирующие места и loop() выполняется с задержками — будет потеря данных
  • Для более надёжного приёма рекомендуется вызывать , она блокирует выполнение кода на время приёма.

Работа приёмника с прерываниями

Рекомендуется использовать приём в прерывании по CHANGE, для этого нужно вызывать в нём .
Тогда приём будет асинхронный и будет работать даже в загруженной программе.

Если стандартных пинов прерываний не хватает, можно задействовать PCINT. Вручную или с помощью библиотеки https://github.com/NicoHood/PinChangeInterrupt

Характеристики fs1000a/xd-fst

Рабочее напряжение: DC 5VОперационный ток: 4mРежим модуляции: OOK (AM)Рабочая температура: -10 ° C ~ 70 ° CЧувствительность: -110dBOрабочая частота: 433MHzРазмер: 30 x 14 x 7mm

Приемник состоит из колебательного контура и усилителя. Вывод 1 – VCC, выводы 2 и 3 – DATA, а вывод 5 – GND. В радиомодуле выходной уровень логический, но сигнал принимается как аналоговый. Следовательно, за декодирование сообщения отвечает устройство (обычно Arduino), принимающее сигнал.

Вот схема, показывающая радиомодули 433 МГц, подключенные к Arduino. Используя Arduino, модулированные сигналы можно обрабатывать, подключая выходы приемника и передатчика к цифровым портам.

К трансиверам можно прикрепить антенну, чтобы значительно улучшить дальность приема. Одним из самых простых решений является кусок провода с импедансом 50 Ом длиной 17 см. Поскольку он представляет собой 1/4 волны, он будет резонировать на частоте 433 МГц.

Используя библиотеку VirtualWire, сигналы Arduino можно кодировать и раскодировать.

Отправитель:

#include"VirtualWire.h"constint led_pin =13;// Пин светодиодаconstint transmit_pin =12;// Пин подключения передатчикаvoid setup(){
	vw_set_tx_pin(transmit_pin);
	vw_setup(2000);// Скорость передачи (Бит в секунду)
	pinMode(led_pin, OUTPUT);}void loop(){constchar*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 messageVW_MAX_MESSAGE_LEN];// Буфер для хранения принимаемых данныхbyte messageLength = VW_MAX_MESSAGE_LEN;// Размер сообщенияconstint led_pin =13;// Пин светодиодаconstint 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 =; i < messageLength; i  ){Serial.write(messagei]);// выводим их в одной строке}Serial.println();
		digitalWrite(led_pin, LOW);// Гасим светодиод в конце}}

Примеры кода для работы с передатчиком MX-F01 с использованием библиотеки VirtualWire

Пример 1

Данный скетч будет отправлять раз в секунду сообщение «Hello World». Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.

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 World»; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда >

Пример 2

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

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() digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи

String millisresult = String(millis()); // Присваиваем переменной значение, равное количеству миллисекунд с момента начала выполнения текущей программы char msg; millisresult.toCharArray(msg, 14);

vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда >

Описание

Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?

  • Неприхотливы к питанию
  • Потребляют небольшой ток
  • Занимают один пин МК
  • В два раза дешевле
  • Выше дальность связи при той же мощности
  • Более высокая проникающая способность

Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.

Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.

Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе. Правые модули, несмотря на самый высокий ценник, работают хуже всех и к покупке не рекомендуются.

Ток потребления модулей:

  • FS1000A : передача 12 мА, холостой 10 мкА
  • MX-RM-5V : 3.7 мА
  • SYN115 : передача 14 мА, холостой 0.5 мкА
  • SYN480R : 4.5 мА

Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Семинар по технике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: