Не работает автономно

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

Здравствуйте товарищи! Нигде не могу найти решения задачи.

Собрал простую схемку на ардуино нано, (управление питанием реле по GSM каналу), залил скаченный из инета скетч, все скомпилировано. Все подключено через mini usb, от порта ПК. Открываю монитор порта, все работает, на смс команды реагирует, on/off.

Отключаю от ПК, подсоединяю через блок питания, ардуино включается, модем ловит сеть, в общем как по нотам, но на смс команды не реагирует.

Включаю обратно на ПК, все работает.

Соответственно скетч на месте.

В чем проблема?

Перепробовал и по VIN подать напряжение, и по 5+, ничего не помогает.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Tony Sexton пишет:

Открываю монитор порта, все работает...

Попробуйте в программе закомментировать отладочный вывод в порт. Возможно, МК пытается дождаться, когда на ПК несуществующий порт включится.

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

Я не сильно разбираюсь, вот скетч, посмотрите пожалуйста

 

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 

 
Tony Sexton
Offline
Зарегистрирован: 26.03.2020
#include <SoftwareSerial.h> 
SoftwareSerial mySerial(10,11);  // (Rx,Tx  > Tx,Rx) 
char incomingByte; 
String inputString;
int relay = 13; // Выход для управления реле

void setup() 
{
      pinMode(relay, OUTPUT);
      digitalWrite(relay, LOW); // Исходное состояние реле
      Serial.begin(9600);
      mySerial.begin(9600); 

     while(!mySerial.available()){
        mySerial.println("AT");
        delay(1000); 
        Serial.println("Connecting...");
        }
      Serial.println("Connected!");  
      mySerial.println("AT+CMGF=1");  // Установка SMS в текстовый режим
      delay(1000);  
      mySerial.println("AT+CNMI=1,2,0,0,0");  // Процедура обработки вновь полученных сообщений 
      delay(1000);
      mySerial.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения
     }

void loop()
{  
  if(mySerial.available()){
      delay(100);

      // Последовательный буфер
      while(mySerial.available()){
        incomingByte = mySerial.read();
        inputString += incomingByte; 
        }

        delay(10);      

        Serial.println(inputString);
        inputString.toUpperCase();

        // включить или выключить реле
        if (inputString.indexOf("ON") > -1){
          digitalWrite(relay, HIGH);
          }
         if (inputString.indexOf("OFF") > -1){
          digitalWrite(relay, LOW);
          }          

        delay(50);

        // Удалить сообщения и сохранить память
        if (inputString.indexOf("OK") == -1){
        mySerial.println("AT+CMGDA=\"DEL ALL\"");

        delay(1000);}

        inputString = "";
  }
}

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Увы, то что я предположил, не оправдалось. Сделал проверочную программку с простейшей мигалкой и отладочным выводом в монитор порта. Мигает, что при питании от ПК, что от БП.

Надо ждать, когда настоящие программисты в тему подтянутся.

b707
Offline
Зарегистрирован: 26.05.2017

закомментируйте все строчки, где встречается Serial. начиная прям с 11-ой

b707
Offline
Зарегистрирован: 26.05.2017

Duino A.R. пишет:

Увы, то что я предположил, не оправдалось. Сделал проверочную программку с простейшей мигалкой и отладочным выводом в монитор порта. Мигает, что при питании от ПК, что от БП.

все правильно, для Атмеги328 при выводе в Сериал доступность порта не проверяется. Во всяком случае в прежних версиях. Ваше предположение справедливо, например, для СТМ32 - там. если нет консоли, код с выводом в Сериал будет бесконечно висеть и ждать.

Но попробовать стоило. И ТС тоже рекомендую все же проделать этот тест - мало ли, может в его настройках ИДЕ это окажется полезным.

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

Товарищи профессионалы, так в чем проблема то может быть? Почему от ПК работает, а от БП на реле не поступает питание по СМС?

svm
Offline
Зарегистрирован: 06.11.2016

А может просто питание на ардуино не подается?

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Кроме очевидного варианта, что БП не подходит, есть еще отличие. При подключении к ПК, скорее всего, скетч запускается с задержкой в секунду - другую за счет загрузчика. При включении через БП задержки нет. Может быть для данного модема задержка нужна? Можно попробовать включить в БП с зажатым на плате Ресетом и потом его отпустить.

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

Все подается. И модем в сети, и команда проходит, по светодиодам понятно. Но питание на пин 13 так и не приходит.

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

LM 2596, почему не подходит? Как поставить задержку?

"Можно попробовать включить в БП с зажатым на плате Ресетом и потом его отпустить." Это как?

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Tony Sexton пишет:

"Можно попробовать включить в БП с зажатым на плате Ресетом и потом его отпустить." Это как?

Если на вашей Arduino Nano есть кнопка RST, то с отключенным питанием нажать и удерживать эту кнопку, подать питание и через секунду отпустить кнопку.

Tony Sexton
Offline
Зарегистрирован: 26.03.2020

Проверьте пожалуйста у себя кто-нибудь этот скетч. Что надо поправить в нем? Может быть задержки выставить где-то?