CR2032-Batterien mit Arduino

Ich arbeite daran, GPS-Werte (vom u-blox Neo 6m GPS-Modul) mit einem Arduino Pro Mini auf einer SD-Karte zu protokollieren.

Der Code, mit dem ich arbeite, funktioniert ohne Fehler, wenn wir den Arduino mit einem USB-Kabel an den Laptop anschließen (die Stromquelle stammt vom USB-Anschluss).

Sobald ich mein Programm ausführe, werden alle GPS-Koordinaten zusammen mit anderen Daten auf der SD-Karte gespeichert.

Sobald ich meine Stromversorgung auf zwei CR2032-Batterien in Reihe ändere und die Spannung an den Pro Mini anlege, kommen Daten für etwa zehn Sekunden und dann beginnt die LED (Pin13) superschnell zu blinken (ich codiere nichts anderes an Pin13 als die sck vom SD-Kartenmodul für die Spi-Kommunikation.)

Dann fiel mir ein, dass vielleicht zwei Batterien nicht ausreichen werden, also habe ich drei CR2032-Batterien in Reihe verwendet und dann das Setup überprüft. Jetzt funktioniert alles perfekt für etwa eine Minute und dann fängt die LED (Pin13) an zu blinken und ruiniert das Programm.

Wenn die LED schnell blinkt, werden keine Daten auf der SD-Karte gespeichert.

Ich bin mir nicht sicher, wie ich das Problem lösen soll. Vielleicht ist hier der Strom das Problem, aber ich kann keine anderen Batterien als CR2032 verwenden.

Kann mir jemand helfen?

code ive verwendet

#include <TinyGPS++.h> // Include the TinyGPS++ library
TinyGPSPlus tinyGPS; // Create a TinyGPSPlus object
#include <SD.h>
#include <SPI.h>
#define GPS_BAUD 9600 // GPS module baud rate. GP3906 defaults to 9600.
#include <Wire.h>
// If you're using an Arduino Uno, RedBoard, or any board that uses the
// 0/1 UART for programming/Serial monitor-ing, use SoftwareSerial:
#include <SoftwareSerial.h>
#define ARDUINO_GPS_RX 2 // GPS TX, Arduino RX pin
#define ARDUINO_GPS_TX 3 // GPS RX, Arduino TX pin
SoftwareSerial ssGPS(ARDUINO_GPS_TX, ARDUINO_GPS_RX); // Create a SoftwareSerial
 #define SDFILE_PIN_CS 10

// Set gpsPort to either ssGPS if using SoftwareSerial or Serial1 if using an
// Arduino with a dedicated hardware serial port
#define gpsPort ssGPS  // Alternatively, use Serial1 on the Leonardo
 File sdFile;
// Define the serial monitor port. On the Uno, and Leonardo this is 'Serial'
//  on other boards this may be 'SerialUSB'
#define SerialMonitor sdFile


void setup()
{
  Serial.begin(9600);
  gpsPort.begin(GPS_BAUD);
  
  pinMode(SDFILE_PIN_CS, OUTPUT);
  
if (!SD.begin()) {
      Serial.println(F("Card failed, or not present"));
      while(1);
      }
      Serial.println(F("card initialized."));
}

void loop()
{ 
  sdFile = SD.open("datalog.txt", FILE_WRITE);
  if (sdFile) {
  // print position, altitude, speed, time/date, and satellites:
  printGPSInfo();

  // "Smart delay" looks for GPS data while the Arduino's not doing anything else
  smartDelay(1000); 
  sdFile.close();
      // Uncomment to print to the serial port
      //Serial.println("ENTER SENSOR DATA HERE");
      } 
      else {
      // if the file didn't open, print an error
      Serial.println(F("error opening file."));
      }
}

void printGPSInfo()
{
  // Print latitude, longitude, altitude in feet, course, speed, date, time,
  // and the number of visible satellites.
  printDate();
  SerialMonitor.print("\t");
  printTime();
  SerialMonitor.print("\t");
  SerialMonitor.print(tinyGPS.altitude.meters());
  SerialMonitor.print("\t");
  SerialMonitor.print(tinyGPS.speed.mps());
  SerialMonitor.print("\t");
  SerialMonitor.print(tinyGPS.satellites.value());
  SerialMonitor.print("\t");
  SerialMonitor.print(tinyGPS.location.lat(), 6);
  SerialMonitor.print("\t");
  SerialMonitor.println(tinyGPS.location.lng(), 6);
  
  }

// This custom version of delay() ensures that the tinyGPS object
// is being "fed". From the TinyGPS++ examples.
static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    // If data has come in from the GPS module
    while (gpsPort.available())
      tinyGPS.encode(gpsPort.read()); // Send it to the encode function
    // tinyGPS.encode(char) continues to "load" the tinGPS object with new
    // data coming in from the GPS module. As full NMEA strings begin to come in
    // the tinyGPS library will be able to start parsing them for pertinent info
  } while (millis() - start < ms);
}

// printDate() formats the date into dd/mm/yy.
void printDate()
{
  SerialMonitor.print(tinyGPS.date.day());
  SerialMonitor.print("/");
  SerialMonitor.print(tinyGPS.date.month());
  SerialMonitor.print("/");
  SerialMonitor.print(tinyGPS.date.year());
}

// printTime() formats the time into "hh:mm:ss", and prints leading 0's
// where they're called for.
void printTime()
{
  SerialMonitor.print(tinyGPS.time.hour());
  SerialMonitor.print(":");
  if (tinyGPS.time.minute() < 10) SerialMonitor.print('0');
  SerialMonitor.print(tinyGPS.time.minute());
  SerialMonitor.print(":");
  if (tinyGPS.time.second() < 10) SerialMonitor.print('0');
  SerialMonitor.print(tinyGPS.time.second());
}
```
Ich kann keine anderen Batterien als CR2032 verwenden." Wer auch immer diese Anforderung auferlegt hat, hat Sie zum Scheitern verurteilt.
Angenommen, Sie meinen wirklich einen Arduino Pro Mini (nicht den Uno, den Sie ebenfalls erwähnen), sollten Sie in der Lage sein, eine längere Laufzeit daraus zu ziehen. Sie müssen sich jedoch wirklich in die Energiesparmodi des Arduino und des GPS-Empfängers begeben. Poste deinen Code.
Schauen Sie sich die aktuellen Anforderungen Ihres spezifischen Arduino an. Sehen Sie sich den maximalen Strom an, den ein CR2032 liefern kann. Sehr wahrscheinlich haben Sie einen Nullsatz und Sie hatten Glück, dass Sie die Batterien nicht gekocht haben
Sehen Sie sich auch die indikativen Leistungsanforderungen für das GPS-Gerät an und vergleichen Sie diese mit dem, was eine CR2032- Zelle liefern kann. Es sieht nicht gut aus.
Wenn Sie Batterien in Reihe schalten , erhöht sich nicht die Stromkapazität, sondern die Spannung, die am Ende zu Schäden führen kann. Meintest du parallel ?
@MattiVirkkunen Ich habe sie tatsächlich in Reihe geschaltet. Obwohl 5V für das Setup ausreichen, wollte ich nur sicher gehen. Aber das Interessante ist, als ich zwei CR2032-Batterien in Reihe geschaltet habe, um insgesamt 6 V zu erzeugen, funktionierte das Modul nicht einmal eine Minute lang. Erst nachdem ich es auf 9V geändert hatte, funktionierte es mindestens 1 Minute lang.
@JRE ja, sorry, ich meinte den Pro Mini und ich habe den Code auch hochgeladen. überprüfen Sie bitte
@MattiVirkkunen sie würden wahrscheinlich letztendlich beides brauchen. Auf Lager hat der Spannungsregler des Arduino einen ziemlich hohen Dropout, sodass mindestens zwei Zellen in Reihe geschaltet werden müssten. Dann wird die Spannung wahrscheinlich stark absacken, wenn sie einer übermäßigen Belastung ausgesetzt wird. Wirklich das Batteriedesign ist völlig ungeeignet, aber wenn es überhaupt versucht werden sollte, sollten sie das System auf eine niedrigere Spannung schalten, den Regler eliminieren oder zumindest einen besseren oder Umschalter wählen, die SD-Karte durch ein EEPROM oder einen SPI-Flash ersetzen bei bekannter Leistungsaufnahme...
Ich stimme dafür, diese Frage zu schließen, da das Problem eine Änderung der Projektanforderungen erfordert. Dies ist ein organisatorisches oder geschäftliches Problem, kein technisches.
@ChrisStratton ja, sogar ich dachte, wir bräuchten beide und schlossen 2 Batteriepaare parallel in Reihe (6 V Ausgang, aber doppelt so viel Strom), aber am Ende habe ich immer noch das gleiche Problem. Gibt es eine andere Lösung als das SD-Kartenmodul zu wechseln? Ich habe das Gefühl, dass die uart-Verbindung zwischen ublox und pro mini das Problem verursachen könnte. Weil ich bereits versucht habe, grundlegende Daten von der i2c-Verbindung zur SD-Karte mit Batterie zu protokollieren, und es funktionierte (Drucksensor). Nur wenn ich dieses GPS-Modul verwende, bekomme ich dieses Problem
6 Volt sind eine unzureichende Eingabe für einen 5-V-Arduino. Wie bereits erwähnt, könnten Sie einen Arduino mit niedrigerer Spannung in Betracht ziehen, aber eine serielle parallele Anordnung von Knopfzellen ist wirklich albern und dieses Projekt ist zum Scheitern verurteilt. Sie müssen die Anforderungen ändern. Und Sie müssen auch die ausgewählten Komponenten ändern.

Antworten (2)

Ich hatte ein ähnliches Problem mit CR2032 in einem meiner allerersten Projekte! CR2032 kann einfach nicht genug Strom liefern, seine Spannung wird unbrauchbar, sobald Sie etwas Wichtiges ziehen, um die MCU mit Strom zu versorgen (ich hatte STM32 blaue Pille und es zog einzelne CR2032 nominal 3,2 V fast sofort auf grenzwertige 2,65 V mit voll frischem CR2032 ).

Die Lösung für mich war, es durch ein winziges 250-mAh-Li-Io zu ersetzen, es ist nur geringfügig größer als CR2032 und sicherlich vergleichbar mit zwei CR2032, während es wiederaufladbar ist und problemlos die erforderliche Leistung liefert. Aber ja, die Spannungspegel sind unterschiedlich, Sie wissen es.

Anforderungen sind natürlich Anforderungen, aber Sie können nicht fliegen, wenn Sie Ruder schwenken, es ist eine unmögliche Aufgabe für CR2032 (wir sprechen von praktischem, realistischem Zeug und nicht von 25 Batterien parallel), wie viele hier darauf hingewiesen haben. Sie müssen diesen Punkt nur beweisen und sich wirklich für winzige 150 mAh - 300 mAh entscheiden (was übrigens völlig vergleichbar mit CR2032 ist). Hat bei mir funktioniert!

Eine CR2032-Batterie oder viele in Reihe könnten den Arduino vielleicht mit Strom versorgen.

Das Speichern von Daten auf der SD-Karte kann Stromstöße von bis zu 300 mA erfordern, je nach Marke/Modell/Speedgrade der SD-Karte.

Ein Hersteller von CR2032-Batterien gibt an, dass der maximale Strom, der aus der Batterie entnommen wird, 10 mA beträgt, sodass möglicherweise bis zu 30 Batterien parallel geschaltet werden können, damit sie funktioniert, wenn dies erforderlich ist.

Kurz gesagt, es gibt keine praktische Möglichkeit, dies mit CR2032-Batterien zu tun.