Satura rādītājs:

Fancy LED cepure: 5 soļi (ar attēliem)
Fancy LED cepure: 5 soļi (ar attēliem)

Video: Fancy LED cepure: 5 soļi (ar attēliem)

Video: Fancy LED cepure: 5 soļi (ar attēliem)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Novembris
Anonim
Image
Image
Fancy LED cepure
Fancy LED cepure

Es vienmēr esmu gribējis īstenot Arduino projektu, bet nekad nebija nevienas lieliskas idejas, līdz mana ģimene tika uzaicināta uz izsmalcinātu cepuru ballīti. Ar divu nedēļu izpildes laiku man bija interesanti, vai es varētu gan plānot, gan izpildīt kustību jutīgu LED animācijas cepuri. Izrādās, ka es varētu! Es, iespējams, nedaudz pārkāpu, bet projekta kopējās izmaksas bija aptuveni 80 USD. Eksperimentējot un kodējot, jūs to varētu izdarīt lētāk.

Mērķis ar cepuri bija šāds:

  1. Lieciet gaismas komplektam pārvietoties no cepures centra priekšpuses uz aizmuguri, pa vienai gaismai katrā pusē
  2. Mainiet gaismas kustības ātrumu, ko nosaka cepures slīpums no priekšpuses uz aizmuguri
  3. Ļaujiet gaismām apgriezties, kad cepures lente bija noliekta uz leju (t.i., atdarina gravitācijas ietekmi uz gaismām)
  4. Mainiet krāsu, pamatojoties uz cepures slīpumu no kreisās uz labo
  5. Sajūtiet satricinājumus un parādiet īpašu efektu
  6. Sajūtiet, kā valkātājs griežas, un parādiet īpašu efektu
  7. Iekļaujiet to pilnībā cepurē

1. darbība. Nepieciešamās detaļas

Nepieciešamas detaļas
Nepieciešamas detaļas
Nepieciešamas detaļas
Nepieciešamas detaļas
Nepieciešamas detaļas
Nepieciešamas detaļas

Es izmantoju šādas galvenās sastāvdaļas (iekļautas Amazon nesaistītās saites):

  • Teensy LC mikrokontrolleris - es izvēlējos šo, nevis parasto Arduino, jo tas ir mazs, un tam ir īpašs savienojums manu LED vadīšanai, kā arī spēcīgs bibliotēkas un kopienas atbalsts.
  • Bosch BNO055 bāzes pozicionēšanas sensors - godīgi viens no pirmajiem, kurā atradu dokumentāciju. Ir daudz lētākas iespējas, taču, izdomājot Bosch, tas jūsu labā dara daudz, kas citādi būtu jādara ar kodu
  • WS2812 adresējama LED sloksne - es izvēlējos 1 metru garumu ar 144 gaismas diodēm uz metru. Šāds blīvums palīdz gaismai izskatīties vairāk kā kustīgai, nevis atsevišķiem elementiem iedegties pēc kārtas.

Un šādas nelielas sastāvdaļas:

  • Cepure - derēs jebkura cepure ar cepuri. Šī ir $ 6 cepure no vietējā veikala. Ja tam ir šuve aizmugurē, būs vieglāk izvilkt vadu. Pievērsiet uzmanību tam, vai cepures lente ir pielīmēta, jo tas arī radīs papildu grūtības. Šis ir šūts gar augšpusi, bet apakšā viegli uzvilkts.
  • 4,7K omi rezistori
  • 3x AAA bateriju korpuss - izmantojot 3 AAA baterijas, tiek izvadīts spriegums tieši elektronikas vēlamajā diapazonā, kas vienkāršo lietas. AAA iekļaujas cepurē vieglāk nekā AA, un tai joprojām ir lielisks darbības laiks.
  • Maza izmēra stieple - es izmantoju kādu cietu vadu, kas man bija uzlikts no iepriekšējā LED projekta.
  • Lodāmurs un lodēt
  • Daži spandeksi, kas atbilst cepures iekšējai krāsai, un diegi

Ieteicams, bet neobligāts:

  • Ātrie savienotāji akumulatora vadiem
  • Palīgroku rīks, šīs lietas ir ļoti mazas un grūti pielodējamas

2. darbība: mainiet cepuri

Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri
Pārveidojiet cepuri

Jums būs nepieciešama vieta cepurē, lai uzstādītu elektroniku, un vieta akumulatoram. Mana sieva profesionāli strādā ar apģērbu, tāpēc es lūdzu viņai padomu un palīdzību. Mēs beidzot izveidojām divas kabatas ar spandeksu. Pirmā mazākā kabata priekšpusē ir norādīta kā pati cepure, tāpēc, uzstādot elektroniku, pozicionēšanas sensors tiek turēts diezgan labi, bet vajadzības gadījumā to var viegli noņemt. Otra kabata aizmugurē ir akumulatora bloka turēšana vietā.

Kabatas tika apsētas ar cepures krāsai atbilstošu diegu, visas gar vainaga līniju. Atkarībā no cepures stila un materiāliem tā ir izgatavota no YMMV ar šo tehniku.

Mēs arī atklājām, ka cepuru josla vienā pusē ir ievilkta sevī, un tā bija pilnībā piešūta cepurei šajā vietā. Mums vajadzēja noņemt sākotnējo šuvi, lai gaismas diodes darbotos zem joslas. Būvēšanas laikā tas tika turēts vietā ar tapām, un pēc tam, kad tas bija pabeigts, tika uzšūts ar atbilstošu diegu.

Visbeidzot, mēs atvērām šuvi cepures aizmugurē, ja to sedz josla. Caur šo šuvi mēs izvilkām vadu komplektu, kas tika piegādāts kopā ar gaismas diodēm, un izklājām pirmo gaismas diodi sloksnē, lai tā būtu tieši pie šuves. Pēc tam mēs iesaiņojām gaismas diodes ap cepuri un nogriezām sloksni, lai pēdējā gaismas diode būtu tieši blakus pirmajai. LED sloksni var turēt vietā tikai ar cepures joslu, tomēr atkarībā no lentes un materiāla, iespējams, būs jānostiprina gaismas diodes, šujot vai līmējot.

3. darbība: pievienojiet vadu

Pievienojiet vadu
Pievienojiet vadu

Teensy dēlis un gaismas diodes darbosies ar jaudu no 3,3 līdz 5 V. Tāpēc es izvēlējos izmantot 3 AAA baterijas, izejas spriegums 4,5 v ir labi šajā diapazonā, un tām ir daudz darbības laika, kā esmu ieprogrammējis gaismas diodes. Jums vajadzētu būt iespējai iegūt vairāk nekā 8 stundu darbības laiku.

Elektroinstalācija

Es savienoju pozitīvos un negatīvos vadus no akumulatora kārbas un gaismas diodēm, pēc tam lodēju uz Teensy atbilstošās vietās. Akumulatora pozitīvais savienojums diagrammā ir jāpievieno Teensy augšējam labajam tapam (ar uzrakstu uz tāfeles Vin), bet negatīvo var pieslēgt jebkurai tapai, kas apzīmēta ar GND. Ērti ir viens, kas atrodas tieši tāfeles pretējā pusē vai tieši blakus Vin tapai. Pilna plāksnes pinout diagramma ir atrodama šīs lapas apakšā. Un dažos gadījumos, pasūtot dēli, tiek iekļauta papīra kopija.

Ja plānojat palaist kodu, kurā vienlaicīgi ir ieslēgtas tikai dažas gaismas diodes, varat barot gaismas diodes no paša Teensy, izmantojot 3,3 V izeju un GND, tomēr, ja mēģināt patērēt pārāk daudz enerģijas, varat sabojāt dēli. Tāpēc, lai dotu sev visvairāk iespēju, vislabāk ir savienot gaismas diodes tieši ar akumulatora avotu.

Gaismas diodes vadi

Šim projektam es izvēlējos Teensy LC, jo tam ir tapa, kas ievērojami atvieglo adrešu gaismas diožu savienošanu. Dēļa apakšā ir tapa, kas ir otrā no kreisā spoguļa Tapas #17, bet tajā ir arī 3.3v. To sauc par pievilkšanos, un citos dēļos, lai nodrošinātu šo spriegumu, jums būs jāievada rezistors. Teensy LC gadījumā jūs varat vienkārši novietot vadu no šīs tapas tieši uz jūsu LED datu vadu.

Vadot pozīcijas sensoru

Daži no pieejamajiem BNO055 dēļiem ir daudz stingrāki attiecībā uz spriegumu un vēlas tikai 3.3v. Šī iemesla dēļ es pieslēdzu Vin pie BNO055 plates no īpašās 3.3 V izejas uz Teensy, kas ir 3. tapa uz leju labajā pusē. Pēc tam jūs varat savienot GND uz BNO055 ar jebkuru GND vietnē Teensy.

BNO055 stāvokļa sensors izmanto I2c, lai sarunātos ar Teensy. I2c ir nepieciešama pievilkšanās, tāpēc es pievienoju divus 4,7 K omu rezistorus no 3,3 V izejas uz Teensy uz tapām 18 un 19. Pēc tam es pieslēdzu tapu 19 pie SCL tapas BNO055 plāksnē un 18 ar SDA tapu.

Elektroinstalācijas padomi/triki

Lai veiktu šo projektu, es izmantoju cietu vadu, nevis pavedienu. Viena cieta stieples priekšrocība ir lodēšana pie prototipa plāksnēm, piemēram, šīm. Jūs varat noņemt kādu vadu, saliekt to līdz 90 grādiem un ievietot to caur viena no spailēm apakšā tā, lai stieples nogrieztais gals turētos virs dēļa. Pēc tam jums ir nepieciešams tikai neliels daudzums lodēšanas, lai to turētu pie termināļa, un jūs varat viegli nogriezt lieko.

Ar cietu stiepli var būt grūtāk strādāt, jo tā vēlas palikt tāda, kāda tā ir saliekta. Tomēr šim projektam tā bija priekšrocība. Es sagriezu un veidoju vadus tā, lai pozicionēšanas sensora orientācija būtu konsekventa, ievietojot un noņemot elektroniku no cepures, lai to pielāgotu un programmētu.

4. solis: programmēšana

Tagad, kad viss ir samontēts, jums būs nepieciešams ar Arduino saderīgs programmēšanas rīks. Es izmantoju faktisko Arduino IDE (darbojas ar Linux, Mac un PC). Jums būs nepieciešama arī programmatūra Teensyduino, lai izveidotu savienojumu ar Teensy dēli. Šis projekts intensīvi izmanto FastLED bibliotēku, lai veiktu gaismas diodes krāsu un pozīciju programmēšanu.

Kalibrēšana

Pirmā lieta, ko vēlaties darīt, ir doties uz Krisa Vinera lielisko GitHub krātuvi BNO055 un lejupielādēt viņa BNO_055_Nano_Basic_AHRS_t3.ino skici. Instalējiet šo kodu, kad darbojas seriālais monitors, un tas jums pateiks, vai BNO055 dēlis ir pareizi pieejams tiešsaistē un nokārto pašpārbaudes. Tas arī palīdzēs jums kalibrēt BNO055, kas vēlāk sniegs konsekventākus rezultātus.

Darba sākšana ar Fancy LED skici

Īpaši ir pievienots Fancy LED cepures kods, kā arī manā GitHub krātuvē. Es plānoju vairāk pielāgot kodu, un tie tiks publicēti GitHub repo. Šeit esošais fails atspoguļo kodu, kad tika publicēts šis pamācība. Pēc skices lejupielādes un atvēršanas ir jāmaina dažas lietas. Lielākā daļa svarīgo vērtību, kas jāmaina, ir pašā augšpusē kā #define paziņojumi:

24. rinda: #define NUM_LEDS 89 - mainiet to uz faktisko gaismas diodes skaitu uz jūsu LED sloksnes

28. rinda: #define SERIAL_DEBUG false - jūs, iespējams, vēlēsities to padarīt patiesu, lai varētu redzēt sērijas monitora izvadi

Pozīcijas noteikšanas kods

Pozicionēšanas noteikšana un lielākā daļa jūsu pielāgošanas sākas ar 742. rindu un iet caur 802. Mēs saņemam Pitch, Roll un Yaw datus no pozīcijas sensora un izmantojam to vērtību iestatīšanai. Atkarībā no tā, kā jūsu elektronika ir uzstādīta, jums tas, iespējams, būs jāmaina. Ja uzstādāt pozīcijas sensoru ar mikroshēmu uz cepures augšpusi un bultiņa blakus X, kas uzdrukāta uz tāfeles, vērsta uz cepures priekšpusi, jums vajadzētu redzēt sekojošo:

  • Piķis pamāj ar galvu
  • Rullis noliec galvu, piem. pieskarieties ausij pie pleca
  • Pagrieziens ir kādā virzienā. jūs saskaraties (ziemeļi, rietumi utt.).

Ja jūsu dēlis ir uzstādīts citā orientācijā, jums būs jāmaina Pitch/Roll/Yaw, lai tie rīkotos tā, kā vēlaties.

Lai pielāgotu ritināšanas iestatījumus, varat mainīt šādas #define vērtības:

  • ROLLOFFSET: ja jūsu cepure ir stabila un cik centrēta, ja rullītis nav 0, mainiet to ar starpību. T.i. ja redzat Roll pie -20, kad jūsu cepure ir centrēta, izdariet šo 20.
  • ROLLMAX: maksimālā vērtība, ko izmantot ruļļu mērīšanai. Vieglāk to atrast, valkājot cepuri un virzot labo ausi pret labo plecu. Lai to izdarītu, izmantojot seriālo monitoru, jums būs nepieciešams garš USB kabelis.
  • ROLLMIN: zemākā vērtība, ko izmantot rullīšu mērīšanai, noliekot galvu pa kreisi

Līdzīgi Pitch:

  • MAXPITCH - maksimālā vērtība, kad skatāties uz augšu
  • MINPITCH - minimālā vērtība, skatoties uz leju
  • PITCHCENTER - piķa vērtība, skatoties taisni uz priekšu

Ja faila augšdaļā iestatāt SERIALDEBUG uz true, jums vajadzētu redzēt seriālā monitora pašreizējās Roll/Pitch/Yaw izvades vērtības, lai palīdzētu uzlabot šīs vērtības.

Citi parametri, kurus, iespējams, vēlēsities mainīt

  • MAX_LED_DELAY 35 - lēnākais, ko LED daļiņa var pārvietot. Tas ir milisekundēs. Tā ir aizkavēšanās, pārejot no vienas gaismas diodes uz citu virknē.
  • MIN_LED_DELAY 10 - gavēnis, ko LED daļiņa var pārvietot. Tāpat kā iepriekš, tas ir milisekundēs.

Secinājums

Ja esat aizgājis tik tālu, jums vajadzētu būt pilnībā funkcionējošai un jautrai LED cepurei! Ja vēlaties ar to paveikt vairāk, nākamajā lapā ir sīkāka informācija par iestatījumu maiņu un savu darbību veikšanu. kā arī daži paskaidrojumi par to, ko dara pārējais mans kods.

5. darbība: papildu un pēc izvēles: koda iekšpusē

Trieciena un griešanās noteikšana

Trieciena/griešanās noteikšana tiek veikta, izmantojot BNO055 augstas G sensora funkcijas. Jūs varat pielāgot tā jutīgumu, izmantojot šādas rindas initBNO055 ():

  • 316. rinda: BNO055_ACC_HG_DURATION - cik ilgi pasākumam jāilgst
  • 317. rinda: BNO055_ACC_HG_THRESH - cik smagai jābūt triecienam
  • 319. rinda: BNO055_GYR_HR_Z_SET - rotācijas ātruma slieksnis
  • 320. rinda: BNO055_GYR_DUR_Z - cik ilgi rotācijai pat jāilgst

Abas vērtības ir 8 bitu binārās, pašlaik ietekme ir iestatīta uz B11000000, kas ir 192 no 255.

Kad tiek konstatēts trieciens vai griešanās, BNO055 nosaka vērtību, ko kods meklē tieši cilpas sākumā:

// Atklājiet visus izraisītos pārtraukumus, t.i., augsta G baita dēļ intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); ja (intStatus> 8) {ietekme (); } cits if (intStatus> 0) {spin (); }

Meklējiet augšējā koda rindu void impact (), lai mainītu ietekmi uz triecienu, vai void spin (), lai mainītu griešanās darbību.

Palīgi

Esmu izveidojis vienkāršu palīga funkciju (void setAllLeds ()), lai ātri iestatītu visas gaismas diodes vienā krāsā. Viens to izmanto, lai tos visus izslēgtu:

setAllLeds (CRGB:: melns);

Vai arī varat izvēlēties jebkuru krāsu, ko atpazīst FastLED bibliotēka:

setAllLeds (CRGB:: sarkans);

Ir arī funkcija fadeAllLeds (), kas aptumšos visas gaismas diodes par 25%.

Daļiņu klase

Lai ievērojami vienkāršotu elektroinstalāciju, es gribēju izmantot vienu gaismas diodes virkni, taču tām vajadzētu darboties kā vairākām virknēm. Tā kā tas bija mans pirmais mēģinājums, es vēlējos to saglabāt pēc iespējas vienkāršāku, tāpēc es uztveru vienu virkni kā divas, un vidējā (-s) gaismas diode (-s) būs sadalīta. Tā kā mums varētu būt pāra vai nepāra skaitlis, mums tas ir jāņem vērā. Sākšu ar dažiem globāliem mainīgajiem:

/ * * Mainīgie un konteineri gaismas diodēm */ CRGB gaismas diodes [NUM_LEDS]; statisks neparakstīts int curLedDelay = MAX_LED_DELAY; static int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; static bool oddLeds = 0; statiskā boola daļiņaDir = 1; statiskais bool speedDir = 1; neparakstīts garš dirCount; neparakstīts garš hueCount;

Un daži kodi iestatīšanas laikā ():

ja (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } cits {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }

Ja mums ir nepāra skaitļi, mēs vēlamies izmantot 1/2 punktu kā viduspunktu, pretējā gadījumā mēs vēlamies 1/2 punktu - 1. To ir viegli redzēt, izmantojot 10 vai 11 gaismas diodes:

  • 11 gaismas diodes: 11/2 ar veseliem skaitļiem jānovērtē līdz 5. un datori skaitās no 0. Tātad 0 - 4 ir viena puse, 6 - 10 ir otra puse un 5 ir starp tām. Šajā gadījumā mēs izturamies pret numuru 5 tā, it kā tā būtu daļa no abiem, t.i., tā būtu #1 abām virtuālajām gaismas diodes virknēm
  • 10 gaismas diodes: 10/2 ir 5. Bet, tā kā datori skaitās no 0, mums viens ir jānoņem. Tad vienai pusei mums ir 0 - 4, bet otrai - 5 - 9. #1 pirmajai virtuālajai virknei būs 4, bet otrajai virtuālajai virknei #1 būs #5.

Tad mūsu daļiņu kodā mums ir jāveic daži skaitījumi no mūsu kopējās pozīcijas līdz faktiskajām pozīcijām LED virknē:

if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } cits {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }

Kodam ir arī nosacījumi, kuros daļiņa var mainīt virzienu, tāpēc mums tas arī jāņem vērā:

ja (particleDir) {if ((currPos == NUM_LEDS/2) && oddLeds) {currPos = 0; } cits if ((currPos == NUM_LEDS/2 - 1) && (! oddLeds)) {currPos = 0; } cits {currPos ++; }} else {if ((currPos == 0) && oddLeds) {currPos = centerLed; } cits if ((currPos == 0) && (! oddLeds)) {currPos = centerLed - 1; } cits {currPos--; }}

Tāpēc mēs izmantojam paredzēto virzienu (particleDir), lai aprēķinātu, kuram gaismas diodei vajadzētu iedegties tālāk, bet mums arī jāapsver, vai esam sasnieguši vai nu LED virknes patieso galu, vai arī mūsu centra punktu, kas arī kalpo kā galamērķis katra virtuālā virkne.

Kad visu esam izdomājuši, pēc nepieciešamības iededzam nākamo gaismu:

if (particleDir) {if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } cits {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }} else {if (oddLeds) {Pos1 = centerLed - currPos; Pos2 = centerLed + currPos; } cits {Pos1 = centerLed - currPos; Pos2 = (centrsLed -1) + currPos; }} gaismas diodes [Pos1] = CHSV (currHue, 255, 255); gaismas diodes [Pos2] = CHSV (currHue, 255, 255); FastLED.show ();}

Kāpēc vispār izveidot šo klasi? Kā tas ir, tas ir diezgan vienkārši, un tam nav jābūt klasē. Tomēr man ir nākotnes plāni atjaunināt kodu, lai vienlaikus varētu notikt vairāk nekā viena daļiņa, un daži strādā pretēji, bet citi iet uz priekšu. Es domāju, ka ir dažas patiešām lieliskas iespējas griešanās noteikšanai, izmantojot vairākas daļiņas.

Ieteicams: