Raspberry Pi-Batteriestandskontrolle mit Audio-Warnausgabe / Sudo Null IT News

Es ist eine Situation aufgetreten, in der es erforderlich ist, einen Warnton über die Entladung der Himbeer-Pi-USV auszugeben.

Der Artikel schlägt eine Lösung mit einem Spannungssensor (Voltage Sensor), Arduino Nano und “Favorite Audio Speaker Student” – Portable “JBL Go” vor.

*c 26 Sekunden

UPS

Ein paar Worte zur verwendeten unterbrechungsfreien Stromversorgung. Um den Raspberry Pi 4 mit Strom zu versorgen, wurde eine USV gekauft, von der ein Single-Board mit zwei 18650-Akkus bis zu 3,5 Stunden halten kann:

*das bild ist aus ästhetischen gründen gewählt und sieht etwas anders aus als die raspberry pi 4 version:

Für die Version für Raspberry Pi 4 gibt es einen Typ-C-Ausgang zur Stromversorgung des Raspberry Pi sowie einen Spannungsmonitor (rechts im Foto), der sich in Zukunft als nützlich erweisen wird.
Diese USV ist nicht perfekt, aber sie ist besser als ähnliche, die ich von demselben Ali verwenden musste.

Bei der Verwendung sind zwei Dinge zu beachten.

Die erste Einschränkung ist, dass Sie eine 12-V-2A- (oder 3A-) Stromversorgung zur Hand haben müssen, da beim Wechseln von „Batterien“ (natürlich Batterien, aber im Folgenden als Batterien bezeichnet) die USV in das Schloss eindringt und in Ordnung ist Um es herauszuholen, müssen Sie 12 V anlegen, indem Sie das Netzteil an die USV anschließen. Akkus können nicht aus der USV entnommen und direkt in der USV geladen/nachgeladen werden, dann müssen Sie diese nicht aus der Blockade entfernen.

Der zweite Vorbehalt – beim Einsetzen von Batterien in die USV-Halter müssen Sie sich nicht auf die großen “+” und “-” auf dem Kunststoff konzentrieren, sie sind ein wenig durcheinander:

Wenn die Batterien jedoch falsch eingelegt sind, leuchtet einfach die LED am Gerät auf, um dies zu warnen, und das Gerät geht erneut in den Lockout.

Oh ja, ich füge eine dritte Nuance hinzu: Wenn Sie die Himbeere ausschalten, schaltet sich die USV nicht aus, arbeitet weiter und Sie müssen den Ein- / Aus-Hebel manuell bewegen. Und das wäre die halbe Miete. Wenn Sie den Hebel vergessen, wird die USV, während sie weiter arbeitet, die Batterien im Laufe der Zeit „landen“.
Der Rest der USV ist gut.

Nehmen Sie mindestens USB-Anschlüsse und Pins mit 5 V, um Peripheriegeräte mit Strom zu versorgen.

Aber in diesem Artikel geht es nicht um UPS, also machen wir weiter.

So stellen Sie die schwache Batterie fest

Wie Sie wissen, hat der Himbeer-Pi keinen eigenen ADC, daher benötigen Sie einen bestimmten Garten, um Indikatoren direkt daraus zu entnehmen. gpio himbeere wollte ich nicht anlöten, zumal da schon ein „hut“ dran hing, also bin ich durch den guten alten arduino nano gegangen. Obwohl ich eine kleinere Version auf tiny85 nehmen wollte – Digispark. Aber Digispark hat Probleme mit der Ausgabe von Informationen an Serial, also vorerst Arduino Nano.

Die USV hat einen Ausgang namens „Monitor“, und es ist intuitiv klar, dass er etwas über die Spannung an der USV aussagen soll. Um jedoch die Dokumentation für diesen Ausgang oder die Antwort auf die Frage über das Soziale zu finden. Netzwerk ausgefallen. Die Erfahrung hat jedoch gezeigt, dass der “Low Bat”-Zweig dieses Monitors Spannung entwickelt, wenn die Batterien der USV schwach sind. Gleichzeitig leuchtet die LED an der USV selbst auf.

Es sieht ungefähr so ​​​​aus (das Ergebnis der Skizze aus diesem Artikel):

Daher werden wir diese Informationen überwachen.

Arduino-Nano-Skizze

Da der Arduino Nano in die Schlacht ziehen wird, ist die Skizze dafür.

int analogPin = A0; // Geben Sie den OUT-Port des Sensors an const int averageValue = 500; // Variable zum Speichern des Wertes der Anzahl der Lesezyklen long int sensorValue = 0; // Variable zum Speichern des Werts von der Sensorschwebespannung = 0; // Variable zum Speichern des Spannungswerts float current = 0; // Variable zum Speichern des aktuellen Werts void setup () {Serial.begin (9600); // Offene serielle Kommunikation bei 9600 Geschwindigkeit aufrechtzuerhalten. void loop() {for (int i = 0; i Alles hier ist extrem einfach und großzügig mit Kommentaren übersät. Alles, was Sie wissen müssen, ist A0 Pin Arduino, Arduino selbst ist über USB-Port mit Himbeere verbunden.

Übrigens werden einige chinesische Nanos nicht durch eine einfache Methode durch Arduino ide genäht und sie brauchen
Halten Sie Reset gedrückt, während Sie die Skizze kompilieren, und lassen Sie sie los, wenn “Loading” in ide aufleuchtet.
Das liegt natürlich nicht am Inhalt der Skizze, sondern an den Besonderheiten von arduino nano von ali.

Anschließen der Komponenten

Wie bereits erwähnt, dient ein Spannungssensor zur Überwachung:

und es ist besser, ohne gelötete Anschlüsse zu nehmen, weil. sie sind zu sperrig. Der Sensor selbst ist unprätentiös, verzerrt jedoch, wenn er einem Magneten und anderen obszönen Dingen ausgesetzt wird.

Also GND des Monitorports der USV -> “-” Klemme (!) des Sensors,
„low bat“ des Monitorports der USV -> „+“-Klemme (!) des Sensors.
“S” des Sensors -> A0 Arduino Nano,
“+” Sensor -> 5V Arduino Nano,
“-” Sensor -> GND Arduino Nano.

Himbeer-Pi-Teil

Der Himbeer-Pi ist an der Reihe, zu dem die Messwerte des Sensors über den USB-Anschluss von Arduino kommen.

Nachdem wir das Arduino angeschlossen haben, prüfen wir zunächst, ob überhaupt etwas an den Port kommt:

#! /usr/bin/env python # Codierung: utf-8 import serial #python -m serial.tools.list_ports ser = serial.Serial(“/dev/ttyS0”,baudrate=9600,timeout=0.1) ser.flush() print(ser) while True : line = ser.readline().decode().strip() if line: print(line) ser.close()

Werden die Werte in der Konsole angezeigt, dann ist alles in Ordnung. Wenn nicht, dann müssen Sie den Port “/dev/ttyS0” ändern.

Lassen Sie uns nun das Hauptskript schreiben, das die ganze Arbeit erledigt, und es zu servicemd hinzufügen.
Der Inhalt ist wie folgt:

#! /usr/bin/env python # Kodierung: utf-8 import schedule #speech speak from rhvoice_wrapper import TTS;import subprocess from time import sleep ###language part def say(text): data = tts.get(text, format_= ‘wav’) #print(‘Datengröße: ‘, len(data), ‘bytes’) subprocess.check_output([‘aplay’, ‘-r’,’16000′,’-q’]input=data) tts = TTS(threads=1) import serial #python -m serial.tools.list_ports #ser = serial.Serial(“/dev/ttyS0”,baudrate=9600,timeout=0.1) def func() : “””seriell alle ___ min öffnen und Spannungsabfall prüfen””” ser = serial.Serial(“/dev/ttyUSB0”,baudrate=9600,timeout=0.1) ser.flush() #print(ser) while True : try: line = ser.readline().decode().strip() if line: print(line.split(‘ ‘)[7].strip(‘V’)) if float(line.split(‘ ‘)[7].strip(‘V’)) >0.5: print(‘discharged’) say(‘discharged’) ser.close() return False außer: pass ser.close() if __name__ == “__main__”: schedule.every( 1).minutes.do(func) while True: schedule.run_pending() sleep(1)

Der Voicing-Teil verwendet rhvoice_wrapper, der über pip install installiert werden muss.

Sie benötigen auch einen Zeitplan, der ebenfalls über Pip Install verfügbar ist.

Die Essenz des Skripts besteht darin, dass jede Minute, in der eine serielle Schnittstelle geöffnet wird, der Wert des Sensors gelesen wird, und wenn er größer als 0,5 ist (wenn float(line.split(‘ ‘)[7].strip(‘V’)) >0.5), dann wird es “entladen” ausgesprochen.

Dies muss nicht jede Minute erfolgen, Sie können also den Wert in der Zeile schedule.every(1).minutes.do(func) ändern.

Fügen Sie nun dieses Skript zu servicemd raspberry pi hinzu:

sudo nano /etc/systemd/system/charge_check.service

Und Inhalt hinzufügen:

[Unit]

Description=charge_check After=multi-user.target
[Service]
User=pi Type=simple Restart=always RestartSec=5 WorkingDirectory=/home/pi/Desktop ExecStart=/usr/bin/python3 charge_check.py
[Install]
WantedBy=multi-user.target

Wenn das Skript nicht auf Deskrop ist und nicht charge_check.py heißt, dann müssen diese Punkte korrigiert werden.

Starten Sie die Daemons neu und starten Sie Ihren Dienst:

sudo systemctl daemon-reload sudo systemctl enable charge_check.service sudo systemctl start charge_check.service

Lassen Sie uns überprüfen, ob der Dienst ausgeführt wird:

Wenn der Dienst ausgefallen ist, können Sie mit dem folgenden Befehl sehen, was ihm nicht gefällt:

journalctl -u charge_check.service -b

Danke für Ihre Aufmerksamkeit.

Similar Posts

Leave a Reply

Your email address will not be published.