Introduction: Керування Розетками Через Bluetooth

В проекті описується процес створення розеток, робота яких керується через бездротовий інтерфейс.

Step 1: Step 1: Компоненти

Плата Arduino

Модуль з реле

Модуль Bluetooth HC-05

Джерело живлення 12 Вольт

Розетка 220 Вольт

Вилка до розетки

Step 2: Step 2: Підключення Компонентів

Приєднати:

Вивід Rx з HC-05 до піна 11

Вивід Tx з HC-05 до піна 10

Виводи +5 та GND з плати реле до відповідних на платі Ардуїно

Вивід з плати реле In1 до виводу 6

Вивід з плати реле In2 до виводу 5

Контактні пари кожного з реле приєднати в розрив одного з провідників, які йдуть на розетки, керувати якими планується

До вхідної вилки приєднати джерело живлення для плати Ардуїно

Step 3: Step 3: Завантаження Програми

Для роботи з інтерфейсом UART необхідно додати бібліотеку SoftwareSerial

Зазначити, які піни будуть працювати з блютуз

Зазначити, які піни будуть працювати з реле

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

Прописати взаємодію між пінами, які засвічують світлодіоди

Для коректної роботи необхідно виставити піни, які працюють з реле на вихід

Піни, які працюють з UART інтерфейсом: Rx як вхід, Tx як вихід.

В залежності від даних, отриманих по послідовному порту, будуть змінюватися значення на пінах. які під'єднані до керувальних обмоток реле

#include <SoftwareSerial.h>
// Bluetooth pins
int g_rx_pin = 10;
int g_tx_pin = 11;
// Relay pins
int g_first_relay_pin = 5;
int g_second_relay_pin = 6;
// LED pins
int g_green_led_pin = 2;
int g_red_led_pin = 3;
// Keys for enabling and disabling power socket (receive them via bluetooth)
const char* g_enable_key = "BTotj3LDmscaTK-1\r\n";
const char* g_disable_key = "BTotj3LDmscaTK-0\r\n";
int g_key_length = 18;
SoftwareSerial BTSerial(g_rx_pin, g_tx_pin);
void enable_red_led()
{
digitalWrite(g_green_led_pin, LOW);
digitalWrite(g_red_led_pin, HIGH);
}
void enable_green_led()
{
digitalWrite(g_red_led_pin, LOW);
digitalWrite(g_green_led_pin, HIGH);
}
void setup(void)
{
pinMode(g_green_led_pin, OUTPUT);
pinMode(g_red_led_pin, OUTPUT);
enable_red_led();

pinMode(g_first_relay_pin, OUTPUT);
pinMode(g_second_relay_pin, OUTPUT);
digitalWrite(g_first_relay_pin, HIGH); // Turn off the first relay channel
digitalWrite(g_second_relay_pin, HIGH); // Turn off the second relay channel

pinMode(g_rx_pin, INPUT);
pinMode(g_tx_pin, OUTPUT);
BTSerial.begin(38400);
}
void loop(void)
{
int i = 0;
char recv_buff[19] = {0};

bool can_read_sth = BTSerial.available();
if (can_read_sth)
{
do
{
if (i > g_key_length)
{
break;
}

recv_buff[i++] = BTSerial.read();
//This delay helps us to read everything, cause processor is much faster then the baud rate
delay(10);
} while (BTSerial.available() > 0);
if (strcmp(recv_buff, g_enable_key) == 0)
{
enable_green_led();

// Enable relay pins. LOW, cause they are inverted
digitalWrite(g_first_relay_pin, LOW);
digitalWrite(g_second_relay_pin, LOW);


}
else if (strcmp(recv_buff, g_disable_key) == 0)
{
enable_red_led();
digitalWrite(g_first_relay_pin, HIGH);
digitalWrite(g_second_relay_pin, HIGH);

}
}
}