Официальный сайт компании Arduino по адресу arduino.cc
GSM сигналка c установкой по звонку M590E GSM GPRS Модул
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 24/07/2016 - 11:50
Здравствуйте. Помогите пожалуйста прикрутить к скечу датчик движения HC-SR505? Пробовал подключать его к цифровому выходу, но сразу после загрузки скетча происходил дозвон на телефон. В скетче менял аналоговый выход на цыфровой.
/// GSM сигналка c установкой по звонку /// датчиком на прерывателях #include <EEPROM.h> //// как подключен модем? //#include <SoftwareSerial.h> // если программный //SoftwareSerial gsm(7, 8); // RX, TX #define gsm Serial // если аппаратный в UNO //#define gsm Serial1 // если аппаратный в леонардо #define LED 6 #define TELLNUMBER "ATD+79089000682;" // номен на который будем звонить #define SMSNUMBER "AT+CMGS=\"79089000682\"" // номер на который будем отправлять SMS #define TELMODE "79089000682" // номер для установки на охрану #define SH1 A2 // шлейыф //#define SH2 A3 #define pinBOOT 5 // нога BOOT или K на модеме byte mode = 0; // 0 - только включили // 1 - установлена охрана // 2 - снята с охраны // при добавлении не забываем посмотреть на 41 строку void setup() { delay(3000); //// !! чтобы нечего не повисало при включении 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); } }
но сразу после загрузки скетча происходил дозвон на телефон. В скетче менял аналоговый выход на цыфровой.
1. В то место скетча, где принимается решение начать дозвон, добавьте условие
&& millis() > 60000 // то есть, например, в первую минуту после начала работы не звонить.
2. Аналоговый, или цифровой - в данном случае не имеет значения,.
Возможно и даже наверняка, я кусок вашего кода не в то место вставляю, после загрузки совершается сразу дозвон.
И так тоже уже попробовал
с модулями типа m590 я бы все-таки подождал от модуля +PBREADY, раз уж есть нога, ответственная за включение и выключение оного (pinboot), прежде чем начинать его пытать.
Увеличил задержку для включения модуля до 1 минуты
Все равно, после постановки на охрану модуль сразу же отзванивается
bester, второй строкой Вы включили модем и просто ждете 60 секунд, да еще и с помощью delay()
хотя бы просто АТ ему скормите да проверьте, ответил он "OK" или занят какими-то своими делами
В первом сообщении скетч работает, я просто хочу еще подключить датчик движения, но при этом не знаю как изменить скетч, знаний не достаточно, если вместо растяжки и А2 подключаю датчик, после моего звонка на модуль включаутся охрана и модуль сразу же начинает мне отзваниватся, как будто замечено движение, с растяжкой же на А2, скетч работает нормально, отзванивается только когда растяжка повреждена.
Без постановки на охрану, датчик работает(когда замечено движение светодиод загорается)
а есть необходимость именно аналоговый вывод садить на контроль шлейфа, цифровых ног недостаточно?
кстати в даташите на датчик тоже указано, что подключать его нужно на цифровой вход
Ну можно конечно и на цифровые, дело то не в этом, при замене шлейфа на датчик движения при постановке на охрану она сразу же срабатывает и отзванивается
в даташите, на датчик есть пример его правильного подключения - цифровой вход должен иметь низкий уровень, а Вы его присоединяете к ноге, которую сделали input_pullup
строка 3 примера - ногу 6 делаем входом
строка 4 - выставляем на ней низкий уровень
9 - если на входе появляется высокий уровень
10 - значит супостат тут
Сделал так, все равно после постановки на охрану модуль сразу начинает отзваниваться. Строки 37,38,76
а может все-таки перевесите m590 на softwareserial, чтобы иметь возможность в мониторе читать диагностику?
ну и, заодно, точка с запятой после номера в TELLNUMBER какую функцию сполняет?
На NANO к каким выходам тогда подключиться? Раскоментировал строки
раскомментируйте SoftwareSerial gsm(7,8); если на выводы 7 и 8 ничего не вешали
Сделал так, после постановки на охрану в терменалке пишет "obriv" и идет вызов на мой телефон. От куда там берется единица, понять не могу. После постановки на охрану наверное нужно какую то паузу сделать, но где и как не знаю
строки 75 и 76 местами поменяйте :)
сейчас у Вас выводится obriv, как только система стала на охрану, а не когда изменилось состояние входа
Поменял. Сразу после Modem OК пишет obriv
Может вход датчика к земле притянуть? не пыхнет? Датчик отцепил, все равно пишет obriv. Притянул через 10 ком-не помогло
а привесьте вместо датчика светодиод на +5в через резистор 300 Ом-1кОм, для наглядности
Он не загорается почему то. 0 нет я так понимаю на 6 контакте ардеины почему то. 0,67 вольта на нем. Прижал к земле через 10 кОм, диод загорелся, звонок приходит когда снимаю подтяжку. Заменяю диод на датчик, при постановке на охрану с модуля сразу происходит набор.
в принципе, 0.67В это нормально для логического 0
попробуйте датчик заменить на кнопку последовательно с 1-10к на +5В и сделайте паузу после инициализации модема, как советовал Araris
и сделайте паузу после инициализации модема, как советовал Araris
&& millis() > 60000
Я не знаю, куда это нужно вставить.
Кнопку поставил, что с нажатой, что нет, в терминалку пишет "obriv"
Проблема пока не решена. Как подключить датчик движения к модулю GSM?