Hallo, hiermit möchte ich meinen Raspberry-Pi-Wecker vorstellen:
Mein aktuellstes (und auch mein - bis jetzt - aufwändigstes) Projekt mit dem RaspberryPi. Aktuell will ich nur einige Konzepte, Ideen,
einige Bilder und auch ggf. Codefragmente einstellen. Der Code ist zum Teil eher "hässlich" geworden. Wahrscheinlich werde ich irgendwann
mal in ein "refactoring" angehen.
Hintergrund:
Mein alter Wecker (Chumby https://de.wikipedia.org/wiki/Chumby) hat sein EOL erreicht. Der Stromverbrauch war überraschend hoch und
die Multimedia-Fähigkeit waren ohne Cloud-Anbindung eher bescheiden/nicht vorhanden.
=> Also musste ein neuer Wecker her!
Meine Anforderungen an meinen Wunsch-Wecker:
Must-Have:
* Klein, Süß - mit extra viel WAF. (Sonst gibt es mächtig ärger)
* Einfache Einstellungen der Weckzeiten am Wecker und/oder Webbrowser.
* Drehencoder zum Steuern (ich habe den Touchscreen beim Chumby gehasst)
* Wecken mit Webradio/FM Radio
* Wettervorhersage/“Diashow“ am Tage
* Großes Display um in der Nacht die Uhrzeit ablesen zu können
* Lautstärke Regelung für sanftes Wecken
* Backup-Batterie
Nice-to-Have:
* Offline-Modus wenn keine WLAN Verbindung vorhanden ist.
* Vorab Wecken mit Licht (Lichtwecker). Passend dazu eine
* externe Lichtquelle für meine Frau. (Der Wecker soll nicht nur mir morgens ins Auge leuchten
Die ausgewählten Komponenten (incl. Preise):
* Raspberry PI A+ (20EUR)
* Display (Admatec 3.2") (40EUR :...( )
* Radiomodul RDA5807M (2 EUR)
* RTC Modul (5 EUR)
* WLan Kärtchen (ca. 10EUR)
* ADC Kärtchen (ca. 5EUR)
* Steuerbarer Verstärker (15 EUR)
* Lautsprecher (Visaton BF 45) (15 EUR)
* Drehencoder (5 EUR)
* Gehäuse (??)
* 3 x RGB LED (3 EUR)
* 3 x MOSFET (<3 EUR)
-----------------------------------------------
= 123 EUR
Raspberry PI A+
Kleiner gehts wohl beim Raspberry nicht. Erstmal Debian (Rasbian) drauf und alles wird gut!
Admatec 3.2"
Schönes Display, Leider doof zum Ansteuern. Das Admatec hat zwar einen Grafikkontroller aber so etwas will "man" doch
nicht programmieren. Ein Beispiel C-Programm lag vor, welches Demonstrierte wie man bmp-Bilderladen & darstellen kann.
Ein findiger Maker hat auch ein kleines Python-Prg geschrieben welches Bilder abspeichert dieses Admatec-C-Prg lädt diese
dann sekündlich und stellt sie dar. Ich habe diese Lösung wie folgt angepasst:
Die Python-SW speichert das Bild in eine RAM-Disk und sendet via Socket eine Aufforderung an den Admatec-Displayserver
das gespeicherte Bild darzustellen.
Mein Versuch das Bild über den Socket selbst zu schicken ging leider schief: Wahrscheinlich Encoding Probleme zw. C++ und
Python. Und aufwändiges Marshalling/De-Marshalling ist auch keine Lösung.
Radiomodul RDA5807M
Ein FM-Radio mit "gutem" Audio-Ausgang, RDS und mit i2c Anschluss - besser als diesePhillips-Teile. Leider habe ich das RDS-Modul
nicht ordentlich zum Laufen gebracht Die Steuerung habe ich von einem Arduino-Bsp an den RPi angepasst.
RTC
Das DS3231 Modülchen ist ziemlich klein, ziemlich genau und ziemlich Standard
WLAN Stick
Hatte ich noch rumliegen. Ein Edimax mit RTL8188CUS Chip. WLAN kann man Nachts ausschalten lassen (Option).
ADC Kärtchen
Hatte ich auch noch irgendwo gefunden. Gleich mit LDR zur Helligkeitsbestimmung und i2c Anschluss. Ein kleines C-Prg liest den
Helligkeitswert aus und steuert (Code von Dreamshader adaptiert):
- Die Beleuchtung des Displays (Mit einer einfachen Look-Up Tabelle)
- Den Beginn der Abend-Light-Show
Steuerbarer Verstärker (TPA2016)
Da der RPi einen fürchterlichen Audioausgang hat - speziell wenn die Lautstärke runter geregelt ist - habe ich einen i2c Verstärker
gekauft. Leider ist der Steuerumfang (laut/leise ) nicht berauschend Die Steuerung habe ich ebenfalls von einem Arduino-Bsp
an den RPi angepasst. Ein USB Audio-Stick kam aus Platzgründen leider nicht in frage .
Lautsprecher (Visaton BF 45)
Der erste getestete LS hatte sich schlecht angehört und ist sofort raus geflogen. Dieser hier kostet leider 15 EUR – aber das hört man
auch. Wer möchte schon durch scheppern geweckt werden :))
Drehencoder
Die Drehsteuerung hat wohl Apple (bei der AppleWatch) von mir abgeschaut. Leider ist Python doch ziemlich Langsam ( )
Der Drehencoder hat nie flüssig funktioniert. Also habe ich den Drehencoder auch in C-Programmiert (Ein gutes Android Bsp. kopiert
und angepasst) und schicke das Ergebnis via Socket an das Python Programm.
Gehäuse
Hier zuerst einen ganz speziellen Dank an meinen unermüdlichen Unterstützer, der mich in die Welt des 3D Drucks eingeführt hat
Aus dem 3D-Drucker. Das weiße Filemanet sieht echt toll aus wenn die ganzen LEDs des PI durchschimmern. Daraus hat sich zwangsläufig
der nächste Punkt ergeben:
Beleuchtung
Ein paar LEDs und MOSFETs bestellt und rein gebastelt. Nachmittags, wenn es ausreichend Dunkel ist beginnt eine "Light-Show".
Benutzt habe ich pigpio für die PWM-Ansteuerung.
„externe“ Beleuchtung (todo):
Die Idee ist, die Steuerbefehle (Beginne Licht-Wecken, beende Licht-Wecken, etc.) mittels rf433 zu übertragen. In der externen Beleuchtung
sitzt eine Arduino nano, der die Befehle empfängt und die RGB-LEDs entsprechend entsprechend steuern soll.
Die Software:
Settings und Alarme lassen sich alle Online über Webinterface oder Offline am Wecker einstellen.
Das Haupt-Programm ist in Python
Der Display-Server, Enocder, Helligkeits-Server in C++.
Python/ Shell-Scripte für WLAN Steuerung, Web/FM Radio-Steuerung, Wetterdienst abfrage, sonstiges
Backup-Batterie:
Tja, leider war nun wirklich kein Platz mehr im Wecker. Aktuell habe ich eine externe PowerBar die bis jetzt zuverlässig funktioniert.
Morgen mehr .....