Делаем простейшую сигналку на GSM SIM800L и Аrduino для дачи, гаража

С наступлением дачного сезона возникла необходимость охраны дачного домика. Хотелось сделать простенькую но надежную охранную сигнализацию с передачей сигнала на сотовый телефон. Решено было собрать устройство с передачей тревоги на сотовый телефон на базе электронных плат приобретенных на Алиэкспресс. Как говорится дешево но сердито. Основными элементами данной конструкции являются модуль GSM SIM800L и плата Aрдуино(можно применить любую- Nano ,Uno,Pro Mini и тому подобные).

Устройство на пять тревожных входов для контактных датчиков. К каждому входу можно подключить один или несколько датчиков последовательно соединенных В скетче присвоить каждому охранному шлейфу свое название (например-входная дверь, окно 1, окно 2 и так далее). Охранное устройство работает так: при разрыве электрической цепи первого шлейфа блок сперва дает вызов на первый телефон абонента, следом прекращает звонок и также на №2. №2 нужен в виду того что если вдруг первый абонент не в сети или подсел аккумулятор и прочие неприятности). Если срабатывают шлейфа следующие за первым, тогда происходит отсылка СМС сообщения с названием сработавшего шлейфа, в том же случае на оба номера абонентов.

Перечень инструментов и материалов.
-литий –ионный аккумулятор от старого телефона 3,7В1600мА-1шт
-соединительные провода;
-паяльник;
-тестер;
-прозрачная пластмассовая коробка -1шт;
-плата Arduino Nano -1 шт;
-резисторы 10кОм-7шт;
— макетная плата из фольгированного текстолита;
— выключатель питания-1шт;
-модуль SIM800L -1шт;
-понижающая плата 1-2А -1шт;
-клеммные разъемы.

Шаг первый. Сборка схемы охранного GSM устройства.
Фото схемы.

На макетную плату припаиваем разъемные колодки для GSM модуль SIM800L и модуль Arduino это упрощает монтаж и позволяет при необходимости легко заменять модули. Распаиваем резисторы и остальные соединения. Резисторы от контакта RX модуля SIM800L подключаются к цифровому входу D3 Arduino для согласования по напряжению входов обоих модулей. Входы Arduino D4-D8 подтягиваются через резисторы. Выключатель монтируется в разрыв питания GSM модуля SIM800 и платы Ардуино для постановки на охрану всей системы. Применение аккумулятора, что позволит устройству функционировать два три дня при отсутствии сети 220 В. Преобразователь напряжения в моем случае из напряжения 12 В выдает напряжение 4,2 В и заодно заряжает аккумулятор(можно применить другую плату, например ТР4056 с защитой).

Шаг второй. Программирование устройства.
В СИМ карте должны быть удалены пинкоды и все ненужные функции. Еще предварительно нужно настроить сам модуль SIM800L-в сети есть много видео по этой теме, ничего сложного в этом нет. В скетче указываем ваши номера телефонов, корректируем названия охранных зон, можно установить время контроля системы (если прибор работает нормально через заданное время придет контрольная СМС). Заливаем скетч в Arduino и проверяем работу устройства.

Скетч:

String numberCall_1 = "79123456789"; // Номер абонента №1 для звонка
String numberSMS_1 = "+79123456789"; // Номер абонента №1 для СМС (отличается только знаком +)

String numberCall_2 = "79123456782"; // Номер абонента №2 для звонка
String numberSMS_2 = "+79123456782"; // Номер абонента №2 для СМС (отличается только знаком +)

String textZone_1 = "Alarm! Zone1"; // Свое название зоны , на латинице.
String textZone_2 = "Alarm! Zone2"; // Свое название зоны , на латинице.
String textZone_3 = "Alarm! Zone3"; // Свое название зоны , на латинице.
String textZone_4 = "Alarm! Zone4"; // Свое название зоны , на латинице.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

#define pinSensor_0 4
#define pinSensor_1 5
#define pinSensor_2 6
#define pinSensor_3 7
#define pinSensor_4 8

void initGSM(void) {
delay(2000);
mySerial.begin(9600); // Выставляем скорость общения с GSM-модулем 9600 Бод/сек.
mySerial.println("AT+CLIP=1");
delay(300);
mySerial.println("AT+CMGF=1");
delay(300);
mySerial.println("AT+CSCS="GSM"");
delay(300);
mySerial.println("AT+CNMI=2,2,0,0,0");
delay(300);
}

/* Отправка SMS */
void sendSMS(String text, String phone) {
mySerial.println("AT+CMGS="" + phone + """);
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(2500);
}

unsigned long timerTemp = 0;
uint8_t hours = 0;

uint8_t flagSensor_0 = 0;
uint8_t flagSensor_1 = 0;
uint8_t flagSensor_2 = 0;
uint8_t flagSensor_3 = 0;
uint8_t flagSensor_4 = 0;

void setup() {
mySerial.begin(9600);
initGSM();

pinMode(pinSensor_0, INPUT);
pinMode(pinSensor_1, INPUT);
pinMode(pinSensor_2, INPUT);
pinMode(pinSensor_3, INPUT);
pinMode(pinSensor_4, INPUT);

timerTemp = millis();
}

void loop() {
if(millis() — timerTemp >= 3600000) {timerTemp = millis(); hours++;}

if(hours >= 144) {// Меняем время контроля системы на свое,144 часа.кол-во часов .
sendSMS(String("The system works normally.OK"), numberSMS_1);
delay(10000);
sendSMS(String("The system works normally.OK"), numberSMS_2);
delay(10000);
hours = 0;
timerTemp = millis();
}

if(flagSensor_0 == 0 && digitalRead(pinSensor_0) == 0) flagSensor_0 = 1;
if(flagSensor_1 == 0 && digitalRead(pinSensor_1) == 0) flagSensor_1 = 1;
if(flagSensor_2 == 0 && digitalRead(pinSensor_2) == 0) flagSensor_2 = 1;
if(flagSensor_3 == 0 && digitalRead(pinSensor_3) == 0) flagSensor_3 = 1;
if(flagSensor_4 == 0 && digitalRead(pinSensor_4) == 0) flagSensor_4 = 1;

if(flagSensor_0 == 1) {
String command;

command = "ATD+" + numberCall_1 + ";";
mySerial.println(command);
delay(20000);
mySerial.println("ATH");
delay(1000);

command = "ATD+" + numberCall_2 + ";";
mySerial.println(command);
delay(20000);
mySerial.println("ATH");
delay(1000);

flagSensor_0 = 2;
}

if(flagSensor_1 == 1) {
sendSMS(textZone_1, numberSMS_1);
delay(10000);
sendSMS(textZone_1, numberSMS_2);
delay(10000);
flagSensor_1 = 2;
}

if(flagSensor_2 == 1) {
sendSMS(textZone_2, numberSMS_1);
delay(10000);
sendSMS(textZone_2, numberSMS_2);
delay(10000);
flagSensor_2 = 2;
}

if(flagSensor_3 == 1) {
sendSMS(textZone_3, numberSMS_1);
delay(10000);
sendSMS(textZone_3, numberSMS_2);
delay(10000);
flagSensor_3 = 2;
}

if(flagSensor_4 == 1) {
sendSMS(textZone_4, numberSMS_1);
delay(10000);
sendSMS(textZone_4, numberSMS_2);
delay(10000);
flagSensor_4 = 2;
}

if(flagSensor_0 == 2 && digitalRead(pinSensor_0) != 0) flagSensor_0 = 0;
if(flagSensor_1 == 2 && digitalRead(pinSensor_1) != 0) flagSensor_1 = 0;
if(flagSensor_2 == 2 && digitalRead(pinSensor_2) != 0) flagSensor_2 = 0;
if(flagSensor_3 == 2 && digitalRead(pinSensor_3) != 0) flagSensor_3 = 0;
if(flagSensor_4 == 2 && digitalRead(pinSensor_4) != 0) flagSensor_4 = 0;
}

Шаг третий. Проверка работоспособности устройства.

При подаче напряжения питания пока загружаются модуль SIM800L и плата Arduino у вас есть примерно 20 секунд чтобы покинуть охраняемое помещение. На модуле SIM800L светодиод указывает на работу в сети- часто мигает это поиск сети, раз в пять секунд- работа в сети. Когда прибор найдет сеть разорвите соответствующие охранные входы, после этого произойдет дозвон или присылка СМС. Значит прибор работает нормально.

Фото СМС. К этому прибору можно будет включить любые охранные извещатели с выходами в виде контактов, реле от исполнительных устройств, только в соответствие с вашими потребностями и фантазией. В целом мы изготовили несложный, охранный прибор. Такой самодельный сторож можно сделать для организации охраны любых объектов. Чтобы включить прибор сигнализации нужно через выключатель на SIM800 и Аrduino подать 4,2 Вольта. При первого входа пройдет звонок на абонента №1, после переключится на №2. Дополнительный №2 предусмотрен для дублирования. Обрыв шлейфа №2,3,4,5 делает выдачу SMS с конкретным названием нарушенного шлейфа, соответственно на оба телефона. Все платы поместим в любом в подходящем корпусе. В общем я думаю это неплохой интересный приборчик который можно в дальнейшем развить далее-добавить функции GSM розетки, управление по DMTF и многое другое.

Подробнее можно посмотреть в видео

Всем желаю здоровья и успехов в жизни и творчестве!

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Источник: usamodelkina.ru