Нано, не запускается скетч без USB

Добрый день, имеется проблемка:
есть рабочий скетч на Ардуино Нано в связке SIM800L и реле. Нано установлено в плате “расширения” с питанием mini Jack 2,1мм - 9 Вольт ( необходим для SIM800).
Проблема в том, что если запитать всю схему от 9В через разъем миниДжек, то скетч не запускается (реле не переключают, на СМС не реагирует). Если параллельно подключить USB (сразу от блока питания и от компьютера) то скетч работает как надо. Даже если потом отключаешь питание USB и остается только 9В.
То есть получается для запуска необходим подключенный ЮЗБ. Причем это уже вторая плата нано так себя ведет (в предыдущем проекте это не было критично). А на плате УНО таких проблем нет.
Подскажите как сделать чтобы без USB запускался.
заранее благодарен.

Сделать для модема отдельное питание 4 вольта 2 ампера.

Это есть уже. беру от 9В и через понижающий преобразователь выставляю 4 В.

Схема, фото сборки…

Батарейка «Крона»?

Блок питания от 220В, на выходе 9В 3А. Модем работает стабильно. 2 недели включен, без сбоев.

абсолютно бессмысленная цифра. Если вы подключаете свой БП на пин Vin Нано - у вас до потребителей в лучшем случае доходит 0.3А из тех трех, что отдает блок

И да, если вы хотите осмысленного разговора, а не трепа - первым делом нарисуйте и выложите подробную схему всех соединений

2 лайка

Пробуйте припаять провода напрямую, без разъёма.
Не поможет - добавьте конденсатор по питанию +9В возле платы примерно 470мкф

Выложите код, пожалуйста

сегодня к вечеру нарисую и выложу схему, и код выложу (код рабочий вариант не причесанный)

Т.е. питание модема берется таки с платы нано? Очень плохая идея

нет, питание берется с источника питания 9В 3А, плата нано питается отдельно, через плату расширения (Плата макетная с модулем WAVGAT без USB V3.0, ). Схема работает стабильно уже 2 недели. Но если отключить питание, и снова включить чтобы скетч заработал, надо включать ЮСБ, без него как-будто скетч не работает, до модема можно дозвониться. Схему выложу сегодня

Выкладывайте без “причесывания”, как есть. А то вы вычистите не то, что нужно.
Если бы вы знали, что в коде важно, а что нет - вы бы сами нашли ошибку.

#include <GyverNTC.h>
#include <SoftwareSerial.h>

// Подключаем библиотеку для работы с ARDUINO EEPROM, заданная температура будет храниться по адресу 0
//#include <EEPROM2.h>
//Считаем из постоянной памяти заданную температуру
//setTmp=EEPROM_read_byte(0);

int Ten1 = 4;                                       // Инициализация переменной Ten1 к выводу 1
int Ten2 = 5;                                       // Инициализация переменной Ten2 к выводу 2
int Ten3 = 6;                                       // Инициализация переменной Ten3 к выводу 3

//int T_kontrol_min = 19;
//int T_kontrol_max = 23;
int T_Zadan = 21;
int T_avaria_kotel = 95;
int T_zamer_vozduh_int = 20;
int T_zamer_kotel_int = 20;
int Ten1_status=0;
int Ten2_status=0;
int Ten3_status=0;

GyverNTC T_zamer_vozduh(1, 9840, 3950);               //температура воздуха на Пин А1, R=10кОм, Ктепловой= 3950 
GyverNTC T_zamer_kotel(2, 9780, 3950);                // температура котла на Пин А2, R=10кОм, Ктепловой= 3950

SoftwareSerial Sim800l(2,3);          // GSM пины 2 и 3

char incomingByte; 
char incomingByte1; 
String inputString;
String inputString1;
String NomerHozyain = "+79039365942";       //ПОМЕНЯТЬ НА Ингин
String NomerPHone = "";
String  Sostoyanie= "";
String bal = "";

void setup() {
  T_Zadan = 25;
//  T_kontrol_min = T_Zadan - 2;
//  T_kontrol_max = T_Zadan + 2;
  T_avaria_kotel = 95;

  pinMode(Ten1, OUTPUT);                            // Установим вывод на реле1 как выход
  digitalWrite(Ten1, HIGH);                         // Устанавливаем на нем 1
  pinMode(Ten2, OUTPUT);                            // Установим вывод на реле2 как выход
  digitalWrite(Ten2, HIGH);                         // Устанавливаем на нем 1
  pinMode(Ten3, OUTPUT);                            // Установим вывод на реле3 как выход
  digitalWrite(Ten3, HIGH);                         // Устанавливаем на нем 1

//Считаем из постоянной памяти заданную температуру
  //setTmp=EEPROM_read_byte(0);
//Сохраняем в EEPROM измененное значение
  //EEPROM_write_byte(0, setTmp);
  Serial.begin(9600);
  
  Sim800l.begin(9600);                           // задаем скорость обмена 9600 с модулем SIM800L
  Sim800l.println("AT");
  Serial.begin(9600);                             // задаем скорость обмена 9600 с компом
  
  while(!Sim800l.available())                      // Зацикливаем и ждем инициализацию SIM800L
    {
      Sim800l.println("AT");                        // Отправка команды AT (соединить)
      delay(2000);                                  // Пауза 2 сек
      Serial.println("Connecting…");                // Печатаем текст «Connecting…»
    }
  Serial.println("Connected!");               // Печатаем текст «Connected!»
  Sim800l.println("AT+CMGF=1");             // Отправка команды AT+CMGF=1 (включить тестовый режим)
  delay(1000);                                  // Пауза 1 сек
  Sim800l.println("AT+CNMI=1,2,0,0,0");     // Отправка команды AT+CNMI=1,2,0,0,0 – режим принятия СМС: 
  delay(1000);                                  // Пауза 1 сек
  Sim800l.println("AT+GSMBUSY=1");     	  // Отправка команды AT+GSMBUSY=1 запрет входящих звонков:
  delay(1000);                                  // Пауза 1 сек
  Sim800l.println("AT+CSCS=\"GSM\"");     	  // Отправка команды AT+CSCS= «GSM» кодировка текстового режима Доступны следующие кодировки: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1
  delay(1000);                                    // Пауза 1 сек
  Sim800l.println("AT+CMGL=\"REC UNREAD\"");  //чтение всех непрочитанных сообщений
  delay(1000);

}

void loop() {
  T_zamer_vozduh_int = T_zamer_vozduh.getTempAverage();
  T_zamer_kotel_int = T_zamer_kotel.getTempAverage();
  Serial.print("Temperatura Vozduha: ");    //отправляем в порт текст с температурой воздуха
  Serial.println(T_zamer_vozduh_int);
  Serial.print("Temperatura Kotel: ");    //отправляем в порт текст с температурой Котла
  Serial.println(T_zamer_kotel_int);
  Serial.println(T_avaria_kotel);
  
	if (T_zamer_vozduh_int < (T_Zadan - 2))
		{
			digitalWrite(Ten1,LOW);
      Ten1_status=1;      
			delay(1000);
			digitalWrite(Ten2,LOW);
      Ten2_status=1;
			delay(1000);
      digitalWrite(Ten3,LOW);
      Ten3_status=1;      
			delay(1000);
		}
	if (T_zamer_vozduh_int == (T_Zadan - 2))
		{
			digitalWrite(Ten1,HIGH);
      Ten1_status=0;      
			delay(1000);
			digitalWrite(Ten2,LOW);
      Ten2_status=1;      
			delay(1000);
      digitalWrite(Ten3,LOW);
      Ten3_status=1;
			delay(1000);
		}
  if (T_zamer_vozduh_int == T_Zadan)
		{
			digitalWrite(Ten1,HIGH);
      Ten1_status=0;
			delay(1000);
			digitalWrite(Ten2, HIGH);
      Ten2_status=0;      
			delay(1000);
      digitalWrite(Ten3,LOW);
      Ten3_status=1;      
			delay(1000);
		}
  if (T_zamer_vozduh_int >= (T_Zadan + 2))
		{
			digitalWrite(Ten1,HIGH);
      Ten1_status=0;
			delay(1000);
			digitalWrite(Ten2,HIGH);
      Ten2_status=0;      
			delay(1000);
      digitalWrite(Ten3,HIGH);
      Ten3_status=0;
			delay(1000);
		}

  if (T_zamer_kotel_int >= T_avaria_kotel)
		{
			digitalWrite(Ten1,HIGH);
      Ten1_status=0;
			delay(1000);
			digitalWrite(Ten2,HIGH);
      Ten2_status=0;
			delay(1000);
      digitalWrite(Ten3,HIGH);
      Ten3_status=0;
			delay(1000);
      T_Zadan = 5;
      
      Serial.print("АВАРИЯ!!!! Температура Котла: ");
      Serial.println(T_zamer_kotel_int);    
      Serial.println(T_avaria_kotel);     
      Sostoyanie+="AVARIA KOTLA!!!   T = ";      
      Sostoyanie+=T_zamer_kotel_int;
      Sostoyanie+=" C";
      //Sostoyanie+=",";
      //Sostoyanie+=Ten1_status;
      //Sostoyanie+=Ten2_status;
      //Sostoyanie+=Ten3_status;      
      sms(String(Sostoyanie), String(NomerHozyain));     
      Sostoyanie = "";
			}

  if(Sim800l.available())                      // Проверяем, если есть доступные данные
    {                     
     delay(100);                              // Пауза 0,1 сек
     while(Sim800l.available())
      {               // Проверяем, есть ли еще данные.   
        incomingByte = Sim800l.read();            // Считываем байт и записываем в переменную incomingByte   
        inputString += incomingByte;              // Записываем считанный байт в массив inputString 
      }
    delay(10);  
    Serial.println(inputString);
    //****************** опредялем номер звонившего ****************************
    NomerPHone = inputString.substring(inputString.indexOf("\"")+1,inputString.indexOf(",")-1); // выделяем номер
    Serial.println(NomerPHone);

// ****************** Запрос состояние ****************
    if (inputString.indexOf("ZAPROS") > -1)     // Проверяем  полученные  команды, запрос данных 
      {
        Serial.println("zapros balansa");
    	  Sim800l.println("AT+CUSD=1,\"#100#\"");  //запрос баланса
	      delay(5000);
	      if(Sim800l.available())                      // Проверяем, если есть доступные данные
   	      {                     
            delay(100);                               // Пауза 0,1 сек
            while(Sim800l.available())               // Проверяем, есть ли еще данные.   
            {
              incomingByte = Sim800l.read();            // Считываем байт и записываем в переменную incomingByte   
              inputString += incomingByte;              // Записываем считанный байт в массив inputString   
            }   
            delay(10); 
          }                                // Пауза 0,1 сек
        Serial.println(inputString);
        int zzz = inputString.indexOf("e:");  
        String balance=inputString.substring(inputString.indexOf("r"),zzz+2); //баланс на сим карте
        Serial.println(balance);
        bal += String (balance);
        delay(500);
     
      // ***************** собираем в одну строку температуры, статус ТЭНов и баланс SIM ****************           
        Sostoyanie+=T_Zadan; 
        Sostoyanie+=",";
        Sostoyanie+=T_zamer_vozduh_int; 
        Sostoyanie+=",";
        Sostoyanie+=T_avaria_kotel;  
        Sostoyanie+=",";              
        Sostoyanie+=T_zamer_kotel_int;
        Sostoyanie+=",";
        Sostoyanie+=Ten1_status;
        Sostoyanie+=Ten2_status;
        Sostoyanie+=Ten3_status;
        Sostoyanie+=",";                
        Sostoyanie+=bal;
        //Sostoyanie+="rub";
        sms(String(Sostoyanie), String(NomerPHone));
        bal="";          
        Sostoyanie=""; 
      }

    if (inputString.indexOf("USTAN") > -1)     // Проверяем  полученные  команды, строка UST =30 =90
      {    
        int Tz_Ind = inputString.indexOf("=");
        int Tk_Ind = inputString.lastIndexOf("=");
        String Tz = inputString.substring(Tz_Ind+1, Tk_Ind-1);
        String Tk = inputString.substring(Tk_Ind+1);
        T_Zadan = Tz.toInt();
        T_avaria_kotel = Tk.toInt();
        Serial.println(T_Zadan);        
        Serial.println(T_avaria_kotel);
       // Sostoyanie = "USTANOV_OK"; 
        sms(String("PARAM_OK"), String(NomerPHone));
       // Sostoyanie="";
      } 
      
    if (inputString.indexOf("TENOFF") > -1)
      {
        digitalWrite(Ten1,HIGH);
        Ten1_status=0;
			  delay(1000);
			  digitalWrite(Ten2,HIGH);
        Ten2_status=0;
			  delay(1000);
        digitalWrite(Ten3,HIGH);
        Ten3_status=0;
			  delay(1000);
        T_Zadan = 5;
        Sostoyanie+=T_Zadan; 
        Sostoyanie+=",";
        Sostoyanie+=T_zamer_vozduh_int; 
        Sostoyanie+=",";
        Sostoyanie+=T_avaria_kotel;  
        Sostoyanie+=",";              
        Sostoyanie+=T_zamer_kotel_int;
        Sostoyanie+=",";
        Sostoyanie+=Ten1_status;
        Sostoyanie+=Ten2_status;
        Sostoyanie+=Ten3_status;
        sms(String(Sostoyanie), String(NomerPHone));
        Sostoyanie=""; 
      } 

    // ***************** удаляем все смс-ки с симки ****************
    delay(50); 
    if (inputString.indexOf("OK") == -1)
      {    
        Sim800l.println("AT+CMGDA=\"DEL ALL\"");      
        delay(1000);
      }     
    inputString = "";
    NomerPHone = NomerHozyain;        
    }  

 
    

//delay(180000); 		// пауза 3 минуты
delay(7000);
}

void sms(String text, String phone)             // Процедура Отправка СМС
 {
   Serial.println("SMS send started");           // выкидываем в порт текст
   Sim800l.println("AT+CMGS=\"" + phone + "\""); // отправка на номер телефона
   delay(500);          // Пауза 0,5 сек
   Sim800l.print(text);
   delay(500);
   Sim800l.print((char)26);
   delay(500);
   Serial.println("SMS send complete");
   delay(2000);         // Пауза 2 сек
 }

Скетч управление электрокотлом с 3-мя ТЭНами через телефон. Общение через смс.

Вы же видите, что код выложен неправильно? Для оформления используются три ОБРАТНЫХ апострофа. Это тот, который на кнопке ё. Исправьте, так код рассматривать нереально

Какая плата и какой проц на ней? Случаем не ЛГБТ?

плата

Плата макетная с модулем WAVGAT без USB V3.0,

Нано

Мини USB Nano 3,0 с загрузчиком совместимый контроллер Nano для arduino CH340 USB драйвер 16 МГц ATMEGA328P

Извиняюсь за паузы, нянчусь с малым

На самом процессоре чо написано?

фото нужны, того что у вас, из интернета мы все умеем.