Рубрики
Схемы на Arduino

Автоматизация дома с помощью Arduino

В этой статье мы рассмотрим проектирование системы автоматизации дома на основе персонального компьютера и платы Arduino, с помощью которой мы сможем включать и выключать различные электронные устройства. Для демонстрации возможностей нашего устройства мы использовали 3 электрические лампочки, которые будут обозначать свет в комнате, вентилятор и телевизор. Управлять работой устройства будет плата Arduino Uno. Для включения и выключения цепей лампочек мы будем использовать реле на 5 В.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Драйвер двигателей ULN2003 (купить на AliExpress).
  4. Электрические лампочки с держателями.
  5. Кабель для последовательной связи.
  6. Реле на 5 Вольт.
  7. Соединительные провода.
  8. Макетная плата.
  9. Компьютер (ноутбук).
  10. Источник питания.

Используемые реле

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

  1. Однополюсные и на одно направление (SPST).
  2. Однополюсные на два направления (SPDT).
  3. Двухполюсные на одно направление (DPST).
  4. Двухполюсные на два направления (DPDT).

В нашем проекте мы использовали однополюсные реле на два направления (SPDT). Эти реле включают в себя 5 контактов, из которых 2 отведено под катушку, один под полюс (переключающий контакт, pole), а остальные два называются «Normally Connected» (NC, нормально замкнутые) и «Normally Open» (NO, нормально разомкнутые).

Работа схемы

Схема устройства представлена на следующем рисунке.

ЖК дисплей подключен к плате Arduino в 4-битном режиме и используется для отображения статуса операций. Контакты ЖК дисплея RS, EN, D4, D5, D6, D7 подключены к цифровым контактам Arduino 7, 6, 5, 4, 3, 2. Для передачи команд плате Arduino от лэптопа (компьютера) мы используем USB-кабель который применяется для загрузки программ в плату Arduino. Драйвер реле ULN2003 используется для управления реле. 5-вольтовые реле типа SPDT (однополюсные на два направления) используются для управления (включения/выключения) света, вентилятора и телевизора (условно). Реле подключены к контактам Arduino 3, 4 и 5 через микросхему драйвера реле ULN2003.

Последовательный порт связи используется для управления контролируемыми устройствами. Мы передаем команды типа LIGHT ON, LIGHT OFF, FAN ON, FAN OFF, TV ON AND TV OFF для управления домашними электронными устройствами. После приема этих команд плата Arduino передает сигнал на соответствующие реле, которые отвечают за включение/выключение подключенных к ним устройств.

Когда мы будем нажимать ENTER после набора команды в гипер терминале (hyper terminal) или последовательном терминале (serial terminal) Arduino будет выполнять соответствующую команду, например, включение вентилятора. Также соответствующее сообщение будет показываться на ЖК дисплее.

Исходный код программы

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

#include <LiquidCrystal.h>
#include<string.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define light 3
#define fan 4
#define TV 5

После этого инициализируем последовательный порт для работы на скорости 9600 бод/с и задаем направление работы для инициализированных контактов.

lcd.begin(16, 2);
Serial.begin(9600);
pinMode(light, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(TV, OUTPUT);
lcd.print(" Home Automation ");
lcd.setCursor(0,1); 

Для приема команд по последовательному порту мы будем использовать две функции — Serial.available, которая будет проверять поступили ли какие-нибудь данные по последовательному порту или нет, и Serial.read, которая будет считывать данные на последовательном порту.

while(Serial.available())
{
char Inchar=Serial.read();

После приема данных по последовательному порту мы сохраняем эти данные в строке и затем ждем нажатия клавиши Enter (на компьютере).

str[i]=Inchar;
i++;
lcd.print(Inchar);
delay(50);
if(Inchar == 0x0d)
{
temp=1;

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

else if(strncmp(str, "TV ON", 5)==0)
{
digitalWrite(TV, HIGH);

Для сравнения строк мы будем использовать библиотеку string.h, которая содержит полезные нам функции strcmp, strncmp, strcpy и т.д.

Далее приведен полный текст программы.

Видео, демонстрирующее работу схемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *