Sadržaj:

Arduino interaktivni LED stolić: 6 koraka (sa slikama)
Arduino interaktivni LED stolić: 6 koraka (sa slikama)

Video: Arduino interaktivni LED stolić: 6 koraka (sa slikama)

Video: Arduino interaktivni LED stolić: 6 koraka (sa slikama)
Video: CS50 2013 - Week 9 2024, Novembar
Anonim
Image
Image
Arduino interaktivni LED stolić za kavu
Arduino interaktivni LED stolić za kavu

Napravio sam interaktivni stolić za kavu koji uključuje LED svjetla ispod objekta, kada se objekt stavi preko stola. Samo LED diode koje se nalaze ispod tog objekta će zasvijetliti. To čini učinkovitom upotrebom senzora blizine, a kada senzor blizine osjeti da je objekt dovoljno blizu, osvijetlit će čvor ispod tog objekta. Također koristi Arduino za postavljanje animacija za koje nisu potrebni senzori blizine, ali dodaje zaista cool efekt koji jednostavno volim.

Senzori blizine se sastoje od fotodioda i IC odašiljača. Emiteri koriste infracrveno svjetlo (koje ljudsko oko ne može vidjeti) kako bi sijali svjetlo sa stola, a fotodiode primaju infracrveno svjetlo odbijeno od objekta. Što se više svjetlosti reflektira (što je objekt bliže), to više dolazi do fluktuacije napona koji dolazi iz fotodioda. Ovo se koristi kao indikator za određivanje čvora koji treba upaliti. Čvorovi su kolekcija LED dioda ws2812b i senzora blizine.

Priloženi video prikazuje cijeli proces izrade, dok u nastavku navodim više detalja.

Supplies

  1. ws2812b LED žarulje -
  2. Napajanje 5V -
  3. Bilo koji Arduino koji sam koristio 2560 -
  4. Photodiodes
  5. IC odašiljači
  6. 10 Ohms Resistors
  7. 1 MOhms Resistors
  8. 47 pF kondenzatori
  9. CD4051B Multiplekseri
  10. SN74HC595 Registri pomaka
  11. ULN2803A Darlington Arrays
  12. Bilo koju podlogu za upotrebu kao veliku ploču za LED diode, koristio sam kompozitnu ploču od papira iz kućnog skladišta

Korak 1: Kreirajte ploču i umetnite LED diode

Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode
Kreirajte ploču i umetnite LED diode

Prvo što sam učinio bilo je stvoriti ploču koja će sadržavati LED diode koje ćemo staviti u stolić. Koristio sam komad papira od kompozitne ploče iz kućnog skladišta i izrezao ga na odgovarajuće dimenzije za stolić za kavu koji sam imao. Nakon što sam izrezao ploču po veličini, izbušio sam sve rupe za mjesto na koje LED diode idu. Sama ploča imala je 8 redova i 12 stupaca ws2812b LED dioda odvojenih 3 inča jedna od druge, a bile su pričvršćene u obliku serpentina. Koristio sam vruće ljepilo da ih učvrstim na mjestu.

Morao sam i da izbušim rupe u centru onoga što će postati čvor: 4 LED diode ws2812b koje čine kvadrat, 2 foto diode i 2 IC odašiljača na manjem kvadratu u sredini. Ove 4 rupe u središtu čvora bile bi mjesta za fotodiode i ir emitere (po 2). Naizmjenično sam ih postavio kako bih osigurao maksimalnu ekspoziciju i postavio ih na udaljenosti od 1 inča u sredini svakog čvora. Nisam ih trebao vruće lijepiti na mjesto, samo sam savio žice s druge strane kako bih bio siguran da neće izaći s druge strane. Također sam se potrudio saviti pozitivne i negativne krajeve u određenim smjerovima, tako da su pravilno orijentirani u krugu. Svi pozitivni vodiči bili su s lijeve strane stražnje strane ploče, dok su svi negativni vodiči bili s desne strane ploče.

Korak 2: Shvatite krug

Shvatite krug
Shvatite krug
Shvatite krug
Shvatite krug
Shvatite krug
Shvatite krug

Napomena: Svi animirani crteži nisu egzaktni u implementaciji (neki arduino pinovi su različiti, a ja ih lansiram nekoliko, o tome kasnije). Krajnji rezultat bio je malo drugačiji zbog složenosti kola, ali svi animirani krugovi služe kao odlična osnova za razumijevanje kako prototipirati svaki dio. Redovna shema i dijagram su takvi kao na tiskanoj ploči koja se koristi u projektu.

PCB kod koji sadrži KiCad projekt i gerber datoteke možete pronaći ovdje: https://github.com/tmckay1/interactive_coffee_tabl…, u slučaju da sami želite naručiti PCB -ove i stvoriti sličan projekt. Koristio sam NextPCB za izradu ploča.

U osnovi postoje tri različita kola koja čine ovu tablicu. Prvo nećemo detaljno prelaziti, a to je jednostavno kolo koje napaja LED diode ws2812b. PWM signal podataka šalje se s Arduina na LED žarulje ws2812b i kontrolira koje su boje gdje prikazane. Koristimo LED diode ws2812b jer se mogu pojedinačno adresirati, pa ćemo moći kontrolirati koje LED diode uključiti, a koje isključiti. LED diode ws2812b napajaju se vanjskim izvorom napajanja od 5 V, jer sam arduino nema dovoljno snage za uključivanje svih svjetala. U priloženom animiranom dijagramu koriste pullup otpornik od 330 Ohma, međutim ja to ne koristim u svojoj konstrukciji.

Drugi krug uključuje IC odašiljače. Ovo kolo koristi registar pomaka za kontrolu darlingtonovog niza koji šalje napajanje IC odašiljačima. Registar pomaka je integrirano kolo koje može slati VISOKE i NISKE signale na više pinova sa samo male količine pinova. U našem slučaju koristimo registar pomaka SN74HC595 koji se može kontrolirati s 3 ulaza, ali kontrolira do 8 izlaza. Prednost korištenja ovog s arduinom je ta što možete lansirati do 8 registara pomaka zaredom (arduino može podnijeti samo do 8 njih). To znači da su vam potrebna samo 3 pina s arduina za uključivanje i isključivanje 64 IC odašiljača. Darlington niz vam omogućava da napajate uređaj iz vanjskog izvora ako je ulazni signal VISOK, ili isključite napajanje za taj uređaj ako je ulazni signal NISKI. Stoga u našem primjeru koristimo darlington niz ULN2803A, koji dopušta vanjskom izvoru napajanja od 5 V za uključivanje i isključivanje do 8 IC odašiljača. Koristimo otpornik od 10 ohma s IR odašiljačima u seriji kako bismo dobili maksimalnu amperažu od IC odašiljača.

Treći krug koristi multiplekser za prijem više ulaza sa fotodioda i šalje izlaz u signal podataka. Multiplekser je uređaj koji se koristi za preuzimanje više ulaza s kojih želite čitati, a potrebno mu je samo nekoliko pinova za čitanje s tih ulaza. Može učiniti i suprotno (demultipleks), ali ga ovdje ne koristimo za tu aplikaciju. Dakle, u našem slučaju koristimo CD4051B multiplekser za prihvaćanje do 8 signala s fotodioda, a potrebna su nam samo 3 ulaza za čitanje iz tih signala. Osim toga, možemo spojiti do 8 multipleksera (arduino može podnijeti samo 8 njih). To znači da arduino može čitati sa 64 signala fotodiode sa samo 3 digitalna pina. Fotodiode su usmjerene obrnuto pristrasno, što znači da umjesto da smo orijentirane u normalnom smjeru s pozitivnim vodičem pričvršćenim na izvor pozitivnog napona, negativnom odvodu dodjeljujemo izvor pozitivnog napona. Ovo efikasno pretvara fotodiode u foto otpornike, čiji se otpor mijenja ovisno o količini svjetlosti koju prima. Zatim stvaramo razdjelnik napona za očitavanje napona koji ovisi o promjeni otpora fotodioda dodavanjem visoko otpornog otpornika od 1 MOhms na masu. To nam omogućuje primanje većih i nižih napona na arduino ovisno o tome koliko IR svjetla fotodiode primaju.

Većinu ovog dizajna slijedio sam od druge osobe koja je to učinila ovdje: https://www.instructables.com/Infrared-Proximity-S… U tom dizajnu su dodali i 47pF kondenzator, kao i mi, preko puta otpornika od 1 MOhm koristi se za stvaranje razdjelnika napona s fotodiodama. Razlog zbog kojeg je to dodao bio je taj što je uključivao i isključivao IR emitere pomoću PWM signala i to je povlačilo mali pad napona sa fotodioda kada su se IR emiteri odmah uključili. Zbog toga su foto diode promijenile otpor čak i kada nisu primale više IC svjetlosti od objekta jer su IC emiteri dijelili isti izvor napajanja od 5 V kao i fotodiode. Kondenzator je korišten kako bi se osiguralo da nema pada napona pri uključivanju i isključivanju IC odašiljača. Prvo sam planirao napraviti istu strategiju, ali mi je isteklo vrijeme da je isprobam, pa sam umjesto toga uvijek ostavljao uključene IC odašiljače. Htio bih to promijeniti u budućnosti, ali dok ne redizajniram kôd i krug, trenutno je PCB dizajnirana tako da uvijek ima uključena IC svjetla, a svejedno sam zadržao kondenzatore. Kondenzator vam ne bi trebao biti potreban ako koristite ovaj dizajn PCB -a, ali predstavit ću drugu verziju PCB -a koja prihvaća dodatni ulaz u registar pomaka koji će vam omogućiti moduliranje i isključivanje IC odašiljača. Ovo će uštedjeti mnogo na potrošnji energije.

Možete provjeriti animirane dijagrame za postavljanje prototipa za testiranje na vašem arduinu. Postoji i detaljnija shema u boji za svako kolo koja ocrtava postavljanje i orijentaciju elektroničkih uređaja. U priloženoj shemi PCB -a imamo 4 ukupna kola, 2 kola za uključivanje IC odašiljača i 2 kola za očitavanje sa fotodioda. Orijentisane su na PCB 2 grupe jedna do druge sa grupom koja se sastoji od 1 IC kruga emitera i 1 fotodiodnog kola, tako da se 2 kolone od 8 čvorova mogu staviti u jednu PCB. Također možemo povezati dva kruga zajedno, tako da tri pina iz arduina mogu kontrolirati dva registra pomaka, a 3 dodatna pina mogu kontrolirati dva multipleksera na ploči. Postoji dodatno izlazno zaglavlje za povezivanje dodatnih PCB -a.

Evo nekoliko izvora koje sam slijedio za izradu prototipova:

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

Korak 3: Lemljenje žica na čvor

Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor
Lemljenje žica na čvor

Sada kada razumijete kako je sklop napravljen, lemite žice na svaki čvor. Paralelno sam lemio fotodiode (žute i sive žice) i ir odašiljače u seriji (narančasta žica). Zatim sam paralelno lemio dužu žutu žicu na fotodiode koja će biti spojena na izvor napajanja od 5 V, i plavu žicu koja će biti spojena na ulaz fotodiode na ploči. Lemio sam dugu crvenu žicu na krug IC odašiljača koji će se koristiti za spajanje na izvor napajanja od 5 V i crnu žicu koja će se spojiti na ulaz IC odašiljača na PCB -u. Zapravo sam malo skratio žice pa je isteklo vrijeme pa sam na kraju mogao spojiti samo 5 čvorova u svakoj koloni (umjesto 7). Ovo planiram popraviti kasnije.

Korak 4: Lemite komponente PCB -a i pričvrstite ih na ploču

Lemite komponente PCB -a i pričvrstite ih na ploču
Lemite komponente PCB -a i pričvrstite ih na ploču
Lemite komponente PCB -a i pričvrstite ih na ploču
Lemite komponente PCB -a i pričvrstite ih na ploču
Lemite komponente PCB -a i pričvrstite ih na ploču
Lemite komponente PCB -a i pričvrstite ih na ploču

Napomena: PCB na priloženoj slici je prva verzija koju sam napravio bez nedostatka ulaza i izlaza za napajanje, a također i za svaki unutarnji krug. Novi dizajn PCB -a ispravlja ovu grešku.

Ovdje samo trebate slijediti shemu PCB -a da biste lemili komponente na PCB, a zatim kada to učinite, lemite PCB na ploču. Koristio sam vanjske ploče za priključivanje 5V signala napajanja, koji sam distribuirao na sve žute i crvene žice. Gledajući unatrag, nisu mi trebale tako duge crvene i žute žice i mogao sam povezati čvorove jedan s drugim (umjesto da ih povežem na zajedničku vanjsku ploču). Ovo će zaista smanjiti količinu nereda na stražnjoj strani ploče.

Pošto sam imao 8 redova ws2812b LED dioda i 12 stupaca, završio sam sa 7 redova i 11 kolona čvorova (ukupno 77 čvorova). Ideja je koristiti jednu stranu PCB -a za jednu kolonu čvorova, a drugu stranu za drugu kolonu. Dakle, budući da sam imao 11 stupaca, trebalo mi je 6 PCB -a (zadnjoj je bila potrebna samo jedna grupa komponenti). Budući da sam žice učinio prekratkim, mogao sam povezati samo 55 čvorova, 11 kolona i 5 redova. Na slici možete vidjeti da sam pogriješio i lemio sirove žice na ploču, što bi bilo u redu da su žice dovoljno tanke, ali u mom slučaju bile su predebele. To je značilo da su mi krajevi žica koji se troše vrlo blizu jedan za drugi ulaz IR odašiljača i ulaz fotodiode, tako da je bilo dosta otklanjanja grešaka zbog kratkog spoja žice. U budućnosti ću koristiti konektore za spajanje PCB -a na žice na ploči kako bih izbjegao kratke spojeve i očistio stvari.

Budući da Arduino može povezati samo 8 registara pomaka i multipleksera, stvorio sam dva odvojena lanca, jedan koji zauzima prvih 8 kolona, a drugi preostale 3 kolone. Zatim sam svaki lanac priključio na drugu tiskanu ploču koja je imala samo 2 multipleksera, tako da sam mogao čitati svaki lanac signala podataka multipleksera iz ta dva multipleksera u arduino. Ova dva multipleksera su također vezana tratinčicom. To znači da je u arduinu bilo ukupno 16 izlaznih signala i 2 analogna ulaza: 1 izlazni signal za kontrolu LED -a ws2812b, 3 izlazna signala za prvi lanac registara pomaka, 3 izlazna signala za prvi lanac multipleksera, 3 izlazna signala za drugi lanac registara pomaka, 3 izlazna signala za drugi lanac multipleksera, 3 izlazna signala za 2 multipleksera koji agregiraju svaki signal podataka sa PCB -a, i na kraju 2 analogna ulaza za svaki signal podataka iz 2 agregatna agregata.

Korak 5: Pregledajte Kodeks

Napomena: Osim interaktivnog koda u nastavku, koristio sam biblioteku treće strane za proizvodnju animacija za LED diode ws2812b. To možete pronaći ovdje:

Kôd koji sam koristio možete pronaći ovdje:

Pri vrhu definiram arduino pinove koji će se spojiti na svaki dio PCB -a. U načinu postavljanja postavio sam izlazne pinove za multipleksere, uključio IC odašiljače, postavio niz baseVal koji prati očitavanje ambijentalnog svjetla za svaku fotodiodu i inicijalizirao FastLED koji će pisati na LED diode ws2812b. U metodi petlje, resetirali smo listu LED dioda koje su dodijeljene da budu uključene na traci ws2812b. Zatim čitamo vrijednosti s fotodioda u lancima multipleksera i postavljamo LED diode ws2812b koje bi trebale biti uključene ako je očitanje s fotodiode u čvoru iznad određenog praga od osnovne vrijednosti očitanja ambijentalnog svjetla. Zatim generiramo LED diode ako dođe do promjene u čvoru koja bi trebala biti uključena. U suprotnom, nastavlja se ponavljati sve dok se nešto ne promijeni kako bi se stvari ubrzale.

Kôd bi se vjerovatno mogao poboljšati i ja to radim, ali postoji kašnjenje od 1-2 sekunde od trenutka kada se svjetla upale nakon što se predmet stavi na stol. Vjerujem da je osnovni problem FastLED -u potrebno neko vrijeme da prikaže 96 LED dioda na stolu, a kôd mora proći kroz petlje i pročitati 77 ulaza iz tablice. Pokušao sam ovaj kod sa 8 LED dioda i otkrio da je gotovo trenutačan, ali tražim slatku točku LED dioda koje će raditi s ovim kodom i biti gotovo trenutne, kao i poboljšati kod.

Korak 6: Uključite Arduino

Uključite Arduino!
Uključite Arduino!
Uključite Arduino!
Uključite Arduino!
Uključite Arduino!
Uključite Arduino!

Sada sve što trebate učiniti je uključiti arduino i vidjeti funkciju tablice! Pomoću prethodno spomenute biblioteke animacija možete staviti neke sjajne ws2812b LED animacije ili možete staviti kôd stolića i vidjeti kako svijetli u svakom odjeljku. Slobodno komentirajte bilo kakva pitanja ili mišljenja, a ja ću vam se pokušati javiti na vrijeme. Živjeli!

Preporučuje se: