Сигнализация на Ардуино своими руками

Arduino, простая сигнализация для дома или гаража

Охранная сигнализация на Arduino Uno для дома или гаража или садового участка сможет предупредить владельца о происшествии и отправить сообщение на смартфон.

Простая охранная сигнализация для дома на Arduino Uno — тема данного обзора. Несмотря на то, что микроконтроллеры данного семейства были изначально предназначены для обучения студентов, вполне реально сделать действительно полезный проект на Arduino. Охранные сигнализации для дома или садового участка смогут предупредить владельца о ЧП и послать сообщение с датчиков на смартфон.

Сигнализация для дома на Arduino

Рассмотрим, как сделать на Arduino Uno или Nano сигнализацию для дома, загородного садового участка или гаража. В проекте мы использовали сенсор движения, датчик воды и температуры — это набор основных сенсоров для самой простой системы оповещения. Вы узнаете о прорыве водопровода, снижении температуры в доме или проникновении посторонних людей в помещении в любое время и в любом месте.

Датчики Ардуино для охранной сигнализации

Датчики Ардуино для домашней сигнализации
Датчики Ардуино для домашней сигнализации

В данном проекте для передачи информации по сети Интернет мы использовали старый смартфон. Соответственно в месте расположения вашей недвижимости должен быть сигнал GPRS и у любого сотового оператора подключен самый простой тариф с выходом в Интернет. Если эти условия не выполняются, то в охранной системе предусмотрена звуковая сирена, которая тоже может спугнуть грабителей.

В проекте использованы самые простые сенсоры — температурный датчик DHT11, датчик утечки воды, который можно сделать самому, а также датчик движения. Если вы решите сделать более сложную сигнализацию — рекомендуем вам посмотреть проект пожарной сигнализации или сигнализации на GSM. Также потребуется установить приложение на смартфон и зарегистрировать два аккаунта в Твиттере.

Как сделать сигнализацию Ардуино

Для этого проекта нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • смартфон с выходом в Интернет;
  • блютуз модуль HC-05;
  • датчик температуры и влажности DHT11;
  • датчик утечки воды (water sensor);
  • датчик движения и кнопка (переключатель);
  • светодиоды, резисторы, провода и т.д.
Схема сигнализации на Ардуино Нано для дома
Схема сигнализации на Ардуино Нано для дома

Скетч для сигнализации, все необходимые библиотеки и приложение для смартфона можно скачать одним архивом здесь. Отметим, что нельзя будет дистанционно управлять Arduino, так как проект максимально простой. Вы сможете лишь в сообщениях на смартфоне узнавать о показаниях датчиков, установленных в доме, через заданный промежуток времени или при срабатывании какого-либо датчика.

Скетч охранной сигнализации на Arduino Uno / Nano

#include <SoftwareSerial.h>    // подключение библиотеки SoftwareSerial.h
SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно

#include <DHT.h>                      // подключаем библиотеку для датчика
DHT dht(16, DHT11);                // сообщаем на каком порту будет датчик
int tmp;

#define PIR 5     // порт для подключения датчика движения
int pir;
#define KNP 7    // порт для подключения переключателя
int knp;
#define WTR 19 // порт для подключения датчика воды
int wtr;

#define LED 11  // порт для подключения светодиодов
#define BUZ 9   // порт для подключения пьезодинамика

// строки для идентификации информации, получаемой на смартфоне
String stringT = String("*");
String stringP = String("^");
String stringW = String("-");
String stringH = String("#");

// переменные для счетчиков, отсчета циклов и т.д.
unsigned long motion;
unsigned long hour;
byte m, s1, s2, s3, c = 10;

void setup() {
 mySerial.begin(9600);
 Serial.begin(9600);
 dht.begin();

 pinMode(PIR, INPUT);
 analogWrite(PIR, LOW);

 pinMode(KNP, INPUT);
 analogWrite(KNP, LOW);

 pinMode(WTR, INPUT);
 analogWrite(WTR, LOW);

 // проверка светодиодов и пищалки при включении питания
 pinMode(BUZ, OUTPUT);
 pinMode(LED, OUTPUT);
 analogWrite(LED, 255);
 tone(BUZ, 100);
 delay(1000);
 analogWrite(LED, 0);
 noTone(BUZ);
 delay(1000);
}

void loop() {

 tmp = dht.readTemperature();
 pir = digitalRead(PIR);
 knp = digitalRead(KNP);
 wtr = analogRead(WTR);

 // запускаем счетчик
 hour = millis();

 // 3600000 миллисекунд - это 1 час, 10800000 - 3 часа
 // если прошло 3 часа - отправляем данные на смартфон
 // при необходимости ставите свои значения вместо 10800000
 if (millis() - hour > 10800000) {

 mySerial.println(tmp + stringT);  // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды
 mySerial.println(stringH);             // отправляем сигнал, что 3 часа прошло
 }

 // ведем отсчет циклов, каждый десятый цикл отправляем данные на смартфон
 c--;
 Serial.print(c);
 Serial.println(" - цикл");
 Serial.println("");
 delay(1000);
 noTone(BUZ);

 if (c > 10) { c = 10; }
 if (c < 1) { s1 = 0; s2 = 0; s3 = 0;

 mySerial.println(tmp + stringT);  // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды

 // выводим на монитор порта номер все данные с датчиков
 Serial.print("TMP = ");
 Serial.println(tmp);
 Serial.print("PIR = ");
 Serial.println(pir);
 Serial.print("KNP = ");
 Serial.println(knp);
 Serial.print("WTR = ");
 Serial.println(wtr);
 Serial.println("");
 }

 // СРАБОТАЛ ДАТЧИК ДВИЖЕНИЯ И КНОПКА ВЫКЛЮЧЕНА - ВКЛЮЧАЕМ СВЕТ
 if (pir == HIGH && knp == LOW) {
 analogWrite(LED, 255);
 }

 // ДАТЧИК ДВИЖЕНИЯ ОТКЛЮЧИЛСЯ И КНОПКА ВЫКЛЮЧЕНА - ВЫКЛЮЧАЕМ СВЕТ
 if (pir == LOW && knp == LOW) {
 motion = millis();
 while (pir == LOW)
 {

 tmp = dht.readTemperature();
 pir = digitalRead(PIR);
 knp = digitalRead(KNP);
 wtr = analogRead(WTR);

 c--;
 Serial.print(c);
 Serial.println(" - цикл");
 Serial.println("");
 delay(1000);
 noTone(BUZ);

 if (c > 10) { c = 10; }
 if (c < 1) { s1 = 0; s2 = 0; s3 = 0;

 mySerial.println(tmp + stringT);  // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды

 // выводим на монитор порта номер все данные с датчиков
 Serial.print("TMP = ");
 Serial.println(tmp);
 Serial.print("PIR = ");
 Serial.println(pir);
 Serial.print("KNP = ");
 Serial.println(knp);
 Serial.print("WTR = ");
 Serial.println(wtr);
 Serial.println("");
 }

 // ИНТЕРВАЛ ВЫКЛЮЧЕНИЯ СВЕТА В МИЛЛИСЕКУНДАХ
 if (millis() - motion > 5000) {
 analogWrite(LED, 0);
 break;
 }

 if (pir == HIGH) {
 analogWrite(LED, 255);
 break;
 }
 }
 }

 // СРАБОТАЛ ДАТЧИК ДВИЖЕНИЯ И КНОПКА ВКЛЮЧЕНА - ЗАПУСКАЕМ ТАЙМЕР
 if (pir == HIGH && knp == HIGH) {
 motion = millis();

 delay(1000);

 analogWrite(LED, 255);
 Serial.println("СРАБОТАЛ ДАТЧИК"); 
 Serial.println("");
 delay(1000);

 while (knp == HIGH) {

 tmp = dht.readTemperature();
 pir = digitalRead(PIR);
 knp = digitalRead(KNP);
 wtr = analogRead(WTR);

 c--;
 Serial.print(c);
 Serial.println(" - цикл");
 Serial.println("");
 delay(1000);
 noTone(BUZ);

 if (c > 10) { c = 10; }
 if (c < 1) { s1 = 0; s2 = 0; s3 = 0;

 mySerial.println(tmp + stringT);  // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды

 // выводим на монитор порта номер все данные с датчиков
 Serial.print("TMP = ");
 Serial.println(tmp);
 Serial.print("PIR = ");
 Serial.println(pir);
 Serial.print("KNP = ");
 Serial.println(knp);
 Serial.print("WTR = ");
 Serial.println(wtr);
 Serial.println("");
 }

 // ЕСЛИ ДАТЧИК ДВИЖЕНИЯ ОТКЛЮЧИЛИ - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ
 if (knp == LOW) {
 Serial.println("СИГНАЛИЗАЦИЯ ОТКЛЮЧЕНА");
 Serial.println("");
 delay(1000);
 }

 // ЕСЛИ ПРОШЛО БОЛЕЕ 10 СЕКУНД - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ
 if (millis() - motion > 10000 && s1 != 1) { m = 1; goto message1; }
 delay(1000);
  }
 }

 // ЕСЛИ ПРОИЗОШЛА УТЕЧКА ВОДЫ - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ
 if (wtr > 500 && s2 != 2) { m = 2; goto message2; }
 if (wtr > 500) { tone(BUZ, 400); }
 if (wtr <= 500) { noTone(BUZ); }

 // ЕСЛИ УПАЛА ТЕМПЕРАТУРА - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ
 if (tmp < 20 && s3 != 3) { m = 3; goto message3; }
 if (tmp < 20) { tone(BUZ, 200); }
 if (tmp >= 20) { noTone(BUZ); }

message1:
 while (m == 1) {
 Serial.println("СИГНАЛ ТРЕВОГИ ОТПРАВЛЕН НА БЛЮТУЗ");
 Serial.println("");
 delay(1000);
 mySerial.println(tmp + stringT); // отправляем значение температуры
 mySerial.println(1 + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды
 s1 = 1; m = 0; break;
 }

message2:
 while (m == 2) {
 Serial.println("СИГНАЛ УТЕЧКИ ВОДЫ ОТПРАВЛЕН НА БЛЮТУЗ"); 
 Serial.println("");
 delay(1000);
 mySerial.println(tmp + stringT);  // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(500 + stringW); // отправляем данные с датчиков воды
 s2 = 2; m = 0; break;
 }

message3:
 while (m == 3) {
 Serial.println("СИГНАЛ ТЕМПЕРАТУРЫ ОТПРАВЛЕН НА БЛЮТУЗ"); 
 Serial.println("");
 delay(1000);
 mySerial.println(20 + stringT);    // отправляем значение температуры
 mySerial.println(pir + stringP);    // отправляем наличие движения в доме
 mySerial.println(wtr + stringW); // отправляем данные с датчиков воды
 s3 = 3; m = 0; break;
 }

}

Пояснения к коду:

  1. ;
  2. .

На первый взгляд схема может показаться сложной, однако это не так. Сигнализацию можно собрать на любой плате, в том числе и Arduino Uno. Вместо светодиодов можно можно использовать LED ленту, но при этом питание для платы нужно будет уже 12 Вольт, и подключать LED ленту не к 5V, а к пину Vin Arduino. Со светодиодами можно использовать для питания схемы обычную зарядку от телефона на 5 Вольт.

Установка приложения на смартфон для сигнализации

Чтобы установить приложение закачайте файл signalizaciya.apk на свой телефон через USB шнур, найдите его в памяти телефона и нажмите «Установить». Этот телефон должен быть всегда в зоне Bluethoth сигнала Ардуино. После установки откройте приложение и нажмите кнопку «Настроить». Здесь потребуется указать минимальное и максимальное значение температуры, при которой будет отправляться сообщение.

А сейчас самое сложное — настройка аккаунтов в Twitter. Укажите в настройках логин пользователя в Твиттере, кому вы будете отправлять сообщение. Также требуется указать логин, API key и API secret key от лица которого будут поступать сообщения. Последние нововведения обусловлены борьбой со спамом и сбором информации о пользователях в соцсети. Как получить API key и API secret — читайте в этом обзоре.

На телефоне, который будет всегда при вас и будет получать сообщения потребуется установить официальное приложение Twitter с PlayMarket и войти в него под нужным логином. В итоге приложение signalizaciya.apk с телефона, находящегося в доме, будет собирать данные с датчиков Ардуино и отправлять их личным сообщением через Твиттер пользователю, под чьим логином вы установили приложение Twitter.

Если у вас возникли проблемы с настройками сигнализации на Ардуино — пишите свои вопросы в комментариях к этому обзору.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)
Загрузка...

2 комментариев для “Сигнализация на Ардуино своими руками

    1. Надо подумать просто, пишите большие комментарии — не ограничивайтесь одним предложением.

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

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