II. Практическая часть
2.1. Создание электронной схемы
Для построения макета схемы мне потребовалась программа Fritizing, которая имеет бесплатную лицензию и открытый исходный код, также эта программа была создана специально для Arduino поэтому она особенно удобна в использовании для этих целей.
2.2. Создание программы
Создание программы, которая будет считывать показания датчика движения и, если будет обнаружен объект, нарушивший охранный периметр, отошлет SMS владельцу и включит сирену, но, если в течении 30 минут до этого события была прислана SMS с текстом «OFF», не будет предпринимать ни каких действий.
#include
SoftwareSerial mySerial(2, 3); // назначение портов для передачи данных между arduino и GSM
int siren = 12; // порт динамика(сирены)
int ir1 = 5; // порт ИК модуля 1 зоны
int ir2 = 6; // порт ИК модуля 2 зоны
int ir3 = 7; // порт ИК модуля 3 зоны
int ir4 = 8; // порт ИК модуля 4 зоны
int ir5 = 9; // порт ИК модуля 5 зоны
int power = 13; // порт светодиода (вкл)
int sir = 4; // порт светодиода тревога
void setup() {
pinMode(siren, OUTPUT); // назначение пина
pinMode(ir1, INPUT);// назначение пина
pinMode(power, OUTPUT); // назначение пина
pinMode(sir, OUTPUT); // назначение пина
digitalWrite(power, HIGH); // назначение пина
mySerial.begin(19200); // назначение скорости соединения между arduino и gsm mySerial.println("AT+CMGF=1");// запуск текстового режима смс delay(500); // задержка для обработки данных GSM модулем mySerial.println("AT+CSCS=\"GSM\""); //назначаем кодировку текстового режима смс - GSM(ASCI)
delay(500); // задержка для обработки данных GSM модулем delay(10000); // задержка перед включением режима охраны
sms(String("Signalizacia on"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Signalizacia on
}
void loop() {
int irp1 = digitalRead(ir1); // считывание данных с ИК датчика 1 и помещение их в переменную irp1
int irp2 = digitalRead(ir2); // считывание данных с ИК датчика 2 и помещение их в переменную irp2
int irp3 = digitalRead(ir3); // считывание данных с ИК датчика 3 и помещение их в переменную irp3
int irp4 = digitalRead(ir4); // считывание данных с ИК датчика 4 и помещение их в переменную irp4
int irp5 = digitalRead(ir5); // считывание данных с ИК датчика 5 и помещение их в переменную irp5
if ( irp1 | irp2 | irp3 | irp4 | irp5 == HIGH){ // если какой-то ИК датчик обнаружил движение
if(irp1 == HIGH){// если 1 ИК датчик обнаружил движение sms(String("Zone1"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Zone1
}
if(irp2 == HIGH){// если 2 ИК датчик обнаружил движение sms(String("Zone2"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Zone2
}
if(irp3 == HIGH){// если 3 ИК датчик обнаружил движение sms(String("Zone3"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Zone3
}
if(irp4 == HIGH){// если 4 ИК датчик обнаружил движение sms(String("Zone4"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Zone4
}
if(irp5 == HIGH){// если 5 ИК датчик обнаружил движение sms(String("Zone5"),String("+79277433422")); // запуск алгоритма отправки смс на номер
+79277433422 с текстом Zone5
}
for (int i=0; i <= 60; i++){ // запуск сирены на 30 сек с морганием светодиода digitalWrite(sir, HIGH);// вкл светодиод тревога
tone(siren, 5000);// сирена издает звук 5000 гц
delay(300); // в течении 0.3 сек
digitalWrite(sir, LOW);// выкл светодиод тревога
tone(siren, 600);// сирена издает звук 600 гц
delay(200);// в течении 0.2 сек
}
noTone(siren); // выключение сирены
delay(30000); // остановка работы сигнализации на 30 сек
}
}
void sms(String text, String phone) { // алгоритм отправки смс mySerial.println("AT+CMGS=\"" + phone + "\""); // команда на отправку смс(номер) delay(1000);// задержка для обработки данных GSM модулем mySerial.print(text);// команда на отправку смс(текст)
delay(300);// задержка для обработки данных GSM модулем mySerial.print((char)26);
delay(300);// задержка для обработки данных GSM модулем delay(3000);// задержка для обработки данных GSM модулем }