Итоговая версия GSM сигнализации для дачи на Arduino UNO и GSM модеме NEOWAY M590, установка на охрану по звонку с заданного в коде номера.
ниже код из видео и схема подключения.
Как все подключено: (без учета диода шоттки)
Не забываем что модему необходимо напряжение питание 4 вольта и соответственно DC-DC преобразователь должен быть выставлен на такое напряжение.
Сам код:
тут
/// GSM сигналка c установкой по звонку /// датчиком на прерывателях // донат, https://money.yandex.ru/to/410012486954705 #include <EEPROM.h> //// как подключен модем? //#include <SoftwareSerial.h> // если программный //SoftwareSerial gsm(7, 8); // RX, TX #define gsm Serial // если аппаратный в UNO //#define gsm Serial1 // если аппаратный в леонардо #define LED 13 #define TELLNUMBER "ATD+70001112233;" // номен на который будем звонить #define SMSNUMBER "AT+CMGS=\"70001112233\"" // номер на который будем отправлять SMS #define TELMODE "70001112233" // номер для установки на охрану #define SH1 A2 // шлейыф //#define SH2 A3 #define pinBOOT 5 // нога BOOT или K на модеме byte mode = 0; // 0 - только включили // 1 - установлена охрана // 2 - снята с охраны // при добавлении не забываем посмотреть на 41 строку void setup() { delay(1000); //// !! чтобы нечего не повисало при включении gsm.begin(9600); /// незабываем указать скорость работы UART модема // Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(pinBOOT, OUTPUT); /// нога BOOT на модеме pinMode(SH1, INPUT_PULLUP); /// нога на растяжку // pinMode(SH2, INPUT_PULLUP); /// нога на растяжку // читаем режим из еепром mode = EEPROM.read(0); if (mode > 2) mode = 2; // проверяем значение в еепром // занимаемся модемом delay(1000); digitalWrite(LED, HIGH); // на время включаем лед digitalWrite(pinBOOT, LOW); /// включаем модем // нужно дождатся включения модема и соединения с сетью delay(2000); // while(gsm.find("STARTUP")); /// ждем команды от модема gsm.println("ATE0"); // выключаем эхо while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("+COPS: 0")) break; digitalWrite(LED, LOW); // блымаем светодиодом delay(50); digitalWrite(LED, HIGH); delay(500); } //Serial.println("Modem OK"); digitalWrite(LED, LOW); // блымаем светодиодом delay(1500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } void loop() { if (mode == 1){ // если в режиме охраны // проверяем датчики if (digitalRead(SH1)){ // если обрыв // отзваниваемся gsm.println(TELLNUMBER); delay(2500); if (gsm.find("NO CARRIER")){ // ищим сброс вызова, // снимаем охранку mode = 2; EEPROM.write(0, mode); } } } // если охрана снята if (mode == 2){ if (digitalRead(SH1)){ // проверяем датчики, включаем LED digitalWrite(LED, HIGH); } else digitalWrite(LED, LOW); } // ищим RING // если нашли, опрашиваем кто это и ставим на охрану if(gsm.find("RING")){ // если нашли RING gsm.println("AT+CLIP=1"); // включаем АОН, while(1){ // в цикле if (gsm.find(TELMODE)){ // ищим номер телефона, если нашли mode = 1; // меняем режим EEPROM.write(0, mode); // пишим его в еепром break; // и выходим } else{ // иначе gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(100); if (gsm.find("+CPAS: 0")) break; // и если он в "готовности", выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } // и крутимся дальше gsm.println("AT+CLIP=0"); // выключаем АОН, delay(500); gsm.println("ATH0"); // сбрасываем вызов digitalWrite(LED, LOW); // сигнализируем об этом delay(500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } }
Версия 0.2 с GSM модемом AiThinker A6.
Основное отличие от прошлой версии, добавлена функция прослушки, с целью выявлять ложное срабатывание сигнализации, в связи с этим GSM модем Neoway M590 заменен на AiThinker A6. Подробнее в видео.
https://youtu.be/xIlzECL8n84
Схема подключения:
позже.
Код:
тут
/* Обновленный проект GSM сигнализации для дачи, добавлена функция прослушки и GSM модем заменен на AiThinker A6 https://youtu.be/xIlzECL8n84 Желающим оказать материальную поддержку. http://www.donationalerts.ru/r/arduinolab */ #include <EEPROM.h> //// как подключен модем? //#include <SoftwareSerial.h> // если программный, на скорости 115200 не использовать!! //SoftwareSerial gsm(7, 8); // RX, TX #define gsm Serial // если аппаратный в UNO // #define gsm Serial1 // если аппаратный в леонардо #define LED 4 // светодиод индикации, можно использовать 13 //#define SH1 A2 // шлейыф #define SH1 5 // шлейыф #define TELLNUMBER "ATD+70001112233;" // номен на который будем звонить //#define SMSNUMBER "AT+CMGS=\"70001112233\"" // номер на который будем отправлять SMS #define TELMODE "70001112233" // номер для установки на охрану byte mode = 0; // 0 - только включили // 1 - установлена охрана // 2 - снята с охраны // при добавлении не забываем посмотреть на 47 строку void setup() { delay(1000); //// !! чтобы нечего не повисало при включении при провале питания gsm.begin(115200); /// незабываем указать скорость работы UART модема pinMode(LED, OUTPUT); pinMode(SH1, INPUT_PULLUP); /// нога на растяжку digitalWrite(LED, HIGH); // включаем лед // читаем режим из еепром mode = EEPROM.read(0); if (mode > 2) mode = 2; // проверяем значение в еепром // занимаемся модемом delay(1000); gsm.println("ATE0"); // выключаем эхо while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("+COPS: 0")) break; digitalWrite(LED, LOW); // блымаем светодиодом delay(50); digitalWrite(LED, HIGH); delay(500); } digitalWrite(LED, LOW); // блымаем светодиодом delay(2000); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); gsm.println("AT+CLIP=1"); // включаем АОН, } //// void loop() { if (mode == 1){ // если в режиме охраны // проверяем датчики if (digitalRead(SH1)){ // если обрыв while (1){ gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(100); if (gsm.find("+CPAS:0")) break; // и если он в "готовности", выходим } // отзваниваемся gsm.println(TELLNUMBER); delay(5000); if (gsm.find("+CIEV: \"SOUNDER\",")){ delay(2000); gsm.println("ATH"); // сбрасываем вызов // } mode = 2; // меняем режим EEPROM.write(0, mode); delay(10000); gsm.println("ATH"); } digitalWrite(LED, HIGH); delay(1); digitalWrite(LED, LOW); } // если охрана снята if (mode == 2){ if (digitalRead(SH1)){ // проверяем датчики, включаем LED digitalWrite(LED, HIGH); } else digitalWrite(LED, LOW); } //// // ищим RING if(gsm.find("RING")){ // если нашли RING while(1){ // в цикле if (gsm.find(TELMODE)){ // ищим номер телефона, если нашли mode = 1; // меняем режим EEPROM.write(0, mode); // пишим его в еепром delay(5000); gsm.println("ATA"); // поднимаем трубку break; // и выходим } else{ // иначе gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(100); if (gsm.find("+CPAS:0")) break; // и если он в "готовности", выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } // и крутимся дальше digitalWrite(LED, LOW); // сигнализируем об этом delay(250); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } }