Inhaltsverzeichnis:
- Schritt 1: Die Hardware
- Schritt 2: Erstellen des LCD-Displays
- Schritt 3: Einrichten der Software
- Schritt 4: Optional - Ausschalten des Displays
- Schritt 5: Hängen Sie den Kalender auf
Video: Smarter Wandkalender - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Meine Frau und ich hatten früher einen klassischen Papier-Wandkalender, auf dem wir wichtige Termine markierten. Wir verwenden auch den Google-Kalender auf unseren Smartphones zum Markieren von Ereignissen, das bedeutete also doppelte Arbeit. Also beschloss ich, eine Art intelligenten Wandkalender zu bauen, der unsere Erinnerungen, Ereignisse und einige andere Daten anzeigt. Da ich diverse alte Elektronikteile herumliegen habe, war es mein Ziel, möglichst viele wiederzuverwenden und den Kalender mit möglichst geringen Kosten zu bauen.
In diesem Tutorial zeige ich Ihnen, wie Sie einen intelligenten Wandkalender erstellen, der Ereignisse von mehreren Google-Konten anzeigt. Es zeigt auch Uhrzeit, Datum, Wetter, Temperatur und einige zusätzliche Informationen an. Es wird von einem Raspberry Pi-Computer mit einem daran angeschlossenen Passiv-Infrarot-Sensor (PIR) mit Strom versorgt, sodass sich das Display einschaltet, wenn eine Bewegung im Raum erkannt wird, sich jedoch nach einigen Minuten Inaktivität ausschaltet. Dieses Tutorial basiert auf mehreren anderen Tutorials, die ich im Internet gefunden habe, und ich werde die Links zu ihnen zum besseren Verständnis angeben. Grundlegende Programmierkenntnisse sind erforderlich (HTML, Python, …).
Schritt 1: Die Hardware
Wie bereits erwähnt, habe ich versucht, möglichst viele alte Elektronikteile wiederzuverwenden, um die Kosten niedrig zu halten. Allerdings musste ich einige Artikel kaufen, deshalb werde ich alles auflisten, was für den Bau notwendig ist.
- Ein Raspberry Pi-Kit. Anfangs habe ich mein altes Modell 2 aus einem anderen Projekt verwendet. Es hat funktioniert, aber das Bearbeiten und Neuladen der Webseite hat mich viel Zeit gekostet, also wechselte ich schließlich zu Modell 3, das flüssiger funktioniert
- LCD Bildschirm. Ich habe den Bildschirm von meinem alten Laptop verwendet, also musste ich nur LVDS-Treiberplatine dafür und das Netzteil kaufen https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ Treiber+LVDS+Platine&_sacat=0
- Aufbewahrungsbox aus Kunststoff für die Elektronik
- Passiv-Infrarot-Bewegungssensor
- AM2302 Temperatur-/Feuchtigkeitssensor
- Schwarzer Kunststoff-Schiebebinder für LCD-Rahmen
- Diverse Kabel (HDMI, 5,5 mm für Gleichstrom, lötfreie Steckbrücken-Überbrückungskabel, …)
Schritt 2: Erstellen des LCD-Displays
Ich habe den LCD-Bildschirm von meinem alten veralteten Laptop verwendet. Es gibt mehrere Tutorials dazu, ich bin diesem gefolgt:
www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/
Ich habe die Abdeckung meines alten Laptops demontiert, das LCD-Display herausgenommen und dann die richtige LVDS-Treiberplatine bestellt. Ich habe dem Verkäufer den Produktcode, der auf der Rückseite des LCD zu finden ist, angegeben, in meinem Fall LP171WE3 (TL)(A2) - siehe Etikett unten rechts auf dem letzten Bild, und er hat mir dann das entsprechende LVDS geschickt. Bitte beachten Sie, dass Sie auch das Netzteil für das Display benötigen, also bitten Sie den Verkäufer, es auch zu senden. Ich habe auch eine schöne 14,5 × 7,5 × 2 cm Plastikbox gekauft, um die Treiberplatine gut zu passen und sie an der Rückseite des LCD zu befestigen.
Jetzt hat das LCD-Display einen Metallrahmen, der nicht schön aussieht. Anfangs habe ich es schwarz lackiert, aber die Farbe begann sich abzulösen. Also habe ich vier schwarze Kunststoff-Schiebebinder, die typischerweise zum Binden von Papierbögen verwendet werden, genommen, entsprechend beschnitten und zur Abdeckung des Rahmens befestigt. Das sah gut aus, also habe ich alle Kabel angeschlossen, HDMI an meinen alten Raspberry Pi und Voila angeschlossen – es hat funktioniert! Auf dem Display wurde ein Bild angezeigt, also war ich bereit, mit dem nächsten Schritt fortzufahren – welche Informationen auf dem Display angezeigt werden und wie sie angezeigt werden.
Schritt 3: Einrichten der Software
Als ich im Internet nach Hinweisen zum Erstellen eines Kalenders suchte, wurde ich von dieser Seite https://dakboard.com/site inspiriert. Sie liefern das fertige Produkt (das Display, den Computer und die Arbeitssoftware), aber sie haben auch ein hervorragendes Tutorial für die DIY-Lösung (https://blog.dakboard.com/diy-wall-display/). Ich empfehle Ihnen, zumindest für den ersten Teil dieses Tutorials mit den Anweisungen zum Vorbereiten und Einrichten des Systems auf Raspberry zu befolgen, damit der Browser die gewünschte Webseite beim Booten automatisch lädt.
Das hat gut funktioniert, aber ich suchte nach einer Lösung, die nach meinen Wünschen besser angepasst werden könnte. Ich habe mich entschlossen, einen eigenen Webserver einzurichten und eine Webseite zu erstellen, die neben dem Kalender zusätzliche Informationen anzeigt. Ich habe mich für Wordpress.org entschieden, da es gut dokumentiert ist und eine gute Unterstützung und eine große Community hat, die Ihnen helfen kann. Hier ist das Tutorial zur Installation von Wordpress auf Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Nachdem Wordpress installiert war, war es an der Zeit, meine Homepage zu gestalten. Sie können eines der vielen bereitgestellten Designs verwenden oder von Grund auf neu entwerfen. Dafür sind jedoch einige HTML-Programmierkenntnisse erforderlich.
Ich habe meine Seite so gestaltet, dass auf der linken Seite der Kalender angezeigt wird (https://sl.wordpress.org/plugins/google-calendar-events/), während auf der rechten Seite Uhrzeit und Datum angezeigt werden (https://www.timeanddate.com/clocks/free.html und https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Die Wettervorhersage stammt von dieser Seite (https://www.1a-vreme.si/vremensko-okno/), die ein Vorhersage-Widget für slowenische Städte bereitstellt, aber ich denke, Widgets für andere Länder könnten auch im Internet gefunden werden. Die Temperatur wird mit dem AM2302-Sensor (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0) erfasst, wie am Ende dieses Kapitels erklärt. Unten ist ein einfacher täglicher Countdown-Timer, der anzeigt, wie viele Tage bis zu einem bestimmten Ereignis verbleiben (für meine Kinder interessant zu wissen, wie viele Tage sie auf etwas warten müssen). Am oberen rechten Rand befindet sich das MetaSlider-Plugin (https://wordpress.org/plugins/ml-slider/), das zufällig zu ausgewählten Bildern meiner Familie gleitet. Zusätzlich habe ich das Background Slider Plugin (https://sl.wordpress.org/plugins/background-slider-master/) verwendet, um mir ein zufälliges Bild für einen schöneren Hintergrund anzuzeigen.
Wie bereits erwähnt, wird die Innentemperatur mit dem Sensor AM2302 erfasst. Es gibt viele Tutorials, wie man die Temperatur erhält, ich bin diesem gefolgt: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Später habe ich diesen Sensor auf einen anderen Raspberry Pi verschoben, auf dem Home Assistant ausgeführt wird, da es mit seiner DHT-Sensor-Komponente (https://www.home-assistant.io/components/sensor.dht/) einfacher ist, Werte zu lesen und zu veröffentlichen.. Home Assistant kann auch die Außentemperatur mit verschiedenen Wetterkomponenten erfassen, ich habe die Komponente YR.no verwendet (https://www.home-assistant.io/components/sensor.yr/). Damit habe ich ein Automatisierungsskript geschrieben, um die Innen-/Außentemperatur von diesen Komponenten zu erfassen und in eine Textdatei zu schreiben, die dann in meinem Wandkalender angezeigt wird. Weitere Informationen zu Home Assistant finden Sie auf der Homepage (https://www.home-assistant.io/).
Schritt 4: Optional - Ausschalten des Displays
Jetzt haben wir unseren Kalender eingerichtet und laufen, genau so, wie es uns gefällt. Aber wir wollen nicht, dass das Display rund um die Uhr eingeschaltet ist. Wir wollen es nur einschalten, wenn jemand zu Hause ist. Wir wollen auch nicht, dass es mitten in der Nacht eingeschaltet wird, wenn wir auf die Toilette gehen, es ist zu hell! Wir werden also einen Infrarotsensor anbringen, um zu bemerken, wenn jemand davor steht, und einige Zeitlimits hinzufügen, wann er sich einschalten soll.
Bitte beachte, dass meine Programmierkenntnisse eher begrenzt sind, daher könnte das Folgende nicht optimal sein, da ich es aus verschiedenen Online-Foren und Tutorials ausgewählt habe, aber im Wesentlichen funktioniert es. Trotzdem ist jede Empfehlung willkommen. Zuerst beginnen wir mit dem Test, um den Monitor manuell ein- und auszuschalten. Dazu erstellen wir zwei Dateien (zum Beispiel monitor_on.sh und monitor_off.sh) und schreiben Code hinein. Am einfachsten geht das, indem du dich per SSH an deinem Raspberry anmeldest und eintippst
sudo nano monitor_on.sh
und geben Sie den folgenden Code ein
Fernsehdienst --bevorzugt;
startx /usr/bin/graphical_launcher `fgconsole`
Drücken Sie STRG+X, um zu speichern und zu beenden, und erstellen Sie dann die zweite Datei
sudo nano monitor_off.sh
und geben Sie den folgenden Code ein
Fernsehdienst --off;
Drücken Sie erneut STRG+X, um zu speichern und zu beenden. Machen Sie diese neu erstellten Dateien ausführbar:
sudo chmod +x monitor_on.sh
sudo chmod +x monitor_off.sh
Um nun zu versuchen, ob diese Befehle funktionieren, geben Sie ein
sudo./monitor_off.sh
sudo./monitor_on.sh
Der Monitor sollte sich nun entsprechend aus- und einschalten. Mir ist aufgefallen, dass es auf Raspberry Pi 2 fast 10 Sekunden dauerte, bis sich der Monitor einschaltete. Auf Raspberry Pi 3 dauert es 1-2 Sekunden. Als nächstes werden wir einen Infrarotsensor anschließen, der diese Skripte auslöst. Auch hier gibt es viele Tutorials zum Einrichten von Raspberry Pi und PIR, ich bin diesem gefolgt: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Erstellen Sie im Grunde eine Datei mit dem Nano-Editor (zum Beispiel motion_sensor.py) und geben Sie den entsprechenden Python-Code ein. Unten ist das Beispiel meiner Datei:
import RPi. GPIO als GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings(False)# GPIO.setmode(GPIO. BOARD)GPIO.setmode(GPIO. BCM)GPIO.setup(17, GPIO. IN) #PIRturned_off = Falselast_motion_time = time.time()SHUTOFF_DELAY = 180 # Sekundenwhile True:i=GPIO.input(17)if i==0: #Wenn die Ausgabe vom Bewegungssensor NIEDRIG ist, schalten Sie den Monitor AUS, wenn nicht ausgeschaltet_off und time.time() > (last_motion_time + SHUTOFF_DELAY):print "Keine Eindringlinge", iturned_off = Truetime.sleep(1)subprocess.call(['/home/pi/monitor_off.sh'], shell=True)elif i==1: #Bei Ausgabe vom Bewegungssensor ist HIGH, schalten Sie den Monitor EINprint "Eindringling erkannt", itime.sleep(1)last_motion_time = time.time()sys.stdout.flush()if Turn_off und dt.datetime.now().hour > 5 und dt.datetime. now().hour < 23:turned_off = Falsesubprocess.call(['/home/pi/monitor_on.sh'], shell=True)if _name_ == '_main_':try:main()außer KeyboardInterrupt:GPIO.cleanup ()
Beachten Sie, dass „GPIO.setup(17, GPIO. IN)“anzeigt, dass der Ausgangspin von PIR mit Pin 17 auf Raspberry Pi verbunden ist. Welcher Pin das ist, hängt davon ab, ob Sie GPIO.setmode(GPIO. BOARD) oder GPIO.setmode(GPIO. BCM) definieren. Der Unterschied wird hier erklärt: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Ich habe # vor GPIO. BOARD, daher wird es ignoriert und GPIO. BCM verwendet.
Beachten Sie die Linie
SHUTOFF_DELAY = 180 #Sekunden
Hier wird angegeben, wie lange der Monitor seit der letzten Bewegungserkennung eingeschaltet ist, bevor er ausgeschaltet wird. Dies ist nützlich, weil ich nicht möchte, dass sich der Monitor ständig aus- / einschaltet, wenn ich daran vorbeigehe, sondern ihn einige Zeit eingeschaltet lassen möchte, bevor er ausgeschaltet wird. Ich habe das Intervall von 180 Sekunden gewählt, so dass sich der Monitor ca. 3 Minuten nach der letzten Bewegungserkennung ausschaltet.
Endlich diese Zeile
if turn_off und dt.datetime.now().hour > 6 und dt.datetime.now().hour < 23:
gibt an, dass sich der Monitor nur zwischen 6:00 und 23:00 Uhr einschaltet, sodass er mich nachts nicht stört. Die Linien
"Keine Eindringlinge" drucken, i
und
"Eindringling erkannt" drucken, i
dienen nur zum Testen des Skripts, Sie können sie später löschen, wenn es funktioniert. Testen Sie nun das Skript:
sudo python motion_sensor.py
Sie sollten die Meldung „Eindringling erkannt“sehen, wenn Sie über dem Sensor winken, andernfalls lautet es „Keine Eindringlinge“. Wenn dieses Skript getestet wurde und funktioniert, legen Sie es so fest, dass es beim Booten gestartet wird:
sudo nano ~/.config/lxsession/LXDE-pi/autostart
und füge die folgende Zeile hinzu
@sudo /usr/bin/python /home/pi/motion_sensor.py
Natürlich müssen Sie den korrekten Dateinamen des von Ihnen erstellten Python-Skripts angeben.
Schritt 5: Hängen Sie den Kalender auf
Wenn alles eingerichtet ist, ist es an der Zeit, den Kalender an die Wand zu hängen!
Anfangs dachte ich daran, Raspberry Pi hinter dem LCD-Display zu verstecken, damit nur ein Kabel (DC-Strom) benötigt würde. Aber da Raspberry mit 5V läuft und LCD-Display mit 12V läuft, bräuchte ich einen zusätzlichen Transformator. Außerdem ist das Raspberry-Gehäuse ziemlich dick, was bedeutet, dass das LCD etwa 3 Zentimeter von der Wand entfernt wäre. Also habe ich dies aufgegeben und nur die LCD-Elektronik hinter dem LCD gelassen, sodass es jetzt weniger als 1 Zentimeter von der Wand entfernt ist. Ich habe zwei 5 Meter lange Kabel erworben, ein HDMI und ein 5,5 mm für die Gleichstromversorgung. Beide Kabel sind wie die Wand weiß und fallen daher nicht besonders auf. Ich habe das LCD an der Wand angebracht und Raspberry auf den Kühlschrank an der gegenüberliegenden Wand gestellt, so dass es im Grunde versteckt und dennoch leicht zugänglich ist.