Каталог
|
Arduino и радио модули частотой 433Мгц2016-05-06 Всі статті →Maksim Ursan На данном этапе жизни человечества беспроводное управление какими-то предметами есть неотъемлемой частью жизни, будь то телевизор, авто на радиоуправлении, или даже ворота. Имея пару Arduino и радио модули мы запросто можем создать беспроводное управление чего-либо. В моем исполнении были использованы самодельные Arduino на Atmega 8. Обмен информацией происходит с помощью радио модулей частота которых 433Мгц. Весь обмен между Arduino происходит через последовательный порт на скорости 2000 бит / с. Детали:
Рисунок 1 – Принципиальная схема устройства
За неимением модели радио модулей в Proteus, было принято решение соединить между собой передатчик и приемник проводником. Это показано на Рисунке 1, сверху находится передатчик, под ним приемник.
Рисунок 2 - Радио модули
Для использования радио модулей следует загрузить библиотеку "VirtualWire.h".
Скетч передатчика: #include <VirtualWire.h>
int switchPin = 4; int switchPin1 = 2; boolean lastButton = LOW; boolean currentButton = LOW; boolean lastButton1 = LOW; boolean currentButton1 = LOW; int check = 0; int check1 = 0; // Объявление переменных void setup() // Основные настройки работы мк { pinMode(switchPin, INPUT); pinMode(switchPin1, INPUT);
vw_setup(2000); // инициализация работы модуля передатчика установления скорости передачи }
boolean debounce(boolean last) // Функции для отслеживания нажатия кнопок управления
{ boolean current = digitalRead(switchPin); if (last != current) { delay(5); current = digitalRead(switchPin); } return current; }
boolean debounce1(boolean last) // Функции для отслеживания нажатия кнопок управления
{ boolean current = digitalRead(switchPin1); if (last != current) { delay(5); current = digitalRead(switchPin1); } return current; } void loop() { currentButton = debounce(lastButton); currentButton1 = debounce1(lastButton1); if (lastButton == LOW && currentButton == HIGH && check == 0) { send("0"); delay(500); check = 1; } // Если кнопка 1 нажата круг для первого нагрузки разрывается else if (lastButton == LOW && currentButton == HIGH && check == 1) { send("1"); delay(500); check = 0; } // Если кнопка 1 нажата круг для первого нагрузки замыкается else if (lastButton1 == LOW && currentButton1 == HIGH && check1 == 0) { send("2"); delay(500); check1 = 1; } // Если кнопка 2 нажата круг для второй нагрузки замыкается
else if (lastButton1 == LOW && currentButton1 == HIGH && check1 == 1) { send("3"); delay(500); check1 = 0; } // Если кнопка 2 нажата круг для второй нагрузки замыкается}
void send (char *message) { vw_send((uint8_t *)message, strlen(message// Кодирования сообщения для передачи vw_wait_tx(); // Ждем пока все сообщения отправить } // Функция реализации передачи информации
Скетч для приемника:
#include <VirtualWire.h>
byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения полученных сообщений byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения int relayPin = 4; int relayPin1 = 3;
void setup() { pinMode(relayPin, OUTPUT); pinMode(relayPin1, OUTPUT); digitalWrite(relayPin, HIGH); digitalWrite(relayPin1, HIGH);
vw_setup(2000); // vw_rx_start(); // }
void loop() { if (vw_get_message(message, &messageLength))
{ for (int i = 0; i < messageLength; i++) { char c = message[i]; char o = '1'; char f = '0'; char on = '2'; char of = '3';
if(c == o) { digitalWrite(relayPin, HIGH); }
if(c == f) { digitalWrite(relayPin, LOW); }
if(c == on) { digitalWrite(relayPin1, HIGH);
}
if(c == of) { digitalWrite(relayPin1, LOW); }
} } }
Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Jercy
18.04.2024 16:12:07
Автору дякую за статтю. А от до адміністраторів сайту є ВЕЛИКЕ ПРОХАННЯ! - будь ласка, прикрутіть до сайту якісь модуль щоб код можна було вставляти саме туди. Бо читати його саме в статті геть не зручно Дякую.
Руслан
25.10.2020 01:04:27
Клас!
|