Cuprins:

Masă de cafea interactivă Arduino cu LED: 6 pași (cu imagini)
Masă de cafea interactivă Arduino cu LED: 6 pași (cu imagini)

Video: Masă de cafea interactivă Arduino cu LED: 6 pași (cu imagini)

Video: Masă de cafea interactivă Arduino cu LED: 6 pași (cu imagini)
Video: The touch-sensitive river table offers a captivating and interactive experience for users. 2024, Iunie
Anonim
Image
Image
Măsuță de cafea interactivă Arduino
Măsuță de cafea interactivă Arduino

Am făcut o măsuță de cafea interactivă care aprinde luminile cu led sub un obiect, când obiectul este așezat deasupra mesei. Numai ledurile care se află sub acel obiect se vor aprinde. Face acest lucru folosind în mod eficient senzori de proximitate și, atunci când senzorul de proximitate simte că un obiect este suficient de aproape, va aprinde un nod sub acel obiect. De asemenea, folosește un Arduino pentru a crea animații care nu au nevoie de senzori de proximitate, dar adaugă un efect foarte cool pe care-l ador.

Senzorii de proximitate sunt compuși din fotodioduri și emițătoare IR. Emițătorii folosesc lumină infraroșie (pe care ochiul uman nu o poate vedea) pentru a străluci lumina din masă, iar fotodiodele primesc lumina infraroșie reflectată de pe un obiect. Cu cât este reflectată mai multă lumină (cu cât obiectul este mai aproape), cu atât tensiunea fluctuează mai mult din fotodiodele. Acesta este folosit ca un indicator pentru a spune care nod să se aprindă. Nodurile sunt o colecție de leduri ws2812b și un senzor de proximitate.

Videoclipul atașat trece peste întregul proces de construire, în timp ce descriu mai multe detalii mai jos.

Provizii

  1. Becuri LED ws2812b -
  2. Alimentare 5V -
  3. Orice Arduino am folosit 2560 -
  4. Fotodiodele
  5. Emițătoare IR
  6. Rezistențe de 10 ohmi
  7. 1 rezistențe MOhms
  8. 47 pF condensatori
  9. CD4051B Multiplexoare
  10. SN74HC595 Registre de schimbare
  11. ULN2803A Darlington Arrays
  12. Orice substrat de folosit ca o placă mare pentru leduri, am folosit o placă compusă din hârtie de la depozitul de acasă

Pasul 1: Creați placa și introduceți LED-urile

Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile
Creați placa și introduceți LED-urile

Primul lucru pe care l-am făcut a fost să creez tabloul care va conține ledurile pe care le vom pune în măsuța de cafea. Am folosit o bucată de hârtie compozită din hârtie din depozitul de acasă și am tăiat-o la dimensiunile adecvate pentru măsuța de cafea pe care o aveam. După ce am tăiat placa la dimensiuni, am forat toate găurile pentru unde mergeau ledurile. Placa în sine avea 8 rânduri și 12 coloane de leduri ws2812b separate la 3 centimetri distanță și erau atașate într-un model serpentin. Am folosit lipici fierbinte pentru a-i fixa la locul lor.

De asemenea, a trebuit să forez găuri în centrul a ceea ce va deveni nodul: 4 led-uri ws2812b care alcătuiesc un pătrat, 2 diode foto și 2 emițătoare IR într-un pătrat mai mic din centrul aceluia. Aceste 4 găuri din centrul nodului ar fi punctele fotodiodelor și emițătorilor de ir (2 din fiecare). Le-am alternat pentru a asigura expunerea maximă și le-am așezat la aproximativ 1 inch distanță în centrul fiecărui nod. Nu aveam nevoie să le lipesc la cald, ci doar am îndoit cablurile de pe cealaltă parte pentru a mă asigura că nu vor ieși din cealaltă parte. De asemenea, m-am asigurat că îndoiți capetele pozitive și negative în anumite direcții, astfel încât acestea să fie orientate corect în circuit. Toate potențialele pozitive erau pe partea stângă a spatelui tabloului, în timp ce toate potențialele negative erau pe partea dreaptă a tabloului.

Pasul 2: Înțelegeți circuitul

Înțelegeți circuitul
Înțelegeți circuitul
Înțelegeți circuitul
Înțelegeți circuitul
Înțelegeți circuitul
Înțelegeți circuitul

Notă: Toate desenele animate nu sunt exacte pentru implementare (unii pini arduino sunt diferiți, iar eu lanț în lanț câteva, mai multe despre asta mai târziu). Rezultatul final a fost puțin diferit din cauza complexității circuitului, dar toate circuitele animate servesc ca o bază excelentă pentru a înțelege cum să prototip fiecare parte. Schema obișnuită și schema de circuit sunt așa cum este pe PCB-ul utilizat în proiect.

Codul PCB care conține proiectul KiCad și fișierele gerber pot fi găsite aici: https://github.com/tmckay1/interactive_coffee_tabl…, în cazul în care doriți să comandați PCB-urile și să creați un proiect similar. Am folosit NextPCB pentru a crea plăcile.

În principiu, există trei circuite diferite care alcătuiesc acest tabel. Primul nu îl vom trece în detaliu și este un circuit simplu care alimentează ledurile ws2812b. Un semnal de date PWM este trimis de la Arduino la becurile cu led ws2812b și controlează ce culori sunt afișate unde. Folosim leduri ws2812b, deoarece acestea pot fi adresate individual, așa că vom putea controla care dintre led-uri să se aprindă și care să se oprească. Ledurile ws2812b sunt alimentate de o sursă externă de alimentare de 5V, deoarece arduino singur nu are suficientă putere pentru a aprinde toate luminile. În diagrama animată atașată, ei folosesc un rezistor de pullup de 330 Ohmi, totuși nu îl folosesc în versiunea mea.

Al doilea circuit pornește emițătoarele IR. Acest circuit folosește un registru de deplasare pentru a controla o matrice darlington care trimite energie către emițătoarele IR. Un registru de schimbare este un circuit integrat care este capabil să trimită semnale HIGH și LOW către mai mulți pini de la doar o cantitate mică de pini. În cazul nostru, utilizăm un registru de schimbare SN74HC595 care poate fi controlat de la 3 intrări, dar controlează până la 8 ieșiri. Avantajul utilizării acestui lucru cu arduino este că puteți conecta până la 8 registre de schimbare la rând (arduino poate gestiona doar până la 8 dintre ele). Aceasta înseamnă că aveți nevoie doar de 3 pini de la arduino pentru a porni și opri 64 de emițătoare IR. Matricea darlington vă permite să alimentați un dispozitiv de la o sursă externă dacă semnalul de intrare este ÎNALT sau să opriți dispozitivul respectiv dacă semnalul de intrare este LOW. Deci, în exemplul nostru, folosim o matrice darlington ULN2803A, care permite unei surse externe de alimentare de 5V să pornească și să oprească până la 8 emițătoare IR. Folosim un rezistor de 10 Ohm cu emițătoarele IR în serie pentru a obține amperajul maxim de la emițătoarele IR.

Al treilea circuit folosește un multiplexor pentru a primi mai multe intrări de la fotodioduri și trimite ieșirea într-un semnal de date. Un multiplexor este un dispozitiv care este utilizat pentru a prelua mai multe intrări din care doriți să citiți și are nevoie doar de câțiva pini pentru a citi din acele intrări. Poate face și opusul (demultiplex), dar nu îl folosim aici pentru aplicația respectivă. Deci, în cazul nostru, folosim un multiplexor CD4051B pentru a prelua până la 8 semnale de la fotodioduri și avem nevoie doar de 3 intrări pentru a citi din aceste semnale. În plus, putem conecta până la 8 multiplexoare (arduino poate gestiona doar până la 8 dintre ele). Aceasta înseamnă că arduino poate citi din 64 de semnale fotodiodă de la doar 3 pini digitali. Fotodiodele sunt orientate invers polarizate, ceea ce înseamnă că, în loc să fie orientate în direcția normală cu cablul pozitiv atașat la sursa de tensiune pozitivă, atribuim cablul negativ la sursa de tensiune pozitivă. Acest lucru transformă efectiv fotodiodele în rezistențe foto, care se schimbă în rezistență în funcție de cantitatea de lumină pe care o primește. Apoi creăm un divizor de tensiune pentru a citi o tensiune dependentă de rezistența variabilă a fotodiodelor prin adăugarea unui rezistor de 1 MOhms foarte rezistent la sol. Acest lucru ne permite să primim tensiuni mai mari și mai mici la arduino în funcție de câtă lumină IR primesc fotodiodele.

Am urmat cea mai mare parte a acestui design de la o altă persoană care a făcut acest lucru aici: https://www.instructables.com/Infrared-Proximity-S… În acel design au adăugat și un condensator de 47pF, așa cum facem noi, vizavi de rezistența de 1 MOhm folosit pentru a crea divizorul de tensiune cu fotodiodele. Motivul pentru care l-a adăugat a fost că fluctua emitatorii IR pornind și oprind cu un semnal PWM și făcând acest lucru a atras o mică cădere de tensiune din fotodioduri când emițătorii IR au fost imediat aprinși. Acest lucru a făcut ca diodele foto să schimbe rezistența chiar și atunci când nu primea mai multă lumină IR de la un obiect, deoarece emițătorii IR au împărțit aceeași sursă de alimentare de 5V ca și fotodiodele. Condensatorul a fost folosit pentru a se asigura că nu a existat o cădere de tensiune atunci când emițătoarele IR au fost pornite și oprite. Inițial am planificat să fac aceeași strategie, dar am rămas fără timp pentru ao testa, așa că am lăsat emițătorii IR întotdeauna aprinși. Aș dori să schimb acest lucru în viitor, dar până când voi reproiecta codul și circuitul, chiar acum PCB-ul este proiectat să aibă luminile IR aprinse tot timpul și am păstrat condensatorii oricum. Nu ar trebui să aveți nevoie de condensator dacă utilizați acest design PCB, dar voi introduce o altă versiune a PCB-ului care acceptă o intrare suplimentară în registrul de schimbare care vă va permite să modulați și să opriți emițătorii IR. Acest lucru va economisi mult consumul de energie.

Puteți verifica diagramele animate atașate pentru o configurație prototip pentru testare pe arduino. Există, de asemenea, o schemă colorată mai detaliată pentru fiecare circuit, care prezintă configurarea și orientarea dispozitivelor electronice. În schema PCB atașată, avem 4 circuite totale, 2 circuite utilizate pentru a porni emițătoarele IR și 2 circuite de citit din fotodioduri. Acestea sunt orientate pe PCB 2 grupuri una lângă cealaltă cu un grup format din 1 circuit emițător IR și 1 circuit fotodiodă, astfel încât 2 coloane de 8 noduri pot fi introduse într-un singur PCB. De asemenea, înlănțuim cele două circuite împreună, astfel încât trei pini de la arduino pot controla cele două registre de schimbare, iar 3 pini suplimentari pot controla cele două multiplexoare de pe placă. Există un antet de ieșire suplimentar pentru a putea conecta lanțul la PCB-uri suplimentare.

Iată câteva resurse pe care le-am urmat pentru prototipare:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Pasul 3: Sârmă de lipit la nod

Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod
Sârmă de lipit la nod

Acum că înțelegeți modul în care este realizat circuitul, continuați și lipiți firele către fiecare nod. Am lipit fotodiodele în paralel (fire galbene și gri) și emițătoarele ir în serie (sârmă portocalie). Apoi am lipit un fir galben mai lung la fotodiodele în paralel care va fi atașat la sursa de alimentare de 5V și un fir albastru care va fi atașat la intrarea fotodiodă a plăcii. Am lipit un fir lung roșu la circuitul emițătorului IR care va fi utilizat pentru conectarea la sursa de alimentare de 5V și un fir negru care se va conecta la intrarea emițătorului IR a PCB. De fapt, am făcut firele puțin sau scurt, fără timp, așa că am putut conecta doar 5 dintre nodurile din fiecare coloană la final (în loc de 7). Am de gând să repar asta mai târziu.

Pasul 4: lipiți componentele PCB și atașați-le la placă

Lipiți componentele PCB și atașați-le la placă
Lipiți componentele PCB și atașați-le la placă
Lipiți componentele PCB și atașați-le la placă
Lipiți componentele PCB și atașați-le la placă
Lipiți componentele PCB și atașați-le la placă
Lipiți componentele PCB și atașați-le la placă

Notă: PCB-ul din imaginea atașată este prima versiune pe care am realizat-o căruia îi lipseau intrările și ieșirile de putere și, de asemenea, un lanț de margaretă pentru fiecare circuit interior. Noul design PCB corectează această greșeală.

Aici trebuie doar să urmați schema PCB pentru a lipi componentele pe PCB și apoi, odată ce ați terminat, lipiți PCB pe placa. Am folosit plăci de circuite externe pentru a atașa semnalul de alimentare de 5V, pe care l-am distribuit tuturor firelor galbene și roșii. În retrospectivă, nu aveam nevoie de astfel de fire roșii și galbene și aș fi putut conecta nodurile între ele (în loc să le conectez la o placă de circuit externă comună). Acest lucru va reduce cu adevărat cantitatea de dezordine din partea din spate a plăcii.

Deoarece aveam 8 rânduri de leduri ws2812b și 12 coloane, am ajuns cu 7 rânduri și 11 coloane de noduri (77 noduri în total). Ideea este să folosiți o parte a PCB-ului pentru o coloană de noduri și cealaltă parte pentru cealaltă coloană. Deci, având 11 coloane, aveam nevoie de 6 PCB-uri (ultimul avea nevoie doar de un grup de componente). Deoarece am făcut firele prea scurte, am putut conecta doar 55 de noduri, 11 coloane și 5 rânduri. Puteți vedea în imagine, am făcut o greșeală și am lipit firele brute pe placa, ceea ce ar fi bine dacă firele ar fi suficient de subțiri, dar în cazul meu au fost prea groase. Acest lucru a însemnat că am terminat firele de sârmă foarte aproape unul de celălalt pentru fiecare intrare de emițător IR și intrare de fotodiodă, așa că s-au întâmplat multe depanări din toate scurtcircuitele de sârmă. În viitor, voi folosi conectori pentru a conecta PCB-ul la firele de pe placă, pentru a evita scurtcircuitele și pentru a curăța lucrurile.

Deoarece Arduino poate înlănțui numai până la 8 registre de schimbare și multiplexoare, am creat două lanțuri separate, unul ocupând primele 8 coloane și altul ocupând restul de 3 coloane. Am atașat apoi fiecare lanț la un alt PCB care avea doar 2 multiplexoare, astfel încât să pot citi fiecare lanț de semnale de date multiplexor de la cele două multiplexoare în arduino. Aceste două multiplexoare au fost, de asemenea, în lanțuri de margarete. Asta înseamnă că au existat un total de 16 semnale de ieșire și 2 intrări analogice utilizate în arduino: 1 semnal de ieșire pentru controlul ledurilor ws2812b, 3 semnale de ieșire pentru primul lanț de registre de schimbare, 3 semnale de ieșire pentru primul lanț de multiplexoare, 3 semnale de ieșire pentru al doilea lanț de registre de schimbare, 3 semnale de ieșire pentru al doilea lanț de multiplexoare, 3 semnale de ieșire pentru cele 2 multiplexoare care agregează fiecare semnal de date PCB și, în final, 2 intrări analogice pentru fiecare semnal de date din cele 2 multiplexoare agregate.

Pasul 5: Examinați codul

Notă: Pe lângă codul interactiv de mai jos, am folosit o bibliotecă terță parte pentru a produce animații pentru led-urile ws2812b. Puteți găsi acest lucru aici:

Puteți găsi codul pe care l-am folosit aici:

În partea de sus definesc pinii arduino care se vor conecta la fiecare parte a PCB-ului. În metoda de configurare, am setat pinii de ieșire pentru multiplexoare, pornesc emițătoarele IR, stabilesc o matrice baseVal care ține evidența citirii luminii ambientale pentru fiecare fotodiodă și inițializează FastLED care va scrie pe ledurile ws2812b. În metoda buclei, resetăm lista ledurilor care sunt atribuite să fie aprinse în banda ws2812b. Apoi citim valorile din fotodiodele din lanțurile multiplexor și setăm ledurile ws2812b pe care se presupune că sunt activate dacă citirea din fotodiodă din nod depășește un anumit prag definit de la valoarea de bază a citirilor luminii ambientale. Apoi redăm LED-urile dacă există vreo modificare în nod care ar trebui să fie aprinsă. În caz contrar, continuă să se bucle până când se schimbă ceva pentru a accelera lucrurile.

Codul ar putea fi, probabil, îmbunătățit și caut să fac acest lucru, dar există aproximativ o întârziere de 1-2 secunde de la aprinderea luminilor după ce un obiect este așezat pe masă. Cred că problema de bază este că FastLED durează ceva timp pentru a reda cele 96 de leduri de pe masă, iar codul trebuie să parcurgă și să citească 77 de intrări din tabel. Am încercat acest cod cu 8 led-uri și l-am găsit aproape instantaneu, dar mă uit în locul dulce al LED-urilor care vor funcționa cu acest cod și vor fi aproape instantanee, precum și îmbunătățirea codului.

Pasul 6: Porniți Arduino

Porniți Arduino!
Porniți Arduino!
Porniți Arduino!
Porniți Arduino!
Porniți Arduino!
Porniți Arduino!

Acum tot ce trebuie să faceți este să porniți arduino și să vedeți funcția de masă! Folosind biblioteca de animații menționată anterior, puteți pune niște animații cu LED-uri cool ws2812b sau puteți pune codul mesei de cafea și puteți vedea cum se aprinde în fiecare secțiune. Simțiți-vă liber să comentați orice întrebare sau opinie și voi încerca să vă răspund în timp util. Noroc!

Recomandat: