Turinys:

„Arduino“interaktyvus LED kavos staliukas: 6 žingsniai (su nuotraukomis)
„Arduino“interaktyvus LED kavos staliukas: 6 žingsniai (su nuotraukomis)

Video: „Arduino“interaktyvus LED kavos staliukas: 6 žingsniai (su nuotraukomis)

Video: „Arduino“interaktyvus LED kavos staliukas: 6 žingsniai (su nuotraukomis)
Video: Interaktyvus LED paveikslas "Metų laikai" 2024, Gruodis
Anonim
Image
Image
„Arduino“interaktyvus LED kavos staliukas
„Arduino“interaktyvus LED kavos staliukas

Aš padariau interaktyvų kavos staliuką, kuris įjungia LED lemputes po daiktu, kai objektas yra padėtas virš stalo. Užsidegs tik šviesos diodai, esantys po šiuo objektu. Tai daroma efektyviai naudojant artumo jutiklius, o kai artumo jutiklis nustato, kad objektas yra pakankamai arti, jis užsidegs mazgą po šiuo objektu. Jis taip pat naudoja „Arduino“, norėdamas įdėti animaciją, kuriai nereikia artumo jutiklių, bet prideda tikrai šaunų efektą, kuris man tiesiog patinka.

Artumo jutikliai yra sudaryti iš fotodiodų ir IR spindulių. Šviesos spinduliuotė naudoja infraraudonąją šviesą (kurios žmogaus akis nemato), kad šviestų iš stalo, o fotodiodai gauna nuo objekto atsispindinčią infraraudonąją šviesą. Kuo daugiau šviesos atsispindi (kuo arčiau objekto), tuo daugiau svyruoja įtampa, sklindanti iš fotodiodų. Tai naudojama kaip indikatorius, nurodantis, kuris mazgas turi užsidegti. Mazgai yra „ws2812b“šviesos diodų kolekcija ir artumo jutiklis.

Pridėtame vaizdo įraše apžvelgiamas visas kūrimo procesas, o toliau aprašau daugiau išsamios informacijos.

Prekės

  1. ws2812b LED lemputės -
  2. 5 V maitinimo šaltinis -
  3. Bet kokiam „Arduino“naudoju 2560 -
  4. Fotodiodai
  5. IR spinduliuotės
  6. 10 omų rezistoriai
  7. 1 MOhms rezistoriai
  8. 47 pF kondensatoriai
  9. CD4051B multiplekseriai
  10. SN74HC595 pamainų registrai
  11. ULN2803A Darlingtono masyvai
  12. Bet kokį substratą, skirtą naudoti kaip didelę LED plokštę, aš naudoju popierinę kompozicinę plokštę iš namų sandėlio

1 žingsnis: sukurkite plokštę ir įdėkite šviesos diodus

Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus
Sukurkite plokštę ir įdėkite šviesos diodus

Pirmas dalykas, kurį padariau, buvo sukurti lentą, kurioje bus šviesos diodai, kuriuos įdėsime į kavos staliuką. Aš panaudojau popieriaus kompozicinės plokštės gabalą iš namų sandėlio ir supjaustiau jį pagal turimo kavos staliuko matmenis. Nupjovęs lentą pagal dydį, išgręžiau visas skylutes, kur eina šviesos diodai. Pati plokštė turėjo 8 eilutes ir 12 stulpelių ws2812b lempų, atskirtų 3 colių atstumu vienas nuo kito, ir jie buvo pritvirtinti gyvatės pavidalu. Aš pritvirtinau juos karštais klijais.

Aš taip pat turėjau gręžti skyles centre, kuris taps mazgu: 4 ws2812b šviesos diodus, sudarančius kvadratą, 2 foto diodus ir 2 IR spinduliuotę mažesnėje aikštėje to centre. Šios 4 skylės mazgo centre būtų fotodiodų ir skleidėjų dėmės (po 2). Pakeičiau juos, kad būtų užtikrinta maksimali ekspozicija, ir padėjau juos maždaug 1 colio atstumu kiekvieno mazgo centre. Man nereikėjo jų karštai klijuoti, tik sulenkiau laidus kitoje pusėje, kad įsitikintumėte, jog jie neišeis iš kitos pusės. Taip pat įsitikinau, kad teigiami ir neigiami galai yra sulenkti tam tikromis kryptimis, kad jie būtų teisingai nukreipti grandinėje. Visi teigiami laidai buvo kairėje lentos gale, o visi neigiami - dešinėje lentos pusėje.

2 žingsnis: supraskite grandinę

Supraskite grandinę
Supraskite grandinę
Supraskite grandinę
Supraskite grandinę
Supraskite grandinę
Supraskite grandinę

Pastaba: visi animaciniai brėžiniai nėra tikslūs įgyvendinimui (kai kurie „arduino“kaiščiai yra skirtingi, o aš keletą kartų susieju grandinę, daugiau apie tai vėliau). Galutinis rezultatas buvo šiek tiek kitoks dėl grandinės sudėtingumo, tačiau visos animacinės grandinės yra puikus pagrindas suprasti, kaip prototipuoti kiekvieną dalį. Įprasta schema ir schema yra tokia, kokia yra projekte naudojamoje PCB.

PCB kodą, kuriame yra „KiCad“projektas ir „Gerber“failai, rasite čia: https://github.com/tmckay1/interactive_coffee_tabl…, jei norite užsisakyti PCB ir sukurti panašų projektą. Lentoms kurti naudojau „NextPCB“.

Iš esmės šią lentelę sudaro trys skirtingos grandinės. Pirmasis, kurio mes išsamiai nenagrinėsime, yra paprasta grandinė, maitinanti „ws2812b“lemputes. PWM duomenų signalas siunčiamas iš „Arduino“į lemputes „ws2812b“ir valdo, kokios spalvos yra rodomos. Mes naudojame „ws2812b“šviesos diodus, nes jie yra adresuojami atskirai, todėl galėsime kontroliuoti, kuriuos iš šviesos diodų įjungti, o kuriuos išjungti. „Ws2812b“šviesos diodus maitina 5 V išorinis maitinimo šaltinis, nes vien „arduino“nepakanka energijos, kad įjungtų visas lemputes. Pridedamoje animuotoje schemoje jie naudoja 330 omų traukos rezistorių, tačiau aš to nenaudoju savo konstrukcijoje.

Antroji grandinė įjungia IR spinduolius. Ši grandinė naudoja poslinkių registrą, kad valdytų darlingtono masyvą, kuris siunčia energiją IR spinduoliams. Pamainų registras yra integruotas grandynas, galintis siųsti HIGH ir LOW signalus keliems kaiščiams tik iš nedidelio kaiščių kiekio. Mūsų atveju mes naudojame SN74HC595 poslinkių registrą, kurį galima valdyti iš 3 įėjimų, bet valdoma iki 8 išėjimų. Naudojant tai naudojant „arduino“pranašumas yra tas, kad galite sudaryti grandinę iki 8 pamainų registrų iš eilės („arduino“gali tvarkyti tik iki 8 iš jų). Tai reiškia, kad jums reikia tik 3 kaiščių iš arduino, kad įjungtumėte ir išjungtumėte 64 IR spinduolius. Darlingtono masyvas leidžia įjungti įrenginį iš išorinio šaltinio, jei įvesties signalas yra AUKŠTAS, arba išjungti to įrenginio maitinimą, jei įvesties signalas yra ŽEMAS. Taigi mūsų pavyzdyje mes naudojame ULN2803A darlingtono masyvą, kuris leidžia 5 V išorės maitinimo šaltiniui įjungti ir išjungti iki 8 IR spindulių. Mes naudojame 10 omų rezistorių su IR spinduliuotėmis, kad gautume maksimalų srovės stiprį iš IR spinduliuotojų.

Trečioji grandinė naudoja multiplekserį, kad gautų kelis įėjimus iš fotodiodų, ir siunčia išvestį duomenų signalu. „Multiplexer“yra įrenginys, naudojamas kelioms įvestims, iš kurių norite skaityti, priimti ir jam reikia tik kelių kaiščių, kad būtų galima nuskaityti iš tų įėjimų. Tai taip pat gali padaryti priešingai (demultipleksas), tačiau mes to nenaudojame šiai programai. Taigi mūsų atveju mes naudojame CD4051B multiplekserį, kad galėtume priimti iki 8 signalų iš fotodiodų, ir mums reikia tik 3 įėjimų, kad galėtume nuskaityti iš šių signalų. Be to, galime susieti iki 8 multiplekserių („arduino“gali tvarkyti tik iki 8 iš jų). Tai reiškia, kad „arduino“gali nuskaityti iš 64 fotodiodų signalų tik iš 3 skaitmeninių kaiščių. Fotodiodai yra nukreipti atvirkščiai, o tai reiškia, kad vietoj to, kad būtų nukreipta įprasta kryptimi, kai teigiamas laidas prijungtas prie teigiamos įtampos šaltinio, mes priskiriame neigiamą laidą teigiamam įtampos šaltiniui. Tai efektyviai paverčia fotodiodus foto rezistoriais, kurių atsparumas keičiasi priklausomai nuo gaunamos šviesos kiekio. Tada mes sukuriame įtampos daliklį, kad nuskaitytume įtampą, priklausančią nuo kintančio fotodiodų pasipriešinimo, pridėdami prie žemės labai atsparų 1 MOhm rezistorių. Tai leidžia mums gauti didesnę ir žemesnę arduino įtampą, priklausomai nuo to, kiek IR šviesos gauna fotodiodai.

Aš sekiau didžiąją dalį šio dizaino iš kito žmogaus, kuris tai padarė čia: https://www.instructables.com/Infrared-Proximity-S…. Prie to dizaino jie taip pat pridėjo 47pF kondensatorių, kaip ir mes, priešais 1 MOhm rezistorių naudojamas įtampos dalikliui su fotodiodais sukurti. Priežastis, kodėl jis pridūrė, buvo ta, kad jis įjungė ir išjungė IR spinduliuotę su PWM signalu ir tai padarė nedidelis fotodiodų įtampos kritimas, kai IR spinduoliai buvo nedelsiant įjungti. Dėl to fotodiodai pakeitė atsparumą net tada, kai iš objekto negavo daugiau IR šviesos, nes IR spinduoliai turėjo tą patį 5 V maitinimo šaltinį kaip ir fotodiodai. Kondensatorius buvo naudojamas siekiant įsitikinti, kad įjungus ir išjungiant infraraudonųjų spindulių skleidėjus nebuvo įtampos kritimo. Iš pradžių planavau atlikti tą pačią strategiją, tačiau pritrūko laiko ją išbandyti, todėl vietoj to visada palikau IR spinduliuotę įjungtą. Ateityje norėčiau tai pakeisti, tačiau kol neperprojektuosiu kodo ir grandinės, šiuo metu PCB yra suprojektuotas taip, kad infraraudonųjų spindulių lemputės visada degtų, ir aš vis tiek pasilikau kondensatorius. Jei naudojate šį PCB dizainą, jums nereikės kondensatoriaus, tačiau ketinu pristatyti kitą PCB versiją, kuri priima papildomą įvestį į pamainų registrą, kuri leis jums įjungti ir išjungti IR spinduliuotę. Tai sutaupys daug energijos.

Norėdami patikrinti savo arduino, galite patikrinti pridėtas animacines diagramas, kad nustatytumėte prototipo sąranką. Taip pat yra išsamesnė kiekvienos grandinės spalvota schema, kurioje aprašoma elektroninių prietaisų sąranka ir orientacija. Pridedamoje PCB schemoje turime iš viso 4 grandines, 2 grandines, naudojamas įjungti IR spinduliuotę, ir 2 grandines, skirtas skaityti iš fotodiodų. Jie yra orientuoti į 2 PCB grupes, esančias viena šalia kitos, su grupe, kurią sudaro 1 IR spinduliuotės grandinė ir 1 fotodiodo grandinė, todėl 2 stulpelius po 8 mazgus galima sujungti į vieną PCB. Mes taip pat sujungiame dvi grandines kartu, todėl trys kaiščiai iš arduino gali valdyti du pamainų registrus, o 3 papildomi kaiščiai gali valdyti du plokštės multipleksorius. Yra papildoma išvesties antraštė, skirta prijungti prie papildomų PCB grandinės.

Štai keletas šaltinių, kuriais vadovavausi kurdamas prototipus:

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

3 žingsnis: Lituokite laidus prie mazgo

Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo
Lituoti laidus prie mazgo

Dabar, kai suprantate, kaip sukurta grandinė, eikite į priekį ir lituokite laidus prie kiekvieno mazgo. Fotodiodus lydėjau lygiagrečiai (geltonos ir pilkos spalvos laidai), o spinduliuotės - nuosekliai (oranžinė viela). Tada lygiagrečiai prie fotodiodų, kurie bus prijungti prie 5 V maitinimo šaltinio, lituosiu ilgesnę geltoną laidą ir mėlyną laidą, kuris bus prijungtas prie plokštės fotodiodo įvesties. Aš prilipdžiau ilgą raudoną laidą prie IR spinduolio grandinės, kuri bus naudojama prisijungti prie 5 V maitinimo šaltinio, ir juodą laidą, kuris bus prijungtas prie PCB IR emiterio įvesties. Tiesą sakant, laidai šiek tiek sutrumpėjo, todėl pritrūko laiko, todėl galiausiai galėjau prijungti tik 5 mazgus kiekviename stulpelyje (o ne 7). Planuoju tai ištaisyti vėliau.

4 žingsnis: lituokite PCB komponentus ir pritvirtinkite prie plokštės

Lituokite PCB komponentus ir pritvirtinkite prie plokštės
Lituokite PCB komponentus ir pritvirtinkite prie plokštės
Lituokite PCB komponentus ir pritvirtinkite prie plokštės
Lituokite PCB komponentus ir pritvirtinkite prie plokštės
Lituokite PCB komponentus ir pritvirtinkite prie plokštės
Lituokite PCB komponentus ir pritvirtinkite prie plokštės

Pastaba: Pridedamame paveikslėlyje esanti PCB yra pirmoji mano sukurta versija, kurioje trūko maitinimo įėjimų ir išėjimų, taip pat kiekvienos vidinės grandinės grandinės. Naujasis PCB dizainas ištaiso šią klaidą.

Čia jums tiesiog reikia sekti PCB schemą, kad komponentai būtų prilituoti prie PCB, o kai tai bus padaryta, lituokite PCB prie plokštės. 5V maitinimo signalui prijungti naudojau išorines plokštes, kurias paskirstiau visiems geltoniems ir raudoniems laidams. Žvelgiant atgal, man nereikėjo tokių ilgų raudonų ir geltonų laidų ir galėjau sujungti mazgus vienas su kitu (užuot prijungęs juos prie bendros išorinės plokštės). Tai tikrai sumažins netvarką lentos gale.

Kadangi turėjau 8 eilučių ws2812b diodų ir 12 stulpelių, aš gavau 7 eilutes ir 11 stulpelių mazgų (iš viso 77 mazgai). Idėja yra naudoti vieną PCB pusę vienam mazgų stulpeliui ir kitą pusę kitam stulpeliui. Kadangi turėjau 11 stulpelių, man reikėjo 6 PCB (paskutiniam reikėjo tik vienos komponentų grupės). Kadangi aš padariau laidus per trumpus, galėjau prijungti tik 55 mazgus, 11 stulpelių ir 5 eilutes. Kaip matote paveikslėlyje, aš padariau klaidą ir lituodavau neapdorotus laidus prie plokštės, o tai būtų gerai, jei laidai būtų pakankamai ploni, bet mano atveju jie buvo per stori. Tai reiškė, kad kiekvienos IR spinduliuotės įvesties ir fotodiodo įvesties vielos galai buvo labai arti vienas kito, todėl dėl visų laidų trumpinimo įvyko daug derinimo. Ateityje ketinu naudoti jungtis, kad prijungtumėte PCB prie laidų, esančių plokštėje, kad išvengtumėte šortų ir išvalytumėte daiktus.

Kadangi „Arduino“gali sudaryti tik iki 8 pamainų registrų ir multiplekserių grandinę, sukūriau dvi atskiras grandines, kurių viena užėmė pirmuosius 8 stulpelius, o kita - likusius 3 stulpelius. Tada aš prijungiau kiekvieną grandinę prie kitos plokštės, kurioje buvo tik 2 multiplekseriai, kad galėčiau perskaityti kiekvieną šių dviejų multiplekserių multiplekserių duomenų signalų grandinę į arduino. Šie du multiplekseriai taip pat buvo sujungti grandinėmis. Tai reiškia, kad „arduino“buvo iš viso naudojami 16 išvesties signalų ir 2 analoginiai įėjimai: 1 išėjimo signalas, skirtas valdyti „ws2812b“šviesos diodus, 3 išvesties signalai pirmajai pamainos registrų grandinei, 3 išvesties signalai pirmajai multiplekserių grandinei, 3 išėjimo signalai antrajai poslinkių registrų grandinei, 3 išvesties signalai antrajai multiplekserių grandinei, 3 išvesties signalai 2 multipleksoriams, kurie sujungia kiekvieną PCB duomenų signalą, ir galiausiai 2 analoginiai įėjimai kiekvienam duomenų signalui iš 2 agregatinių multiplekserių.

5 žingsnis: peržiūrėkite kodą

Pastaba: be toliau pateikto interaktyvaus kodo, aš naudoju trečiosios šalies biblioteką, kad galėčiau sukurti animaciją „ws2812b“diodams. Tai galite rasti čia:

Naudotą kodą rasite čia:

Viršuje aš apibrėžiu arduino kaiščius, kurie bus prijungti prie kiekvienos PCB dalies. Taikydamas sąrankos metodą, aš nustatau multiplekserių išvesties kaiščius, įjungiu IR skleidėjus, nustatau „baseVal“masyvą, kuris seka kiekvieno fotodiodo aplinkos šviesos rodmenis, ir inicijuoju „FastLED“, kuris rašys į „ws2812b“diodus. Naudojant ciklo metodą, iš naujo nustatome šviesos diodų, priskirtų įjungti „ws2812b“juostoje, sąrašą. Tada mes skaitome vertes iš fotodiodų multiplekserio grandinėse ir nustatome ws2812b lemputes, kurios turėtų būti įjungtos, jei mazgo fotodiodo rodmenys viršija tam tikrą apibrėžtą slenkstį nuo pagrindinės aplinkos šviesos rodmenų vertės. Tada mes rodome šviesos diodus, jei mazgas, kuris turėtų būti įjungtas, pasikeitė. Priešingu atveju jis nuolat kartojasi, kol kažkas pasikeis, kad viskas paspartėtų.

Kodą tikriausiai būtų galima patobulinti, ir aš ketinu tai padaryti, tačiau nuo to laiko, kai lempos užsidega po to, kai ant stalo padedamas, užtrunka apie 1–2 sekundes. Manau, kad pagrindinė problema yra ta, kad „FastLED“užtrunka šiek tiek laiko, kol ant stalo pateikiami 96 šviesos diodai, o kodas turi pereiti ir perskaityti 77 įvestis iš lentelės. Aš bandžiau šį kodą su 8 šviesos diodais ir pastebėjau, kad jis beveik akimirksniu, bet žiūriu į saldžią šviesos diodų vietą, kuri veiks su šiuo kodu ir bus beveik akimirksniu, taip pat patobulins kodą.

6 veiksmas: įjunkite „Arduino“

Įjunkite „Arduino“!
Įjunkite „Arduino“!
Įjunkite „Arduino“!
Įjunkite „Arduino“!
Įjunkite „Arduino“!
Įjunkite „Arduino“!

Dabar viskas, ką jums reikia padaryti, tai įjungti arduino ir pamatyti stalo funkciją! Naudodamiesi anksčiau minėta animacijų biblioteka, galite įdėti nuostabių „ws2812b“animacijų, arba galite uždėti kavos staliuko kodą ir pamatyti, kaip jis užsidega kiekviename skyriuje. Nesivaržykite komentuoti bet kokių klausimų ar nuomonių, ir aš pasistengsiu su jumis susisiekti laiku. Sveikinimai!

Rekomenduojamas: