Зависание UNO при отключении от COM-порта

shamsing
Offline
Зарегистрирован: 17.06.2014

Здравствуйте, столкнулся с такой проблемой на созданной сигнализации построенной на уне, и сим800л.

Всё работает без перебоев, пока подключен ноут, стоит отключить и спустя какое то время, 10мин-1час код зависает, модем работает, до него дозваниваюсь, но вот смс  в ответ не шлёт тревоги не выдаёт и звонок не сбрасывает как это прописано, и вот вопрос, что может отвечать за такие непонятные действия?

shamsing
Offline
Зарегистрирован: 17.06.2014

А вот код, может будет яснее

//ОТПРАВЛЯЕТ сообщения но не может достучатсья до DHT поэтому зависает
//добавлена сигналка
String vers = "Start1.4";                                 // Версия

#include <SoftwareSerial.h>                               // Библиотека програмной реализации обмена по UART-протоколу
SoftwareSerial SIM800(3, 4);                              // RX, TX пины подключения SIM800l

#include "OneWire.h"                                      // Библиотека для подключения датчика DS18b20
OneWire ds(8);                                            // Пин подключения датчика DS18b20
int tkot = 0;                                             // Переменная для хранения значение температуры с датчика DS18B20
long lastUpdateTime = 0;                                  // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000;                        // Определяем периодичность проверок

#include "max6675.h"                                      // Библиотека для подключения модуля термопары MAX6675
int thermoDO = 12;                                        // он же SO
int thermoCS = 10;                                        // 8/12
int thermoCLK = 13;                                       // он же SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);      //
int tfire = 0;                                            // Переменная для хранения значение температуры с термопары модуля MAX6675

#include "DHT.h"                                          // Библиотека для подключения датчика DHT
#define DHTTYPE DHT22                                     // Установка модели датчика DHT(11/22)
#define DHTPIN  11                                        // Пин подключения датчика DHT

unsigned long last_time_sms;                              // Переменная для хранения времени последнего отправленного SMS

float hdom, tdom;                                         //
DHT dht(DHTPIN, DHTTYPE);                                 //

//int pins[3] = {6, 7};                                   // Пины с подключенными реле 
String protectiphone = "";                                // Переменная хранящая номер телефона поставившего на охрану, 
                                                          //которому будет осуществляться звонок, при тревоге
String iphone = "+79999999999";                                       // Переменная хранящая в себе номер из мелого списка который последним отправлял SMS модулю
String message = vers;                                    // Переменная хранящая в себе текст SMS
bool sendsmsok;                                   // Флаг успешной отправки смс

String _response    = "";                                 // Переменная для хранения ответа модуля
long lastUpdate = millis();                               // Время последнего обновления смс
long lastUpdateOk = millis();                             // Время последнего обновления состояния модуля
long updatePeriod   = 60000;                              // Проверять каждые 20 секунд наличие смс
long updateOk   = 59000;                                  // Проверять каждые 59 секунд состояние модуля

String phones = "+7999999999, +79999999999";             // Белый список телефонов
String fullinf = "fail";                                  // Переменная хранящая информацию со всех датчиков

int protect1 = A0;                                        // Пин подключения охранной зоны №1 (вход)
int protect2 = A1;                                        // Пин подключения охранной зоны №2 (вход с гаража)
int relzum = 6;                                           // Пин подключения реле отвечающей за сирену
int relsvet = 7;                                          // Пин подключения реле отвечающей за свет
int protect1_val = 0;                                     // Переменная для хранения значения с датчика зоны №1
int protect2_val = 0;                                     // Переменная для хранения значения с датчика зоны №2
bool protect;                                             // Переменная флага постановки сигнализации (ON/OFF)
int flagsms = 0;                                          // Переменная флага отправки смс
bool alarm;                                       // Переменная флага сработки охранки

void(* resetFunc) (void) = 0;                             // Объявляем функцию void (програмный reset)

void setup() {
  
  
  pinMode(protect1,INPUT);                                // Настройка пина как вход
  pinMode(protect2,INPUT);                                // Настройка пина как вход
  pinMode(relzum,OUTPUT);                                 // Настройка пина как выход
  pinMode(relsvet,OUTPUT);                                // Настройка пина как выход
  digitalWrite(relzum, HIGH);                             // Установка высокого уровня сигнала на реле т.к. работают в обратной полярности
  digitalWrite(relsvet, HIGH);                            // Установка высокого уровня сигнала на реле т.к. работают в обратной полярности

  bool protect = false;                                   // Флаг состояния сигнализации при включении устанавливается OFF
  alarm = false;
  sendsmsok = false;


  dht.begin();                                            //
  
  Serial.begin(9600);                                     // Установка скорость обмена данными с компьютером
  SIM800.begin(9600);                                     // Установка скорость обмена данными с модемом
  Serial.println(vers);                                   // Сообщение в монитор порта о версии программы
  sendATCommand("AT", true);                              // Отправили AT для настройки скорости обмена данными
  //sendATCommand("AT+CMGDA=\"DEL ALL\"", true);            // Удаляем все SMS, чтобы не забивать память
  sendATCommand("AT+CMGF=1;&W", true);                    // Включаем текстовый режима SMS (Text mode) и сразу сохраняем значение (AT&W)!
 
  do {
    _response = sendATCommand("AT+CLIP=1", true);         // Включаем АОН
    _response.trim();                                     // Убираем пробельные символы в начале и конце
  } while (_response != "OK");                            // Не пускать дальше, пока модем не вернет ОК
  
  lastUpdate = millis();                                  // Обнуляем таймер проверки наличия сообщений
  lastUpdateOk = millis();                                // Обнуляем таймер проверки состояния модуля SIM800L
}

String sendATCommand(String cmd, bool waiting) {                  // Функция отправки модулю SIM800L команд
  String _resp = "";                                              // Переменная для хранения результата
  Serial.println(cmd);                                            // Дублируем команду в монитор порта
  SIM800.println(cmd);                                            // Отправляем команду модулю
  if (waiting) {                                                  // Если необходимо дождаться ответа...
    _resp = waitResponse();                                       // ... ждем, когда будет передан ответ
    if (_resp.startsWith(cmd)) {                                  // Убираем из ответа дублирующуюся команду
      _resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2);
    }
    Serial.println(_resp);                                        // Дублируем ответ в монитор порта
  }
  return _resp;                                                   // Возвращаем результат. Пусто, если проблема
}

String waitResponse() {                                           // Функция ожидания ответа и возврата полученного результата
  String _resp = "";                                              // Переменная для хранения результата
  long _timeout = millis() + 10000;                               // Переменная для отслеживания таймаута (10 секунд)
  while (!SIM800.available() && millis() < _timeout)  {};         // Ждем ответа 10 секунд, если пришел ответ или наступил таймаут, то...
  if (SIM800.available()) {                                       // Если есть, что считывать...
    _resp = SIM800.readString();                                  // ... считываем и запоминаем
  }
  else {                                                          // Если пришел таймаут, то...
    Serial.println("Timeout...");                                 // ... оповещаем об этом и...
  }
  return _resp;                                                   // ... возвращаем результат. Пусто, если проблема
}

bool hasmsg = false;                                              // Флаг наличия сообщений к удалению
int start = 0;                                                    // Флаг отправки SMS о включении Arduino
//delay(20000);                                                     // Ждём сохранения параметров, установки связи модулем SIM800L

void loop() {
  
  /*if(alarm == true){
    sendATCommand("ATD\"" + iphone + "\"", true);
  }*/
  //hdom = dht.readHumidity();                                      // Запись значения влажности с датчика DHT в переменную
  //tdom = dht.readTemperature();                                   // Запись значения температуры с датчика DHT в переменную
  tfire = thermocouple.readCelsius();                             // Запись значения температуры с датчика DS18B20 в переменную
  detectTemperature();                                            // Определяем температуру теплоносителя в котле от датчика DS18B20
  fullinf = //"T dom = " + String(tdom, 1) +                      // Запись в переменную информиации всех состояний и значений с датчиков
      //" C \r\nH dom = " + String(hdom, 1) + 
      "kotla = " + 
      String(tkot) + 
      " C  \r\nT fire = " + 
      String(tfire) + 
      " C \r\nProtect = " + 
      String(protect == 0 ? "OFF" : "ON"); 
  if (start == 0){                                               // Проверка флага отправки сообщения о включении, если start = 0, то:
    sendSMS();                                                   // Отправляем сообщение с версией прошивки 
    //if(сообщение отправлено){
    // флаг отправки ставмим 1
    //}
    start = 1;                                                   // Ставим флаг отправки сообщения о включении start = 1
  }      
  
  if (protect == true){                                          // Проверяем значение флага на постановку охраны, если флаг true то:
    protect1_val = digitalRead(protect1);                            // Записываем значение с датчика дома
    protect2_val = digitalRead(protect2);                            // Записываем значение с датчика котельной
    
    if(protect1_val == LOW ){                                    // Проверяем значение с датчиков зоны №1, если уровень сигнала LOW, то:
      //добавить флаг отправленного сообщения и запрет на отправку повторную раньше чем через 5 мин
      //______________________________________________________________________________
      //проверяется значение с датчика двери входной если датчик сработал и сигнал нижкого уровня то
      //if(сообщение отправлено){
      // флаг отправки ставмим 1
      //}
      digitalWrite(relsvet, LOW);                                // Включаем реле на котором подключено освещение в доме
      digitalWrite(relzum, LOW);                                 // Включаем реле на котором подключена сирена
      message = "Dom ALARM";                                     // Запись в переменную сообщения о проникновении в зону №1
      sendSMS();                                                 // Запуск функции отправки SMS
      delay(10000);
      //alarm = true;                                              // Ставим флага сработки охранки в значение 1
      //если смс отправлено то ставим флаг 1(можно узнать у модема)
      //__________________________________________________________________________
      sendATCommand("ATD" + protectiphone + ";", true);       // Делаем звонок на телефон который включил охранку
      //если смс не отправлено то повторяем отправку пока не отправится,если отправилось выходим из цикла
      //________________________________________________________________________
    }

    if(protect2_val == LOW ){                                    // Проверяем значение с датчиков зоны №2, если уровень сигнала LOW, то:
      //добавить флаг отправленного сообщения и запрет на отправку повторную раньше чем через 5 мин
      //______________________________________________________________________________     
      //проверяется значение с датчика двери гаража если датчик сработал и сигнал нижкого уровня то
      digitalWrite(relsvet, LOW);                                // Включаем реле на котором подключено освещение в доме
      digitalWrite(relzum, LOW);                                 // Включаем реле на котором подключена сирена
      message = "Kotelna ALARM";                                 // Запись в переменную сообщения о проникновении в зону №2
      iphone = protectiphone;
      if (alarm == false){
        alarm = true;                                            // Ставим флага сработки охранки в значение 1
        sendSMS();                                                 // Запуск функции отправки SMS
        Serial.println("SMS Kotelna ALARM");
                                                      
        //если смс отправлено то ставим флаг 1
        delay(10000);
        
        sendATCommand("ATD" + protectiphone + ";", true);       // Делаем звонок на телефон который включил охранку
        Serial.println(" TEL Kotelna ALARM");
      }
      
      //sendATCommand("ATD" + protectiphone + ";", true);        // Делаем звонок на телефон который включил охранку
      //если смс не отправлено то повторяем отправку пока не отправится,если отправилось выходим из цикла
    }
  }

  if (lastUpdateOk + updateOk < millis() ) {                    // Пора проверить состояние модуля
    alarm = false;
    lastUpdateOk = millis();
  }
  
  if (_response.startsWith("RING")) {         // Есть входящий вызов
    sendATCommand("ATH", true);               // Отклоняем вызов/"ATA" Отвечаем на вызов
  }
  
  if (lastUpdate + updatePeriod < millis() ) {                    // Пора проверить наличие новых сообщений
    //alarm = false;
    //hdom = dht.readHumidity();                                    // Запись значения влажности с датчика DHT в переменную
    //tdom = dht.readTemperature();                                 // Запись значения температуры с датчика DHT в переменную
    Serial.println(fullinf);
    //Serial.println("sendsmsok = " + String(sendsmsok) + " \r\nT alarm = " + String(alarm));
    do {
      _response = sendATCommand("AT+CMGL=\"REC UNREAD\",1", true);// Отправляем запрос чтения непрочитанных сообщений
      if (_response.indexOf("+CMGL: ") > -1) {                    // Если есть хоть одно, получаем его индекс
        int msgIndex = _response.substring(_response.indexOf("+CMGL: ") + 7, _response.indexOf("\"REC UNREAD\"", _response.indexOf("+CMGL: ")) - 1).toInt();
        char i = 0;                                               // Объявляем счетчик попыток
        do {
          i++;                                                    // Увеличиваем счетчик
          _response = sendATCommand("AT+CMGR=" + (String)msgIndex + ",1", true);  // Пробуем получить текст SMS по индексу
          _response.trim();                                       // Убираем пробелы в начале/конце
          if (_response.endsWith("OK")) {                         // Если ответ заканчивается на "ОК"
            if (!hasmsg) hasmsg = true;                           // Ставим флаг наличия сообщений для удаления
            sendATCommand("AT+CMGR=" + (String)msgIndex, true);   // Делаем сообщение прочитанным
            sendATCommand("\n", true);                            // Перестраховка - вывод новой строки
            parseSMS(_response);                                  // Отправляем текст сообщения на обработку
            break;                                                // Выход из do{}
          }
          else {                                                  // Если сообщение не заканчивается на OK
            //Serial.println ("Error 123");                             // Какая-то ошибка
            sendATCommand("\n", true);                            // Отправляем новую строку и повторяем попытку
          }
        } while (i < 3);
        sendATCommand("AT+CMGR=" + (String)msgIndex, true);   // Делаем сообщение прочитанным
        sendATCommand("AT+CMGDA=\"DEL READ\"", true);           // Удаляем все прочитанные сообщения
        break;
        
      }
      else {
        lastUpdate = millis();                                    // Обнуляем таймер
        if (hasmsg) {
          sendATCommand("AT+CMGDA=\"DEL READ\"", true);           // Удаляем все прочитанные сообщения
          hasmsg = false;
        }
        break;
      }
    } while (1);
  }

  if (SIM800.available())   {                         // Если модем, что-то отправил...
    _response = waitResponse();                       // Получаем ответ от модема для анализа
    _response.trim();                                 // Убираем лишние пробелы в начале и конце
    Serial.println(_response);                        // Если нужно выводим в монитор порта
    if (_response.indexOf("+CMTI:")>-1) {             // Пришло сообщение об отправке SMS
      sendsmsok = true;                               // Ставим флаг успешной отправки SMS
      lastUpdate = millis() -  updatePeriod;          // Теперь нет необходимости обрабатываеть SMS здесь, достаточно просто
                                                      // сбросить счетчик автопроверки и в следующем цикле все будет обработано
    }
  }
  if (Serial.available())  {                          // Ожидаем команды по Serial...
    SIM800.write(Serial.read());                      // ...и отправляем полученную команду модему
  }

}

void parseSMS(String msg) {                                   // Парсим SMS
  String msgheader  = "";
  String msgbody    = "";
  String msgphone   = "";

  msg = msg.substring(msg.indexOf("+CMGR: "));
  msgheader = msg.substring(0, msg.indexOf("\r"));            // Выдергиваем телефон

  msgbody = msg.substring(msgheader.length() + 2);
  msgbody = msgbody.substring(0, msgbody.lastIndexOf("OK"));  // Выдергиваем текст SMS
  msgbody.trim();

  int firstIndex = msgheader.indexOf("\",\"") + 3;
  int secondIndex = msgheader.indexOf("\",\"", firstIndex);
  msgphone = msgheader.substring(firstIndex, secondIndex);
  msgbody.toLowerCase();

  Serial.println("Phone: " + msgphone);                       // Выводим номер телефона
  iphone = msgphone;
  Serial.println("Message: " + msgbody);                      // Выводим текст SMS

  if (msgphone.length() > 6 && phones.indexOf(msgphone) > -1) { // Если телефон в белом списке, то...
    setSMStext(msgbody, msgphone);                            // ...выполняем команду
  }
  else {
    Serial.println("Unk numb");                               // Если номер не в белом списке выводим в монитор порта сообщение
    sendATCommand("AT+CMGDA=\"DEL READ\"", true);           // Удаляем все прочитанные сообщения
    }
}



void setSMStext (String result, String phone) {               // Функция обработки SMS
  bool correct = false;                                       // Для оптимизации кода, переменная корректности команды
  String msgToSend = "";                                      // Переменная для ответа SMS запросов
  Serial.println(String(result));                             // Вывод в монитор порта
  
  if (result.startsWith("t")){                                // Проверяем  сообщение если в нем "Т", то:
    Serial.println("!t");                                     // Выводим команду полученую в SMS в монитор порта
    msgToSend = fullinf;                                      // Записываем в переменную всю информацию
    correct = true;                                           // Ставим флаг корректности команды
    
  }

  if (result.startsWith("c")){                                // Проверяем  сообщение если в нем "С"(Close), то:
    Serial.println("!c");                                     // Выводим команду полученую в SMS в монитор порта
    delay(10000);
    protect = true;                                           // Ставим флаг поставновки/снятия охранки в состояние ON
    protectiphone = iphone;                                   // Присваиваем переменной номер телефона который поставил систему на охрвну
    msgToSend = "\r\nProtect" +(String)(protect == 0 ? "OFF" : "ON");// Записываем в переменную значение флага постановки/снятия  охранки
    correct = true;                                           //Ставим флаг корректности команды
    
  }

  if (result.startsWith("o")){                                // Проверяем  сообщение если в нем "О"(Open), то:
    Serial.println("!o");                                     // Выводим команду полученую в SMS в монитор порта
    protect = false;                                          // Сбрасываем флаг поставновки/снятия охранки в значение OFF
    alarm = false;                                            // Сбрасываем флаг сработки охранки ставим значение 0
    digitalWrite(relsvet, HIGH);                              // Выключаем реле света, если оно включено было ранее при сработке охранки
    digitalWrite(relzum, HIGH);                               // Выключаем реле звука, если оно включено было ранее при сработке охранки
    msgToSend = "\r\nProtect" +(String)(protect == 0 ? "OFF" : "ON");// Записываем в переменную значение флага постановки/снятия  охранки
    correct = true;                                           //Ставим флаг корректности команды
    
  }


  if (!correct) {                                             // Если команда не кооректная, то:
    msgToSend = "Unk command: " + result;                     // Записываем в переменную сообщение не корректности команды и пишем полученую команду
  }
  Serial.println(msgToSend);                                  // Выводим сообщение в моритор порта
  message = msgToSend;                                        // Записываем в переменную сообщение для отправки в SMS
  sendSMS();                                                  // Запускаем функцию отправки SMS

  if (_response.startsWith("+CMGS:")) {                       // Пришло сообщение об отправке SMS
      int index = _response.lastIndexOf("\r\n");              // Находим последний перенос строки, перед статусом
      String result = _response.substring(index + 2, _response.length()); // Получаем статус
      result.trim();                                          // Убираем пробельные символы в начале/конце

      if (result == "OK") {                                   // Если результат ОК - все нормально
        Serial.println ("Message was sent. OK");
      }
      else {                                                  // Если нет, нужно повторить отправку
        Serial.println ("Message was not sent. Error");
      }
  }
}


void sendSMS(){                                               // Функция отправки SMS
  sendATCommand("AT+CMGS=\"" + iphone + "\"", true);          // Переходим в режим ввода текстового сообщения
  sendATCommand(message + "\r\n" + (String)((char)26), true); // После текста отправляем перенос строки и Ctrl+Z
  Serial.println ("send SMS");
}

int detectTemperature(){                                      //Функция обработки значения с датчика DS18B20
  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
  {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();
    // Формируем значение
    tkot = (data[1] << 8) + data[0]; tkot = tkot >> 4;
  }
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Что за плата? Как питается? Схема есть?

sadman41
Offline
Зарегистрирован: 19.10.2016

За любые непонятные действия отвечает разработчик.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

sadman41 пишет:
За любые непонятные действия отвечает разработчик.

Да тут, скорее всего, не в программе дело, а просто питание проседает при работе GSM и ардуина виснет.

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

Что за плата? Как питается? Схема есть?

Плата arduino uno , питается от комп блока питания 12в 

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

sadman41 пишет:
За любые непонятные действия отвечает разработчик.

Да тут, скорее всего, не в программе дело, а просто питание проседает при работе GSM и ардуина виснет.

пошел пробовать записывать от другого источника питания, а у неё есть приобретёт, питаться с внешнего или по usb или она выбирает где лучше ?

nik182
Offline
Зарегистрирован: 04.05.2015

Она выбирает где больше напряжение. Диод разделительный работает как ключ.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

При работе с модулем SIM800 настоятельно рекомендуется подключить  low ESR конденсатор не меньше чем на 100МкФ прямо к входу питания модуля.

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

При работе с модулем SIM800 настоятельно рекомендуется подключить  low ESR конденсатор не меньше чем на 100МкФ прямо к входу питания модуля.

его питает понижающая микросхема с аликатам вроде два кондера есть я конечно не смотрел всю схему, но модуль работает вроде без проблем

Кстати включил кабель ардуинки которым к компу была подключена, в зарядку от телефона, весь день работает стабильно, не понимаю пока если пробелма в этом была то странно ее питают 12в компьютерного блока питания 300ват, а модуль поключен к 5 в через понижайку до 4.3 если память не изменяет, может на плате ардуины вход независимый питания подпорчивает мне жизнь?

shamsing
Offline
Зарегистрирован: 17.06.2014

nik182 пишет:
Она выбирает где больше напряжение. Диод разделительный работает как ключ.

получается ей не хватает напруги с бп компа? 0_о

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

shamsing пишет:

может на плате ардуины вход независимый питания подпорчивает мне жизнь?

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

shamsing
Offline
Зарегистрирован: 17.06.2014

b707 пишет:

shamsing пишет:

может на плате ардуины вход независимый питания подпорчивает мне жизнь?

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

так не пойдёт, стабилизатор ардуны 12 на 5 всего миллиампер 500-700

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

shamsing пишет:

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

[/quote]

GSM modem при посылки сообщений потребляет в пике 2А которые стабилизатор Уны не вытягивает. Нужно либо питать модем отдельным БП или вешать большой кондер по питанию прямо на вход питания модема. Пики потребления хоть и большие, но кратковременные.

 

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

shamsing пишет:

совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

ну чему ж вы удивляетесь, так работать не будет

shamsing
Offline
Зарегистрирован: 17.06.2014

ua6em пишет:

так не пойдёт, стабилизатор ардуны 12 на 5 всего миллиампер 500-700

не понимаю что не так, можно по подробнее, 12в преобразуется в 500-700 что идёт на питание ардуины и всё, вроде всё логично и правильно, кстати она сейчас вот уже сколько дней, когда я попробовал запитать ее от зарядника телефона работает стабильно, а он в свою очередь 500милиампер

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

Да нету там 500-700. Мощность регулятора примерно 1 вт, разница напряжений 12 - 5 = 7в из чего максимальный ток 1вт / 7 в = 0.15а
Из этих 150ма сама ардуина берет 50-70, и что остается для GSM?

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

shamsing пишет:

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

GSM modem при посылки сообщений потребляет в пике 2А которые стабилизатор Уны не вытягивает. Нужно либо питать модем отдельным БП или вешать большой кондер по питанию прямо на вход питания модема. Пики потребления хоть и большие, но кратковременные.

 

[/quote]

то что он потребляет 2 ампера это я знаю но приччём тут стабилизатор ардуины,я может ошибся выше и не правильно написал, попробую ещё раз
бп компьютерас него берём два провода 12в паяю разъем , и подсоединяю его в ардуину уно , дальше беру другие два провода 5в этого же блока питания паяю к нему понижающую плату, на ней выставлю по моему 4.3 это в пределах нормы для GSM модуля и подсоединяю сам модуль, дальше равноплечий делитель на TX линии т.к. у GSM модуля входное напряжение на ней 2.5 а у ардуины на выходе 5 вольт.
Я хочу сказать что GSM модуль и ардуина питаются от одного блока но по разным линиям, а не ардуина питает модуль(ей можности не хватит это я понимаю, не могу понять почему она переключается с 12в которые идут на ее стабилизатор, на питание от USB 

shamsing
Offline
Зарегистрирован: 17.06.2014

b707 пишет:
Да нету там 500-700. Мощность регулятора примерно 1 вт, разница напряжений 12 - 5 = 7в из чего максимальный ток 1вт / 7 в = 0.15а Из этих 150ма сама ардуина берет 50-70, и что остается для GSM?

я тупой видимо, т.е. бп компа не может выдать 3 ампера, да ардуину 150ма, сколько то ма на пару сенсоров  и 2 ампера на GSM модуль ?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Стабильно проверенный работающий вариант подключения

http://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-ni...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

b707 пишет:

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

shamsing пишет:
 совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

shamsing пишет:
Я хочу сказать что GSM модуль и ардуина питаются от одного блока но по разным линиям, а не ардуина питает модуль(ей можности не хватит это я понимаю,

Вы бы определились откуда у вас  понижайка для GSM питается, от пина 5в ардуины или напрямую от БП.

shamsing пишет:
не могу понять почему она переключается с 12в которые идут на ее стабилизатор, на питание от USB 

Это вы сейчас про что говорите? И вообще, без нормальной схемы вашего подключения (плюс фотографии того как это в реале выглядит) обсуждение бессмысленно.

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

b707 пишет:

вы свой блок питания в какой пин ардуины втыкали - в черный круглый разъем? А GSM от чего при этом питался - с пина 5в ардуины?

shamsing пишет:
 совершенно верно, только для GSM еще понижался вольтаж  до допустимых значений

shamsing пишет:
Я хочу сказать что GSM модуль и ардуина питаются от одного блока но по разным линиям, а не ардуина питает модуль(ей можности не хватит это я понимаю,

Вы бы определились откуда у вас  понижайка для GSM питается, от пина 5в ардуины или напрямую от БП.

shamsing пишет:
не могу понять почему она переключается с 12в которые идут на ее стабилизатор, на питание от USB 

Это вы сейчас про что говорите? И вообще, без нормальной схемы вашего подключения (плюс фотографии того как это в реале выглядит) обсуждение бессмысленно.

конечно напрямую от БП

shamsing
Offline
Зарегистрирован: 17.06.2014

как смог, автокада под рукой нет, не дома там схему выкинуть мог бы по симпатичнее , но суть не меняется

shamsing
Offline
Зарегистрирован: 17.06.2014

а говорю я сейчас про то что вот при таком подключении, ардуина почему то хочет питаться от USB а не от БП поэтому раньше когда я отключал кабель от ноута и уносил его с собой всё вставало, приходилось оставлять ноут на стройке что бы охранка работал, теперь же подключил кабель USB в зарядник от телефона и вот уже сколько дней работает всё стабильно, вопрос
Почему 12 БП ее не устраивают, а 500ма китайского зарядника устраивают, связь вижу только в месте производителя, и ардуина и зарядник китайские, покупать оригинальную ардуину пока не решился, побоялся спалю в дальнейшем планирую, но пока рано

как я понимаю что GSM модуль не причём от исправно работает не зависимо от того, остановилась ардуина или нет

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

shamsing - а нафига ардуину питать от 12в? Раз у вас и так в схеме есть выход из БП 5в - так и питайте им ардуину напрямую. И все будет работать без зарядника.

А китайскость ардуины тут совершенно не причем, можете не тратить деньги на оригинал, проблему это не решит.

shamsing
Offline
Зарегистрирован: 17.06.2014

b707 пишет:

shamsing - а нафига ардуину питать от 12в? Раз у вас и так в схеме есть выход из БП 5в - так и питайте им ардуину напрямую. И все будет работать без зарядника.

А китайскость ардуины тут совершенно не причем, можете не тратить деньги на оригинал, проблему это не решит.

думал рас есть разъем 12 то почему бы и нет, т.е подать  5в на пин входа сразу на ардуину будет лучше?
завтра поеду домой тогда попробую такой вариант. спасибо

shamsing
Offline
Зарегистрирован: 17.06.2014

Только я что то не пойму, вижу пин питания (VIN) указано 7-12 в т.е. всё равно не 5 что бы через стабилизатор встроенный прошло, я правильно понимаю ?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

"Выход 5В"  может используется и для питания ардуины от стабилизированного источника

shamsing
Offline
Зарегистрирован: 17.06.2014

asam пишет:

"Выход 5В"  может используется и для питания ардуины от стабилизированного источника

БП компа, вполне я думаю стабилизированный, к тому же подключен через ББП ,т.е. подключаю, спасибо за подсказку, завтра буду пробовать )) УРА