INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Hierdie projek het die lewe begin as 'n wekker vir my seun. Ek het dit laat lyk soos die tydsbaan van Back to the Future. Die skerm kan die tyd in verskillende formate wys, insluitend die een uit die films natuurlik. Dit is instelbaar via die knoppies bo -op die omhulsel, maar ook via 'n webblad wat bedien word deur die Raspberry Pi Zero binne. In een van die vertoonmodusse word die plaaslike weer (vanaf my weerstasie met Arduino-aangedrewe), sowel as die voorspelling en daaglikse herinneringe, via die webkoppelvlak, gewys. Dit het ook klank danksy 'n DAC en sal musiek stroom met die AirPlay -protokol. Die alarmklank kan enige klanklêer wees wat u kies. Dit sal die skerm outomaties dowwe en helderder maak op gegewe tye van die dag (bv. Dagbreek en skemer).
Stap 1: Agtergrond
Verlede jaar was ek op soek na 'n nuwe Arduino -projek wat pas my eerste een, 'n tuisweerstasie, voltooi het. My 11-jarige seun het pas die eerste keer na die Back to the Future-flieks gekyk, en ek het gedink dit sal lekker wees om vir hom 'n wekker te bou wat lyk soos die tydsbaan in die Delorean vir sy verjaardag. Dit is nie 'n nuwe idee nie; daar is 'n hele paar soortgelyke projekte (byvoorbeeld hierdie een), so ek het gedink dat dit 'n goeie projek sou wees om van ander te leer en nuwe vaardighede aan te leer.
Die eerste weergawe werk redelik goed (dit was nie gereed vir sy verjaardag nie: ek het dit teen Kersfees reggekry), maar ek het nogal ambisieus geraak oor wat ek wou hê dat dit moes gebeur en gevind dat my skets steeds die geheue van die Arduino bereik. Ek het ook 'n paar klein eksterne hardeware -modules gehad (WiFi, MP3 -speler, klankversterker, RTC, ens.). Uiteindelik het ek besluit om oor te skakel na 'n Raspberry Pi -platform wat die hardeware vereenvoudig het en my baie meer funksies en funksies kon inpak.
Stap 2: Die belangrikste hardeware -komponente
Binne die boks
Hier is die elektroniese komponente wat ek gebruik het. Die meeste van hulle was bronne van Core Electronics in Australië, maar hulle is natuurlik ook elders beskikbaar:
- 4 x vier -alfanumeriese skerm -geel -groen
- Framboos Pi Zero W
- Pimoroni pHAT DAC vir Framboos Pi Zero
- Klankversterker (PAM8403 IC)
- Raspberry Pi 3+ kragtoevoer
- 4 x Jumperdraad - 0,1 ", 5 -pen, 12"
- Lintkabel van 40 pen (2 x 20)
- Framboos Pi GPIO manlike kop
- Raspberry Pi Model B - GPIO Omhulde kop (2X20)
- GPIO stapelkop vir Pi A+/B+/PI 2/PI 3 - ekstra lang 2X20
- 4 x 5 -pen manlike kopstuk
- 2 klein 3W luidsprekers
- 2 x koaksiale kabels vir analoge klankverbinding DAC met versterker
- Veraboard of persoonlike PCB om Rpi na 'n versterker, LED, knoppies te hanteer
- 5 x kort drukknoppies
- 4 x 2-rigting PCB-monteerbare skroefklemblokke
Die boks
- Bitte en stukke MDF, skroewe en boute om die 'onderstel' te maak
- Groen getinte perspex, plaaslike verskaffer
- Styreen, modelgom, spuitverf (aluminiumkleur) van 'n plaaslike stokperdjiewinkel
-
Plakkers (lêer op aanvraag beskikbaar - gedruk deur Redbubble)
Stap 3: Alles saamvoeg
Die LED-skerm vir die horlosie bestaan uit 16x14-segment alfanumerieke skerms, gelukkig dieselfde aantal karakters as die Back to the Future-tydbaan. Alhoewel slegs die eerste drie karakters alfanumeries hoef te wees en die res numeriese skerms met 7 segmente kan wees om die filmstut na te boots, het ek besluit om dit alfanumeries te maak om 'n mate van buigsaamheid te gee in wat vertoon kan word en om almal op die regte manier te laat lyk dieselfde. Die Adafruit quad-rugsakke is 'n uitstekende oplossing hier en kan op die I2C-bus van die Raspberry Pi bestuur word. Meer inligting oor hierdie eenhede en hoe om dit op te hef, kan hier op die Adafruit -webwerf gevind word. Die enigste effens nie-standaard wat ek moes doen, was om die adresse van drie van hulle te verander, sodat elke rugsak uniek was.
Om klank (in stereo) te speel, het ek die Pimoroni pHAT DAC en 'n 2 x 3W stereo klankversterker ingesluit, gebaseer op die PAM8403 -chip. Die pHAT DAC is regtig maklik om aan te sluit op die Pi. Ek sit 'n 2 x 20 -pen manlike kop op die Pi en 'n GPIO stapel kop op die DAC sodat hulle bo -op die ander kan word. Die manlike koppenne gaan deur die bokant van die DAC, sodat ek 'n lintkabel met vroulike verbindings kan voer, aanvanklik na 'n Raspberry Pi-uitbreek vir broodbordtoetsing, maar uiteindelik na 'n omhulde kop op 'n pasgemaakte PCB.
Vir die klankversterker is daar baie opsies (insluitend om net die chip te kry en u eie saam te stel). Hierdie een het die opsie om die uitset te demp deur net die toestand van een van die penne te verander (hoog is aan, laag is af) en ek het dit aangesluit sodat dit vanaf die Pi beheer kan word. In my aanvanklike pogings om dit op te los, het ek baie agtergrond geraas ontdek toe die klank aan was. Nadat ek baie met aarding gespeel het, het ek uiteindelik probeer om die ingangstoevoer van die Pi se 5V na 3.3V te skuif, en dit het dit reggestel. Ek vermoed dat daar baie geraas ontstaan deur die verskillende digitale seine wat rondvlieg, maar dit lyk asof die 3.3V -toevoer op een of ander manier geïsoleer is.
Ander verbindings sluit in die analoog klank van die DAC na die versterker (ek het hier 'n koaksiale kabel gebruik om geraasopname te bestuur) en die uitvoer van klank na 'n paar klein 3W -luidsprekers wat in die omhulsel pas. Daar is ook GPIO -verbindings vir die vier kortstondige skakelaars bo -op die boks, en ek het 'n kort knoppie aan die hard -reset "RUN" penne vasgemaak (sien die afdeling Addisionele verbindings op hierdie bladsy). Die reset -knoppie is agter die omhulsel buite sig gemonteer. Hier is 'n diagram wat die verbindings toon:
Stap 4: 'n Pasgemaakte PCB
Alhoewel daar niks te ingewikkeld aan die kring is nie, is daar 'n hele paar bedrading, en 'n broodbord kan redelik vinnig soos spaghetti lyk. Daarom het ek 'n PCB ontwerp om alles onder beheer te hou. Dit is 'n tuisgemaakte eensydige bord, en ek het 'n vriend om dit te help maak. Nadat dit gemaak en aangesluit is, het ek besef dat ek vergeet het om aansluitings vir die klankblokke vir die klank in te sluit, en ek het later 'n verandering aangebring om die toevoer van die klankversterker van 5V na 3.3V te skuif, so dit is nie ideaal nie, en ek moes aanpak sommige Veroboard om die klankverbindings toe te laat. Die pin-out van die klankversterker het 'n nie-standaard skeiding (dit wissel selfs tussen die penne), dus die verbinding hiermee met die hoof PCB is 'n bietjie aaklig met 11 kort verbindingsdrade van ongeveer 1 cm.
As ek 'n ander bord sou maak, sou ek al hierdie wysigings insluit en ook die aansluiting vir die vier knoppies verander na iets mooier. Die DAC en Pi stapel bo -op, sodat geen lintkabel nodig is nie. Die diagram hierbo toon hoe dit kan lyk.
Stap 5: Die omhulsel
Ek wou 'n omhulsel maak wat soos 'n ry van die filmtydbaan lyk. Drie rye LED -skerms sou te veel gewees het vir 'n wekker en sou aansienlik bygedra het tot die koste. Ek het daaraan gedink om die omhulsel van aluminium te maak, maar ek het geen vaardighede op die gebied nie. Ek het al 'n hele paar plastiekmodelle in my lewe gemaak, en ek het 'n mate van houtwerkervaring, en ek het besluit om 'n raam te maak met MDF om die LED's en luidsprekers te monteer en die perspex aan die voorkant vas te maak, en bedek dit dan met 'n 5-kantige styreen. boks met 'n omhulsel aan die voorkant, geverf in 'n metaal metaalverf. Die plastiek en verf is by 'n plaaslike modelwinkel verkry. Ek het die etikette op die filmstut noukeurig ondersoek en my bes gedoen om die kleure, lettertipe en grootte te kopieer. Ek het Photoshop gebruik om die etikette te bou en dit as plakkers van Redbubble laat druk.
Die prente hierbo wys:
- Die voorkant van die MDF -onderstel. Die 4 LED-rugsakke is aan die voorkant gemonteer met groen getinte perspex
- Binne die boks. Alle rugsakke gemonteer en in lyn, Raspberry Pi en pasgemaakte PCB in, luidsprekers aan weerskante.
- Bedrading geïnstalleer en buitekant gereed om aan te gaan. Dit was 'n bietjie druk!
Stap 6: Die opstel van die Raspberry Pi
Ek het 'n paar verenigbaarheidsprobleme met Raspbian Stretch gehad (wat moontlik opgelos kon gewees het as ek sou volhard), maar Jessie werk goed daarmee, so ek het besluit om daarmee te werk.
Ek het die Pi opgestel as 'n hooflose eenheid met VNC- en SSH -toegang. Dit sou gedoen kon word sonder om ooit 'n sleutelbord of monitor aan te sluit, maar ek het net die TV geleen en 'n sleutelbord geskrap, en ek het redelik vinnig koploos begin werk. Van toe af het ek VNC redelik van toe af gebruik.
My klokkode gebruik Python 2.7.9 en maak staat op 'n hele paar biblioteke wat hieronder gelys word. Daarbenewens het ek 'n Flask -webbediener en MQTT vir afstandbeheer en Shairplay vir musiekstroom. Ek het net die installasie-aantekeninge aanlyn gevolg vir al hierdie dinge, en ek het glad nie probleme ondervind nie. Hier is die python -biblioteke en ander pakkette, ens.
Python -biblioteke
- Adafruit_LED_Sak
- Rpi. GPIO (apt-get install python-rpi.gpio)
- alsaaudio
- paho.mqtt.client (pip installeer paho-mqtt)
- fles (apt-get install python-fles)
Ander pakkette ens
- muskiet (dit is moontlik om muskiet te installeer)
- haarhawe
- Die Pimoroni -webwerf bevat goeie dokumentasie oor die opstel van die DAC, so ek het net daarmee begin.
Stap 7: sagteware
Die klokkode is in Python geskryf en gebruik threading om alarm te speel en af en toe op die agtergrond te blaas sonder om die opdaterings van die skerm te blokkeer. Ek het die ConfigParser -biblioteek gebruik en die config -lêer wat dit onderhou, word gelees en geskryf deur die klokkode sowel as die Flask -webprogram, sodat die opset, wanneer die konfigurasie via die webkoppelvlak of die klok verander word, gesinchroniseer word. Die horlosiesagteware bevat ook 'n MQTT -makelaar om beheer oor die vertoonmodus en demping op afstand te beheer. My bymotief is uiteindelik om 'n iOS -app vir die afstandbeheer te skryf, maar die webkoppelvlak werk vir eers goed genoeg.
Die eerste prent hierbo wys hoe die horlosie in sy verskillende vertoonmodusse lyk, en daar is 'n kort video wat dit in die rolmodus wys.
Alhoewel die kode nie mooi is om na te kyk nie, is dit mooi en stabiel. Ek stuur dit graag aan almal wat dit versoek en sal dit aanlyn plaas wanneer dit beter georganiseer en kommentaar gelewer word.
Die webprogram
Die volgende prentjie wys hoe die webkoppelvlak vir die klok lyk. Daar is ook konfigurasie- en bedieningsbladsye, en dit maak dit baie makliker om met die klok te speel sonder om baie knoppies te druk:-).
Stap 8: Wat volgende?
Daar is 'n Python shareport -metadata -dekodeerder beskikbaar, so ek dink ek sal kode byvoeg om inligting soos titel en kunstenaar te vertoon wanneer musiek gespeel word. Dit is ook baie maklik om die sonsopkoms en sonsondergang te bereken, sodat die skerm outomaties verhelder en gedemp kan word, eerder as om dit met die hand te stel. Miskien is dit ook lekker om 'n internetradiofunksie by te voeg. Die rolskerm kan ook meer konfigureerbaar wees.