Betriebsstundenzähler

Moin Miteinander,so langsam mache ich mir Gedanken zu einem Betriebstundenzähler für die Wartung von einer Hydraulikanlage in meinem aktuellen Modell.Die ganze Sache soll über einen Nano laufen und beim Start der Hydraulikpumpe ebenfalls mit anlaufen. Dazu müssen die Betriebstunden über eine Realklock mit Abspeicherung der Startzeit,der Endzeit und Gesamtstundenzahl zusätzlich auf einem Eeprom oder ähnlichen geschrieben werden.am besten wäre wenn noch ein Display zur Ausgabe aller Eckdaten mit angeschlossen ist.
MfG
Lutz

Was war gleich nochmal die Frage? :confused:

Wie lange läuft die Pumpe im Schnitt am Stück? Besteht die Gefahr, dass die Spannungsversorgung wegbricht? Danach sollten sich die Speicherintervalle richten. Der EEPROM des Arduino hat garantierte 100 000 Schreibzyklen. Rechne aus, wie lange Du damit hin kommst.
Wenn es nicht recht, wäre ein FRAM eine sinnvolle Alternative mit 10 hoch 17 Schreibzyklen und 151 Jahren Datenerhalt ohne Betriebsspannung (nicht selbst getestet - Herstellerangabe).

Gruß Tommy

Hi

Pumpe an: startzeit=millis();
Pumpe aus: laufzeit=millis()-startzeit;

Je nachdem, wie oft die Pumpe geschaltet wird, bei jedem Ausschalten die Laufzeit ins EEprom kritzeln.
Wenn Du jedes Mal 'eine Stelle weiter hinten' schreibst, hast DU 'einige Schreibzyklen', bis Du 1x durch bist.
Dann vor dem nächsten Schreiben: EEprom löschen, ganz am Anfang wieder die Betriebsstunden rein schreiben.

Denke, Du kannst die Pumpe dann im Sekundentakt schalten und selbst Deine Enkel werden den Ausfall des EEprom nicht mehr erleben.

MfG

Hallo,

wie genau brauchst du die Daten? Eine DS1307 hat 56Byte beliebig oft beschreibbares RAM, was akkugepuffert ist. Wenn man sie zur Ermittlung der Betriebszeiten nutzt, muss man allerdings mit einem Fehler von 1min pro 50Std. Betriebszeit rechnen.

Hallo,
nette Verweise, und?
Er hat das Ding vollgestopft mit Arduino! Glaubst Meinst Du im ernst, das da mit Zettel und Blei hantiert wird?
Wohl nicht... eher doch wohl per BT auf´s Smartphone.
Gruß und Spaß
Andreas

Hallo,
hast Recht, "Geglaubt" wird in der Kirche, und "Früher" im Kino gespielt.
Gruß und Spaß
Andreas

SkobyMobil:
Hallo,
nette Verweise, und?
Er hat das Ding vollgestopft mit Arduino! Glaubst Meinst Du im ernst, das da mit Zettel und Blei hantiert wird?
Wohl nicht... eher doch wohl per BT auf´s Smartphone.
Gruß und Spaß
Andreas

Das ist das typische Problem, wenn der Threadersteller keine vernünftige Projektbeschreibung mitliefert oder auf seine Projektvorstellung verlinkt. Wer hat schon alles gelesen und die Projekte aller Forenmitglieder im Kopf.
Viel hilfreicher wäre ein Link auf das Projekt oder der Hinweis ohne jemand hilfsbereiten so abzukanzeln. Er kennt die Infos nicht, die irgendwo in anderen Threads verteilt sind.

Moin Miteinader, also die Pumpe wird zum Start des Modells hochgefahren und läuft bis zum Ende der Fahrzeit mit unterschiedlichen Drehzahlen durch.
MfG
Lutz

Die Antwort auf deine nicht gestellte Frage hast du dir selbst schon gegeben:

Crazydiver:
Dazu müssen die Betriebstunden über eine Realklock mit Abspeicherung der Startzeit,der Endzeit und Gesamtstundenzahl zusätzlich auf einem Eeprom oder ähnlichen geschrieben werden.

Dazu gibt es die EEPROM.h Lib

Moin Miteinader, so nun habe ich erstaml das Grundgerüst für den Stundenzähler fertig.Es fehlt noch die Displayausgabe und der Eingang für die Pumpe.
MfG
Lutz

#include <EEPROM.h>


void EEPromSave(byte* wert, int numbytes, int eprom_offset)
{
  // input:
  // wert: pointer to byte array which holds the value to save
  // numbytes: number of bytes to be saved
  // eprom_offset: offset in EEPROM for saving bytes
  // output: void (nothing)
  for (int i=0;i<numbytes;i++)
    EEPROM.write(eprom_offset+i, wert[i]);
}

void EEPromLoad(byte* wert, int numbytes, int eprom_offset)
{
  // input:
  // wert: pointer to byte array which takes the loaded value
  // numbytes: number of bytes to be loaded
  // eprom_offset: offset in EEPROM for loading bytes
  // output: void (nothing)
  for (int i=0;i<numbytes;i++)
    wert[i] = EEPROM.read(eprom_offset+i);
}


#define FLOATSAVEOFFSET 100

  byte myByteVar;
  int myIntVar;
  float myFloatVar;
  

void setup()
{
  Serial.begin(115200);
  
  EEPromLoad((byte*) &myByteVar, 1, 10);  // Wert von Adresse 10+1 aus EEProm holen.
  EEPromLoad((byte*) &myIntVar, 2, 11);  // Wert von Adresse 11+2 aus EEProm holen.
  EEPromLoad((byte*) &myFloatVar, 4, 13);  // Wert von Adresse 13+4 aus EEProm holen.
  Serial.print("Werte im EEProm Durchlauf: \t");
  Serial.print("myByteVar: \t");Serial.print(myByteVar);
  Serial.print("\tmyIntVar: \t");Serial.print(myIntVar);
  Serial.print("\tmyFloatVar: \t");Serial.println(myFloatVar);

  myByteVar += 7;      // Wert verändern.
  myIntVar = (myIntVar +5) * 2.5;  // Wert verändern.
  myFloatVar = (myFloatVar +5) * 1.47;  // Wert verändern.
  
  EEPromSave((byte*) &myByteVar, 1, 10);  // Wert von Adresse 10+1 in EEProm Speichern.
  EEPromSave((byte*) &myIntVar, 2, 11);  // Wert von Adresse 11+2 in EEProm Speichern.
  EEPromSave((byte*) &myFloatVar, 4, 13);  // Wert von Adresse 13+4 in EEPromSpeichern.
    
}

void loop()
{
}

Hallo,
einen Link für DisplayAusgaben findest Du in #5. :wink:
Gruß und Spaß
Andreas

Moin SkobyMobil, diese Zähler sind leider von der Baugröße zu groß bzw. zu klobig

Moin Guntherb,in dem Sketch muß ich nur noch 2 Abfragen und eine Displayausgabe einbauen.
MfG
Lutz