Schalten Sie Arduino alle 24 Stunden mit dem Timer ein


9

Ich arbeite derzeit an einem Arduino-Projekt, bei dem die Ladung meiner Autobatterie einmal täglich über einen ESP8266 an mich gesendet wird. Im Winter fahre ich kein Auto und möchte informiert werden, wenn die Batterie einen kritischen Wert überschreitet, damit ich sie aufladen und Schäden vermeiden kann.

Daher ist Energieeffizienz für das Projekt wichtig, damit die Batterie selbst nicht entladen wird. Ich lese viel über den Schlafmodus, effiziente Dropdown-Regler usw. Allen ist gemeinsam, dass der Spannungsregler immer läuft, was ich nicht will.

Ich suche eine Art "Swich-On-Timer-Schaltung". Es sollte 24 Stunden herunterzählen und dann ein Relais oder einen MOSFET einschalten, der den Spannungsregler mit der Stromversorgung verbindet und damit den Arduino und den ESP8266 einschaltet. Wenn der Arduino mit der Übertragung fertig ist, setzt er den Timer zurück, wodurch der Spannungsregler vom Stromnetz getrennt wird, und so weiter. Natürlich sollte die Timer-Schaltung nur sehr wenig Strom verbrauchen.

Kennt jemand eine solche Schaltung? Ich suchte auf AliExpress mit allen Variationen von Wörtern, die mir in den Sinn kamen, ohne Erfolg. Oder vielleicht ein IC, mit dem (einfach) eine solche Schaltung erstellt werden kann?


1
Nicht alle Spannungsregler sind gleich. Einige verwenden nur wenige Mikroverstärker.
Gerben

Über den Tellerrand hinaus denken ... Wird ein Standard- Timer-Schalter nicht ausreichen?
user31208

Antworten:


5

Ein Ansatz wäre die Verwendung eines DS3231-Moduls (Precision Real Time Clock). Solche Module werden bei Ebay für unter 1 US-Dollar verkauft. Suche nach ds3231 arduino.

In der Regel verfügen diese Module über einen sechspoligen Anschluss mit den mit 32K, SQW, SCL, SDA, VCC und GND gekennzeichneten Pins. Wie in den DS3231-Spezifikationen angegeben, wird der INT / SQW-Pin entweder für die Rechteckwellenausgabe oder für die Interruptausgabe verwendet. Auf Seite 13 der technischen Daten steht im Abschnitt Kontrollregister:

Bit 2: Interrupt Control (INTCN). Dieses Bit steuert das INT / SQW-Signal. Wenn das INTCN-Bit auf logisch 0 gesetzt ist, wird eine Rechteckwelle am INT / SQW-Pin ausgegeben. Wenn das INTCN-Bit auf logisch 1 gesetzt ist, aktiviert eine Übereinstimmung zwischen den Zeitregistern und einem der Alarmregister den INT / SQW-Ausgang (wenn der Alarm ebenfalls aktiviert ist).

Zunächst würden Sie eine Skizze ausführen, um den DS3231 einzurichten: Schalten Sie einen täglichen Alarm ein, aktivieren Sie einen Interrupt anstelle einer Rechteckwelle, stellen Sie die aktuelle Zeit ein usw. Laden Sie dann ein Betriebsprogramm, das bei jedem Betrieb die Autobatteriespannung liest und handelt angemessen.

Der INT / SQW-Pin des DS3231 wird an das Gate eines P-Kanal-Mosfets angeschlossen, der die 12-V-Stromversorgung an den Arduino weiterleitet. Der P-Fet wird eingeschaltet, wenn der Open-Drain-Ausgangspin INT / SQW des Alarms eingeschaltet wird. Das Betriebsprogramm erledigt seine Aufgabe und löscht dann das DS3231-Interrupt-Flag, um die Stromversorgung bis zum nächsten Alarm abzuschalten. (Stellen Sie zum Debuggen kürzere Intervalle als einen Tag ein, z. B. einmal pro Minute, wie in Tabelle 2, Alarmmaskenbits, auf Seite 12 der technischen Daten beschrieben.)

Normalerweise verbraucht der DS3231 0,84 μA, wenn er mit einer 3,3-V-Batterie betrieben wird, oder 1 μA mit 5 V. Siehe Elektrische Eigenschaften, Seite 3 der technischen Daten.


1
Das P-Fet-Gate sollte wahrscheinlich durch einen 1-Megaohm-Widerstand auf +12 hochgezogen werden. Andernfalls wäre es effektiv geöffnet, wenn der INT / SQW-Pin ausgeschaltet ist, und könnte auf beliebige Ebenen schweben
James Waldby - jwpat7

3

Der Timer oder die Timer-Schaltung selbst müsste etwas Strom ziehen. Jeder der Pico-Power-AVR-Chips verbraucht im Ruhemodus nur sehr wenig Strom - in den 10er Jahren der Mikroverstärker für den 328, wenn ich mich richtig erinnere. Wenn Sie einen AVR für die geringste Stromaufnahme ausschalten, muss fast alles außer dem Watchdog-Timer heruntergefahren werden, und die maximale WDT-Zeit beträgt 8 Sekunden. Eine Bibliothek wie Narcoleptic verwaltet längere Zeiträume für Sie. Was Sie jedoch tun müssten, ist eine viel effizientere geregelte Stromversorgung als die auf der Arduino-Platine eingebaute (wenn Sie diese verwenden). Damit sollte die Belastung Ihrer Autobatterie durch den Arduino mikroskopisch klein sein.

Ein mögliches Design für eine effiziente Versorgung ist eine Reihe von Alkalibatterien, beispielsweise 3 in Reihe für einen 4,5-Ausgangs- (im frischen Zustand) mal 2 oder mehr solcher Strings parallel, die direkt an den 5-V-Bus angeschlossen sind.

Ich habe das Strombudget nicht erstellt, um zu wissen, welche Kapazität Sie benötigen und ob Sie D-Zellen benötigen oder aus kleineren, z. B. AAs, ein praktisches Array erstellen könnten, aber dies ist ein Weg, um die Autobatterie nicht zu belasten (Abzinsung der Anforderungen des Autobatteriespannungssensors). Möglicherweise möchten Sie den Zustand des Arduino-Batterie-Arrays in den täglichen Bericht aufnehmen oder für den Preis einiger Alkalien die Arduino-Batterie so überarbeiten, dass eine Überwachung unnötig wird.

Einige Datenpunkte legen nahe, dass eine separate Batterie ein praktikabler Ansatz ist:

  • Ein einzelnes 9-V-Alkaline betreibt über ein Jahr lang einen Rauchmelder, einschließlich Überwinterung auf einem unbeheizten Dachboden (nach meiner eigenen Erfahrung), und 9-V-Alkaline sind nicht für ihre Kapazität bekannt.
  • Mein digitaler Rückschlagthermostat wurde einige Jahre lang mit 2 AA-Zellen betrieben, bevor a) sie starben und b) ich klug wurde und anfing, sie jährlich zu wechseln. :) :)

Ich habe einen ATmega48 (sehr ähnlich dem 328P), der seit Juni 2012 einige AA-Zellen abläuft. Er ist für etwas mehr als 4 Minuten pro Tag wach und schläft den Rest der Zeit. Die Batterien wurden bisher nicht gewechselt.
Edgar Bonet

Das ist eine beeindruckende Laufzeit - danke für den zusätzlichen Datenpunkt @EdgarBonet! Ich hatte erwartet, dass ein schlafender Arduino und ein Alkaline-Akku ein "Set-it-and-forget-it" -System sein könnten, aber ohne den Energieverbrauch zu berechnen, hätte ich nicht gedacht, dass er so gut funktionieren würde. Also, @DirkPitt, es gibt einige reale Supportdaten.
JRobert

Es ist kein volles Arduino: Ich konnte es mit meinem Uno nicht schaffen, unter ~ 40 mA zu kommen, während das nackte ATmega in SLEEP_MODE_PWR_SAVE, bei dem nur der Async-Timer aktiv war, ungefähr 2 µA benötigte.
Edgar Bonet


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.