Gescheiterte Projekte in 2019

2019 war ein Jahr in dem ich viel programmiert und gebastelt habe. Vor allem das Basteln macht nun wieder richtig Spaß, da ich mir eine kleine Werkstatt (“Mein Labor” wie ich es liebevoll nenne) eingerichtet habe. Jetzt brauche ich nicht jedes Mal die Küche auf Links drehen, wenn ich nur ein paar Kleinigkeiten zusammenlöten möchte – ein Traum ist wahr geworden. 


Auch bei der Software-Entwicklung habe ich wieder ein paar kleine Schritte vorwärts gemacht. So habe ich 2019 Flutter und Dart gelernt, zwischen Weihnachten und Neujahr an der Flutter Clock Challenge (https://flutter.dev/clock https://medium.com/p/dcebe2eb3957 https://www.youtube.com/watch?v=PaPUkxYHDUw&feature=emb_title ) teilgenommen und bin (bei ca. 700 gültigen Einsendungen) unter die Top 30 gekommen. Meine Tetris Clock (https://github.com/msoftware/flutter_clock) hat der Jury wohl ganz gut gefallen. Außerdem ist meine App “Floating Timer” (https://play.google.com/store/apps/details?id=timer.jentsch.de.floatingtimer&hl=de) 2019 endlich im Google Play Store gelandet und erfreut sich einiger 10.000 Installationen (Trotz ein paar lästiger kleiner Bugs, um die ich mich 2020-mal kümmern muss)

Aber es gab auch ein paar Tiefpunkte, über die ich hier auch reden möchte. Besonders 2 Projekte haben mir meine Grenzen aufgezeigt.

Multi Room CD-Player für Sonos 

Ein Projekt, dass ich anfang des Jahres umsetzen wollte hat sich am Ende als sehr problematisch erwiesen und am Ende musste ich es sogar 2-mal beenden. 

Eigentlich ist die Idee ganz einfach. Man nehme einen Raspberry-PI, eine externe Soundkarte, ein USB-CD-ROM Laufwerk, stecke alles zusammen und installiere bzw. konfiguriere die entsprechende Software (mplayer, darkice, icecast und ein paar kleine Python Skripte, die über GPIO den mplayer steuern können). Danach hat man eine Internet-Radiostation im Heimnetz. Die kann man nun mit der Sonos Desktop-Software einfach als Quelle hinzufügen und schon hat man einen Multo-Room CD-Player, mit dem man die ganzen alten CDs bzw. mit entsprechendem Entzerrer-Vorverstärker auch Schallplatten in der ganzen Wohnung hören kann.

Mit dem Raspberry-PI 3 habe ich leider immer das Problem gehabt, dass ein leises Piepen zu hören war, wenn die Musik aufgehört hat. Es war nicht sehr laut, aber störend genug, dass ich das Projekt erst mal wieder beiseite gelegt habe, um über eine bessere Lösung nachzudenken. 

Die bessere Lösung kam dann glücklicherweise mit dem Raspberry-PI 4, der das Problem nicht hat. Also habe ich das Projekt wieder aus dem Schrank der unvollendeten Projekte genommen und alles wieder verkabelt.

So weit so gut. Eigentlich funktioniert das auch alles ganz wunderbar. Aber so richtig glücklich bin ich damit nicht geworden, da ich nicht bedacht habe, wie groß die Latenz auf der langens Strecke vom CD-Player bis zum Ohr ist. Auch nachdem ich die ganzen Buffer auf ein minimum reduziert hatte, dauerte es noch immer ca. 7-8 Sekunden, von dem Moment wo ich die Pause Taste gedrückt habe bis zu dem Moment wo die Musik dann wirklich pausiert hat. 

Jetzt klingen 7-8 Sekunden nicht so schlimm, aber im wirklichen Leben sind 7-8 Sekunden eine Ewigkeit, wenn man mal kurz Pause drücken möchte. Also habe ich das Projekt wieder in eine Kiste gepackt und auf Eis gelegt, bis mir etwas besseres einfällt….

Ein Smartes USB Ladegerät für Handys

Die Grundidee hinter dem smarten USB Ladegerät für Handys ist einfach. Ziel ist es den Akku zu schonen und die Lebenszeit des Akkus signifikant zu erhöhen. Dazu muss einfach nur das Laden des Handys auf einen maximalen Ladestrom von 500mA begrenzt werden und das Laden bei einer Ladung von ca. 80% beendet werden. 

Gerade vor ein paar Tagen habe ich noch darüber gelesen (https://www.basicthinking.de/blog/2020/03/05/smartphone-akku-lebensdauer-hagnaven/).

Es gibt schon Softwarelösungen für dieses Problem, die entweder bei 80% warnen und dann muss man das Ladegerät selber abstöpseln oder sein Android-Handy rooten. Dann kann man (theoretisch) auf die Ladekontrolle zugreifen und das Laden per App unterbrechen.

Meine Lösung war eine Mischung aus einer App und einem Stück Hardware, dass zwischen das Handy und das Ladegerät gesteckt wird. 

Sobald die App einen Ladezustand von 80% erkennt, wird der Smart-Charger darüber informiert und das Laden unterbrochen. Genauso wird das Laden wieder aktiviert, wenn der Ladezustand 75% unterschreitet. So hält man den Akku auf einem Stand von 75%-80% Leistung bis man das Handy vom Ladegerät entfernt.

Bei der Umsetzung habe ich ganz verschiedene Konzepte probiert. So habe ich für die Kommunikation zwischen dem Handy und dem Ladegerät eine USB-Verbindung probiert, die ich erst mit einem MAX3421E-based USB Host Shield und dann noch mal mit einem FT311D Board umgesetzt habe. Am Ende hat mir der FT311D Chip deutlich besser gefallen. Vor allem die Tatsache, dass man beim anstecken eines Peripherie-Gerätes an das Handy automatisch eine App starten kann war für mich sehr toll. Allerdings habe ich mich am Ende doch für eine einfache BLE Kommunikation entschieden. 

Für die Ladekontrolle habe ich auch einige Tests gemacht. Angefangen bei einem einfachen MosFET, der einfach die Stromversorgung zum Handy unterbricht bis zu integrierten Schaltungen, in denen die komplette “USB Battery Charging Specification BC1.2” implementiert ist habe ich alles durchprobiert.  Hier habe ich viel über das USB Laden und über das SMD-Löten mit Heißluft gelernt. 

Bei meiner endgültigen Lösung wird eine kleine Schaltung zwischen das Ladegerät und das Handy gebracht, die den Ladestrom über einen MOSFET unterbrechen kann und den Ladestrom auf 500 mA begrenzt. Eine fertige Lösung, die diesen Zweck erfüllt ist der „USB Charging Port Controller and Power Switch With Load Detection“ TPS2546 von Texas Instruments.

Minimale Schaltung eines TPS2546

Als Mikrocontroller habe ich nicht viel rumprobiert. Ich bin ein großer Fan vom ESP32. Also habe ich einfach ein ESP-32 Board als Steuercomputer verwendet. Da er auch noch über Bluetooth verfügt und somit nicht noch ein zusätzliches Bluetooth Modul benötigt wird, ist der ESP-32 die ideale Lösung, auch wenn die ESP-32 Hardware deutlich überdimensioniert ist. Aber bei einem Preis von ca. 4 € ist das noch zu verschmerzen.

Die komplette ESP32 Spezifikation kann man unter https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf nachlesen. Die wichtigsten Eckdaten findet man in Kapitel 1.2 bis 1.5.

Eine einfache Lösung mit Akku und Mosfet (Sozusagen eine smarte Powerbank)

Bis hierhin hat alles wunderbar funktioniert. Nebenbei habe ich auch noch eine Android App realisiert und und in Autodesk ein schickes Gehäuse designt. Die Kommunikation mit der App hat geklappt, die Steuerung des TPS2546 über den ESP32 war auch nicht schwierig und irgendwann war ich dann so weit, die in China bestellen und fertig bestückten PCBs mal über Nacht zu laden – und genau da fing das Drama an. Denn leider haben moderne Handys einen sogenannten “Doze Mode”. Dieser Doze Mode sorgt dafür, dass Handys extrem wenig Strom verbrauchen, wenn sie nicht verwendet werden. Natürlich kann man diesen Doze Mode unterdrücken oder sich mit dem JobScheduler/WorkManager behelfen und genau da habe ich auch angesetzt, aber am Ende war ich mit keiner Lösung wirklich zufrieden. 

Den Doze Mode zu deaktivieren funktioniert bis zu einem bestimmten Grad, sorgt aber dafür, dass der Stromverbrauch des Handys während des smarten Ladens nicht weniger wird, was den Akku zusätzlich belastet und somit eher kontraproduktiv für die Lebensdauer des Akkus ist. 

Die Lösung mit dem WorkManager würde da schon besser funktionieren. Mit dieser Lösung würde die Smart-Charger App nur kurz aufgeweckt um den Ladezustand zu checken, und dem ESP mitzuteilen, ob er das Laden an/aus-schalten soll. Das geht mit dem WorkManager theoretisch im 15 Minuten Intervall. Aber auch das ist im Doze Mode so eine Sache und egal was ich gemacht habe, so wirklich zuverlässig hat das nie funktioniert. Darüber hinaus habe ich beim Testen mit unterschiedlichen Handys festgestellt, dass die verbaute Ladekontrolle sich in vielen Fällen einen Sch*** darum kümmert, welchen Lade-Standard das Ladegerät vorgibt. Sobald das Ladegerät mehr als 500mA liefern kann ohne das die Spannung zusammenbricht, wird von einigen Handys auch mal gerne 2A gezogen. Besonders in dem Fall ist ein Intervall von 15 Minuten oder mehr viel zu lang um eine präzise Ladekontrolle zu realisieren.

An dem Punkt habe ich dann das Projekt erst mal wieder auf Eis gelegt. Evtl. finde ich ja im Laufe der Zeit noch eine bessere Lösung oder es ändert sich was am Android-SDK was mir das Leben etwas leichter macht. 

Aktuell steht gerade Android-11 in den Startlöchern. Im Emulator und auf aktuelleren Pixel-Geräten kann man es schon probieren, aber die API Doku gibt mir bisher keine Hinweise darauf, dass ich hier eine bessere Möglichkeit habe …. also weiter abwarten.

Hier noch eine Gallery mit all den Bildern, die während der Entwicklung von meinem Smart Charger entstanden sind.


Meine Apps im Google Play-Strore
Jetzt bei Google Play


Das könnte Dich auch interessieren.
Was ist die wichtigste Webseite für Software-Entwickler im Netz? Klar, meine Webseite "dieletztedomain.de". Aber direkt
Hallo Zusammen, ich weiß, es gibt genug Nachrichten zu dem Thema, aber ich habe am
Foto von Kristopher Roller Heute habe ich mal wieder viel an meinem aktuellen Flutter Projekt