gsm модуль m590 и arduino с датчиком влажности

Тема в разделе "Arduino & Shields", создана пользователем buktopz, 24 авг 2016.

  1. buktopz

    buktopz Нерд

    Есть датчик влажности, на схеме он заменен резистором. Когда на нем значение более 500, arduino (будет pro mini) даст команду gsm модулю, и тот позвонит на указанный телефон.
    Будет ли сие работать, что нужно допилить? И что при этом делать с выводом 19 (on/off)
    Код (C++):

    const int analogPin = A0;

    #include <SoftwareSerial.h>
    SoftwareSerial gsm(7, 8); // RX, TX

    void setup() {
      Serial.begin(9600);
      gsm.begin(9600);

      pinMode(6, INPUT_PULLUP);

    }
    void loop() {
      int analogValue = analogRead(analogPin);  // Задаем переменную analogValue для считывания показаний
        // Подобрать необходимый порог значений вашего датчика
        if (analogValue<500) // Если значение на аналоговом входе < 500
      {    
        // Выполняем действие
        digitalWrite(6, LOW); // Выключаем светодиод
      }
      else  // В ином случае (если значения на аналоговом входе > 500)
      {  
        // Выполняем действие
        digitalWrite(6, HIGH);  // Включаем светодиод
       
        while(1){             // проверяем готовность модема
            gsm.println("AT+CPAS");
            if (gsm.find("0")) break;
            delay(100);
          }
          gsm.println("ATD+70000000000;"); // звоним по указаному номеру
          delay(100);
          if (gsm.find("OK")) Serial.println("OK!");
          else Serial.println("error");
       
      }  
    }
     
     

    Вложения:

    • shema.jpg
      shema.jpg
      Размер файла:
      230,5 КБ
      Просмотров:
      1.849
  2. Alex19

    Alex19 Гуру

    По подключению, если у Вас голый чип, то TX с Arduino не стоит отправлять на RX модуля из-за разности питания, RX Arduino с TX модуля можно (хоть я люблю работать через Logic Level Converter в обе стороны:)).
    Вначале на землю, земля общая, не получится тогда по мануалу, посылаем 0 на ногу 19 (on/off) в течении 0,5секунд, затем возвращаем 1. Так же напрямую подключать не стоит, данная нога не выдержит 5V с Arduino.

    Вроде бы код, как в примерах. Да при одном условии, что по умолчанию данный экземпляр работает со скоростью 9600.

    Почитайте ветку, от сюда - http://forum.amperka.ru/threads/sms-модуль.5658/page-2#post-48519.

    Есть варианты на 19200, 56700 и т.д. Тогда перед этим лучше запрограммировать на скорость 9600 с помощью AT команд. По AT командам, есть хорошее описание - http://arduinolab.pw/wp-content/uploads/2015/12/Neoway-M590-AT-Command-Sets_V3.0.pdf.
     
    buktopz нравится это.
  3. buktopz

    buktopz Нерд

    Все переделал, ничего не получается. Отключил резистор, светодиод, закачал голый скетч. Начал пробовать подавать команды - на скорости 9600 на любую команду отвечает GSM tester v1.0. На скорости 19200 какие то кракозябры пишет
     
  4. buktopz

    buktopz Нерд

    еще какой то скетч залил, воткнул boot в 5 ногу контроллера, начал писать:
    ATE0
    AT+COPS? (бесконечно)
    а если переключаю на 19200 - кракозябры
     
  5. buktopz

    buktopz Нерд

    а если я ввожу - не реагирует. Что делать то вообще? Кто нибудь живой есть?
     
  6. buktopz

    buktopz Нерд

    мда, похоже дело в модуле через терминал не соединяется
     
  7. Alex19

    Alex19 Гуру

    Что у Вас за код, что он на любую команду AT отвечает GSM tester v1.0. Такого не скидывал, а у модуля M590, таких ответов нет.

    Что-то выглядит очень странно, больше похоже на то, что Вы отправляете команды не на тот Serial.

    Давайте упростим, уберем пока Arduino, а возьмем UART-TTL, меньше вероятности ошибиться.

    Напомню, как подключить, если UART-TTL с переключателем 5V или 3,3V.
    Если 5V, то просто подключаем как Arduino
    Подключаем USB-TT к компу,
    дальше как на этом видео -

    с 6:30 там настройки и перебираем скорость от 9600 до 115200, он должен ответить на команду AT.

    Если не ответит, что проблема в подключении, питании или еще чего.

    Как уже говорил, с данным модулем не работал, вычитал из форумов, статей. Но если он не отвечает через терминал, то дальше идти нет смысла.

    Работа, дела и т.д.
     
    buktopz нравится это.
  8. buktopz

    buktopz Нерд

    так я так и сделал уже в конце - не отвечает через терминал
     
  9. Alex19

    Alex19 Гуру

    Либо что-то подключено не так, либо он умер (был мертвым).
    Перепроверьте еще раз, каких-то других идей не подскажу, нет опыта общения с ним.

    Если ни чего не получится, почитайте данную тему - http://forum.amperka.ru/threads/sms-модуль.5658/page-2 и купите как ребята с обвязкой, а не голый чип.

    К примеру такой
    [​IMG]

    UPD.
    Проверьте он питание кушает и как ведет себе пин Led, может есть смысл подключить к нему светодиод.
     
    buktopz нравится это.
  10. buktopz

    buktopz Нерд

    В общем нашел все же рабочий (третий) модуль, соединил 2 кода, немного подправил, заработало. Но все же посмотрите, как время будет, все ли правильно я написал.
    И вот еще вопрос, можно ли ставить на охрану с телефона, а также с телефона СМСкой вписывать в код номер телефона на который будет звонить сигнализация.
    Код (C++):
    const int analogPin = A0; // соедщнил с землей через резистор на 15 кОм

    #include <SoftwareSerial.h>
    SoftwareSerial gsm(7, 8); // RX, TX

    void modemOFF(){
      digitalWrite(5, HIGH);
      delay(10);
      gsm.println("AT+CPWROFF");
    }

    void modemON(){
      digitalWrite(5, LOW);
      delay(10);
      while(!gsm.find("+PBREADY"));
    }

    void setup(){
      Serial.begin(9600);
      gsm.begin(9600);             /// незабываем указать скорость работы UART модема
     
      pinMode(5, OUTPUT);           /// нога BOOT на модеме
      /*pinMode(2, OUTPUT);     /// нога на растяжку*/
     
      digitalWrite(5, LOW);         /// включаем модем, для проверки.
                                    /// !!! при подачи питания, нужно надавить на ресет ардуины,
                                    /// !!! модем при включении может просадить питание и ардуина не стартанет
      while(!gsm.find("+PBREADY")); /// при включении ждем готовность модема
      modemOFF();                   /// и выключаем модем
    }

    void loop() {
      int analogValue = analogRead(analogPin);  // Задаем переменную analogValue для считывания показаний
        // Подобрать необходимый порог значений вашего датчика
        if (analogValue<490) // Если значение на аналоговом входе < 490
      {    
        // Выполняем действие
        digitalWrite(13, LOW); // Выключаем светодиод
      }
      else  // В ином случае (если значения на аналоговом входе > 490)
      {  
        // Выполняем действие
        digitalWrite(13, HIGH);  // Включаем светодиод
        modemON();                  /// включаем модема
        while(1){                   // ждем подключение модема к сети
            gsm.println("AT+COPS?");
            if (gsm.find("0")) break;
            delay(500);
        }
        /////////////////////// звоним по указаному номеру
        gsm.println("ATD+79137602230;");
        delay(100);
        if (gsm.find("OK")) Serial.println("ATD+OK!");
        while(1){             // проверяем готовность модема, ждем сброс вызова
            gsm.println("AT+CPAS");
            if (gsm.find("0")) break;
            delay(100);
        }


       
        /////////////////// и\или отправляем SMS
    /*      gsm.println("AT+CMGF=1");        delay(100);      gsm.println("AT+CSCS=\"GSM\"");         delay(100);    gsm.println("AT+CMGS=\"79991112233\""); // даем команду на отправку смс    delay(100);    gsm.print("111");             // отправляем текст     gsm.print((char)26);          // символ завершающий передачу    Serial.println("SMS ok");      delay(100);   while(1){             // проверяем готовность модема        gsm.println("AT+CPAS");        if (gsm.find("0")) break;        delay(100);      } */  

        delay(10000);
        Serial.println("FULL_OFF!");
       
        modemOFF();                           /// выключаем модем,
        while(1);                             /// останавливаем прогу  
      }
     
      if (gsm.available())
        Serial.write(gsm.read());
      if (Serial.available())
        gsm.write(Serial.read());
    }

    ///+PBREADY
     
  11. Alex19

    Alex19 Гуру

    Рад, что у Вас получилось, по командам не подскажу, смотрите документацию.

    Вечный цикл, без шанса для выхода, Вы точно хотите этого?
    Код (C++):
        while(1);                             /// останавливаем прогу  
    Чтобы прервать его, потребуется перегрузить питание Arduino или нажать Reset на Arduino.

    Дальше скорее стиль и подход, который не стоит переносить в конечное устройство. Говорю о delay в loop, множество циклов while, которые будут прерваны лишь при положительном ответе, нет поддержки ошибок.

    Да можно, модуль позволяет читать СМС. Вы читаете в СМС команду на включении охраны и номер на который будет звонить сигнализация.
     
    Последнее редактирование: 11 сен 2016
    buktopz нравится это.
  12. buktopz

    buktopz Нерд

    Другие коды у меня не заработали. По поводу while(1); Это мне кажется подходит в моем случае, если не остановить - будут бесконечные звонки. После срабатывания, нужно идти на место и принимать меры, а затем восстанавливать сигнализацию. Но тут проблема, сигнализация может находиться на большой высоте, Reset не нажмешь, не удобно. Поэтому заказал брелок 4-канальный, буду с брелка сбрасывать. Заодно, чтобы кнопки не пустовали, хочу назначить им постановку и снятие сигнализации. Подозреваю, что логической единицы на выходе приемника не будет, поэтому хочу сделать по типу датчика - если >500, то... и т.д.
    Но в редких случаях, наверное, нужно сбросить удаленно, поэтому буду искать выход (вывод) на модуле, который по команде мог бы послать сигнал на "Reset" arduino.
    Жалко, что нет времени заняться этим с азов, но обязательно к этому вернусь - интересно.
    Вам же огромное спасибо за поддержку, если будет время и желание, вышлите свой вариант.
     
  13. Alex19

    Alex19 Гуру

    Извините, зарылся на работе, проблемы с оборудованием, и как на зло, ни каких схем.

    Да, но все равно такое решение, но такое решение меня расстраивает. Представим, что сигнализация сработала, почему бы вместо бесконечных звонков, в дальнейшем подцепить GPS и слать каждую минуту информацию о положении и т.д.. Да и бросить проще, особенно когда произошел сбой.

    Не очень понимаю, зачем вообще брело, когда Вы можете отправлять СМС c телефона с разными командами.

    Вот поэтому лучше уходить от остановки контролера.

    Мы все учимся, по мере необходимости.

    Не за что, тут все помогаю по мере сил (времени, знаний). На выходных попробую сделать и скинуть свой вариант кода.
     
    Последнее редактирование: 15 сен 2016
  14. Ermine882

    Ermine882 Нерд

    Рекомендую M590 питать не от Ардуино, так как модуль очень прожорлив, особенно во время соединения с сетью.
     
  15. buktopz

    buktopz Нерд

    Интересен тот факт, что менее прожорливый arduino не имеет своего источника питания...
    А о потреблении neowey 590 только самый ленивый не пишет
     
  16. Ermine882

    Ermine882 Нерд

    У меня от ардуино работал через раз, запитал от отдельного БП и работа стала стабильной
     
  17. buktopz

    buktopz Нерд

    Не от ардуино он работал, а от Вашего блока питания в компьютере, например, ну или от чего Вы там запитали свой ардуино