Taula de continguts:

Calendari Smart Wall: 5 passos
Calendari Smart Wall: 5 passos

Vídeo: Calendari Smart Wall: 5 passos

Vídeo: Calendari Smart Wall: 5 passos
Vídeo: Skmei 1888 digital watch with step counter. Can the battery be replaced? #skmei #gedmislaguna 2024, Desembre
Anonim
Smart Wall Calendar
Smart Wall Calendar

La meva dona i jo solíem tenir un clàssic calendari de paret de paper, en què marcàvem dates importants. També fem servir el calendari de Google als nostres telèfons intel·ligents per marcar esdeveniments, de manera que això va suposar un doble treball. Així que vaig decidir crear una mena de calendari de paret intel·ligent, que mostrarà els nostres recordatoris, esdeveniments i algunes altres dades. Com que tinc diverses peces electròniques antigues, el meu objectiu era reutilitzar-les el màxim possible i construir el calendari amb el menor cost possible.

En aquest tutorial us mostraré com crear un calendari de paret intel·ligent, mostrant esdeveniments de diversos comptes de Google. També mostrarà l’hora, la data, el temps, la temperatura i alguna informació addicional. Serà alimentat per un ordinador Raspberry Pi amb un sensor de moviment del sensor d’infraroig passiu (PIR) connectat, de manera que la pantalla s’encengui quan es detecti moviment a l’habitació, però s’apagui després d’uns quants minuts d’inactivitat. Aquest tutorial es basa en altres tutorials que he trobat a Internet i els donaré els enllaços per a una millor comprensió. Es necessiten alguns coneixements bàsics de programació (HTML, Python, …).

Pas 1: el maquinari

Com es va esmentar abans, vaig intentar reutilitzar tantes peces electròniques antigues per reduir els costos. Tot i això, he hagut de comprar alguns articles, així que enumeraré tot el necessari per a la construcció.

- Un kit Raspberry Pi. Inicialment vaig utilitzar el meu vell model 2 d'algun altre projecte. Va funcionar, però l’edició i la recàrrega de la pàgina web em van portar molt de temps, de manera que finalment vaig canviar al model 3, que funciona amb més fluïdesa https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = raspberry + pi + kit & _sacat = 0

- Pantalla LCD. Vaig fer servir la pantalla del meu antic portàtil, de manera que només calia comprar la placa de controladors LVDS i la font d'alimentació https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ controlador + LVDS + placa & _sacat = 0

- Caixa d’emmagatzematge de plàstic per a l’electrònica

- Sensor de moviment infraroig passiu

- Sensor de temperatura / humitat AM2302

- Enquadernador lliscant de plàstic negre per a marc LCD

- Diversos cables (HDMI, 5,5 mm per a corrent continu, cables de pont sense soldadura, …)

Pas 2: creació de la pantalla LCD

Creació de la pantalla LCD
Creació de la pantalla LCD
Creació de la pantalla LCD
Creació de la pantalla LCD
Creació de la pantalla LCD
Creació de la pantalla LCD

Vaig utilitzar la pantalla LCD del meu antic ordinador portàtil obsolet. Hi ha diversos tutorials sobre com fer-ho, he seguit aquest:

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

Vaig desmuntar la tapa del meu antic portàtil, vaig treure la pantalla LCD i després vaig demanar la placa de control LVDS correcta. Vaig proporcionar al venedor el codi del producte, que es podia trobar a la part posterior de la pantalla LCD, en el meu cas és LP171WE3 (TL) (A2). Consulteu l’etiqueta inferior dreta a la darrera imatge i em va enviar el LVDS adequat. Tingueu en compte que també necessiteu la font d'alimentació de la pantalla, així que demaneu al venedor que també l'enviï. També he comprat una bonica caixa de plàstic de 14,5 × 7,5 × 2 cm per adaptar-la bé a la placa del controlador i connectar-la a la part posterior de la pantalla LCD.

Ara, la pantalla LCD té un marc metàl·lic, que no sembla bonic. Inicialment, el vaig pintar amb esprai en negre, però la pintura va començar a desprendre’s. Així que vaig agafar quatre carpetes de plàstic negres, que normalment s’utilitzen per enquadernar fulls de paper, els vaig retallar en conseqüència i els vaig fixar per cobrir el marc. Això semblava bé, així que vaig connectar tots els cables, vaig connectar HDMI al meu vell Raspberry Pi i Voila. Va funcionar. Hi havia una imatge que es mostra a la pantalla, de manera que estava preparat per passar al següent pas: quina informació mostraria a la pantalla i com mostrar-la.

Pas 3: Configuració del programari

Quan buscava per Internet algunes pistes sobre com construir el calendari, em va inspirar aquesta pàgina https://dakboard.com/site. Proporcionen el producte acabat (pantalla, ordinador i programari de treball), però també tenen un excel·lent tutorial per a la solució de bricolatge (https://blog.dakboard.com/diy-wall-display/). Us recomano que seguiu aquest tutorial, almenys per a la primera part, amb les instruccions per preparar i configurar el sistema a Raspberry, de manera que el navegador carregui automàticament la pàgina web desitjada a l’arrencada.

Això va funcionar molt bé, però buscava alguna solució que pogués ser més personalitzada segons els meus desitjos. He decidit configurar el meu propi servidor web i crear una pàgina web que mostrarà informació addicional a més del calendari. He triat Wordpress.org, ja que està ben documentat i compta amb un bon suport i una gran comunitat per ajudar-vos. Aquí teniu el tutorial sobre com instal·lar Wordpress a Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Amb Wordpress instal·lat, era el moment de dissenyar la meva pàgina d'inici. Podeu utilitzar un dels molts temes proporcionats o dissenyar-los des de zero. De tota manera, per a això calen alguns coneixements de programació HTML.

He dissenyat la meva pàgina de manera que es mostri el calendari a la part esquerra (https://sl.wordpress.org/plugins/google-calendar-events/), mentre que a la part dreta es mostri l’hora i la data (https://www.timeanddate.com/clocks/free.html i https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). La previsió meteorològica és d’aquesta pàgina (https://www.1a-vreme.si/vremensko-okno/), que proporciona widgets de previsió per a ciutats eslovenes, però suposo que també es poden trobar ginys per a altres països a Internet. La temperatura es recull mitjançant el sensor AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), tal com s’explica al final d’aquest capítol. A la part inferior hi ha un senzill temporitzador de compte enrere diari, que mostra quants dies queden per a algun esdeveniment (és interessant que els meus fills ho sàpiguen, quants dies hauran d’esperar alguna cosa). A l'extrem superior dret hi ha el connector MetaSlider (https://wordpress.org/plugins/ml-slider/), que es llisca a l'atzar a les imatges seleccionades de la meva família. A més, he utilitzat el connector Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) per mostrar-me una imatge aleatòria per obtenir un fons més agradable.

Com s’ha esmentat anteriorment, la temperatura interior es recull mitjançant el sensor AM2302. Hi ha molts tutorials sobre com obtenir temperatura, el vaig seguir: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Més tard, vaig moure aquest sensor a un altre Raspberry Pi amb Home Assistant executat, perquè és més fàcil llegir i publicar valors mitjançant el component DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant també pot recollir la temperatura exterior mitjançant diversos components meteorològics, he utilitzat el component YR.no (https://www.home-assistant.io/components/sensor.yr/). Amb això, vaig escriure un script d’automatització per recollir la temperatura interior / exterior d’aquests components i escriure’ls en un fitxer de text, que després es mostra al meu calendari de paret. Per obtenir més informació sobre Home Assistant, consulteu la pàgina d'inici (https://www.home-assistant.io/).

Pas 4: opcional: apagar la pantalla

Ara tenim el calendari configurat i funcionant, tal com ens agrada. Però no volem que la pantalla s’encengui les 24 hores del dia, els 7 dies de la setmana. Només volem que s’activi quan algú és a casa. Tampoc volem que s’encengui a mitja nit, quan anem al lavabo, és massa brillant! Per tant, adjuntarem un sensor d’infrarojos per notar-lo quan hi haurà algú al davant i afegirem uns límits de temps quan hauria d’encendre’s.

Tingueu en compte que les meves habilitats de programació són bastant limitades, de manera que el següent no podria ser òptim, ja que l’he triat de diversos fòrums i tutorials en línia, però bàsicament funciona. Tot i això, encara es recomana qualsevol recomanació. Primer començarem amb la prova per activar / desactivar el monitor manualment. Per a això, crearem dos fitxers (per exemple, monitor_on.sh i monitor_off.sh) i hi escriurem un codi. La forma més senzilla de fer-ho és iniciar sessió al vostre gerd mitjançant SSH i escriure

sudo nano monitor_on.sh

i escriviu el codi següent

tvservice --prefered;

startx / usr / bin / graphical_launcher `fgconsole`

Premeu CTRL + X per desar i sortir i, a continuació, creeu el segon fitxer

sudo nano monitor_off.sh

i escriviu el codi següent

tvservice --off;

De nou, premeu CTRL + X per desar i sortir. Feu executables aquests fitxers de nova creació:

sudo chmod + x monitor_on.sh

sudo chmod + x monitor_off.sh

Ara per provar si aquestes ordres funcionen, escriviu

sudo./monitor_off.sh

sudo./monitor_on.sh

Ara el monitor s’ha d’apagar i encendre en conseqüència. M’he adonat que a Raspberry Pi 2 van trigar gairebé 10 segons a encendre el monitor. A Raspberry Pi 3 triga 1-2 segons. A continuació, connectarem un sensor d'infrarojos que activarà aquests scripts. Una vegada més, hi ha molts tutorials sobre com configurar Raspberry Pi i PIR; he seguit aquest: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Bàsicament, creeu un fitxer amb l'ús de nano editor (per exemple, motion_sensor.py) i escriviu-hi el codi Python adequat. A continuació es mostra l'exemple del meu fitxer:

importar RPi. GPIO com a GPIO importar importar subprocés sysimport importar data com a dtimport osGPIO.setwarnings (fals) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = Falselast_motion_time time.time () SHUTOFF_DELAY = 180 # segons mentre que True: i = GPIO.input (17) si i == 0: # Quan la sortida del sensor de moviment és BAIXA, apagueu el monitor si no s’apaga i time.time ()> (last_motion_time + SHUTOFF_DELAY): imprimeix "Sense intrusos", iturned_off = Truetime.sleep (1) subprocess.call (['/ home / pi / monitor_off.sh'], shell = True) elif i == 1: #When output from motion sensor és ALTA, activeu el monitor ONprint "Intrus detectat", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () if Turn_off and dt.datetime.now (). hour> 5 and dt.datetime. ara (). hora <23: Turn_off = Falsesubprocess.call (['/ home / pi / monitor_on.sh'], shell = True) si _name_ == '_main _': proveu: main () excepte KeyboardInterrupt: GPIO.cleanup ()

Tingueu en compte que "GPIO.setup (17, GPIO. IN)" indica que el pin de sortida del PIR està connectat al pin 17 del Raspberry Pi. Quin pin depèn de si definiu GPIO.setmode (GPIO. BOARD) o GPIO.setmode (GPIO. BCM). La diferència s’explica aquí: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Tinc # davant de GPIO. BOARD, de manera que s’ignora i s’utilitza GPIO. BCM.

Fixeu-vos en la línia

SHUTOFF_DELAY = 180 # segons

Aquí s'indica, quant de temps s'encén el monitor des que s'ha detectat l'últim moviment, abans que s'apagui. Això és útil perquè no vull que el monitor s’encengui / s’encengui constantment quan hi passo, sinó que vull mantenir-lo encès durant algun temps, abans que s’apagui. He escollit l’interval de 180 segons perquè el monitor s’apagui uns 3 minuts després de detectar l’últim moviment.

Finalment, aquesta línia

si estan apagats i dt.datetime.now (). hora> 6 i dt.datetime.now (). hora <23:

indica que el monitor només s’encén entre les 6:00 i les 23:00, de manera que no em molesta durant la nit. Les línies

imprimeix "Sense intrusos", i

i

imprimir "Intrús detectat", i

són només per provar l'script, els podeu suprimir més endavant, quan el tingueu funcionant. Ara proveu l'script:

sudo python motion_sensor.py

Si veieu per sobre del sensor, hauríeu de veure els missatges "Intrús detectat", en cas contrari serà "Sense intrusos". Quan es prova aquest script i funciona, configureu-lo perquè comenci a arrencar:

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

i afegiu la línia següent

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

Per descomptat, heu d’especificar el nom de fitxer correcte de l’escriptura Python que heu creat.

Pas 5: pengeu el calendari

Amb tot preparat, és hora de penjar el calendari a la paret.

Inicialment, pensava a amagar Raspberry Pi darrere de la pantalla LCD, de manera que només caldria un cable (alimentació de corrent continu). Però com que Raspberry funciona amb 5 V i la pantalla LCD funciona amb 12 V, necessitaria un transformador addicional. A més, la funda Raspberry és bastant gruixuda, cosa que significa que la pantalla LCD estaria espaiada a uns 3 centímetres de la paret. Així que ho vaig abandonar i només vaig deixar electrònica LCD darrere de la pantalla LCD, de manera que ara es troba a menys d’un centímetre de la paret. Vaig adquirir dos cables de 5 metres de llarg, un HDMI i un altre de 5, 5 mm per a la font d'alimentació de CC. Tots dos cables són blancs, com la paret, cosa que significa que no destaquen gaire. He instal·lat la pantalla LCD a la paret i he posat Raspberry a la part superior de la nevera a la paret oposada, de manera que bàsicament està amagat, però encara és fàcilment accessible.

Recomanat: