Arduino soll nur stündlich kurz laufen - Wie können Informationen gehalten werden?

Hallo,

Ich versuche gerade, mir verschiedene Ansätze zu überlegen, um den Verbrauch meines Gesamtsystems soweit wie möglich zu reduzieren.

Initial habe ich damit geplant, den Arduino 24/7 durchlaufen zu lassen, aber das macht eigentlich nicht viel Sinn, da er über 90% der Zeit nichts macht.

Daher würde ich den gerne jede Stunde mal anschalten, ein paar Aktionen durchführen und dann wieder ausschalten.
Dazu habe ich diesen Beitrag gefunden. Ich weiß noch nicht genau, wie ich das jede Stunde automatische triggern kann, aber da werde ich schon noch eine Lösung finden.

Ich habe aber noch ein paar Probleme, bei denen ich nicht so recht weiß, wie ich die angehen kann:

Vorabinfo: Die Stromversorgung aller Komponenten kommt von "extern". Das heißt, der Arduino ist nur für Logik zuständig, aber nicht für eine aktive Versorgung der LEDs oä.

1. Status "zwischenspeichern"

Ich habe einen externen 5V Stromkreis, der vom Arduino überwacht werden soll, bzw, es soll geloggt werden, wenn dieser mal temporär eschlossen wird.

In Echtzeit funktioniert das ohne Probleme, aber ich wüsste nicht, wie ich das mache, wenn der Arduino zu dem Zeitpunkt nicht läuft.

Macht hier ein Kondensator evtl Sinn? Kann der die Spannung so lange halten? Auf was müsste ich achten, wenn der Stromkreis evtl nur ein paar ms geschlossen wurde. Reicht das, um einen Kondensator potentiell soweit zu laden, dass man x Minuten später noch erkennt, dass der Stromkreis geschlossen war?

2. LEDs steuern

Ich habe ein paar Status-LEDs, die aktuell in Echtzeit vom Arduino gesteuert werden.

Hier suche ich nach einer Lösung, dass der Arduino, wenn er denn läuft, einen Status berechnet und damit bestimmte Aktionen durchführt, die dazu führen, dass die entsprechenden LEDs auch leuchten, wenn der Arduino wieder aus ist.

Da habe ich leider gar keine Idee, was man da machen könnte...

Falls jemand Ideen oder Input dazu hat, wäre das super :slight_smile:

Danke schonmal

  1. Daten Zwischenspeichern kann man zum Beispiel mit dem EEPROM das auf einem Arduino UNO verfügbar ist. Brauchst nur die library einbinden und entsprechend der Beispiele umsetzen.

2a) da fallen mir zum Beispiel bistable Relais ein. Die steuerst du mit einem Impuls an und der Status bleibt erhalten.

2b) Oder im einfachsten Fall - nimm die LEDs als Neopixel - die leuchten auch weiter nachdem man die einmal eingeschaltet hat.

2c) Wenn du einen Arduino UNO schlafen legst bleiben der Pin Status von einem Output ohnehin erhalten wenn du nicht extra was tust.

aber wegen:

der Arduino UNO ist kein guter Stromsparer. Wenn das Stromsparen das Ziel ist, müsstest du etwas nehmen das auch einen geringen Standby Strombedarf hat. Ein Arduino UNO ist das nicht.

Und wenn ich gleichzeitig in einem Projekt lese, dass LEDs weiterleuchten sollen - dann macht ein Abschalten imho keinen Sinn mehr - der Stromverbrauch vom Microcontroller ist dann das kleinste Problem.

Machbar ist sicher vieles, aber bei inaktiven System eine Spannung im ms Bereich zu dedektieren, das stelle ich mir als Herausforderung vor. Gibt es überhaupt einen Grund, weshalb der Controller nicht die ganze Zeit aktiv sein darf? Energieversorgung über Batterie?

refo

Ich verstehe noch nicht wie das "Arduino soll nur stündlich kurz laufen" und

zusammenpassen soll. Rede doch mal nicht um den heißen Brei herum, sondern beschreibe, was du wirklich erreichen willst. Nur die Aufgabenstellung, ohne Lösungsansätze.

Ist mit Interrupts machbar.

Im Endeffekt gibt es 2 Szenarien.

Überwachung Stromkreis

  • Stromkreis wird geschlossen
  • µC bekommt das mit und loggt diese Information
  • Stromkreis wird geöffnet
  • µC bekommt das mit und loggt diese Information

Status LEDs

  • µC misst Temperatur und Luftfeuchtigkeit
  • Messdaten werden geloggt
  • Auf Basis der Messdaten sollen bestimmte LEDs leuchten.

Also der Hauptgrund ist, dass das System über Batterie versorgt wird und ich eben nicht unnötig Energie verschwenden möchte.
Andererseits möchte ich mein System grundsätzlich möglichst "effizient" aufsetzen und dabei so viel wie möglich lernen.

Ich meinte es genau andersherum.
Wenn der µC angeschaltet wird, soll er prüfen können ob während seiner Abwesenheit der Stromkreis mal geschlossen war.

Überwachung Stromkreis

Wie @wwerner schon geschrieben hat external Interrupts (change)

Status LEDs

Die entsprechenden Pins auf den passenden Mode setzen.. Ist aber Schaltungsabhängig.

Aber dazu muss der µC ja laufen und genau das möchte ich ja nicht.
Ich will den wirklich komplett vom Strom nehmen und nur stündlich hochfahren und "nachschauen" ob in der Zwischenzeit was relevantes passiert ist, zB der Stromkreis mal geschlossen war

Wo sollen den die geloggten Informationen hin?

Die sollen zum Zeitpunkt der Messung vom µC über LoRa verschickt werden.

Wie kommst Du da drauf? Ich halte das für ein Gerücht.

Wobei für INT1 und INT0 geht kein Change sondern „nur“ Level Interrupt. Von daher hättest Du in Bezug auf „Change“ schon recht.

Und das geht nur, wenn ein aktives System (evtl. MC) diese Information speichert. Und dazu muss dieser Baustein mit Strom versorgt werden.
Die Information kann z.B. in einem EEProm oder FRam gespeichert werden. Beide Bausteine brauchen zum Halten der Daten keine Spannung.
Aber um die Daten da rein zu bekommen, braucht es einen MC und der während der aktiven Zeit auch Spannung.

Um etwas zu dedektieren muß irgendeine Schaltung aktiv sein. Eine Schaltung zu bauen um ein Event zwischenzuspeichern finde ich falsch.

Microcontroller können in Sleepmodus versetzt werden in dem sie kaum Strom verbrauchen ( einige µA). Als Arduino Modell bietet sich ein Arduino MINI an, der hat keine Zusatzelektronik die nicht im Stromsparmodus versetzt werden kann.

Der Conroller kann über Interrupts (externe Signale), interne Timer und anderes aufgeweckt werden.

Grüße Uwe

Ok, ich war gedanklich immer beim DeepSleep, weil ich das für sinnvoll halte. Nur so kannst du zeitlich undefinierte Ereignisse detektieren.

Wie willst du das mit einem Kondensator machen, wenn innerhalb einer Stunde der Stromkreis z.B. fünf mal geschaltet wurde? Mit einem Attiny (tinyavr) ist das simpel und der braucht barebone im deep sleep < 2μA Strom. Das ist so gut wie „ausgeschaltet“.

Also natürlich wäre es mir am Liebsten, wenn ich jedes einzelne Schalten des Stromkreises mitbekommen würde. Aber mir würde es für den Anfang auch reichen, wenn ich grundsätzlich nur die binäre Info hätte, ob er in der vergangenen Stunde mal geschaltet wurde, oder nicht.
Und das sollte ja mit einem Kondensator gehen, oder?

Die Frage wäre halt nur, ob man mit einem Kondensator verlässlich erkennen könnte, wenn der Stromkreis nur für ein paar ms geschlossen war.
Könnte man potentiell evtl rechnerisch aus der Ladung des Kondensators darauf schließen, wie lange der Stromkreis in der letzten Stunde geschlossen war?

Mir scheint, Dir ist die Größenordnung der Ströme nicht klar.

Hast Du beispielsweise zehn LEDs von je 20 mA, die ständig leuchten sollen, dann sind das in Summe 200 mA, da fällt der µC nicht ins Gewicht.

Es genügt daher vollkommen, den µC schlafen zu legen, die anfallenden paar µA belasten die Strombilanz nur unwesentlich. Den kannst Du dann per Interrupt aufwecken, da entgeht Dir kein Ereignis :wink:

Kalkulator für die sichere Entladung von Kondensatoren

Und die nächste Salamischeibe.

Möchtest du nicht mal beschreiben was es in deinem System alles gibt und welche Aufgaben alles zu erledigen sind?
Welcher Microcontroller genau und welches Lora Modul.
Welche Stromversorgung du hast, wie lange sie halten soll.
Wie viele LEDs an sein werden. Am besten auch deren Leuchtdauer innerhalb von 24h.

Auch Angaben "aktuell messe ich im laufenden Betrieb 123mA " würden helfen.

1 Like

Muss ich gestehen, weiß ich nicht. Dazu müsste der Kondensator ja so implementiert werden, dass er sich nach dem öffnen des Stromkreises nicht an den Verbrauchern entlädt. Wüsste ad hoc nicht, wie man das macht… vielleicht mit zwei Schaltern…