INHOUDSOPGAWE:

Arduino interaktiewe LED koffietafel: 6 stappe (met foto's)
Arduino interaktiewe LED koffietafel: 6 stappe (met foto's)

Video: Arduino interaktiewe LED koffietafel: 6 stappe (met foto's)

Video: Arduino interaktiewe LED koffietafel: 6 stappe (met foto's)
Video: Virtual BEAM Meetup GMT, August 19 - Saša Jurić - Parenting Children 2024, Julie
Anonim
Image
Image
Arduino interaktiewe LED koffietafel
Arduino interaktiewe LED koffietafel

Ek het 'n interaktiewe koffietafel gemaak wat ledligte onder 'n voorwerp aanskakel as die voorwerp oor die tafel geplaas word. Slegs die LED's wat onder die voorwerp is, sal brand. Dit word gedoen deur nabyheidssensors effektief te gebruik, en wanneer die nabyheidssensor agterkom dat 'n voorwerp naby genoeg is, sal dit 'n knoop onder die voorwerp verlig. Dit gebruik ook 'n Arduino om animasies aan te bring wat nie die nabyheidssensors nodig het nie, maar dit bied 'n baie cool effek waaroor ek net hou.

Die nabyheidsensors bestaan uit fotodiodes en IR -emitters. Die uitstralers gebruik infrarooi lig (wat die menslike oog nie kan sien nie) om lig uit die tafel te skyn, en die fotodiodes ontvang die infrarooi lig wat van 'n voorwerp gereflekteer word. Hoe meer lig dit weerkaats (hoe nader die voorwerp), hoe meer wissel die spanning wat uit die fotodiodes kom. Dit word gebruik as 'n aanduiding om te bepaal watter knooppunt u moet aansteek. Die nodusse is 'n versameling ws2812b -LED's en 'n nabyheidssensor.

Die aangehegte video handel oor die hele bouproses, terwyl ek meer van die besonderhede hieronder uiteensit.

Voorrade

  1. ws2812b LED -gloeilampe -
  2. 5V kragtoevoer -
  3. Enige Arduino wat ek die 2560 gebruik het -
  4. Fotodiodes
  5. IR -stralers
  6. 10 Ohm weerstande
  7. 1 MOhms weerstande
  8. 47 pF kapasitors
  9. CD4051B Multiplexers
  10. SN74HC595 Skuifregisters
  11. ULN2803A Darlington Arrays
  12. Enige substraat om as 'n groot bord vir die leds te gebruik, het ek 'n saamgestelde papier van 'n tuisdepot gebruik

Stap 1: Skep die bord en plaas die LED's

Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's
Skep die bord en plaas die LED's

Die eerste ding wat ek gedoen het, was om 'n bord te skep wat die LED's bevat wat ons in die koffietafel sal sit. Ek het 'n stuk papier saamgestelde bord van die huisdepot gebruik en dit in die regte afmetings gesny vir die koffietafel wat ek gehad het. Nadat ek die bord in grootte gesny het, het ek al die gate geboor waarheen die leds gaan. Die bord self het 8 rye en 12 kolomme ws2812b LED's wat 3 sentimeter van mekaar geskei is, en dit is in 'n slangpatroon vasgemaak. Ek het warm gom gebruik om dit vas te maak.

Ek moes ook gate in die middel van die node boor: 4 ws2812b leds wat 'n vierkant uitmaak, 2 fotodiodes en 2 IR -emitters in 'n kleiner vierkant in die middel daarvan. Hierdie 4 gate in die middel van die knoop is die plekke vir die fotodiodes en ir -emitters (2 van elk). Ek het dit afgewissel om die maksimum blootstelling te verseker en dit ongeveer 1 duim uitmekaar geplaas in die middel van elke knoop. Ek het dit nie nodig gehad om dit warm te plak nie; ek het net die leidings aan die ander kant gebuig om seker te maak dat dit nie aan die ander kant uitkom nie. Ek het ook seker gemaak dat ek die positiewe en negatiewe punte in sekere rigtings buig, sodat hulle korrek in die kring gerig is. Alle positiewe leidrade was aan die linkerkant van die agterkant van die bord, terwyl alle negatiewe leidrade aan die regterkant van die bord was.

Stap 2: Verstaan die stroombaan

Verstaan die stroombaan
Verstaan die stroombaan
Verstaan die stroombaan
Verstaan die stroombaan
Verstaan die stroombaan
Verstaan die stroombaan

Opmerking: alle geanimeerde tekeninge is nie presies wat die implementering betref nie (sommige arduino -penne verskil, en ek sal later 'n paar kettinge daaroor koppel). Die eindresultaat was 'n bietjie anders as gevolg van die kompleksiteit van die stroombaan, maar alle geanimeerde stroombane dien as 'n uitstekende basis om te verstaan hoe om elke onderdeel te prototipe. Die gewone skematiese en kringdiagram is soos op die PCB wat in die projek gebruik word.

Die PCB -kode wat die KiCad -projek en gerber -lêers bevat, kan hier gevind word: https://github.com/tmckay1/interactive_coffee_tabl…, as u self die PCB's wil bestel en 'n soortgelyke projek wil skep. Ek het NextPCB gebruik om die borde te skep.

Daar is basies drie verskillende stroombane wat hierdie tabel uitmaak. Die eerste gaan ons nie in detail oor nie en is 'n eenvoudige stroombaan wat die ws2812b -leds aandryf. 'N PWM -datasignaal word vanaf die Arduino na die ws2812b led -gloeilampe gestuur en bepaal watter kleure waar getoon word. Ons gebruik ws2812b leds, aangesien dit individueel aangespreek kan word, sodat ons kan beheer watter van die leds om aan te skakel en watter om af te skakel. Die ws2812b LED's word aangedryf deur 'n 5V eksterne kragbron, aangesien die arduino alleen nie genoeg krag het om al die ligte aan te skakel nie. In die aangehegte geanimeerde diagram gebruik hulle 'n pullup -weerstand van 330 Ohm, maar ek gebruik dit nie in my opbou nie.

Die tweede stroombaan skakel die IR -stralers aan. Hierdie kring gebruik 'n skofregister om 'n darlington -skikking te beheer wat krag na die IR -emitters stuur. 'N Skofregister is 'n geïntegreerde stroombaan wat van slegs 'n klein hoeveelheid penne HOOG en LAAG seine na verskeie penne kan stuur. In ons geval gebruik ons 'n SN74HC595 -skofregister wat vanaf 3 insette beheer kan word, maar tot 8 uitsette beheer. Die voordeel daarvan om dit saam met die arduino te gebruik, is dat u tot 8 skofregisters in 'n ry kan ketting (arduino kan slegs tot 8 daarvan hanteer). Dit beteken dat u slegs 3 penne van die arduino nodig het om 64 IR -emitters aan en uit te skakel. Met die Darlington -skikking kan u 'n toestel van 'n eksterne bron af aandryf as die insetsein HOOG is, of die krag vir die toestel afskakel as die insetsein LAAG is. In ons voorbeeld gebruik ons dus 'n ULN2803A darlington -skikking, waarmee 'n 5V eksterne kragbron tot 8 van die IR -emitters kan aan- en uitskakel. Ons gebruik 'n 10 Ohm -weerstand met die IR -emitters in serie om die maksimum ampère van die IR -emitters te verkry.

Die derde kring gebruik 'n multiplexer om verskeie insette van die fotodiodes te ontvang en stuur die uitset in 'n datasignaal. 'N Multiplexer is 'n toestel wat gebruik word om verskeie insette te neem waaruit u wil lees, en benodig slegs 'n paar penne om van die insette te lees. Dit kan ook die teenoorgestelde doen (demultiplex), maar ons gebruik dit nie hier vir die toepassing nie. In ons geval gebruik ons dus 'n CD4051B -multiplexer om tot 8 seine van die fotodiodes op te neem, en ons benodig slegs 3 insette om van die seine af te lees. Boonop kan ons tot 8 multiplexers verbind (arduino kan slegs tot 8 daarvan hanteer). Dit beteken dat die arduino kan lees uit 64 van die fotodiode seine vanaf slegs 3 digitale penne. Die fotodiodes is omgekeerd bevooroordeeld, wat beteken dat ons die negatiewe lood aan die positiewe spanningsbron toewys in plaas van in die normale rigting met die positiewe lood wat aan die positiewe spanningsbron geheg is. Dit verander die fotodiodes effektief in fotoresistente, wat verander in weerstand, afhangende van die hoeveelheid lig wat dit ontvang. Ons skep dan 'n spanningsverdeler om 'n spanning te lees wat afhanklik is van die wisselende weerstand van die fotodiodes deur 'n hoogs weerstandige 1 MOhms -weerstand by die aarde te voeg. Dit stel ons in staat om hoër en laer spannings na die arduino te ontvang, afhangende van hoeveel IR -lig die fotodiodes ontvang.

Ek het die meeste van hierdie ontwerp gevolg deur 'n ander persoon wat dit hier gedoen het: https://www.instructables.com/Infrared-Proximity-S… In die ontwerp het hulle ook 'n 47pF-kondensator bygevoeg, net soos ons, oorkant die 1 MOhm-weerstand word gebruik om die spanningsverdeler met die fotodiodes te skep. Die rede waarom hy dit bygevoeg het, was omdat hy die IR -emitters aan en af gewissel het met 'n PWM -sein en dit het 'n klein spanningsval van die fotodiodes veroorsaak toe die IR -stralers onmiddellik aangeskakel is. Dit het die fotodiodes weerstand laat verander, selfs al het dit nie meer IR -lig van 'n voorwerp ontvang nie, omdat die IR -stralers dieselfde 5V -kragbron as die fotodiodes gedeel het. Die kapasitor is gebruik om seker te maak dat daar nie 'n spanningsval is wanneer die IR -emitters aan en afgeskakel word nie. Ek was oorspronklik van plan om dieselfde strategie te doen, maar ek het nie genoeg tyd gehad om dit te toets nie, so ek het die IR -stralers altyd ingeskakel. Ek sou dit in die toekoms wou verander, maar totdat ek die kode en stroombaan herontwerp het, is die PCB op die oomblik ontwerp om die IR -ligte te alle tye aan te sit, en ek het die kondensators in elk geval behou. U benodig nie die kapasitor as u hierdie PCB -ontwerp gebruik nie, maar ek gaan 'n ander weergawe van die PCB bekendstel wat 'n bykomende insette in die skofregister aanvaar, waarmee u die IR -emitters aan en af kan moduleer. Dit bespaar baie kragverbruik.

U kan die geanimeerde diagramme wat aangeheg is, nagaan vir 'n prototipe -opstelling om u arduino te toets. Daar is ook 'n meer gedetailleerde kleurskema vir elke stroombaan wat die opstelling en oriëntasie van die elektroniese toestelle uiteensit. In die aangehegte PCB -skema het ons 4 totale stroombane, 2 stroombane wat gebruik word om die IR -emitters aan te skakel en 2 stroombane om uit die fotodiodes te lees. Hulle is georiënteer op die PCB 2 -groepe langs mekaar met 'n groep wat bestaan uit 1 IR -emitterkring en 1 fotodiodekring, sodat 2 kolomme van 8 nodusse in 'n enkele PCB geplaas kan word. Ons verbind ook die twee stroombane met mekaar, sodat drie penne van die arduino die twee skofregisters kan beheer, en 3 ekstra penne die twee multiplexers op die bord kan beheer. Daar is 'n bykomende uitsetkop om bykomende PCB's te kan koppel.

Hier is 'n paar bronne wat ek gevolg het vir prototipering:

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

Stap 3: Soldeerdrade na die knoop

Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop
Soldeerdrade na die knoop

Noudat u verstaan hoe die kring gevorm is, moet u die drade aan elke knoop soldeer. Ek het die fotodiodes parallel gesoldeer (geel en grys drade) en die ir -emitters in serie (oranje draad). Ek soldeer dan 'n langer geel draad parallel aan die fotodiodes wat aan die 5V -kragbron gekoppel sal word, en 'n blou draad wat aan die fotodiode -ingang van die PCB gekoppel sal word. Ek het 'n lang rooi draad aan die IR -emitterkring gesoldeer wat gebruik sal word om aan te sluit op die 5V -kragbron en 'n swart draad wat aansluit by die IR -emitter -ingang van die PCB. Ek het die drade eintlik 'n bietjie te kort gemaak, sodat ek uiteindelik net 5 van die nodusse in elke kolom kon koppel (in plaas van 7). Ek is van plan om dit later reg te stel.

Stap 4: Soldeer die PCB -komponente en heg dit aan die bord vas

Soldeer die PCB -komponente en heg dit aan die bord vas
Soldeer die PCB -komponente en heg dit aan die bord vas
Soldeer die PCB -komponente en heg dit aan die bord vas
Soldeer die PCB -komponente en heg dit aan die bord vas
Soldeer die PCB -komponente en heg dit aan die bord vas
Soldeer die PCB -komponente en heg dit aan die bord vas

Opmerking: die printplaat in die aangehegte prentjie is die eerste weergawe wat ek gemaak het, wat geen ingange en uitsette benodig nie, en ook 'n daisy -ketting vir elke binnekring. Die nuwe PCB -ontwerp maak hierdie fout reg.

Hier hoef u net die PCB -skema te volg om die komponente aan die PCB te soldeer, en sodra dit klaar is, soldeer u die PCB aan die bord. Ek het eksterne kringborde gebruik om die 5V -kragsein, wat ek aan al die geel en rooi drade versprei het, aan te heg. Agterna het ek nie sulke lang rooi en geel drade nodig gehad nie en kon ek die nodusse met mekaar verbind het (in plaas daarvan om dit aan 'n gemeenskaplike eksterne printplaat te koppel). Dit sal die hoeveelheid rommel aan die agterkant van die bord regtig verminder het.

Aangesien ek 8 rye ws2812b leds en 12 kolomme gehad het, het ek 7 rye en 11 kolomme nodes gekry (77 nodusse in totaal). Die idee is om die een kant van die PCB vir een kolom nodusse en die ander kant vir die ander kolom te gebruik. Dus, aangesien ek 11 kolomme gehad het, het ek 6 PCB's nodig gehad (die laaste een benodig slegs een groep komponente). Aangesien ek die drade te kort gemaak het, kon ek slegs 55 nodusse, 11 kolomme en 5 rye verbind. U kan op die foto sien, ek het 'n fout gemaak en die rou drade aan die bord gesoldeer, wat goed sou wees as die drade dun genoeg was, maar in my geval was hulle te dik. Dit het beteken dat ek draadpunte baie naby aan mekaar gehad het vir elke ingang van die IR -emitter en die fotodiode, sodat daar baie ontfouting plaasgevind het weens al die draadkortsluitings. In die toekoms gaan ek verbindings gebruik om die PCB aan die drade op die bord te koppel om kortbroek te voorkom en dinge skoon te maak.

Aangesien die Arduino slegs tot 8 skofregisters en multiplexers kan daisy ketting, het ek twee afsonderlike kettings geskep, een neem die eerste 8 kolomme en 'n ander neem die oorblywende 3 kolomme op. Daarna het ek elke ketting aan 'n ander PCB gekoppel wat net 2 multiplexers gehad het, sodat ek elke ketting multiplexer data seine van die twee multiplexers in die arduino kon lees. Hierdie twee multiplexers was ook daisy chain. Dit beteken dat daar altesaam 16 uitsetseine en 2 analoog insette in die arduino gebruik is: 1 uitsetsignaal om die ws2812b leds te beheer, 3 uitsetseine vir die eerste ketting van skofregisters, 3 uitsetseine vir die eerste ketting van multiplexers, 3 uitsetseine vir die tweede ketting van skofregisters, 3 uitsetseine vir die tweede ketting van multiplexers, 3 uitsetseine vir die 2 multiplexers wat elke PCB -datasein saamvoeg, en laastens 2 analoog insette vir elke datasignaal van die 2 aggregate multiplexers.

Stap 5: Hersien die kode

Nota: Benewens die onderstaande interaktiewe kode, het ek 'n derdeparty -biblioteek gebruik om die animasies vir die ws2812b leds te vervaardig. U kan dit hier vind:

U kan die kode wat ek hier gebruik het, vind:

Bo -aan definieer ek die arduino -penne wat met elke deel van die PCB verbind sal word. In die opstellingsmetode stel ek die uitvoerpenne vir die multiplexers in, skakel die IR -emitters aan, stel 'n baseVal -skikking op wat die lesing van die omringende lig vir elke fotodiode byhou, en begin FastLED wat aan die ws2812b -leds sal skryf. In die lusmetode stel ons die lys met LED's wat in die ws2812b -strook aangeskakel is, terug. Dan lees ons waardes van die fotodiodes in die multiplexerkettings en stel die ws2812b LED's aan wat veronderstel is om aan te wees as die lesing van die fotodiode in die node oor 'n sekere gedefinieerde drumpel van die basiswaarde van die omringende ligmetings is. Ons gee dan die LED's weer as daar 'n verandering in die knoop is. Andersins bly dit loop totdat iets verander om dinge te bespoedig.

Die kode kan waarskynlik verbeter word, en ek wil dit doen, maar daar is 'n vertraging van 1-2 sekondes nadat die ligte aangeskakel het nadat 'n voorwerp op die tafel geplaas is. Ek glo die onderliggende probleem is dat die FastLED 'n rukkie neem om die 96 LED's op die tafel te lewer, en die kode moet deurloop en 77 insette van die tabel lees. Ek het hierdie kode met 8 LED's probeer, en dit was amper onmiddellik, maar ek kyk na die ligpunt van LED's wat met hierdie kode werk en amper onmiddellik is, sowel as om die kode te verbeter.

Stap 6: Skakel die Arduino aan

Skakel die Arduino aan!
Skakel die Arduino aan!
Skakel die Arduino aan!
Skakel die Arduino aan!
Skakel die Arduino aan!
Skakel die Arduino aan!

Al wat u hoef te doen is om die arduino aan te skakel en die tafelfunksie te sien! Deur gebruik te maak van die animasiebiblioteek wat u voorheen genoem het, kan u 'n paar cool ws2812b led -animasies aantrek, of u kan die koffietafelkode aanbring en dit in elke afdeling sien verlig. U kan gerus kommentaar lewer oor enige vrae of opinies, en ek sal probeer om betyds terug te kom. Cheers!

Aanbeveel: