Підключення до Arduino 433МГц радіопередавача і радіоприймача. Безпровідне керування реле.

В даній статті ми розглянемо роботу Arduino з 433 МГц радіопередавачем та приймачем (рисунок 1). Зокрема реалізуємо безпровідне керування електромагнітним реле за допомогою тактової кнопки.

rf_433
Рисунок 1 – Радіоприймач та передавач

Бездротові модулі передавачі дозволяють Arduino безпровідно спілкуватися з іншими Arduino, або з радіо керованими пристроями, які працюють на тій же частоті (433 МГц в даному випадку).

Вони працюють в парі, тобто для роботи нам потрібні як приймач, так і передавач.

Технічні характеристики радіомодулів

TX (Transmitter) Передавач

Робоча напруга: 3В ~ 12В
Робочий струм: max?40mA (12В), min?9mA (3В)
Режим резонансу: звукова хвиля резонансу (SAW)
Режим модуляції: ASK/ООК
Робоча частота: 315MHz-433.92 доступне налаштування частоти.
Передавальна потужність: 25mW (315MHz при 12В)
Помилка частоти: + 150 кГц (макс)
Швидкість: ?10Kbps

RX (Receiver) Приймач

Робоча напруга: 5.0VDC + 0.5V
Робочий струм: ?5.5mA (5.0VDC)
Принцип роботи: однокристальний супер регенераційний прийом
Метод роботи: OOK/ASK
Робоча частота: 315MHz-433.92 доступне налаштування частоти.
Пропускна здатність: 2 МГц (315 МГц, маючи результат в тестуванні на 3dBm чутливості)
Чутливість: Excel -100dBm (50?)
Швидкість передачі: <9.6 Kbps (в 315 МГц і -95dBm)

Одна з основних вимог до радіомодулів – це дальність і якість їх дії. Проте їх можна значно підвищити, додатково приєднавши антену – її рекомендована довжина для передавачів з частотою 433 МГц становить близько 17 см.

Тепер перейдемо до підключення самих елементів. Кожен з них має виводи “живлення” і “земля”, а також цифровий вихід для даних. Всі вони підписані на самій платі, тому підключення не завдасть ніяких проблем. Додаткове підключення антени підвищить якість роботи модулів, однак дальність зв’язку можна поліпшити і за рахунок подачі на модуль живлення – якщо воно складе 12 В, то дальність і надійність зв’язку значно зростуть.



Підключення передавача

transmitter_arduino

Підключення приймача

receiver_arduino

Реле підключимо до цифрового виводу 7 на Arduino з приймачем.
Кнопку підключимо до цифрового виводу 8 на Arduino з передавачем.

Схема з передавачем і кнопкою

transmitter

Схема з приймачем і реле

receiver

Код програми для передавача

/*
SimpleSend
This sketch transmits a short text message using the VirtualWire library
connect the Transmitter data pin to Arduino pin 12
*/
#include VirtualWire.h//назва бібліотеки має бути вказана у кутових дужках <>

int switchPin = 8;
boolean lastButton = LOW;
boolean currentButton = LOW;
int check = 0;

void setup()
{
pinMode(switchPin, INPUT);

// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
}

boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH && check == 0)
{
send("on");
delay(500);
check = 1;
}
else

if (lastButton == LOW && currentButton == HIGH && check == 1)
{
send("off");
delay(500);
check = 0;
}
}

void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}

Код програми для приймача

/*
SimpleReceive
This sketch displays text strings received using VirtualWire
Connect the Receiver data pin to Arduino pin 11
*/
#include VirtualWire.h//назва бібліотеки має бути вказана у кутових дужках <>

byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
int relayPin = 7;

void setup()
{
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);

Serial.begin(9600);
Serial.println("Device is ready");
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver
}
void loop()
{
if (vw_get_message(message, &messageLength)) // Non-blocking

{
Serial.print("Received: ");
for (int i = 0; i < messageLength; i++) { char c = message[i]; Serial.print(c); char on = 'on'; if(c == on) { digitalWrite(relayPin, LOW); } char off = 'of'; if(c == off) { digitalWrite(relayPin, HIGH); } } Serial.println(); } }

Результат проробленої нами роботи:

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.