Sisällysluettelo:

Arduino Interactive LED -sohvapöytä: 6 vaihetta (kuvilla)
Arduino Interactive LED -sohvapöytä: 6 vaihetta (kuvilla)

Video: Arduino Interactive LED -sohvapöytä: 6 vaihetta (kuvilla)

Video: Arduino Interactive LED -sohvapöytä: 6 vaihetta (kuvilla)
Video: 8x8x8 LED CUBE WITH ARDUINO UNO 2024, Heinäkuu
Anonim
Image
Image
Arduino Interactive LED -sohvapöytä
Arduino Interactive LED -sohvapöytä

Tein interaktiivisen sohvapöydän, joka sytyttää led -valot esineen alle, kun esine asetetaan pöydän päälle. Vain kohteen alla olevat ledit syttyvät. Se tekee tämän käyttämällä tehokkaasti läheisyysantureita, ja kun läheisyysanturi havaitsee kohteen olevan riittävän lähellä, se sytyttää kohteen alla olevan solmun. Se käyttää myös Arduinoa laittaakseen animaatioita, jotka eivät tarvitse läheisyysanturia, mutta lisäävät todella viileän vaikutelman, jota rakastan.

Läheisyysanturit koostuvat fotodiodista ja infrapunalähettimistä. Säteilijät käyttävät infrapunavaloa (jota ihmissilmä ei näe) loistamaan pöydän valoa, ja fotodiodit vastaanottavat esineestä heijastuneen infrapunavalon. Mitä enemmän valoa heijastuu (mitä lähempänä kohdetta), sitä enemmän jännite vaihtelee valodiodeista. Tätä käytetään indikaattorina kertomaan, mikä solmu syttyy. Solmut ovat kokoelma ws2812b -ledejä ja läheisyysanturi.

Liitteenä oleva video kattaa koko rakennusprosessin, kun taas hahmotan alla olevia yksityiskohtia.

Tarvikkeet

  1. ws2812b LED -lamput -
  2. 5V virtalähde -
  3. Mikä tahansa Arduino, jota käytin 2560 -
  4. Valodiodit
  5. IR -säteilijät
  6. 10 ohmin vastukset
  7. 1 MOhms -vastukset
  8. 47 pF kondensaattorit
  9. CD4051B -multiplekserit
  10. SN74HC595 Siirtorekisterit
  11. ULN2803A Darlingtonin matriisit
  12. Mikä tahansa alusta, jota voidaan käyttää suurena ledinä, käytin paperikomposiittilevyä kotoa

Vaihe 1: Luo kortti ja aseta LEDit paikalleen

Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen
Luo levy ja aseta LEDit paikalleen

Ensimmäinen asia, jonka tein, oli luoda taulu, joka sisältää ledit, jotka laitamme sohvapöydän sisään. Käytin paperikomposiittilevyä kotoa varastosta ja leikkasin sen sopivan mittaiselle sohvapöydälle. Leikattuani levyn oikeaan kokoon porasin kaikki reiät ledien menemiseen. Taulukossa itsessään oli 8 riviä ja 12 saraketta ws2812b -ledejä, jotka oli erotettu 3 tuumaa toisistaan, ja ne kiinnitettiin serpentiinikuvioon. Kiinnitin ne paikalleen kuumaliimalla.

Minun piti myös porata reikiä solmun keskelle: 4 neliötä muodostavaa ws2812b -lediä, 2 fotodiodia ja 2 IR -säteilijää pienemmälle neliölle sen keskelle. Nämä 4 reikää solmun keskellä olisivat pisteitä fotodiodeille ja säteilylähettimille (2 kpl). Vaihdoin niitä maksimaalisen valotuksen varmistamiseksi ja asetin ne noin 1 tuuman välein kunkin solmun keskelle. Minun ei tarvinnut liimata niitä paikoilleen, taivutin vain johtoja toisella puolella varmistaakseni, etteivät ne tule ulos toiselta puolelta. Varmistin myös, että taivutan positiiviset ja negatiiviset päät tiettyihin suuntiin, jotta ne suuntautuisivat oikein piirissä. Kaikki positiiviset johdot olivat levyn takaosan vasemmalla puolella, kun taas kaikki negatiiviset johdot olivat levyn oikealla puolella.

Vaihe 2: Ymmärrä piiri

Ymmärrä piiri
Ymmärrä piiri
Ymmärrä piiri
Ymmärrä piiri
Ymmärrä piiri
Ymmärrä piiri

Huomautus: Kaikki animoidut piirustukset eivät ole toteutuksen mukaisia (jotkut arduino -nastat ovat erilaisia, ja ketjutan muutaman, lisää siitä myöhemmin). Lopputulos oli hieman erilainen piirin monimutkaisuuden vuoksi, mutta kaikki animoidut piirit toimivat loistavana pohjana ymmärtää kunkin osan prototyyppi. Säännöllinen kaavio ja piirikaavio ovat sellaisia kuin ne ovat projektissa käytetyssä piirilevyssä.

PiCB -koodi, joka sisältää KiCad -projektin ja gerber -tiedostot, löytyy täältä: https://github.com/tmckay1/interactive_coffee_tabl…, jos haluat tilata piirilevyt itse ja luoda samanlaisen projektin. Käytin NextPCB: tä luodakseni levyt.

Tässä taulukossa on periaatteessa kolme eri piiriä. Ensimmäistä emme mene yksityiskohtaisesti läpi, ja se on yksinkertainen piiri, joka käyttää ws2812b -lediä. PWM -datasignaali lähetetään Arduinosta ws2812b -led -lamppuihin ja ohjaa mitä värejä näytetään missä. Käytämme ws2812b -ledejä, koska ne ovat yksilöllisesti osoitettavissa, joten voimme hallita, mitkä ledit sytytetään ja mitkä sammutetaan. Ws2812b -ledit saavat virtansa 5 V: n ulkoisesta virtalähteestä, koska arduino ei yksin riitä sytyttämään kaikkia valoja. Liitetyssä animoidussa kaaviossa he käyttävät 330 ohmin vetovoimaa, mutta en käytä sitä rakennuksessani.

Toinen piiri kytkee IR -lähettimet päälle. Tämä piiri käyttää siirtorekisteriä ohjaamaan darlington -matriisia, joka lähettää virtaa IR -lähettimille. Siirtorekisteri on integroitu piiri, joka pystyy lähettämään HIGH- ja LOW -signaaleja useille nastoille vain pienestä määrästä nastoja. Meidän tapauksessamme käytämme SN74HC595 -siirtorekisteriä, jota voidaan ohjata 3 tulosta, mutta ohjataan jopa 8 lähtöä. Tämän hyödyntäminen arduinon kanssa on se, että voit ketjuttaa jopa 8 vuororekisteriä peräkkäin (arduino pystyy käsittelemään vain kahdeksan niistä). Tämä tarkoittaa, että tarvitset vain 3 nastaa arduinosta 64 IR -lähettimen kytkemiseksi päälle ja pois. Darlington -järjestelmän avulla voit kytkeä laitteeseen virran ulkoisesta lähteestä, jos tulosignaali on KORKEA, tai katkaista virran kyseisestä laitteesta, jos tulosignaali on matala. Joten esimerkissämme käytämme ULN2803A darlington -järjestelmää, jonka avulla 5 V: n ulkoinen virtalähde voi kytkeä päälle ja pois jopa 8 IR -lähetintä. Käytämme 10 ohmin vastusta sarjassa olevien IR -lähettimien kanssa saadaksemme maksimitehon IR -lähettimistä.

Kolmas piiri käyttää multiplekseriä vastaanottamaan useita tuloja fotodiodilta ja lähettää lähdön datasignaalina. Multiplekseri on laite, jota käytetään ottamaan useita tuloja, joista haluat lukea, ja se tarvitsee vain muutaman nastan näiden tulojen lukemiseen. Se voi tehdä myös päinvastoin (demultiplex), mutta emme käytä sitä tässä sovelluksessa. Joten tapauksessamme käytämme CD4051B -multiplekseria ottamaan jopa 8 signaalia fotodiodilta, ja tarvitsemme vain 3 tuloa näiden signaalien lukemiseen. Lisäksi voimme ketjuttaa jopa 8 multiplekseria (arduino pystyy käsittelemään vain enintään 8). Tämä tarkoittaa, että arduino voi lukea 64 valodiodisignaalista vain 3 digitaalista nastaa. Valodiodit ovat suuntautuneita käänteisesti esijännitettyjä, mikä tarkoittaa, että sen sijaan, että ne olisi suunnattu normaaliin suuntaan positiivisen johtimen ollessa kiinnitetty positiiviseen jännitelähteeseen, osoitamme negatiivisen johtimen positiiviselle jännitelähteelle. Tämä muuttaa tehokkaasti fotodiodit valokuvavastuksiksi, joiden vastus muuttuu sen vastaanottaman valon määrän mukaan. Luomme sitten jännitteenjakajan lukemaan jännitteen, joka riippuu fotodiodien vaihtelevasta vastuksesta, lisäämällä maahan erittäin vastustuskykyinen 1 MOhm: n vastus. Tämän avulla voimme vastaanottaa korkeampia ja pienempiä jännitteitä arduinoon riippuen siitä, kuinka paljon infrapunavaloa fotodiodit vastaanottavat.

Seurasin suurimman osan tästä suunnittelusta toiselta henkilöltä, joka teki tämän täällä: https://www.instructables.com/Infrared-Proximity-S… Tässä mallissa he lisäsivät myös 47pF: n kondensaattorin, kuten mekin, vastapäätä 1 MOhm: n vastusta käytetään jännitejakajan luomiseen fotodiodien kanssa. Syy, miksi hän lisäsi sen, johtui siitä, että hän heilautti IR -lähettimiä päälle ja pois PWM -signaalilla ja tämä nosti pienen jännitehäviön fotodiodeista, kun IR -lähettimet kytkettiin välittömästi päälle. Tämä sai valodiodit muuttamaan vastustaan silloinkin, kun se ei saanut enemmän infrapunavaloa kohteesta, koska IR -lähettimillä oli sama 5 V: n virtalähde kuin fotodiodit. Kondensaattoria käytettiin varmistamaan, ettei jännitehäviö ole, kun IR -lähettimet kytketään päälle ja pois. Suunnittelin alun perin saman strategian tekemistä, mutta testiaika loppui, joten jätin infrapunalähettimet aina päälle. Haluaisin muuttaa tätä tulevaisuudessa, mutta kunnes suunnittelen koodin ja piirin uudelleen, PCB on tällä hetkellä suunniteltu niin, että infrapunavalot palavat aina, ja pidin kondensaattorit joka tapauksessa. Sinun ei tarvitse kondensaattoria, jos käytät tätä PCB -mallia, mutta aion esitellä toisen piirilevyn version, joka hyväksyy ylimääräisen tulon siirtorekisteriin, jonka avulla voit moduloida IR -lähettimet päälle ja pois. Tämä säästää paljon virrankulutuksessa.

Voit tarkistaa liitettyjen animoitujen kaavioiden prototyyppiasetukset testataksesi arduinoasi. Jokaiselle piirille on myös yksityiskohtaisempi värillinen kaavio, jossa esitetään elektronisten laitteiden asennus ja suunta. Liitteenä olevassa piirilevykaaviossa meillä on yhteensä 4 piiriä, 2 piiriä, joita käytetään IR -lähettimien kytkemiseen päälle, ja 2 piiriä, jotka luetaan valodiodeilta. Ne on suunnattu PCB 2 -ryhmiin vierekkäin ryhmän kanssa, joka koostuu 1 IR -lähetinpiiristä ja 1 fotodiodipiiristä, joten kaksi 8 solmun saraketta voidaan sijoittaa yhdeksi PCB: ksi. Ketjutamme myös kaksi piiriä yhteen, joten kolme arduino -nastaa voi ohjata kahta vuororekisteriä ja 3 lisätappia ohjaamaan kahta levyn multiplekseriä. On olemassa ylimääräinen ulostulon otsikko, jolla voidaan ketjuttaa lisäpiirilevyihin.

Seuraavassa on muutamia resursseja, joita seurasin prototyyppien laatimisessa:

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

Vaihe 3: Juotosjohdot solmuun

Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun
Juottaa johdot solmuun

Nyt kun ymmärrät, miten piiri on tehty, mene eteenpäin ja juota johdot jokaiseen solmuun. Juotin fotodiodit rinnakkain (keltaiset ja harmaat johdot) ja ir -emitterit sarjassa (oranssi lanka). Juotin sitten pidemmän keltaisen johdon rinnakkaisiin fotodiodeihin, jotka kiinnitetään 5 V: n virtalähteeseen, ja sinisen johdon, joka kiinnitetään piirilevyn fotodiodituloon. Juotin pitkän punaisen johdon IR -lähetinpiiriin, jota käytetään liittämään 5 V: n virtalähteeseen, ja mustan johdon, joka liitetään PCB: n IR -emitterituloon. Tein johdot hieman liian lyhyiksi, joten aika loppui, joten pystyin yhdistämään vain 5 solmua kussakin sarakkeessa lopulta (7 sijasta). Aion korjata tämän myöhemmin.

Vaihe 4: Juottaa piirilevykomponentit ja kiinnitä se piirilevyyn

Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn
Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn
Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn
Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn
Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn
Juottaa piirilevykomponentit ja kiinnittää ne piirilevyyn

Huomautus: Liitteenä olevassa kuvassa oleva piirilevy on ensimmäinen tekemäni versio, josta puuttuivat tehotulot ja -lähdöt sekä myös ketjutettu ketju jokaiselle sisäpiirille. Uusi piirilevyrakenne korjaa tämän virheen.

Tässä sinun on vain noudatettava piirilevykaaviota komponenttien juottamiseen piirilevyyn ja sitten, kun tämä on tehty, juotettava piirilevy levylle. Käytin ulkoisia piirilevyjä kiinnittämään 5 V: n tehosignaalin, jonka jaoin kaikkiin keltaisiin ja punaisiin johtoihin. Jälkeenpäin ajatellen en tarvinnut niin pitkiä punaisia ja keltaisia johtoja ja olisin voinut yhdistää solmut toisiinsa (sen sijaan, että olisimme liittäneet ne yhteiseen ulkoiseen piirilevyyn). Tämä on todella vähentänyt sotkua levyn takana.

Koska minulla oli 8 riviä ws2812b -ledejä ja 12 saraketta, päädyin 7 riviä ja 11 saraketta solmuja (yhteensä 77 solmua). Ajatuksena on käyttää piirilevyn toista puolta yhdelle solmukohdalle ja toista puolta toiselle sarakkeelle. Joten koska minulla oli 11 saraketta, tarvitsin 6 PCB: tä (viimeinen tarvitsi vain yhden komponenttiryhmän). Koska tein johdot liian lyhyiksi, pystyin yhdistämään vain 55 solmua, 11 saraketta ja 5 riviä. Kuvasta näet, että tein virheen ja juotin raakalangat levylle, mikä olisi hienoa, jos johdot olisivat riittävän ohuita, mutta minun tapauksessani ne olivat liian paksuja. Tämä tarkoitti, että minulla oli kuluvia langanpäitä hyvin lähellä toisiaan jokaiselle IR -lähettimen tulolle ja fotodioditulolle, joten kaikesta langan oikosulusta tapahtui paljon virheenkorjausta. Jatkossa aion käyttää liittimiä PCB: n liittämiseen piirilevyn johtoihin, jotta vältetään oikosulku ja puhdistetaan asiat.

Koska Arduino voi ketjuttaa vain enintään 8 vuororekisteriä ja multiplekseria, loin kaksi erillistä ketjua, joista toinen otti ensimmäiset 8 saraketta ja toinen loput 3 saraketta. Liitin sitten jokaisen ketjun toiseen piirilevyyn, jossa oli vain kaksi multiplekseriä, jotta voisin lukea kunkin multiplekserin datasignaalien ketjun näistä kahdesta multiplekseristä arduinoon. Nämä kaksi multiplekseriä oli myös ketjutettu. Tämä tarkoittaa, että arduinossa käytettiin yhteensä 16 lähtösignaalia ja 2 analogista tuloa: 1 lähtösignaali ws2812b -ledien ohjaamiseen, 3 lähtösignaalia ensimmäisten siirtorekisterien ketjuun, 3 lähtösignaalia multiplekserien ensimmäiseen ketjuun, 3 lähtösignaalia siirtorekisterien toiselle ketjulle, 3 lähtösignaalia multiplekserien toiselle ketjulle, 3 lähtösignaalia kahdelle multiplekserille, jotka yhdistävät jokaisen PCB -datasignaalin, ja lopuksi 2 analogista tuloa kullekin 2 aggregaattimultiplekserin datasignaalille.

Vaihe 5: Tarkista koodi

Huomautus: Alla olevan interaktiivisen koodin lisäksi käytin kolmannen osapuolen kirjastoa animaatioiden tuottamiseen ws2812b -ledeille. Löydät sen täältä:

Löydät käyttämäni koodin täältä:

Yläosassa määritän arduino -nastat, jotka yhdistetään jokaiseen piirilevyn osaan. Määritän asetusmenetelmässä multipleksereiden lähtönastat, kytken IR -lähettimet päälle, asetan baseVal -taulukon, joka seuraa kunkin valodiodin ympäröivän valon lukemaa, ja alustan FastLEDin, joka kirjoittaa ws2812b -ledeille. Silmukkamenetelmässä nollaamme luettelon ledeistä, jotka on määritetty olemaan päällä ws2812b -nauhassa. Sitten luemme arvot multiplekseriketjujen fotodiodeista ja asetamme ws2812b -ledit päälle, joiden oletetaan olevan päällä, jos solmun fotodiodin lukema ylittää tietyn määritetyn kynnyksen ympäröivän valon lukemien perusarvosta. Sitten renderöimme LEDit, jos solmussa tapahtuu muutoksia, joiden pitäisi olla päällä. Muuten se jatkaa silmukointia, kunnes jotain muuttuu nopeuttaakseen asioita.

Koodia voitaisiin todennäköisesti parantaa, ja harkitsen tämän tekemistä, mutta valojen syttymisestä on noin 1-2 sekunnin viive, kun esine asetetaan pöydälle. Uskon, että taustalla oleva ongelma on, että FastLED kestää jonkin aikaa pöydän 96 ledin näyttämiseen ja koodin täytyy silmukata läpi ja lukea 77 tuloa taulukosta. Yritin tätä koodia kahdeksalla ledillä ja huomasin sen olevan lähes välitön, mutta tarkastelen LEDien makeaa kohtaa, jotka toimivat tämän koodin kanssa ja ovat lähes välittömiä, sekä parantamaan koodia.

Vaihe 6: Käynnistä Arduino

Käynnistä Arduino!
Käynnistä Arduino!
Käynnistä Arduino!
Käynnistä Arduino!
Kytke Arduino päälle!
Kytke Arduino päälle!

Nyt sinun tarvitsee vain kytkeä arduino päälle ja nähdä taulukkotoiminto! Käyttämällä aiemmin mainittua animaatiokirjastoa voit laittaa hienoja ws2812b -led -animaatioita tai laittaa sohvapöydän koodin päälle ja nähdä sen syttyvän kussakin osiossa. Voit vapaasti kommentoida kysymyksiä tai mielipiteitä, ja yritän ottaa sinuun yhteyttä ajoissa. Kippis!

Suositeltava: