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 pinsint 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);
}
}
}