Chrg LED leuchted und gsm code funktioniert nicht, arduino mkr gsm 1400

Hallo zusammen

Mein Arduino mkr gsm 1400 misst den Füllstand eines Milchtanks mit Hilfe einer Waage. Die Waage habe ich selbst gebaut mit 4 load cells und einem HX711. Der Füllstand wird per SMS an eine Mobiltelefonnummer geschickt. Der Code funktioniert am Anfang auch, aber nach 1-2 Stunden fängt die Chrg LED an zu blinken und ich kann den Füllstand nicht mehr per SMS abfragen. Der Arduino wird per VIN mit Strom versorgt und hat zusätzlich einen 2600mAh LiPo Akku der angeschlossen ist. Ich habe + mit VIN und - mit Ground verbunden. Hat jemand eine Idee was das Problem sein könnte?

Das ist der Akku: DC 3.7V 2600mAh 903759 li-ion Lithium Ionenpolymer Batteriewechsel für DIY Energiespeicher LED Licht Ventilator Hold Gift: Amazon.de: Elektronik & Foto

Das Ladegerät das den Arduino per VIN mit Strom versorgt:

Der Code:

#include <ArduinoLowPower.h>

// include the GSM library
#include <MKRGSM.h>

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

const char adminnummer[20] = "+*********"; //Adminnummer für Diagnose
char nummer[20] = "+********";            //Empfänger nummer definieren
int fuellstand;                         //Füllstand variable definieren

// Array to hold the number a SMS is retreived from
char senderNumber[20];

#include "HX711.h"

HX711 scale(7, 9); //7-> DOUT, 9->SCK

const float calibration_factor = -21.825;
int units;

int warnung[4] = {0, 15000, 10000, 5000}; //in Gramm

bool sms1geschickt = false;
bool sms2geschickt = false;
bool sms3geschickt = false;

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
 
  
  Serial.println("Milchautomat Fuellstand Benachrichtigung");

  // connection state
  bool connected = false;

  // Start GSM connection
  while (!connected) {
    if (gsmAccess.begin("****") == GSM_READY) {
      connected = true;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");

  scale.set_scale(calibration_factor);//für die Waage
  scale.tare();
}

void loop() {
  int c;//Variable für nachricht

  Serial.print("Messung:");
  units = scale.get_units(10) ;

  Serial.print(units);
  Serial.println(" Gramm");
  fuellstand = units - 5050; // Gewicht 50L Milchkanne tief

  //wenn zwischen 15L und 10L
  if (fuellstand <= warnung[1] && fuellstand > warnung[2] && !sms1geschickt ) {
    sms.beginSMS(nummer);
    sms.print("Milchmenge ca.: ");
    sms.print(fuellstand);
    sms.print(" ml");
    sms.endSMS();
    Serial.println("Warnung 1 gesendet");
    sms1geschickt = true;
    //wenn zwischen 10L und 5L
  } else if (fuellstand <= warnung[2] && fuellstand > warnung[3] && !sms2geschickt) {
    sms.beginSMS(nummer);
    sms.print("Milchmenge ca.: ");
    sms.print(fuellstand);
    sms.print(" ml");
    sms.endSMS();
    Serial.println("Warnung 2 gesendet");
    sms2geschickt = true;
    //wenn zwischen 5L und 0L
  } else if (fuellstand <= warnung[3] && fuellstand > 0 && !sms3geschickt) {
    sms.beginSMS(nummer);
    sms.print("Warnung! Fuellstand ca.: ");
    sms.print(fuellstand);
    sms.print(" ml");
    sms.endSMS();
    Serial.println("Warnung 3 gesendet");
    sms3geschickt = true;
  } else if (fuellstand > warnung[1]+1000) {
    sms1geschickt = false;
    sms2geschickt = false;
    sms3geschickt = false;
    Serial.println("sms1-3geschickt auf 0 gestellt");
  }

  if (sms.available()) {     // If there are any SMSs available()
    Serial.println("Message received from:");

    // Sender nummer in monitor ausgeben
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // wenn nachricht mit "+" dann text zurück schicken: "Nummer wechseln zu:"
    if (sms.peek() == '+') {
      sms.beginSMS(senderNumber);
      uint8_t ind = 0;
      while ((c = sms.read()) != -1 && ind < 19) {
        nummer[ind++] = c;
      }
      nummer[ind] = 0;
      sms.print("Empfaengernummer gewechselt zu: ");
      sms.print(nummer);
      sms.endSMS();
      Serial.println("Empfaengernummer gewechselt zu: ");
      Serial.println(nummer);

    } else if (sms.peek() == 'f') { //schick den Füllstand
      sms.beginSMS(senderNumber);
      sms.print("Fuellstand: ");
      sms.print(fuellstand);
      sms.print(" ml");
      sms.endSMS();
      Serial.println("Fuellstand auf Anfrage geschickt");

    } else if (sms.peek() == 'w') {       // ändere Warnung 1
      sms.beginSMS(senderNumber);
      uint8_t ind = 0;
      char v[20];
      sms.read();
      int WarnungsNummer = sms.read()-'0'; 
      while ((c = sms.read()) != -1 && ind < 19) {
        v[ind++] = c;
      }
      v[ind] = 0;
      int Wert = atoi(v);
      Serial.println(Wert);
      sms.print("Warnung ");
      sms.print(WarnungsNummer);
      sms.print(" ist im Moment bei: ");
      sms.print(warnung[WarnungsNummer]); 
      sms.print("ml.");
      if (v) {
        warnung[WarnungsNummer] = Wert;
        sms.print(" und wird auf: ");
        sms.print(warnung[WarnungsNummer]); //dieser Wert stimmt
        sms.print(" ml.");
        sms.print(" gesetzt.");
      }
      sms.endSMS();
 
    } else { // wenn falscher SMS Befehl
      sms.beginSMS(senderNumber);
      sms.print("Falscher Befehl");
      sms.endSMS();
      Serial.println("Empfänger SMS geschickt: Falscher Befehl");
      sms.beginSMS(adminnummer);
      sms.print("Falscher Befehl. Nachricht: ");
      while ((c = sms.read()) != -1) {
        sms.print((char)c);
      }
      sms.endSMS();
      Serial.println("Admin SMS geschickt: Falscher Befehl");
    }

    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
    
  }
  Serial.println("power down");
  Serial.println("delay....");
  void power_down();
  delay(60000);
  void power_up();
  Serial.println("power up");
}

Nimm ein richtiges Netzteil.
Du hast einen Charger.
Der hat eine "intelligente" Logik.

1 Like

Wäre das besser?

Exsys GmbH Netzteil 5V / 4.0A , 20W (5.5mm DC-Jack) (20 W) - digitec

Ja nur es gibt biligere

1 Like

Du mußt aber auch bedenken daß in der Schweiz gegenüber DE/IT um ca 30% Teurer ist.
Aber Ja es gibt billigere. Um 10 / Franken gibt es sicher was.

So sicher wäre ich da nicht daß der Dingsda von SBS ein Charger ist und nicht ein Netzteil mit 5V und max 2,1A.

Hast Du mal gemessen ob die 5V von Netzteil immernoch 5V sind? bzw ob die in der Zeit stabil sind?

Einige digitale Meßgeräte haben eine MIN/MAX Messung. Da kannst relativ einfach ein Absinken der 5V finden.

Miß auch die Batteriespannung. Wird die Batterie entladen trotz Netzteil?

Grüße Uwe

Wo Charger drauf steht, ist Charger drin.
Da bin ich mir sicher.
Und der hat sogar die HV-Logik drin.

1 Like

Das Ding ist der TETR1USB2AWFAST

laut dieser Seite:
"Dank der Intelligent Charge-Technologie erkennt dieses Ladegerät automatisch die maximal aufnehmbare Energieleistung deines Devices und reguliert diese entsprechend.
Auf diese Art erhältst du ein Maximum an Ladeenergie in einem Minimum an Zeit: Nach nur 30 Minuten liegt das Ladeniveau deines Gerätes schon bei 50%.
...

  • Die Zeiten sind näherungsweise und variieren in Abhängigkeit des zu ladenden Geräts.
    "

Also etwas überaus nichtssagender, blumiger , von der Werbeabteilung produzierter Text, mit mehreren Technischen Ungenauigkeiten und untechnische Terminussen (Energieleistung, reguliert diese (Das Ladegerät regelt die Leistungsaufnahme des zu ladenden Gerätes??, Ladeenergie, Ladeniveau) .

Ein Netzteil das die max Leitungsaufnahme des Geräts erkennt und darauf reagiert. Wie? Indem es die 5v Ausgangsspannung unabhängig vom gezogenen Strom konstant hält?
Ich glaube Du gibst mir recht daß ein 2000mAh Akku ( was typische Werte von Händys sind) mit 2,1A in 30 Minuten ca 50% voll sein kann und in 60 Minuten 100% voll ist. (angenomme die Ladeschaltung im Händy kann mit 2A laden.

Für mich ist das immernoch ein USB Switching Netzteil mit 5V und max 10W Ausgangsleistung. Kein PD2 oder PD3 wie USB C mit variabler Spannung hat.

Mit einem anderen USB Netzteil mal die Schaltung des TO zu probieren ist sicher ein Ansatz zur Problemerkennung.

Grüße Uwe

SBS ist eine italienische Firma, die in einem 800 Einwohner Ort in der Provinz von Novara angesiedelt ist.
Also ca 70 km Nordöstlich vom Arduino Gerburtsort Ivrea.

Hier ein Foto aus Streedwiev von G,

Firmennamen in silbrigen Lettern im Grünzeug.


Und das die andere Ecke des Gebäudes 50 m weiter. Fragt mich nicht wieso dort ein anderer Name montiert ist.

Grüße Uwe

Nein.
Schau Dir die USB-PD an. Da findet Kommunikation statt.

Hast Du wirklich noch nie einen Schnelllader fürs Handy in der Hand gehabt?

1 Like

Das Netzteil ist aber weder PD noch Quick-Charge spezifiziert (Sonst würde es draufstehen und nicht 5,2V spezifiziert sein)

Datenblatt:
https://www.sbsmobile.com/deu/de/module/sbsconnector/ajax?sku=TETR1USB2AWFAST&locale=de_DE

Grüße Uwe

Gibt es überhaupt PD2 und PD3 fähige USB Netzteile mit einer anderen Buchse als USB C?

So wie ich das weis nicht, ganz einfach die USB Kabel mit Micro, Mini Steckern sind dafür nicht ausgelegt.

PD fällt raus. Für QC fehlt es tatsächlich an der zweiten Spannung.
Das Ding fällt dann in die Kategorie Schnelllader -> Siehe den Wiki-Artkel unter Technik; letzter Absatz.

Und da ist dann trotzdem eine vermeintliche Intelligenz drin, die irgendwann sagt, das Schluß ist mit hohem Strom. Denn der Lader blinkt ja irgendwann...

Das könnte er nur tun wenn die Schaltung tatsächlich längere Zeit soviel Strom zieht.
Die Schaltung besteht aber soweit ich es vestanden habe aus einem MKT1400 mit 2600mAh LiPo Akku und einem HX711 und 4 Wäägezellen (nehme an es sind 4 Halbzellen zu je 50Kg ) .

Der TO sollte mal einige Antworten geben bezüglich Spannungen und Ladezustand des Akkus.
Grüße Uwe

Ich habe kein Multimeter und weiss auch nicht genau wie man eins bedient. Deshalb habe ich einfach ein anderes Netzteil gekauft und es eingebaut. Alles hat mindestens 1h 20min lang funktioniert. Als ich dann 2h später nochmal versucht habe den Arduino zu erreichen, hat er nicht mehr funktioniert und die Chrg LED hat geleuchtet.
Das ist mein neues Netzteil:
LogiLink PA0198 - kaufen bei digitec

Wenn das Problem nicht das Netzteil ist, kann ich mir auch ein Multimeter besorgen um die vorgeschlagenen Sachen aus zu messen.

Ich weiss nicht ob das ein Einfluss hat auf mein Projekt, aber der Arduino, das Netzteil, der Akku und die Waage sind alle in einem Kühlschrank eingebaut. Die Temperatur ist etwa 3 - 4 Grad.

Wurde nicht machen, bei jeder öffnung der Tür kommt warme Luft rein was erstmals kondensiert, das ist Ungesund für jede Elektronik .
Wenn das alles wirklich im Kühlschrank muss sein dann im Luftdichtem Gehäuse, was wider rum nicht so einfach ist dicht halten, die Wägezelle, Wiegesensor Ja, Rest draußen.

1 Like

guter Punkt. Ich werde schauen, dass ich das ändern kann.

Netzteil:
Müßte passen. Auch wenn ich Netzteile mit Fixspannung vorziehe. Spannungswahlschalter können immer mal falsch eingestellt sein bzw nicht richtig Kontakt machen.

Kühlschrank:

Da gibt es 2 Probleme:

  • Erhöhte Luftfeuchtigkeit und darum mögliche Kondensation an der Elektronik und darum mögliche Fehlfunktionen bzw auf längere Zeit zu Korrosion an den Metalloberflächen inklusive Steckverbindungen.
  • Absinken der Batterikapazität durch die niedrige Tempertur und darum auch kleinere Spitzenströme , die für die GSM-Verbindung notwendig sind.

laut Arduino MKR GSM 1400 — Arduino Official Store
"a typical GSM handshake (when the board boots and registers on a network provider) could easily reach a 2A peak" .

Kannst Du mal das Teil probeweise aus dem Kühlschrank holen? oder wenigstens die Batterie?

Wägezellen und HX711 müssen wasserfest gemacht werden bzw verbaut sein.

Grüße Uwe

1 Like

Ich schau mal was ich machen kann. melde mich wieder wenn ich das alles erledigt habe.