Cuprins:

Ceasul Înapoi la viitor: 8 pași (cu imagini)
Ceasul Înapoi la viitor: 8 pași (cu imagini)

Video: Ceasul Înapoi la viitor: 8 pași (cu imagini)

Video: Ceasul Înapoi la viitor: 8 pași (cu imagini)
Video: Cum scrii când începi un caiet nou 2024, Noiembrie
Anonim
Un ceas înapoi la viitor
Un ceas înapoi la viitor

Acest proiect a început viața ca un ceas cu alarmă pentru fiul meu. Am făcut să semene cu circuitul timpului de la Înapoi la viitor. Afișajul poate afișa ora în diferite formate, inclusiv cel din filme, desigur. Este configurabil prin butoanele din partea de sus a carcasei, dar și printr-o pagină web servită de Raspberry Pi Zero în interior. Într-unul dintre modurile de afișare va afișa vremea locală (de la stația mea meteo alimentată cu Arduino), precum și prognoza și orice memento-uri zilnice, configurate prin interfața web. De asemenea, are audio datorită unui DAC și va reda muzică în flux utilizând protocolul AirPlay. Sunetul de alarmă poate fi orice fișier audio pe care îl alegeți. Se va estompa și va lumina automat afișajul la anumite ore ale zilei (de exemplu, zori și amurg).

Pasul 1: fundal

Anul trecut căutam un nou proiect Arduino, tocmai terminând primul meu, o stație meteo de acasă. Fiul meu de 11 ani tocmai vizionase filmele Înapoi la viitor pentru prima dată, așa că m-am gândit că ar fi distractiv să-i construiesc un ceas cu alarmă care să semene cu circuitul orar din Delorean pentru ziua lui. Aceasta nu este o idee nouă, există destul de multe proiecte similare acolo (de exemplu, acesta), așa că m-am gândit că ar fi un proiect frumos să învăț de la ceilalți și să acumulez noi abilități.

Prima versiune a funcționat destul de bine (nu era pregătită pentru ziua lui de naștere: am făcut-o până la Crăciun), dar am devenit destul de ambițios în ceea ce am vrut să facă și am constatat că schița mea continua să meargă în limita de memorie a Arduino. Am avut, de asemenea, câteva module hardware externe mici (WiFi, MP3 player, amplificator audio, RTC etc.), așa că totul devenea puțin dificil. În cele din urmă, am decis să mă mut pe o platformă Raspberry Pi, care a simplificat hardware-ul și mi-a permis să împachetez mult mai multe funcționalități și caracteristici.

Pasul 2: Componente hardware principale

Înăuntrul cutiei

Iată componentele electronice pe care le-am folosit. Majoritatea au fost surse de la Core Electronics din Australia, dar, desigur, sunt disponibile și în altă parte:

  • 4 x afișaj alfanumeric quad-galben-verde
  • Raspberry Pi Zero W
  • Pimoroni pHAT DAC pentru Raspberry Pi Zero
  • Amplificator audio (PAM8403 IC)
  • Alimentare Raspberry Pi 3+
  • 4 x sârmă jumper - 0,1 ", 5 pini, 12"
  • Cablu panglică 40 pini (2 x 20)
  • Antet masculin Raspberry Pi GPIO
  • Raspberry Pi Model B - Antet acoperit GPIO (2X20)
  • Antet de stivuire GPIO pentru Pi A + / B + / PI 2 / PI 3 - extra-lung 2X20
  • Antet masculin 4 x 5 pini
  • 2 difuzoare mici de 3W
  • 2 x cabluri coaxiale pentru conexiune audio analogică DAC la Amp
  • Veraboard sau PCB personalizat pentru a gestiona Rpi la un amplificator, LED, butoane
  • 5 x comutatoare cu buton momentan
  • 4 blocuri de borne cu șurub montabile pe PCB cu 2 căi

Cutia

  • Bucăți și bucăți de MDF, șuruburi și șuruburi pentru a face „șasiul”
  • Plexiglas verde, furnizor local
  • Stiren, lipici pentru modelare, vopsea spray (culoare aluminiu) de la un magazin local de hobby-uri
  • Autocolante (fișier disponibil la cerere - tipărit de Redbubble)

Pasul 3: Puneți totul împreună

Punând totul împreună
Punând totul împreună

Afișajul cu LED pentru ceas este format din afișaje alfanumerice de 16x14 segmente, din fericire același număr de caractere ca și circuitul de timp Înapoi la viitor. În timp ce numai primele trei caractere trebuie să fie alfanumerice, iar restul ar putea fi afișaje numerice pe 7 segmente pentru a imita recuzita filmului, am decis să le fac toate alfanumerice pentru a permite o oarecare flexibilitate în ceea ce ar putea fi afișat și pentru a le păstra pe toate cu la fel. Rucsacurile quad Adafruit sunt o soluție excelentă aici și pot fi rulate pe autobuzul I2C al Raspberry Pi. Mai multe informații despre aceste unități și despre cum să le conectați pot fi găsite aici pe site-ul web Adafruit. Singurul lucru ușor non-standard pe care trebuia să-l fac era să schimb adresele a trei dintre ele, astfel încât fiecare rucsac să fie unic.

Pentru a reda audio (în stereo), am inclus Pimoroni pHAT DAC și un amplificator audio stereo de 2 x 3W bazat pe cipul PAM8403. PHAT DAC este foarte ușor de conectat la Pi. Am pus un antet masculin de 2 x 20 pini pe Pi și un antet de stivuire GPIO pe DAC, astfel încât să poată fi conectate împreună unul peste celălalt. Pinii antetului masculin trec prin partea superioară a DAC, permițându-mi să rulez un cablu panglică cu conectori feminini, inițial la un breakout Raspberry Pi pentru testarea plăcilor de panouri, dar în cele din urmă la un antet acoperit pe un PCB personalizat.

Pentru amplificatorul audio, există o mulțime de opțiuni (inclusiv doar obținerea cipului și asamblarea propriului dvs.). Acesta are opțiunea de a dezactiva ieșirea doar schimbând starea unuia dintre pini (high este pornit, low este oprit) și l-am conectat, astfel încât acest lucru să poată fi controlat de la Pi. În încercările mele inițiale de a conecta acest lucru, am descoperit destul de mult zgomot de fundal când sunetul era pornit. După ce m-am jucat mult cu legarea la pământ, am încercat în cele din urmă să mut tensiunea de alimentare de la 5V la 3,3V a Pi și asta a rezolvat-o. Cred că există destul de mult zgomot generat de diferitele semnale digitale care zboară, dar se pare că alimentarea de 3,3V este cumva izolată.

Alte conexiuni includ sunetul analogic de la DAC la amplificator (am folosit cablul coaxial aici pentru a ajuta la gestionarea captării zgomotului) și ieșirea audio la o pereche de difuzoare mici de 3W care se potrivesc în carcasă. Există, de asemenea, conexiuni GPIO pentru cele patru comutatoare momentane din partea de sus a cutiei și am conectat un buton momentan la pinii "RUN" de resetare hard (consultați secțiunea Conexiuni suplimentare de pe această pagină). Butonul de resetare este montat la vedere din spatele carcasei. Iată o diagramă care arată conexiunile:

Pasul 4: Un PCB personalizat

Un PCB personalizat
Un PCB personalizat

Deși nu există nimic prea complicat în circuit, există destul de puțină conexiune și o placă de calcul poate arăta destul de repede ca spaghete. Așa că am proiectat un PCB pentru a menține totul sub control. Este o placă unilaterală preparată acasă și am un prieten care să o ajute. După ce a fost realizat și conectat, mi-am dat seama că am uitat să includ conexiuni pentru blocurile de terminale pentru audio și ulterior am făcut o schimbare pentru a muta alimentarea amplificatorului audio de la 5V la 3,3V, deci nu este ideal și a trebuit să mă apuc de unele Veroboard pentru a permite conexiunile audio. De asemenea, pinout-urile plăcii audio amplificatoare sunt la o separare non-standard (ele chiar variază între pini), deci conexiunea pentru aceasta la placa principală este puțin oribilă, cu 11 fire scurte de conexiune de ~ 1cm.

Dacă aș face o altă placă, aș include toate aceste modificări și, de asemenea, aș schimba conectorul pentru cele patru butoane cu ceva puțin mai frumos. DAC și Pi s-ar stiva chiar deasupra, deci nu este nevoie de cablu panglică. Diagrama de mai sus arată cum ar putea arăta.

Pasul 5: incinta

Incinta
Incinta
Incinta
Incinta
Incinta
Incinta

Am vrut să fac o incintă care să arate ca un rând al circuitului de timp al filmului. Trei rânduri de afișaje cu LED-uri ar fi fost prea mult pentru un ceas cu alarmă și s-ar fi adăugat semnificativ la cost. M-am gândit să fac carcasa din aluminiu, dar nu am abilități în acea zonă. Totuși, am făcut destul de multe modele din plastic în viața mea și am o experiență de prelucrare a lemnului, așa că am decis să fac un cadru folosind MDF pentru a monta LED-urile și difuzoarele și a fixa perspexul în față, apoi să-l acoperiți cu un stiren pe 5 fețe cutie cu cadru în față, vopsită într-o vopsea spray metalică din aluminiu. Plasticul și vopseaua au fost obținute de la un magazin local de modele. Am aruncat o privire atentă pe etichetele de pe reclama filmului și am făcut tot posibilul să copiez culorile, tipul de font și dimensiunea. Am folosit Photoshop pentru a construi etichetele și le-am imprimat ca autocolante de la Redbubble.

Imaginile de mai sus arată:

  1. Partea din față a șasiului MDF. Cele 4 rucsaci cu LED-uri sunt montate în partea din față cu perspex verde
  2. Înăuntrul cutiei. Rucsacuri montate și aliniate, Raspberry Pi și PCB personalizate, difuzoare de ambele părți.
  3. Cablarea instalată și carcasa exterioară gata de pornire. A fost un pic de stoarcere!

Pasul 6: Configurarea Raspberry Pi

Am avut unele probleme de compatibilitate cu Raspbian Stretch (care ar fi putut fi rezolvate dacă aș persista), dar Jessie funcționează bine, așa că am decis să merg cu asta.

Am configurat Pi ca o unitate fără cap cu acces VNC și SSH. Acest lucru s-ar fi putut face fără a conecta vreodată o tastatură sau un monitor, dar tocmai am împrumutat televizorul și am scrutat o tastatură și am pornit fără cap destul de repede. De atunci, am folosit destul de mult VNC de atunci.

Codul meu de ceas folosește Python 2.7.9 și se bazează pe destul de multe biblioteci, enumerate mai jos. În plus, rulez un server web Flask și MQTT pentru telecomandă și Shairplay pentru streaming muzical. Tocmai am urmat notele de instalare on-line pentru toate acestea și nu am avut deloc probleme. Iată bibliotecile Python și alte pachete etc., de care aveam nevoie pentru a instala cu link-uri către note de instalare sau doar comanda pe care trebuie să o rulați pentru a o obține:

Biblioteci Python

  • Adafruit_LED_Backpack
  • Rpi. GPIO (apt-get install python-rpi.gpio)
  • alsaaudio
  • paho.mqtt.client (pip instalează paho-mqtt)
  • balon (apt-get install python-balon)

Alte pachete etc

  • tantar (apt-get install tantar)
  • shairport
  • Site-ul web Pimoroni are o documentație bună despre configurarea DAC, așa că tocmai am fugit cu asta.

Pasul 7: Software

Image
Image
Software
Software

Codul ceasului a fost scris în Python și folosește filetarea pentru a reda alarma și a clipi ocazional în fundal, fără a bloca actualizările afișajului. Am folosit biblioteca ConfigParser și fișierul de configurare pe care îl menține este citit și scris de codul de ceas, precum și de aplicația web Flask, astfel încât ori de câte ori configurația este modificată prin interfața web sau ceasul, aceasta să fie sincronizată. Software-ul de ceas include, de asemenea, un broker MQTT pentru a permite controlul modului de afișare și muting pentru a fi controlate de la distanță. Motivul meu ulterior este în cele din urmă să scriu o aplicație iOS pentru telecomandă, dar interfața web funcționează suficient de bine pentru moment.

Prima imagine de mai sus arată cum arată ceasul în diferitele sale moduri de afișare și există un scurt videoclip care îl arată în modul defilare.

Deși codul nu este destul de uitat, este frumos și stabil. Mă bucur să îl trimit oricui îl solicită și îl voi pune online atunci când este mai bine organizat și comentat.

Aplicația Web

Imaginea următoare arată cum arată interfața web cu ceasul. Există, de asemenea, pagini de configurare și de control, iar acestea fac mult mai ușor să jucați cu ceasul fără a face multe butoane:-).

Pasul 8: Ce urmează?

Ce urmează?
Ce urmează?

Există un decodor Python shareport metadate disponibil, așa că cred că voi adăuga un cod pentru a afișa informații precum titlul și artistul atunci când se redă muzică. De asemenea, ar fi destul de ușor să calculați orele de răsărit și apus, astfel încât afișajul să poată fi luminat și estompat automat, mai degrabă decât să-l setați manual. Poate că și adăugarea unei funcții de radio pe internet ar fi amuzantă. Afișajul cu defilare ar putea fi, de asemenea, mai configurabil.

Recomandat: