Turinys:

Išmanusis sieninis kalendorius: 5 žingsniai
Išmanusis sieninis kalendorius: 5 žingsniai

Video: Išmanusis sieninis kalendorius: 5 žingsniai

Video: Išmanusis sieninis kalendorius: 5 žingsniai
Video: Sieninis laikrodis ir kalendorius Robotime 2024, Liepa
Anonim
Išmanusis sieninis kalendorius
Išmanusis sieninis kalendorius

Su žmona turėjome klasikinį popierinį sieninį kalendorių, kuriuo pažymėjome svarbias datas. Taip pat savo išmaniuosiuose telefonuose naudojame „Google“kalendorių įvykiams žymėti, todėl tai reiškė dvigubą darbą. Taigi nusprendžiau sukurti tam tikrą išmanųjį sienų kalendorių, kuriame bus rodomi mūsų priminimai, įvykiai ir kai kurie kiti duomenys. Kadangi aš turiu įvairių senų elektroninių dalių, mano tikslas buvo jas kuo daugiau panaudoti ir sukurti kalendorių su kuo mažesnėmis išlaidomis.

Šioje pamokoje aš jums parodysiu, kaip sukurti išmanųjį sienos kalendorių, rodant įvykius iš kelių „Google“paskyrų. Taip pat bus rodomas laikas, data, oras, temperatūra ir tam tikra papildoma informacija. Jį maitins „Raspberry Pi“kompiuteris su pasyviu infraraudonųjų spindulių (PIR) judesio jutikliu, kad ekranas įsijungtų, kai kambaryje aptinkamas judesys, bet išsijungia po kelių minučių neveikimo. Ši pamoka yra pagrįsta keliomis kitomis pamokomis, kurias radau internete, ir pateiksiu nuorodas į jas, kad geriau suprastumėte. Reikia tam tikrų pagrindinių programavimo žinių (HTML, Python, …).

1 žingsnis: Aparatūra

Kaip minėta anksčiau, bandžiau pakartotinai naudoti tiek pat senų elektroninių dalių, kad išlaidos būtų mažos. Tačiau kai kuriuos daiktus turėjau nusipirkti, todėl išvardinsiu viską, kas reikalinga statybai.

- „Raspberry Pi“rinkinys. Iš pradžių naudojau seną 2 modelį iš kito projekto. Tai pavyko, tačiau tinklalapio redagavimas ir perkrovimas užtruko daug laiko, todėl galiausiai perėjau prie 3 modelio, kuris veikia sklandžiau https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = avietė+pi+rinkinys & _sacat = 0

- LCD ekranas. Ekraną naudojau iš seno nešiojamojo kompiuterio, todėl man reikėjo tik nusipirkti LVDS tvarkyklės plokštę ir maitinimo šaltinį https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ tvarkyklė+LVDS+plokštė & _sacat = 0

-Plastikinė elektronikos laikymo dėžutė

- Pasyvus infraraudonųjų spindulių judesio jutiklis

- AM2302 temperatūros/drėgmės jutiklis

- Juodas plastikinis užsegamas rišiklis LCD rėmeliui

- Įvairūs kabeliai (HDMI, 5,5 mm nuolatinei srovei, be litavimo duonos lentos jungiamieji kabeliai, …)

2 žingsnis: LCD ekrano kūrimas

LCD ekrano kūrimas
LCD ekrano kūrimas
LCD ekrano kūrimas
LCD ekrano kūrimas
LCD ekrano kūrimas
LCD ekrano kūrimas

Aš naudoju LCD ekraną iš savo seno pasenusio nešiojamojo kompiuterio. Yra keletas pamokų, kaip tai padaryti, aš sekiau šį:

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

Išmontuoju seno nešiojamojo kompiuterio dangtelį, išėmiau skystųjų kristalų ekraną ir tada užsisakiau tinkamą LVDS tvarkyklę. Pateikiau pardavėjui produkto kodą, kurį galima rasti galinėje skystųjų kristalų ekrano pusėje, mano atveju tai yra LP171WE3 (TL) (A2) - žr. Apatinę dešinę etiketę paskutinėje nuotraukoje, tada jis atsiuntė man atitinkamą LVDS. Atminkite, kad jums taip pat reikės ekrano maitinimo šaltinio, todėl paprašykite pardavėjo jį atsiųsti. Aš taip pat nusipirkau gražią 14,5 × 7,5 × 2 cm plastikinę dėžę, kad ji puikiai tilptų vairuotojo plokštę ir pritvirtintų prie galinės LCD pusės.

Dabar LCD ekranas turi metalinį rėmą, kuris neatrodo gražiai. Iš pradžių dažiau purkštuvu iki juodos spalvos, bet dažai pradėjo luptis. Taigi aš paėmiau keturis juodus plastikinius užsegamus segtuvus, kurie paprastai naudojami popieriaus lapams įrišti, atitinkamai juos apkarpiau ir pritvirtinau, kad uždengtų rėmą. Tai atrodė gerai, todėl prijungiau visus laidus, prijungiau HDMI prie senosios „Raspberry Pi“ir „Voila“- tai pavyko! Ekrane buvo rodoma nuotrauka, todėl buvau pasiruošęs pereiti prie kito žingsnio - kokią informaciją rodyti ekrane ir kaip ją parodyti.

3 veiksmas: nustatykite programinę įrangą

Kai internete ieškojau užuominų, kaip sukurti kalendorių, mane įkvėpė šis puslapis https://dakboard.com/site. Jie pateikia gatavą produktą (ekraną, kompiuterį ir veikiančią programinę įrangą), tačiau taip pat turi puikią „pasidaryk pats“sprendimo pamoką (https://blog.dakboard.com/diy-wall-display/). Aš rekomenduoju jums vadovautis šia pamoka, bent jau pirmoje dalyje su instrukcijomis, kaip paruošti ir nustatyti sistemą „Raspberry“, kad naršyklė automatiškai įkeltų norimą tinklalapį.

Tai puikiai pavyko, tačiau aš ieškojau sprendimo, kuris galėtų būti labiau pritaikytas pagal mano pageidavimus. Aš nusprendžiau sukurti savo žiniatinklio serverį ir sukurti tinklalapį, kuriame, be kalendoriaus, bus rodoma papildoma informacija. Aš pasirinkau „Wordpress.org“, nes jis yra gerai dokumentuotas ir turi gerą palaikymą bei didelę bendruomenę, kuri jums padės. Štai pamoka, kaip įdiegti „Wordpress“„Raspberry Pi“: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Įdiegus „Wordpress“, atėjo laikas sukurti savo pagrindinį puslapį. Galite naudoti vieną iš daugelio pateiktų temų arba kurti nuo nulio. Bet kokiu atveju tam reikia tam tikrų HTML programavimo žinių.

Sukūriau savo puslapį taip, kad kairėje pusėje būtų rodomas kalendorius (https://sl.wordpress.org/plugins/google-calendar-events/), o dešinėje-laikas ir data (https://www.timeanddate.com/clocks/free.html ir https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). Orų prognozė yra iš šio puslapio (https://www.1a-vreme.si/vremensko-okno/), kuriame pateikiamas Slovėnijos miestų prognozių valdiklis, tačiau manau, kad kitų šalių valdiklius taip pat galima rasti internete. Temperatūra renkama naudojant AM2302 jutiklį (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), kaip paaiškinta šio skyriaus pabaigoje. Apačioje yra paprastas dienos skaičiavimo laikmatis, rodantis, kiek dienų liko iki kokio nors įvykio (mano vaikams įdomu žinoti, kiek dienų jie turės kažko laukti). Viršutiniame dešiniajame krašte yra „MetaSlider“papildinys (https://wordpress.org/plugins/ml-slider/), kuris atsitiktine tvarka nuslenka į pasirinktas mano šeimos nuotraukas. Be to, naudoju „Background Slider“papildinį (https://sl.wordpress.org/plugins/background-slider-master/), kad galėčiau parodyti atsitiktinę nuotrauką, kad būtų gražesnis fonas.

Kaip minėta anksčiau, patalpų temperatūra renkama naudojant AM2302 jutiklį. Yra daug pamokų, kaip gauti temperatūrą, aš laikiausi šios: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Vėliau šį jutiklį perkėliau į kitą „Raspberry Pi“su „Home Assistant“, nes jame lengviau skaityti ir publikuoti vertes naudojant jo DHT jutiklio komponentą (https://www.home-assistant.io/components/sensor.dht/). „Home Assistant“taip pat gali rinkti lauko temperatūrą naudodamas įvairius oro komponentus, aš naudoju „YR.no“komponentą (https://www.home-assistant.io/components/sensor.yr/). Dėl to aš parašiau automatikos scenarijų, kad surinkčiau patalpų/lauko temperatūrą iš šių komponentų ir įrašyčiau juos į tekstinį failą, kuris vėliau bus rodomas mano sieniniame kalendoriuje. Daugiau informacijos apie „Home Assistant“rasite pagrindiniame puslapyje (https://www.home-assistant.io/).

4 veiksmas: pasirinktinai - išjunkite ekraną

Dabar mes turime savo kalendorių ir jis veikia taip, kaip mums patinka. Bet mes nenorime, kad ekranas būtų įjungtas visą parą. Mes norime, kad tai įjungtų tik tada, kai kas nors yra namuose. Taip pat nenorime, kad jis būtų įjungtas vidury nakties, kai einame į tualetą, jis yra per šviesus! Taigi mes pritvirtinsime infraraudonųjų spindulių jutiklį, kad pastebėtume, kai kažkas stovi priešais jį, ir pridėsime tam tikrus laiko apribojimus, kada jis turėtų įsijungti.

Atminkite, kad mano programavimo įgūdžiai yra gana riboti, todėl šie dalykai negali būti optimalūs, nes aš juos pasirinkau iš įvairių internetinių forumų ir vadovėlių, tačiau iš esmės tai veikia. Vis dėlto bet kokia rekomendacija vis dar laukiama. Pirmiausia pradėsime nuo bandymo rankiniu būdu įjungti/išjungti monitorių. Tam mes sukursime du failus (pavyzdžiui, monitor_on.sh ir monitor_off.sh) ir parašysime jame tam tikrą kodą. Lengviausias būdas tai padaryti yra prisijungti prie „Raspberry“naudojant SSH ir įvesti

sudo nano monitor_on.sh

ir įveskite šį kodą

TV paslauga -pageidautina;

startx/usr/bin/graphical_launcher `fgconsole`

Norėdami išsaugoti ir išeiti, paspauskite CTRL+X, tada sukurkite antrąjį failą

sudo nano monitor_off.sh

ir įveskite šį kodą

televizijos paslauga -išjungta;

Dar kartą paspauskite CTRL+X, kad išsaugotumėte ir išeitumėte. Padarykite šiuos naujai sukurtus failus vykdomuosius:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

Dabar pabandykite, ar šios komandos veikia, įveskite

sudo./monitor_off.sh

sudo./monitor_on.sh

Dabar monitorius turėtų atitinkamai išsijungti ir įjungti. Pastebėjau, kad „Raspberry Pi 2“užtruko beveik 10 sekundžių, kol monitorius įsijungė. „Raspberry Pi 3“trunka 1-2 sekundes. Toliau prijungsime infraraudonųjų spindulių jutiklį, kuris suaktyvins šiuos scenarijus. Vėlgi, yra daug vadovėlių, kaip nustatyti „Raspberry Pi“ir „PIR“, aš vadovavausi šiuo: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Iš esmės sukurkite failą naudodami nano redaktorių (pvz., Motion_sensor.py) ir įveskite jame atitinkamą „Python“kodą. Žemiau yra mano failo pavyzdys:

importuoti RPi. GPIO kaip GPIOimportuoti laikoimportąsysimportuoti subprocessimportuoti datos laiką kaip dtimportuoti osGPIO.setwarnings (klaidinga) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = False time.time () SHUTOFF_DELAY = 180 # secondswhile Tiesa: i = GPIO.input (17), jei i == 0: #Kai judesio jutiklio išvestis yra LOW, išjunkite monitorių, jei jis nėra išjungtas ir time.time ()> (last_motion_time + SHUTOFF_DELAY): atspausdinkite „Nėra įsibrovėlių“, iturned_off = Truetime.sleep (1) subprocess.call (['/home/pi/monitor_off.sh'], apvalkalas = tiesa) elif i == 1: #Kai išvedamas iš judesio jutiklio yra HIGH, įjunkite monitorių ONprint „Aptiktas įsibrovėlis“, itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () if turn_off and dt.datetime.now (). hour> 5 and dt.datetime. dabar (). valanda <23: Turn_off = Falsesubprocess.call (['/home/pi/monitor_on.sh'], apvalkalas = tiesa), jei _name_ == '_main _': try: main () išskyrus KeyboardInterrupt: GPIO.cleanup ()

Atminkite, kad „GPIO.setup (17, GPIO. IN)“rodo, kad išvesties kaištis iš PIR yra prijungtas prie „Raspberry Pi“17 kaiščio. Kuris kaištis priklauso nuo to, ar apibrėžiate GPIO.setmode (GPIO. BOARD), ar GPIO.setmode (GPIO. BCM). Skirtumas paaiškinamas čia: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Prieš GPIO. BOARD turiu #, todėl jis ignoruojamas ir naudojamas GPIO. BCM.

Atkreipkite dėmesį į eilutę

SHUTOFF_DELAY = 180 #sekundžių

Čia nurodyta, kiek laiko monitorius įjungtas nuo paskutinio judesio aptikimo, kol jis išjungiamas. Tai naudinga, nes nenoriu, kad monitorius nuolat išsijungtų/įjungtų, kai einu pro jį, bet noriu, kad jis kurį laiką būtų įjungtas, kol jis neišjungiamas. Aš pasirinkau 180 sekundžių intervalą, kad monitorius išsijungtų praėjus maždaug 3 minutėms po paskutinio judesio aptikimo.

Galiausiai, ši eilutė

jei išjungta_ ir dt.datetime.now (). valanda> 6 ir dt.datetime.now (). valanda <23:

teigia, kad monitorius įsijungia tik nuo 6:00 iki 23:00, todėl jis man netrukdo nakties metu. Linijos

spausdinti „Jokių įsibrovėlių“, t

ir

spausdinti „Aptiktas įsibrovėlis“, t

yra skirti tik scenarijui išbandyti, galite juos ištrinti vėliau, kai tik jis veiks. Dabar išbandykite scenarijų:

sudo python motion_sensor.py

Jei banguojate virš jutiklio, turėtumėte matyti pranešimus „Aptiktas įsibrovėlis“, kitaip bus „Jokių įsibrovėlių“. Kai šis scenarijus yra išbandytas ir veikia, nustatykite jį paleisti paleidžiant:

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

ir pridėkite šią eilutę

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

Žinoma, turite nurodyti teisingą sukurto „Python“scenarijaus failo pavadinimą.

5 veiksmas: pakabinkite kalendorių

Kai viskas paruošta, laikas pakabinti kalendorių ant sienos!

Iš pradžių galvojau paslėpti Raspberry Pi už LCD ekrano, kad prireiktų tik vieno kabelio (nuolatinės srovės). Bet kadangi „Raspberry“veikia 5 V, o LCD ekranas - 12 V, man reikia papildomo transformatoriaus. Be to, „Raspberry“dėklas yra gana storas, o tai reiškia, kad skystųjų kristalų ekranas bus maždaug 3 centimetrų atstumu nuo sienos. Taigi aš atsisakiau to ir palikau tik LCD elektroniką už LCD, todėl dabar ji yra mažiau nei 1 centimetro atstumu nuo sienos. Aš įsigijau du 5 metrų ilgio kabelius, vieną HDMI ir vieną 5, 5 mm nuolatinės srovės maitinimo šaltinį. Abu kabeliai yra balti, kaip ir siena, o tai reiškia, kad jie nelabai išsiskiria. Aš pritvirtinau skystųjų kristalų ekraną ant sienos ir padėjau avietę ant šaldytuvo ant priešingos sienos, todėl jis iš esmės yra paslėptas, tačiau vis tiek lengvai pasiekiamas.

Rekomenduojamas: