Πίνακας περιεχομένων:

Smart Wall Calendar: 5 βήματα
Smart Wall Calendar: 5 βήματα

Βίντεο: Smart Wall Calendar: 5 βήματα

Βίντεο: Smart Wall Calendar: 5 βήματα
Βίντεο: Taekwondo Training 2024, Ιούλιος
Anonim
Έξυπνο ημερολόγιο τοίχου
Έξυπνο ημερολόγιο τοίχου

Η γυναίκα μου και εγώ είχαμε κλασικό ημερολόγιο τοίχου από χαρτί, στο οποίο σημειώσαμε σημαντικές ημερομηνίες. Χρησιμοποιούμε επίσης το ημερολόγιο Google στα έξυπνα τηλέφωνά μας για τη σήμανση συμβάντων, οπότε αυτό σήμαινε διπλή εργασία. Έτσι αποφάσισα να δημιουργήσω ένα είδος έξυπνου ημερολογίου τοίχου, το οποίο θα εμφανίζει τις υπενθυμίσεις, τα συμβάντα και άλλα δεδομένα. Δεδομένου ότι έχω διάφορα παλιά ηλεκτρονικά εξαρτήματα, ο στόχος μου ήταν να τα επαναχρησιμοποιήσω όσο το δυνατόν περισσότερο και να φτιάξω το ημερολόγιο με όσο το δυνατόν μικρότερο κόστος.

Σε αυτό το σεμινάριο θα σας δείξω πώς να φτιάξετε ένα έξυπνο ημερολόγιο τοίχου, εμφανίζοντας συμβάντα από διάφορους λογαριασμούς Google. Θα εμφανίσει επίσης την ώρα, την ημερομηνία, τον καιρό, τη θερμοκρασία και μερικές πρόσθετες πληροφορίες. Θα τροφοδοτείται από έναν υπολογιστή Raspberry Pi με έναν προσαρτημένο αισθητήρα κίνησης Passive Infrared Sensor (PIR), έτσι ώστε η οθόνη να ενεργοποιείται, όταν ανιχνεύεται κίνηση στο δωμάτιο, αλλά να σβήνει μετά από λίγα λεπτά αδράνειας. Αυτό το σεμινάριο βασίζεται σε πολλά άλλα σεμινάρια που βρήκα στο διαδίκτυο και θα τους δώσω τους συνδέσμους για καλύτερη κατανόηση. Απαιτούνται κάποιες βασικές γνώσεις προγραμματισμού (HTML, Python,…).

Βήμα 1: Το υλικό

Όπως αναφέρθηκε προηγουμένως, προσπάθησα να επαναχρησιμοποιήσω τόσα πολλά παλιά ηλεκτρονικά εξαρτήματα για να μειώσω το κόστος. Ωστόσο, κάποια αντικείμενα έπρεπε να αγοράσω, οπότε θα απαριθμήσω όλα όσα είναι απαραίτητα για την κατασκευή.

- Ένα κιτ Raspberry Pi. Αρχικά χρησιμοποίησα το παλιό μου μοντέλο 2 από κάποιο άλλο έργο. Λειτούργησε, αλλά η επεξεργασία και η φόρτωση της ιστοσελίδας μου πήρε πολύ χρόνο, οπότε τελικά άλλαξα στο μοντέλο 3, το οποίο λειτουργεί πιο άνετα https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = βατόμουρο+πι+κιτ & _sacat = 0

- Οθόνη LCD. Χρησιμοποίησα την οθόνη από τον παλιό μου φορητό υπολογιστή, οπότε χρειάστηκα μόνο να αγοράσω την πλακέτα οδηγού LVDS για αυτήν και το τροφοδοτικό https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ πρόγραμμα οδήγησης+LVDS+πίνακας & _sacat = 0

Πλαστικό κουτί αποθήκευσης για τα ηλεκτρονικά είδη

- Παθητικός αισθητήρας υπέρυθρης κίνησης

- Αισθητήρας θερμοκρασίας/υγρασίας AM2302

Μαύρο πλαστικό slide-on binder για πλαίσιο LCD

- Διάφορα καλώδια (HDMI, 5,5 mm για ισχύ DC, καλώδια με βραχυκυκλωτήρα χωρίς κόλλα, …)

Βήμα 2: Δημιουργία της οθόνης LCD

Δημιουργία της οθόνης LCD
Δημιουργία της οθόνης LCD
Δημιουργία της οθόνης LCD
Δημιουργία της οθόνης LCD
Δημιουργία της οθόνης LCD
Δημιουργία της οθόνης LCD

Χρησιμοποίησα την οθόνη LCD από τον παλιό ξεπερασμένο φορητό υπολογιστή μου. Υπάρχουν πολλά σεμινάρια για το πώς να το κάνετε αυτό, ακολούθησα αυτό:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

Αποσυναρμολόγησα το κάλυμμα του παλιού μου φορητού υπολογιστή, έβγαλα την οθόνη LCD και μετά παρήγγειλα τη σωστή πλακέτα οδηγού LVDS. Παρέδωσα στον πωλητή τον κωδικό προϊόντος, ο οποίος θα μπορούσε να βρεθεί στην πίσω πλευρά της οθόνης LCD, στην περίπτωσή μου είναι LP171WE3 (TL) (A2) - δείτε την κάτω δεξιά ετικέτα στην τελευταία εικόνα και, στη συνέχεια, μου έστειλε το κατάλληλο LVDS. Λάβετε υπόψη, θα χρειαστείτε επίσης το τροφοδοτικό για την οθόνη, οπότε ζητήστε από τον πωλητή να το στείλει επίσης. Αγόρασα επίσης ένα ωραίο πλαστικό κουτί 14,5 × 7,5 × 2 εκατοστών για να ταιριάζει όμορφα στον πίνακα οδηγού και να το συνδέω στην πίσω πλευρά της οθόνης LCD.

Τώρα η οθόνη LCD έχει μεταλλικό πλαίσιο, το οποίο δεν φαίνεται όμορφο. Αρχικά το έβαψα με σπρέι σε μαύρο χρώμα, αλλά το χρώμα άρχισε να ξεφλουδίζει. Πήρα λοιπόν τέσσερα μαύρα πλαστικά συνδετικά στοιχεία, τα οποία συνήθως χρησιμοποιούνται για τη δέσμευση φύλλων χαρτιού, τα έκοψα ανάλογα και τα στερέωσα για να καλύψω το πλαίσιο. Αυτό φαινόταν καλά, έτσι συνέδεσα όλα τα καλώδια, συνδέσα το HDMI στο παλιό μου Raspberry Pi και Voila - λειτούργησε! Υπήρχε μια εικόνα που εμφανιζόταν στην οθόνη, οπότε ήμουν έτοιμος να προχωρήσω στο επόμενο βήμα - ποιες πληροφορίες να εμφανιστούν στην οθόνη και πώς να τις δείξουμε.

Βήμα 3: Ρύθμιση του Λογισμικού

Όταν έψαχνα στο διαδίκτυο για κάποιες ενδείξεις, πώς να φτιάξω ημερολόγιο, εμπνεύστηκα από αυτήν τη σελίδα https://dakboard.com/site. Παρέχουν το τελικό προϊόν (την οθόνη, τον υπολογιστή και το λογισμικό εργασίας), αλλά έχουν επίσης ένα εξαιρετικό σεμινάριο για λύση DIY (https://blog.dakboard.com/diy-wall-display/). Σας συνιστώ να ακολουθήσετε αυτό το σεμινάριο, τουλάχιστον για το πρώτο μέρος με τις οδηγίες για την προετοιμασία και τη ρύθμιση του συστήματος στο Raspberry, έτσι ώστε το πρόγραμμα περιήγησης να φορτώνει αυτόματα την επιθυμητή ιστοσελίδα κατά την εκκίνηση.

Αυτό λειτούργησε όμορφα, ωστόσο έψαχνα για κάποια λύση, η οποία θα μπορούσε να προσαρμοστεί περισσότερο σύμφωνα με τις επιθυμίες μου. Αποφάσισα να δημιουργήσω τον δικό μου διακομιστή ιστού και να δημιουργήσω μια ιστοσελίδα, η οποία θα εμφανίζει επιπλέον πληροφορίες εκτός από το ημερολόγιο. Επέλεξα το Wordpress.org, αφού είναι καλά τεκμηριωμένο και έχει καλή υποστήριξη και μεγάλη κοινότητα για να σας βοηθήσει. Ακολουθεί το σεμινάριο για τον τρόπο εγκατάστασης του Wordpress στο Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Με το Wordpress εγκατεστημένο, ήρθε η ώρα να σχεδιάσω την αρχική μου σελίδα. Μπορείτε να χρησιμοποιήσετε ένα από τα πολλά παρεχόμενα θέματα ή να σχεδιάσετε από την αρχή. Ούτως ή άλλως, χρειάζεται κάποια γνώση προγραμματισμού HTML για αυτό.

Έχω σχεδιάσει τη σελίδα μου, έτσι ώστε στην αριστερή πλευρά να εμφανίζεται το ημερολόγιο (https://sl.wordpress.org/plugins/google-calendar-events/), ενώ στη δεξιά πλευρά εμφανίζεται η ώρα και η ημερομηνία (https://www.timeanddate.com/clocks/free.html και https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Η πρόγνωση του καιρού προέρχεται από αυτήν τη σελίδα (https://www.1a-vreme.si/vremensko-okno/), η οποία παρέχει widget πρόβλεψης για τις πόλεις της Σλοβενίας, αλλά υποθέτω ότι widget για άλλες χώρες θα μπορούσαν να βρεθούν και στο διαδίκτυο. Η θερμοκρασία συλλέγεται χρησιμοποιώντας αισθητήρα AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), όπως εξηγείται στο τέλος αυτού του κεφαλαίου. Στο κάτω μέρος υπάρχει ένας απλός ημερήσιος χρονόμετρο αντίστροφης μέτρησης, ο οποίος εμφανίζει πόσες ημέρες απομένουν για κάποια εκδήλωση (ενδιαφέρον να γνωρίζουν τα παιδιά μου, πόσες ημέρες θα πρέπει να περιμένουν για κάτι). Στην επάνω δεξιά άκρη βρίσκεται το πρόσθετο MetaSlider (https://wordpress.org/plugins/ml-slider/), το οποίο ολισθαίνει τυχαία σε επιλεγμένες εικόνες της οικογένειάς μου. Επιπλέον, χρησιμοποίησα την προσθήκη Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) για να μου δείξει μια τυχαία εικόνα για πιο ωραίο φόντο.

Όπως αναφέρθηκε προηγουμένως, η εσωτερική θερμοκρασία συλλέγεται χρησιμοποιώντας αισθητήρα AM2302. Υπάρχουν πολλά σεμινάρια για το πώς να πάρει τη θερμοκρασία, ακολούθησα αυτό: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Αργότερα μετέφερα αυτόν τον αισθητήρα σε άλλο Raspberry Pi με το Home Assistant να λειτουργεί, επειδή είναι ευκολότερο να διαβάσετε και να δημοσιεύσετε τιμές χρησιμοποιώντας το στοιχείο DHT Sensor (https://www.home-assistant.io/components/sensor.dht/) Το Το Home Assistant μπορεί επίσης να συλλέγει εξωτερική θερμοκρασία χρησιμοποιώντας διάφορα στοιχεία καιρού, χρησιμοποίησα το στοιχείο YR.no (https://www.home-assistant.io/components/sensor.yr/). Με αυτό, έγραψα ένα σενάριο αυτοματισμού για να συγκεντρώσω εσωτερική/εξωτερική θερμοκρασία από αυτά τα στοιχεία και να τα γράψω σε ένα αρχείο κειμένου, το οποίο στη συνέχεια εμφανίζεται στο ημερολόγιο τοίχου μου. Για περισσότερες πληροφορίες σχετικά με το Home Assistant, ανατρέξτε στην αρχική σελίδα (https://www.home-assistant.io/).

Βήμα 4: Προαιρετικό - Απενεργοποίηση της οθόνης

Τώρα έχουμε ρυθμίσει και λειτουργεί το ημερολόγιό μας, όπως ακριβώς μας αρέσει. Αλλά δεν θέλουμε η οθόνη να είναι ενεργοποιημένη 24/7. Το θέλουμε μόνο όταν κάποιος είναι σπίτι. Επίσης, δεν θέλουμε να είναι ενεργοποιημένο στη μέση της νύχτας, όταν πηγαίνουμε στην τουαλέτα, είναι πολύ φωτεινό! Έτσι, θα επισυνάψουμε έναν υπέρυθρο αισθητήρα για να παρατηρήσουμε, όταν κάποιος στέκεται μπροστά του και θα προσθέσουμε κάποια χρονικά όρια, όταν πρέπει να ενεργοποιηθεί.

Λάβετε υπόψη ότι οι δεξιότητές μου προγραμματισμού είναι μάλλον περιορισμένες, επομένως τα παρακάτω δεν θα μπορούσαν να είναι τα βέλτιστα, αφού το έχω επιλέξει από διάφορα online φόρουμ και μαθήματα, αλλά ουσιαστικά λειτουργεί. Ωστόσο, κάθε σύσταση είναι ακόμα ευπρόσδεκτη. Αρχικά θα ξεκινήσουμε με τη δοκιμή για να ενεργοποιήσετε/απενεργοποιήσετε την οθόνη χειροκίνητα. Για αυτό, θα δημιουργήσουμε δύο αρχεία (για παράδειγμα monitor_on.sh και monitor_off.sh) και θα γράψουμε κάποιο κώδικα σε αυτό. Ο ευκολότερος τρόπος για να γίνει αυτό είναι να συνδεθείτε στο Raspberry σας χρησιμοποιώντας SSH και πληκτρολογήστε

sudo nano monitor_on.sh

και πληκτρολογήστε τον ακόλουθο κώδικα

tvservice -προτιμώμενη

startx/usr/bin/graphical_launcher `fgconsole`

Πατήστε CTRL+X για αποθήκευση και έξοδο και, στη συνέχεια, δημιουργήστε το δεύτερο αρχείο

sudo nano monitor_off.sh

και πληκτρολογήστε τον ακόλουθο κώδικα

tvservice -off?

Και πάλι, πατήστε CTRL+X για αποθήκευση και έξοδο. Κάντε εκτελέσιμα αυτά τα πρόσφατα δημιουργημένα αρχεία:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

Τώρα για να δοκιμάσετε αν λειτουργούν αυτές οι εντολές, πληκτρολογήστε

sudo./monitor_off.sh

sudo./monitor_on.sh

Η οθόνη θα πρέπει τώρα να απενεργοποιηθεί και να ανάψει ανάλογα. Παρατήρησα ότι στο Raspberry Pi 2 χρειάστηκαν σχεδόν 10 δευτερόλεπτα για να ενεργοποιηθεί η οθόνη. Στο Raspberry Pi 3 διαρκεί 1-2 δευτερόλεπτα. Στη συνέχεια θα συνδέσουμε έναν υπέρυθρο αισθητήρα, ο οποίος θα ενεργοποιήσει αυτά τα σενάρια. Και πάλι, υπάρχουν πολλά σεμινάρια για τη ρύθμιση του Raspberry Pi και του PIR, ακολούθησα αυτό: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Βασικά, δημιουργήστε ένα αρχείο χρησιμοποιώντας τον επεξεργαστή nano (για παράδειγμα motion_sensor.py) και πληκτρολογήστε τον κατάλληλο κώδικα Python σε αυτό. Παρακάτω είναι το παράδειγμα του αρχείου μου:

εισαγωγή RPi. GPIO ως GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIOt =_ time.time () SHUTOFF_DELAY = 180 # δευτ SHUTOFF_DELAY): εκτύπωση "No intruders", iturned_off = Truetime.sleep (1) subprocess.call (['/home/pi/monitor_off.sh'], shell = True) elif i == 1: #Όταν εξέρχεται από αισθητήρα κίνησης είναι Υ HIGHΗΛΗ, ενεργοποιήστε την οθόνη ONprint "Εντοπίστηκε εισβολέας", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () εάν turn_off και dt.datetime.now (). ώρα> 5 και dt.datetime. τώρα (). ώρα <23: turn_off = Falsesubprocess.call (['/home/pi/monitor_on.sh'], shell = True) εάν _name_ == '_main _': try: main () εκτός KeyboardIntrupt: GPIO.cleanup ()

Σημειώστε ότι "GPIO.setup (17, GPIO. IN)" υποδεικνύει ότι η ακίδα εξόδου από το PIR είναι συνδεδεμένη με την ακίδα 17 στο Raspberry Pi. Ποια καρφίτσα εξαρτάται από το αν ορίζετε το GPIO.setmode (GPIO. BOARD) ή το GPIO.setmode (GPIO. BCM). Η διαφορά εξηγείται εδώ: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Έχω # μπροστά από το GPIO. BOARD, οπότε αγνοείται και χρησιμοποιείται το GPIO. BCM.

Προσέξτε τη γραμμή

SHUTOFF_DELAY = 180 #δευτερόλεπτα

Εδώ αναφέρεται, πόσος χρόνος είναι ενεργοποιημένη η οθόνη από την ανίχνευση της τελευταίας κίνησης, πριν απενεργοποιηθεί. Αυτό είναι χρήσιμο επειδή δεν θέλω να απενεργοποιείται/ενεργοποιείται συνεχώς η οθόνη όταν την περνάω, αλλά θέλω να την κρατάω ενεργοποιημένη για κάποιο χρονικό διάστημα, πριν είναι απενεργοποιημένη. Έχω επιλέξει το διάστημα των 180 δευτερολέπτων, έτσι ώστε η οθόνη να απενεργοποιείται περίπου 3 λεπτά μετά την ανίχνευση της τελευταίας κίνησης.

Τέλος, αυτή η γραμμή

εάν turn_off και dt.datetime.now (). ώρα> 6 και dt.datetime.now (). ώρα <23:

δηλώνει ότι η οθόνη ενεργοποιείται μόνο μεταξύ 6:00 και 23:00, οπότε δεν με ενοχλεί κατά τη διάρκεια της νύχτας. Οι γραμμές

εκτύπωση "Χωρίς εισβολείς", δηλ

και

εκτύπωση "Εντοπίστηκε εισβολέας", δηλ

προορίζονται μόνο για δοκιμή του σεναρίου, μπορείτε να τα διαγράψετε αργότερα, όταν το έχετε σε λειτουργία. Τώρα δοκιμάστε το σενάριο:

sudo python motion_sensor.py

Θα πρέπει να δείτε τα μηνύματα "Εντοπίστηκε εισβολέας", εάν κουνήσετε πάνω από τον αισθητήρα, διαφορετικά θα είναι "Χωρίς εισβολείς". Όταν αυτό το σενάριο είναι δοκιμασμένο και λειτουργεί, ρυθμίστε το να ξεκινά κατά την εκκίνηση:

sudo nano ~/.config/lxsession/LXDE-pi/autostart

και προσθέστε την ακόλουθη γραμμή

@sudo/usr/bin/python /home/pi/motion_sensor.py

Φυσικά, πρέπει να καθορίσετε το σωστό όνομα αρχείου του σεναρίου Python που δημιουργήσατε.

Βήμα 5: Κρεμάστε το ημερολόγιο

Με όλα έτοιμα, ήρθε η ώρα να κρεμάσετε το ημερολόγιο στον τοίχο!

Αρχικά σκεφτόμουν να κρύψω το Raspberry Pi πίσω από την οθόνη LCD, έτσι ώστε να χρειαστεί μόνο ένα καλώδιο (ισχύ DC). Αλλά επειδή το Raspberry λειτουργεί με 5V και η οθόνη LCD λειτουργεί με 12V, θα χρειαζόμουν επιπλέον μετασχηματιστή. Επίσης, η θήκη Raspberry είναι μάλλον παχιά, πράγμα που σημαίνει ότι η οθόνη LCD θα απέχει περίπου 3 εκατοστά από τον τοίχο. Έτσι εγκατέλειψα αυτό και άφησα μόνο τα ηλεκτρονικά LCD πίσω από την οθόνη LCD, έτσι ώστε να είναι τώρα λιγότερο από 1 εκατοστό μακριά από τον τοίχο. Απέκτησα δύο καλώδια μήκους 5 μέτρων, ένα HDMI και ένα 5, 5 mm για τροφοδοσία DC. Και τα δύο καλώδια είναι λευκά, όπως ο τοίχος, πράγμα που σημαίνει ότι δεν ξεχωρίζουν πολύ. Τοποθέτησα την LCD στον τοίχο και έβαλα το Raspberry πάνω από το ψυγείο στον απέναντι τοίχο, οπότε είναι βασικά κρυμμένο, αλλά ακόμα εύκολα προσβάσιμο.

Συνιστάται: