Mein Rasperry Wecker

  • 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 :fies:

    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
    :danke_ATDE: Hier zuerst einen ganz speziellen Dank an meinen unermüdlichen Unterstützer, der mich in die Welt des 3D Drucks eingeführt hat :bravo2:
    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 .....

    Einmal editiert, zuletzt von WernerPI (24. September 2015 um 22:12)

  • Hi WernerPI,

    danke für deinen tollen Beitrag
    :thumbs1: !!!

    Ich habe ein ähnliches Projekt vor, möchte die Lichtquelle jedoch nur von extern haben.

    Dachte dabei an Phillips Hue (http://www.amazon.de/Philips-hue-personal-wireless-lighting/dp/B00IG18C9G?tag=psblog-21 [Anzeige]), die sind zwar recht teuer, aber es gibt klasse APIs zum Ansteuern per C++.

    bin aber wie gesagt noch nicht so im Live Stadium wie du...

    Vielleicht kannst du mir aber ein Tipp geben, wie du die Ausführung des Weckers bewerkstelligst?!

    => Setzt du Linux Befehle aus, um Cronjobs zu planen? Falls ja, ich habe bisher keinen Weg, diese wieder sauber zu löschen...

    Was ich noch zusätzlich machen will ist, per Zufall morgens ein Zitat / einen positiven Spruch ausgeben, der mich besser in den Tag starten lässt als Radio Nachrichten oder Gedanken ans die Arbeit :D

    Dazu habe ich eine SQLite Datenbank mit einigen Hundert Zitaten angesammelt.

    => Mein Ziel ist das per QML / Qt / C++ auf dem Raspi 7" Touch Display auszugeben, muss da aber erstmal noch tiefer einsteigen, da ich eigentlich aus C# Ecke aus Windows herkomme und mich mit Header Files und auch tieferem Linux Verständnis noch etwas "auseinandersetzten" muss...

    Aber freut mich zu lesen, dass es ähnliche Ideen und Motivationen gibt, wie die meinige =)

  • An eine Phillips Hue hab ich auch gedacht, bis ich den Preis gesehen habe. Meine angedachte "externe" Licht-Lösung: Arduino Nano, Rf433 Sender/Empfänger, LEDs und MOSFETS in ein Gehäuse. Kosten zusammen ca. (mit Arduino China Nachbau): < 10EUR. Aktuell läuft im Testaufbau die Funk-Übertragung schon. Was noch fehlt: Einbau des Senders in den Wecker, zusammenlöten der externen Lichtquelle.

    Ich mache nichts mit "cronjobs" das erschien mir viel zu unflexibel (und wird ggf. noch gruseliger als mein Python-Code). Einige Punkte die ich berücksichtige: "snooze", "alarm-abbruch", einschalten des WLANs 5 Minuten vor dem Wecken, Einschalten des "Sonnenaufgangs" 15 Minuten vorher etc. Deshalb habe ich das alles in Python programmiert.

    Das 7" Display kam raus als ich schon fertig war - aber eigentlich wäre es mir auch zu groß & teuer gewesen. Und es muss "dimmbar" sein. In der Nacht möchte ich es "einigermaßen" Dunkel haben. Deshalb musste ich das Admatec Display an einigen Stellen mit Klebeband abkleben...

    Am WE werde ich noch ein paar Sachen einstellen...

  • Echt Geiles Teil !!

    Ich bin auf deinen Beitrag gestoßen, nicht weil ich einen Wecker suche, nein ... sondern weil ich geschaut habe ob jemand den RDA5807M in einem Raspberry sauber verbaut hat.

    Mein Sohn will ein Radio basteln ... so ein billiges 9 Euro Bauset vom Condrad haben wir schon hinter uns ... als nächstes läge da einer meiner Raspberrys auf dem Tisch.

    Hier liegt ein Beispiel Code rum: https://www.raspberrypi.org/forums/viewtopic.php?t=59907

    Da ich erst anfange hab ich das noch icht alles durchleuchtet, hast du den Sample Code auch schon gesehen und probiert?

    Auch meine ganz billigen Komponenten aus China laufen ... aber nach 4 Wochen auf hoher See hat mein 1602 Display wohl etwas an Kontrast verloren.

  • Tja, jetzt wird es richtig peinlich für mich *rot angelaufen* - auch wenn Du es nicht glaubst - ich finde das Verzeichnis des RDA5807M incl. Source-Code nicht mehr - und das Backup war auch schon länger her :(

    Ich hatte folgenden Code in "RPi" umgesetzt:
    http://www.mathertel.de/Arduino/RadioLibrary.aspx
    Dateien: http://RDA5807M.cpp/RDA5807M.h

    Ich hatte mich auch am RDS versucht, aber keine "brauchbaren Ergebnisse" bekommen ....
    Dateien:http://RDSParser.cpp/RDSParser.h

  • Hallo Werner,

    Schade, abermacht nix. Das ist eh ein Projekt das bei mir wahrscheinlich 1Stunde Aufmerksamkeit pro Monat bekommen wird (leider). Aber zur Zeit geht nicht mehr.

    Es resultierte auseiner Frage meines Sohnes ob man mit dem Raspi nicht auch Radio hören kann, da ich ja immer sage, "Der Raspi kann alles."

    Jetzt ist das Teil bei mir daheimangekommen und ich hoffe ich habe das richtige Teil ... es was so mini das meine Brille fast nicht ausgereicht hat es überhaupt als"teil" zu erkennen. Daskann ja noch was werden. Ich hab das Gefühl ich werde das komplette Ding mit meinem Lötkolben einmal aufspießen und dann war es das eh. :blush:

    Auch meine ganz billigen Komponenten aus China laufen ... aber nach 4 Wochen auf hoher See hat mein 1602 Display wohl etwas an Kontrast verloren.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!