Cuprins:

Calendarul Smart Wall: 5 pași
Calendarul Smart Wall: 5 pași

Video: Calendarul Smart Wall: 5 pași

Video: Calendarul Smart Wall: 5 pași
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, Noiembrie
Anonim
Calendar de perete inteligent
Calendar de perete inteligent

Eu și soția noastră aveam un calendar clasic de perete din hârtie, pe care am marcat date importante. De asemenea, folosim calendarul Google pe telefoanele noastre inteligente pentru marcarea evenimentelor, deci aceasta a însemnat o muncă dublă. Așa că am decis să construiesc un fel de calendar de perete inteligent, care să afișeze mementourile noastre, evenimentele și alte date. Din moment ce am diverse piese electronice vechi, obiectivul meu era să le refolosesc cât mai multe și să construiesc calendarul cu costuri cât mai mici.

În acest tutorial vă voi arăta cum să construiți un calendar inteligent de perete, afișând evenimente din mai multe conturi Google. De asemenea, va afișa ora, data, vremea, temperatura și câteva informații suplimentare. Acesta va fi alimentat de un computer Raspberry Pi cu senzor de mișcare Pasive Infrared Sensor (PIR) atașat la acesta, astfel încât afișajul să se aprindă atunci când mișcarea este detectată în cameră, dar se oprește după câteva minute de inactivitate. Acest tutorial se bazează pe alte câteva tutoriale pe care le-am găsit pe internet și voi oferi linkurile către ele pentru o mai bună înțelegere. Sunt necesare câteva cunoștințe de bază despre programare (HTML, Python, …).

Pasul 1: Hardware-ul

După cum am menționat anterior, am încercat să refolosesc cât mai multe piese electronice vechi pentru a menține costurile mai mici. Cu toate acestea, unele articole pe care le-am avut de cumpărat, așa că voi lista toate cele necesare construcției.

- Un kit Raspberry Pi. Inițial am folosit vechiul meu model 2 dintr-un alt proiect. A funcționat, dar editarea și reîncărcarea paginii web mi-a luat mult timp, așa că am trecut în cele din urmă la modelul 3, care funcționează mai fluent https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = zmeură + pi + kit & _sacat = 0

- Ecran LCD. Am folosit ecranul de pe vechiul meu laptop, așa că am nevoie doar să cumpăr placa de driver LVDS pentru acesta și sursa de alimentare https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ driver + LVDS + placă & _sacat = 0

- Cutie de depozitare din plastic pentru electronice

- Senzor de mișcare în infraroșu pasiv

- senzor de temperatură / umiditate AM2302

- Liant glisant din plastic negru pentru cadru LCD

- Diverse cabluri (HDMI, 5,5 mm pentru curent continuu, cabluri jumper fără sudură, …)

Pasul 2: Crearea ecranului LCD

Crearea ecranului LCD
Crearea ecranului LCD
Crearea ecranului LCD
Crearea ecranului LCD
Crearea ecranului LCD
Crearea ecranului LCD

Am folosit ecranul LCD de pe vechiul meu laptop învechit. Există mai multe tutoriale despre cum să faci acest lucru, am urmat-o pe aceasta:

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

Am demontat capacul vechiului meu laptop, am scos afișajul LCD și apoi am comandat placa de driver LVDS corectă. I-am furnizat vânzătorului codul produsului, care se găsea pe partea din spate a ecranului LCD, în cazul meu este LP171WE3 (TL) (A2) - vezi eticheta din dreapta jos pe ultima poză, iar apoi mi-a trimis LVDS corespunzător. Vă rugăm să rețineți că veți avea nevoie și de sursa de alimentare pentru afișaj, așa că rugați-l pe vânzător să îl trimită și pe acesta. De asemenea, am cumpărat o cutie de plastic de 14,5 × 7,5 × 2 cm, care să se potrivească frumos cu placa șoferului și să o atașez la partea din spate a ecranului LCD.

Acum, ecranul LCD are un cadru metalic, care nu arată frumos. La început l-am vopsit cu spray în negru, dar vopseaua a început să se dezlipească. Așa că am luat patru liante glisante din plastic negru, care sunt de obicei utilizate pentru legarea colilor de hârtie, le-am tăiat corespunzător și le-am atașat pentru a acoperi cadrul. Arăta bine, așa că am conectat toate cablurile, am conectat HDMI la vechile mele Raspberry Pi și Voila - a funcționat! Pe ecran era afișată o imagine, așa că am fost gata să trec la următorul pas - ce informații să afișez pe ecran și cum să le afișez.

Pasul 3: Configurarea software-ului

Când am căutat pe internet câteva indicii, cum să construiesc calendarul, m-a inspirat această pagină https://dakboard.com/site. Acestea oferă produsul finit (afișajul, computerul și software-ul de lucru), dar au și un tutorial excelent pentru soluția DIY (https://blog.dakboard.com/diy-wall-display/). Vă recomand să urmați acest tutorial, cel puțin pentru prima parte cu instrucțiunile despre pregătirea și configurarea sistemului pe Raspberry, astfel încât browserul să încarce automat pagina web dorită la pornire.

Acest lucru a funcționat frumos, cu toate acestea am căutat o soluție, care ar putea fi mai personalizată în funcție de dorințele mele. Am decis să îmi configurez propriul server web și să creez o pagină web, care să afișeze informații suplimentare pe lângă calendar. Am ales Wordpress.org, deoarece este bine documentat și are un sprijin bun și o comunitate mare pentru a vă ajuta. Iată tutorialul despre instalarea Wordpress pe Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Cu Wordpress instalat, a venit timpul să îmi proiectez pagina de pornire. Puteți utiliza una dintre numeroasele teme furnizate sau puteți proiecta de la zero. Oricum, sunt necesare unele cunoștințe de programare HTML.

Mi-am proiectat pagina, astfel încât în partea stângă să fie afișat calendarul (https://sl.wordpress.org/plugins/google-calendar-events/), în timp ce în partea dreaptă să fie afișate ora și data (https://www.timeanddate.com/clocks/free.html și https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Prognoza meteo este de pe această pagină (https://www.1a-vreme.si/vremensko-okno/), care oferă widget de prognoză pentru orașele slovene, dar cred că widget-uri pentru alte țări ar putea fi găsite și pe internet. Temperatura este colectată utilizând senzorul AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), după cum se explică la sfârșitul acestui capitol. În partea de jos este un cronometru zilnic simplu, care afișează câte zile au rămas pentru un eveniment (interesant pentru copiii mei să știe, câte zile vor trebui să aștepte ceva). În marginea din dreapta sus se află pluginul MetaSlider (https://wordpress.org/plugins/ml-slider/), care alunecă aleatoriu la fotografiile selectate ale familiei mele. În plus, am folosit pluginul Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) pentru a-mi arăta o imagine aleatorie pentru un fundal mai frumos.

După cum sa menționat anterior, temperatura interioară este colectată cu ajutorul senzorului AM2302. Există multe tutoriale despre cum să obțineți temperatura, am urmat-o pe aceasta: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Mai târziu am mutat acest senzor pe un alt Raspberry Pi cu Home Assistant rulat pe el, deoarece este mai ușor să citiți și să publicați valorile folosind componenta sa DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant poate colecta, de asemenea, temperatura exterioară utilizând diferite componente meteorologice, am folosit componenta YR.no (https://www.home-assistant.io/components/sensor.yr/). Cu aceasta, am scris un script de automatizare pentru a aduna temperatura interioară / exterioară de la aceste componente și a le scrie într-un fișier text, care este apoi afișat în calendarul meu de perete. Pentru mai multe informații despre Home Assistant, consultați pagina de pornire (https://www.home-assistant.io/).

Pasul 4: Opțional - Dezactivarea afișajului

Acum avem calendarul configurat și rulat, așa cum ne place. Dar nu vrem ca afișajul să fie pornit 24/7. Vrem să pornească numai atunci când cineva este acasă. De asemenea, nu vrem să fie pornit la mijlocul nopții, când mergem la toaletă, este prea luminos! Așadar, vom atașa un senzor cu infraroșu pentru a observa când cineva stă în fața lui și vom adăuga câteva limite de timp, când ar trebui să se aprindă.

Vă rugăm să rețineți că abilitățile mele de programare sunt destul de limitate, deci următoarele nu ar putea fi optime, deoarece le-am ales din diferite forumuri și tutoriale online, dar în esență funcționează. Cu toate acestea, orice recomandare este încă binevenită. Mai întâi vom începe cu testul pentru a porni / opri manual monitorul. Pentru aceasta, vom crea două fișiere (de exemplu, monitor_on.sh și monitor_off.sh) și vom scrie un cod în el. Cel mai simplu mod de a face acest lucru este să vă conectați la Raspberry folosind SSH și să tastați

sudo nano monitor_on.sh

și tastați următorul cod

tvservice --prefered;

startx / usr / bin / graphical_launcher `fgconsole`

Apăsați CTRL + X pentru a salva și a ieși, apoi creați al doilea fișier

sudo nano monitor_off.sh

și tastați următorul cod

tvservice --off;

Din nou, apăsați CTRL + X pentru a salva și a ieși. Faceți ca aceste fișiere nou create să fie executabile:

sudo chmod + x monitor_on.sh

sudo chmod + x monitor_off.sh

Acum, pentru a încerca dacă aceste comenzi funcționează, tastați

sudo./monitor_off.sh

sudo./monitor_on.sh

Monitorul ar trebui să se oprească și să se aprindă în consecință. Am observat că pe Raspberry Pi 2 a durat aproape 10 secunde până când monitorul a pornit. Pe Raspberry Pi 3 durează 1-2 secunde. În continuare vom conecta un senzor cu infraroșu, care va declanșa aceste scripturi. Din nou, există multe tutoriale despre cum să configurați Raspberry Pi și PIR, am urmat-o pe aceasta: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Practic, creați un fișier utilizând editorul nano (de exemplu motion_sensor.py) și tastați codul Python corespunzător în acesta. Mai jos este exemplul fișierului meu:

import RPi. GPIO ca GPIO import timp import sysimport subproces import datetime ca 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 # seconds while True: i = GPIO.input (17) if i == 0: # Când ieșirea de la senzorul de mișcare este LOW, opriți monitorul dacă nu este oprit și time.time ()> (last_motion_time + SHUTOFF_DELAY): tipăriți „Fără intruși”, iturned_off = Truetime.sleep (1) subprocess.call (['/ home / pi / monitor_off.sh'], shell = True) elif i == 1: #When output from sensor motion este ÎNALT, activați monitorul Tipăriți "Intrus detectat", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () dacă turn_off și dt.datetime.now (). hour> 5 și dt.datetime. now (). hour <23: Turn_off = Falsesubprocess.call (['/ home / pi / monitor_on.sh'], shell = True) if _name_ == '_main _': try: main () exceptând KeyboardInterrupt: GPIO.cleanup ()

Rețineți că „GPIO.setup (17, GPIO. IN)“indică faptul că pinul de ieșire de la PIR este conectat la pinul 17 de pe Raspberry Pi. Care este pinul care depinde dacă definiți GPIO.setmode (GPIO. BOARD) sau GPIO.setmode (GPIO. BCM). Diferența este explicată aici: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Am # în fața GPIO. BOARD, deci este ignorat și se utilizează GPIO. BCM.

Observați linia

SHUTOFF_DELAY = 180 # secunde

Aici este menționat cât timp monitorul este pornit de la ultima detectare a mișcării, înainte de a fi oprit. Acest lucru este util, deoarece nu vreau ca monitorul să se oprească / să se aprindă constant atunci când trec pe lângă el, ci vreau să îl mențin aprins pentru o perioadă de timp, înainte de a fi oprit. Am ales intervalul de 180 de secunde, astfel încât monitorul să se oprească la aproximativ 3 minute după ce a fost detectată ultima mișcare.

În cele din urmă, această linie

dacă turn_off și dt.datetime.now (). oră> 6 și dt.datetime.now (). oră <23:

afirmă că monitorul se aprinde numai între orele 6:00 și 23:00, deci nu mă deranjează în timpul nopții. Liniile

tipărește „Fără intruși”, i

și

print "Intrus detectat", i

sunt doar pentru testarea scriptului, le puteți șterge mai târziu, când îl veți lucra. Acum testați scriptul:

sudo python motion_sensor.py

Ar trebui să vedeți mesajele „Intrus detectat”, dacă vă deplasați deasupra senzorului, altfel va fi „Fără intruși”. Când acest script este testat și funcționează, setați-l să înceapă la boot:

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

și adăugați următoarea linie

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

Desigur, trebuie să specificați numele corect al fișierului pentru scriptul Python pe care l-ați creat.

Pasul 5: Agățați Calendarul

Cu toate pregătite, este timpul să atârnați calendarul de perete!

Inițial mă gândeam să ascund Raspberry Pi în spatele afișajului LCD, astfel încât să fie nevoie de un singur cablu (alimentare DC). Dar, din moment ce Raspberry funcționează pe 5V și afișajul LCD rulează pe 12V, aș avea nevoie de un transformator suplimentar. De asemenea, carcasa Raspberry este destul de groasă, ceea ce înseamnă că ecranul LCD ar fi distanțat la aproximativ 3 centimetri de perete. Așa că am abandonat acest lucru și am lăsat electronice LCD în spatele LCD-ului, astfel încât să fie acum la mai puțin de 1 centimetru distanță de perete. Am achiziționat două cabluri de 5 metri lungime, unul HDMI și unul de 5, 5 mm pentru alimentarea cu curent continuu. Ambele cabluri sunt albe, ca peretele, ceea ce înseamnă că nu se remarcă prea mult. Am montat ecranul LCD pe perete și am pus Raspberry deasupra frigiderului pe peretele opus, astfel încât este practic ascuns, dar totuși ușor accesibil.

Recomandat: