Beim Löschangriff nass im Feuerwehrsport werden zum Stoppen der Zeit zwei Behälter mit jeweils 10 Liter Wasser gefüllt. Dafür hat sich unsere Feuerwehr gerade eine neue Anlage zugelegt. Um nicht bei jedem Training das lange Kabel ausrollen zu müssen, sollte dies mit einer eine Funkstrecke ersetzt werden.
Funktionsprinzip
Jeder Zielbehälter bekommt einen eigenen Controller mit Funk-Modul und eigener Batterie. Dieser greift das Signal zum Füllstand ab und sendet bei Änderung ein Paket über Funk. Außerdem sendet es auch den Batterieladestand alle paar Sekunden, um zu zeigen, dass es noch da ist. Es stellt eine 12V-Spannung für das Ziel zur Verfügung, damit dort die Signallampe leuchten kann. 10 Sekunden nach Fallen des Wasserspiegels schaltet es kurz die 12 V weg, um die Signallampe zu löschen.
Das Start-Modul hat auch eine Batterie und Funk-Modul. Außerdem hat es eine Verbindung zu Starterklappe, einen Taster und ein OLED-Display. Es zeigt die Ladezustände, eventuelle Fehler und die gelaufene Zeit an.
Aufbau – Spannungsversorgung
Alle Module haben jeweils zwei parallel geschaltete 18650-Lithum-Zellen. Diese werden mit einem TP4056-Lademodul geschützt. Eine wasserdichte USB-C-Buchse ist daran angeschlossen. Ich habe das verbaute Modell bei Ali-Express gefunden. Leider ist nur A5 und nicht auch B5 mit Kabel versehen. Bei Power-Delivery funktioniert das Laden jetzt nur, wenn der Stecker richtigrum steckt.

Hinter dem Lademodul kommt ein An-Aus-Schalter. Danach gibt es mit einem Spannungsteiler einen Abgriff der Batteriespannung. Nun folgt bei allen Modulen ein Schaltregler auf stabile 3,3 Volt. Bei den Ziel-Modulen gibt es parallel dazu einen Schaltregler auf 12 Volt.
Aufbau – Controller
Als Controller kommt ein ESP32-C3-Supermini zum Einsatz. Es ist mit einem LoRa-Modul verbunden. Beide arbeiten mit 3,3 Volt. Der interne Spannungsregler auf dem ESP32 reicht für die Leistungsspitzen beim Senden nicht aus, weshalb ich einen externen einsetzen musste.

Weitere Peripherie ist an anderen GPIO-Pins angeschlossen: Taster, Starterklappe, Ziele oder der Spannungsabgriff.
Software
Die Software macht keine große Magie. Ich habe versucht, alle zeitkritischen (blockierenden) Sachen außerhalb der Zeitmessung zu erledigen. Das eigentliche Datenpaket ist 3 Byte lang. Zwei Byte entfallen für eine Magic-Nummer, um eigene Pakete zu erkennen. Das ist beim Testen nötig geworden. Ich empfing hier und da unsinnige Pakete, die nicht von mir kamen. Das dritte Byte ist meine Nutzlast. Sie besteht aus der ID des Senders, den Ladezustand und des Füllzustands mit Wasser. Auf eine Ack-Paket habe ich verzichtet.
Auch auf der Empfängerseite passiert nichts großartiges. Wenn die Starterklappe geschlossen wird, wird ein Timer gestartet. Dieser wird pro Ziel gestoppt, wenn das erste Paket mit einem vollem Wasserstand ankommt. Es ist noch ein bisschen GUI dabei, um die Zustände anzuzeigen.
Hardware
Alle drei Module habe ich auf Lochraster-Platinen aufgebaut. Da alle kritischen Komponenten auf Breakout-Boards sitzen, musste ich diese noch aufstecken oder mit eigenem Draht auflöten. Das LoRa-Modul hat komischerweise einen Pin-Abstand von 2mm. Mit ein bisschen Beinchen-biegen geht das. Auf der Rückseite habe ich SMD-Widerstände, -Transistor und -Kondensatoren verlötet.





Die Zellen stammen aus geschlachteten Akkus. Diese wurden vor über einem Jahr vollgeladen und hatten immer noch über 4,1 Volt. Also kaum Selbstentladung vorhanden. Ich habe sie Platzsparend auf der Rückseite der Platine befestigt.
Als Wasserdichte Hülle dienen Brotdosen von Ikea. Diese kann man leicht bearbeiten und öffnen. Sie bieten aber trotzdem einen ausreichenden Schutz gegen Spritzwasser.
Erfahrungen und Werte
Die Einstellungen für die LoRa-Verbindung habe ich mit ChatGPT entwickelt. Nach diversen Vorschlägen und Versuchen bin auf einen Stand gekommen, der eine kaum messbare Zeit zum Senden hat, aber trotzdem sicher beim Empfänger ankommt. Ich gehe davon aus, dass derzeit 0,01 Sekunden für das Senden gebraucht wird – die Zeit beim Training wird also nur minimal verändert.





Leider kann ich die Zeit auf dem Display nicht mitlaufen lassen. Es werden bei der I²C-Verbindung immer alle Pixel übertragen. Es ändert sich also zu viel und somit würde eine Änderung zu lange dauern und das Ergebnis wirklich verfälscht werden.
KiCad-Projekte und Quellcode gibt es auf Github.
Verwendete Produkte
- SX1276 Wireless Transceiver Module Lora 868Mhz
- Zellen-Halterung 18650
- ESP32-C3 Development Board SuperMini
- 2.42″ OLED Display Module 128×64
- 12V 1A DC-DC Step Up Power Module
- Wasserdichte USB-C Dose
- Schalter, wasserdicht
- Taster, 30mm Wasserdicht
- Transistor SMD MMBT3904 SOT23