Sommario:

Calendario da parete intelligente: 5 passaggi
Calendario da parete intelligente: 5 passaggi

Video: Calendario da parete intelligente: 5 passaggi

Video: Calendario da parete intelligente: 5 passaggi
Video: Calendari da parete 2024, Luglio
Anonim
Calendario da parete intelligente
Calendario da parete intelligente

Mia moglie ed io avevamo un classico calendario da parete di carta, su cui segnavamo le date importanti. Utilizziamo anche il calendario di Google sui nostri smartphone per contrassegnare gli eventi, quindi questo significava un doppio lavoro. Quindi ho deciso di creare una sorta di calendario da parete intelligente, che mostrerà i nostri promemoria, eventi e altri dati. Dato che ho varie vecchie parti elettroniche in giro, il mio obiettivo era riutilizzarle il più possibile e costruire il calendario con il minor costo possibile.

In questo tutorial ti mostrerò come creare un calendario da parete intelligente, visualizzando eventi da diversi account Google. Visualizzerà anche l'ora, la data, il meteo, la temperatura e alcune informazioni aggiuntive. Sarà alimentato da un computer Raspberry Pi con un sensore di movimento Passive Infrared Sensor (PIR) collegato, in modo che il display si accenda, quando viene rilevato un movimento nella stanza, ma si spenga dopo pochi minuti di inattività. Questo tutorial si basa su molti altri tutorial che ho trovato su Internet e fornirò i collegamenti ad essi per una migliore comprensione. Sono necessarie alcune conoscenze di programmazione di base (HTML, Python, …).

Passaggio 1: l'hardware

Come accennato in precedenza, ho cercato di riutilizzare il maggior numero di vecchie parti elettroniche per contenere i costi. Tuttavia alcuni oggetti li ho dovuti acquistare, quindi elencherò tutto ciò che è necessario per la costruzione.

- Un kit Raspberry Pi. Inizialmente ho usato il mio vecchio modello 2 da qualche altro progetto. Ha funzionato, ma la modifica e il ricaricamento della pagina Web mi ha richiesto molto tempo, quindi alla fine sono passato al modello 3, che funziona in modo più fluido

- Schermo a cristalli liquidi. Ho usato lo schermo del mio vecchio laptop, quindi avevo solo bisogno di acquistare la scheda driver LVDS e l'alimentatore https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ driver+LVDS+scheda&_sacat=0

- Scatola portaoggetti in plastica per l'elettronica

- Sensore di movimento a infrarossi passivo

- Sensore di temperatura/umidità AM2302

- Raccoglitore scorrevole in plastica nera per cornice LCD

- Vari cavi (HDMI, 5,5 mm per alimentazione CC, cavi jumper breadboard senza saldatura, …)

Passaggio 2: creazione del display LCD

Creazione del display LCD
Creazione del display LCD
Creazione del display LCD
Creazione del display LCD
Creazione del display LCD
Creazione del display LCD

Ho usato lo schermo LCD del mio vecchio laptop obsoleto. Ci sono diversi tutorial su come farlo, ho seguito questo:

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

Ho smontato la cover del mio vecchio laptop, ho estratto il display LCD e poi ho ordinato la scheda driver LVDS corretta. Ho fornito al venditore il codice del prodotto, che si trova sul retro dell'LCD, nel mio caso è LP171WE3 (TL)(A2) - vedere l'etichetta in basso a destra nell'ultima immagine, e poi mi ha inviato l'LVDS appropriato. Tieni presente che avrai anche bisogno dell'alimentatore per il display, quindi chiedi al venditore di inviarlo anche tu. Ho anche acquistato una bella scatola di plastica da 14,5 × 7,5 × 2 cm per adattarla perfettamente alla scheda del driver e attaccarla al lato posteriore dell'LCD.

Ora il display LCD ha una cornice metallica, che non sembra carina. Inizialmente l'ho verniciato a spruzzo di nero, ma la vernice ha iniziato a staccarsi. Quindi ho preso quattro raccoglitori a scorrimento in plastica nera, che vengono generalmente utilizzati per rilegare fogli di carta, li ho ritagliati di conseguenza e li ho attaccati per coprire il telaio. Sembrava a posto, quindi ho collegato tutti i cavi, collegato HDMI al mio vecchio Raspberry Pi e Voila: ha funzionato! C'era un'immagine mostrata sul display, quindi ero pronto per passare al passaggio successivo: quali informazioni mostrare sul display e come mostrarle.

Passaggio 3: configurazione del software

Quando stavo cercando su Internet alcuni indizi su come costruire un calendario, mi sono ispirato a questa pagina https://dakboard.com/site. Forniscono il prodotto finito (il display, il computer e il software funzionante), ma hanno anche un eccellente tutorial per la soluzione fai-da-te (https://blog.dakboard.com/diy-wall-display/). Ti consiglio di seguire questo tutorial, almeno per la prima parte con le istruzioni su come preparare e configurare il sistema su Raspberry, in modo che il browser carichi automaticamente la pagina web desiderata all'avvio.

Ha funzionato bene, tuttavia stavo cercando una soluzione che potesse essere più personalizzata secondo i miei desideri. Ho deciso di configurare il mio server web e creare una pagina web, che mostrerà informazioni aggiuntive oltre al calendario. Ho scelto Wordpress.org, poiché è ben documentato e ha un buon supporto e una vasta comunità per aiutarti. Ecco il tutorial su come installare Wordpress su Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Con Wordpress installato, era il momento di progettare la mia homepage. Puoi utilizzare uno dei tanti temi forniti o progettare da zero. Ad ogni modo, per questo è necessaria una certa conoscenza della programmazione HTML.

Ho disegnato la mia pagina, in modo che sul lato sinistro sia mostrato il calendario (https://sl.wordpress.org/plugins/google-calendar-events/), mentre sul lato destro siano mostrati l'ora e la data (https://sl.wordpress.org/plugins/google-calendar-events/)://www.timeanddate.com/clocks/free.html e https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Le previsioni del tempo provengono da questa pagina (https://www.1a-vreme.si/vremensko-okno/), che fornisce widget di previsioni per le città slovene, ma immagino che su Internet si possano trovare anche widget per altri paesi. La temperatura viene rilevata utilizzando il sensore AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), come spiegato alla fine di questo capitolo. In basso c'è un semplice conto alla rovescia giornaliero, che mostra quanti giorni mancano a qualche evento (interessante per i miei figli sapere, quanti giorni dovranno aspettare per qualcosa). In alto a destra c'è il plug-in MetaSlider (https://wordpress.org/plugins/ml-slider/), che scorre casualmente sulle immagini selezionate della mia famiglia. Inoltre ho usato il plugin Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) per mostrarmi un'immagine casuale per uno sfondo migliore.

Come accennato in precedenza, la temperatura interna viene rilevata utilizzando il sensore AM2302. Ci sono molti tutorial su come ottenere la temperatura, io ho seguito questo: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Successivamente ho spostato questo sensore su un altro Raspberry Pi con Home Assistant in esecuzione, perché è più facile leggere e pubblicare valori utilizzando il suo componente DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant può anche raccogliere la temperatura esterna utilizzando vari componenti meteorologici, io ho usato il componente YR.no (https://www.home-assistant.io/components/sensor.yr/). Con ciò, ho scritto uno script di automazione per raccogliere la temperatura interna/esterna da questi componenti e scriverli in un file di testo, che viene quindi visualizzato sul mio calendario da parete. Per ulteriori informazioni su Home Assistant, consultare la home page (https://www.home-assistant.io/).

Passaggio 4: Opzionale - Spegnimento del display

Ora abbiamo il nostro calendario impostato e funzionante, proprio come piace a noi. Ma non vogliamo che il display sia acceso 24 ore su 24, 7 giorni su 7. Lo vogliamo solo quando c'è qualcuno a casa. Inoltre non vogliamo che si accenda nel cuore della notte, quando andiamo in bagno, è troppo luminoso! Quindi collegheremo un sensore a infrarossi per notare, quando qualcuno è in piedi davanti ad esso, e aggiungeremo alcuni limiti di tempo, quando dovrebbe accendersi.

Tieni presente che le mie capacità di programmazione sono piuttosto limitate, quindi quanto segue potrebbe non essere ottimale, dal momento che l'ho scelto da vari forum e tutorial online, ma essenzialmente funziona. Tuttavia, qualsiasi raccomandazione è ancora benvenuta. Per prima cosa inizieremo con il test per accendere/spegnere il monitor manualmente. Per questo, creeremo due file (ad esempio monitor_on.sh e monitor_off.sh) e ci scriveremo del codice. Il modo più semplice per farlo è accedere al tuo Raspberry usando SSH e digitare

sudo nano monitor_on.sh

e digita il seguente codice

tvservice --preferito;

startx /usr/bin/graphic_launcher `fgconsole`

Premi CTRL+X per salvare ed uscire, quindi crea il secondo file

sudo nano monitor_off.sh

e digita il seguente codice

tvservice --off;

Ancora una volta, premi CTRL+X per salvare ed uscire. Rendi eseguibili questi file appena creati:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

Ora per provare se questi comandi funzionano, digita

sudo./monitor_off.sh

sudo./monitor_on.sh

Il monitor dovrebbe ora spegnersi e accendersi di conseguenza. Ho notato che su Raspberry Pi 2 ci sono voluti quasi 10 secondi per accendere il monitor. Su Raspberry Pi 3 ci vogliono 1-2 secondi. Successivamente collegheremo un sensore a infrarossi, che attiverà questi script. Ancora una volta, ci sono molti tutorial su come configurare Raspberry Pi e PIR, ho seguito questo: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Fondamentalmente, crea un file usando l'editor nano (ad esempio motion_sensor.py) e digita il codice Python appropriato al suo interno. Di seguito è riportato l'esempio del mio file:

import RPi. GPIO as 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 # secondiwhile True:i=GPIO.input(17)if i==0: #Quando l'output del sensore di movimento è BASSO, spegne il monitor se non viene spento e time.time() > (last_motion_time + SHUTOFF_DELAY):print "No intruders", iturned_off = Truetime.sleep(1)subprocess.call(['/home/pi/monitor_off.sh'], shell=True)elif i==1: #Quando viene emesso dal sensore di movimento è ALTO, accendi il monitor su ONprint "Rilevato intruso", itime.sleep(1)last_motion_time = time.time()sys.stdout.flush()if turn_off e dt.datetime.now().hour > 5 e dt.datetime. now().hour < 23:turned_off = Falsesubprocess.call(['/home/pi/monitor_on.sh'], shell=True)if _name_ == '_main_':try:main() tranne KeyboardInterrupt:GPIO.cleanup ()

Si noti che "GPIO.setup(17, GPIO. IN)" indica che il pin di uscita da PIR è collegato al pin 17 su Raspberry Pi. Quale pin dipende dalla definizione di GPIO.setmode (GPIO. BOARD) o GPIO.setmode (GPIO. BCM). La differenza è spiegata qui: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Ho # davanti a GPIO. BOARD, quindi viene ignorato e viene utilizzato GPIO. BCM.

Notare la linea

SHUTOFF_DELAY = 180 #secondi

Qui viene indicato per quanto tempo il monitor è rimasto acceso dall'ultimo movimento rilevato, prima che venga spento. Questo è utile perché non voglio che il monitor si spenga / si accenda costantemente quando ci passo vicino, ma voglio tenerlo acceso per un po' di tempo, prima che si spenga. Ho scelto l'intervallo di 180 secondi, in modo che il monitor si spenga circa 3 minuti dopo che è stato rilevato l'ultimo movimento.

Infine, questa linea

se turn_off e dt.datetime.now().hour > 6 e dt.datetime.now().hour < 23:

afferma che il monitor si accende solo tra le 6:00 e le 23:00, quindi non mi disturba durante la notte. Le linee

stampa "Nessun intruso", i

e

print "Intruso rilevato", i

servono solo per testare lo script, puoi eliminarli in un secondo momento, quando lo farai funzionare. Ora prova lo script:

sudo python motion_sensor.py

Dovresti vedere i messaggi "Rilevato intruso", se muovi la mano sopra il sensore, altrimenti sarà "Nessun intruso". Quando questo script viene testato e funziona, impostalo per l'avvio all'avvio:

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

e aggiungi la seguente riga

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

Ovviamente devi specificare il nome file corretto dello script Python che hai creato.

Passaggio 5: appendi il calendario

Con tutto pronto, è ora di appendere il calendario al muro!

Inizialmente stavo pensando di nascondere Raspberry Pi dietro il display LCD, in modo che fosse necessario un solo cavo (alimentazione CC). Ma poiché Raspberry funziona a 5V e il display LCD funziona a 12V, avrei bisogno di un trasformatore aggiuntivo. Inoltre, il case Raspberry è piuttosto spesso, il che significa che l'LCD sarebbe distanziato di circa 3 centimetri dal muro. Quindi ho abbandonato questo e ho lasciato solo l'elettronica LCD dietro l'LCD, in modo che ora sia a meno di 1 centimetro dal muro. Ho acquistato due cavi lunghi 5 metri, uno HDMI e uno da 5, 5 mm per l'alimentazione DC. Entrambi i cavi sono bianchi, come il muro, il che significa che non risaltano molto. Ho montato l'LCD sulla parete e ho messo Raspberry sopra il frigorifero sulla parete opposta, quindi è praticamente nascosto, ma comunque facilmente accessibile.

Consigliato: