Fancy LED kalap: 5 lépés (képekkel)
Fancy LED kalap: 5 lépés (képekkel)
Anonim
Image
Image
Divatos LED kalap
Divatos LED kalap

Mindig is szerettem volna egy Arduino projektet csinálni, de soha nem voltak nagyszerű ötleteim, amíg a családomat meg nem hívták egy díszes kalappartira. Két hét átfutási idővel kíváncsi voltam, hogy megtervezhetem -e és végrehajthatom -e a mozgásra érzékeny LED animációs kalapot. Kiderült, hogy tudok! Valószínűleg kicsit túlzásba esett, de a teljes projekt körülbelül 80 dollárba került. Kísérletezéssel és némi kódolással kevesebbért is megteheti.

A kalapos cél a következő volt:

  1. A kalap középső elejétől a hátsó részig mozgassa a fényeket, egy -egy lámpát mindkét oldalon
  2. Változtassa meg a fény haladási sebességét, amelyet a kalap elől hátra döntése diktál
  3. Hagyja, hogy a lámpák megforduljanak, amikor a kalappántot lefelé billentették (azaz a gravitáció fényekre gyakorolt hatását emulálják)
  4. Változtassa meg a színét a kalap balról jobbra döntése alapján
  5. Érzékelő sokkok és különleges hatás
  6. Érezze, hogy viselője forog, és jelenítsen meg különleges hatást
  7. Tartsa teljesen a kalapban

1. lépés: Szükséges alkatrészek

Szükséges alkatrészek
Szükséges alkatrészek
Szükséges alkatrészek
Szükséges alkatrészek
Szükséges alkatrészek
Szükséges alkatrészek

A következő fő összetevőket használtam (a nem kapcsolt Amazon linkek is):

  • Teensy LC mikrokontroller - kis méretének köszönhetően ezt a hagyományos Arduino helyett választottam, és speciális csatlakozással rendelkezik a LED -ek vezérléséhez, valamint erős könyvtári és közösségi támogatás.
  • Bosch BNO055 alapú helyzetérzékelő - őszintén szólva az elsők között találtam dokumentációt. Vannak sokkal olcsóbb lehetőségek, de ha rájön a Boschra, az sokat tesz az Ön számára, amit egyébként kódban kell tennie
  • WS2812 címezhető LED szalag - 1 méter hosszúságot választottam, méterenként 144 LED -del. Ennek a sűrűségnek köszönhetően a fény inkább mozgónak tűnik, semmint az egyes elemek egymás után.

És a következő kisebb összetevők:

  • Kalap - minden kalapos kalappánt megteszi. Ez egy 6 dolláros kalap egy helyi boltból. Ha hátul van varrás, akkor könnyebb lesz átvezetni a vezetékeket. Ügyeljen arra, hogy ha a kalapszalagot felragasztják, mivel ez további nehézségeket is okoz. Ez a tetején van varrva, de az alsó könnyen felhúzható.
  • 4.7K ohmos ellenállások
  • 3x AAA elemtartó - 3 db AAA elem használatával pontosan az elektronika által kívánt tartományba kerül feszültség, ami leegyszerűsíti a dolgokat. Az AAA könnyebben illeszkedik a kalapba, mint az AA, és még mindig nagyszerű futási idővel rendelkezik.
  • Kis nyomtávú huzal - egy tömör huzalt használtam, amelyet egy korábbi LED -projektből készítettem.
  • Forrasztópáka és forrasztópáka
  • Néhány spandex, amely megfelel a kalap belső színének, és cérna

Javasolt, de opcionális:

  • Gyors csatlakozók az akkumulátor vezetékekhez
  • Segítő kezek eszköz, ezek a dolgok nagyon kicsik és nehezen forraszthatók

2. lépés: Módosítsa a kalapot

Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot
Módosítsa a kalapot

Szüksége lesz egy helyre a kalapban az elektronika felszereléséhez, és egy helyre az akkumulátor számára. A feleségem professzionálisan dolgozik ruházattal, ezért tanácsot és segítséget kértem tőle. Végül két zsebet készítettünk spandexből. Az első kisebb zseb az eleje felé mutat, mint maga a kalap, így az elektronika felszerelésekor a helyzetérzékelő meglehetősen jól a helyén marad, de szükség esetén könnyen eltávolítható. A második zseb hátul az akkumulátor helyén tartására szolgál.

A zsebeket a kalap színéhez illő cérnával vetették, mind a korona vonaláig. A kalap stílusától és az anyagtól függően YMMV -ből készül ezzel a technikával.

Azt is felfedeztük, hogy az egyik oldalon a kalapszalag magába húzódik, és az adott helyen teljesen a kalaphoz volt varrva. El kellett távolítanunk az eredeti varratot, hogy a LED -eket a sáv alatt futtassuk. Az építés során csapokkal tartották a helyükön, majd a befejezés után varrták megfelelő szállal.

Végül kinyitottuk a varrást a kalap hátoldalán, ha azt a szalag borítja. Áthúztuk a LED -ekkel ellátott kábelköteget ezen a varraton, és kibéleljük az első LED -et a csíkban, amely közvetlenül a varraton van. Ezután a LED -eket a kalap köré tekertük, és levágtuk a csíkot, hogy az utolsó LED közvetlenül az első mellett legyen. A LED szalag csak a kalapszalaggal rögzíthető, de a sávotól és az anyagtól függően szükség lehet a LED -ek varrással vagy ragasztással történő rögzítésére.

3. lépés: Csatlakoztassa

Vezetékkel fel
Vezetékkel fel

A Teensy tábla és a LED -ek 3.3 és 5 V közötti feszültséggel működnek. Ezért döntöttem úgy, hogy 3 AAA elemet használok, a 4,5 V -os kimeneti feszültség szépen ebben a tartományban van, és rengeteg üzemidejük van ahhoz, ahogy a LED -eket beprogramoztam. 8 órás üzemidőt kell elérnie.

Az áram bekötése

Összekötöttem az akkumulátor dobozának pozitív és negatív vezetékét és a LED -eket, majd a megfelelő helyeken forrasztottam a Teensy -re. Az akkumulátor pozitív elemét a Teensy jobb felső érintkezőjéhez kell csatlakoztatni az ábrán (Vin felirattal a táblán), a negatív pedig bármely GND feliratú tűhöz. Kényelmesen van egy közvetlenül a tábla másik oldalán, vagy közvetlenül a Vin csap mellett. A tábla teljes pinout diagramja az oldal alján található. És néhány esetben a tábla megrendelésekor papír másolat is szerepel a csomagban.

Ha azt tervezi, hogy olyan kódot futtat, amelynek egyszerre csak néhány LED -je van bekapcsolva, a LED -eket a Teensy -ből is táplálja, 3,3 V -os kimenet és GND használatával, de ha túl sok energiát próbál meg károsítja a táblát. Tehát, hogy a legtöbb lehetőséget biztosítsa magának, a legjobb, ha a LED -eket közvetlenül az akkumulátorhoz csatlakoztatja.

A LED -ek bekötése

A Teensy LC -t választottam ehhez a projekthez, mivel van egy csapja, amely sokkal könnyebbé teszi a címezhető LED -ek bekötését. A tábla alján az a csap, amely a bal oldali tükröknél a második, a #17. Ezt felhúzásnak nevezik, és más tábláknál ellenállást kell bekötni a feszültség biztosításához. A Teensy LC esetében egyszerűen vezethet a tűből egyenesen a LED -ek adatvezetékéhez.

A helyzetérzékelő bekötése

A rendelkezésre álló BNO055 táblák némelyike sokkal szigorúbb a feszültségen, és csak 3,3 V -ot akar. Emiatt a BNO055 kártyán lévő Vin -t a Teensy dedikált 3,3 V -os kimenetéről kötöttem be, ami a jobb oldali 3. tű. Ezután csatlakoztathatja a BNO055 GND -jét a Teensy bármely GND -jéhez.

A BNO055 helyzetérzékelő az I2c segítségével beszél a Teensy -vel. Az I2c felhúzást igényel, ezért két 4,7 K ohmos ellenállást kötöttem a Teensy 3,3 V-os kimenetéről a 18-as és 19-es érintkezőkre. Ezután a 19-es csapot a BNO055-ös táblán lévő SCL-tűhöz, a 18-as pedig az SDA-tűhöz kötöttem.

Csatlakozási tippek/trükkök

Ehhez a projekthez tömör drótot használtam, nem sodrott. A tömör huzal egyik előnye, hogy az ilyen prototípusú táblákhoz forraszt. Lecsupaszíthat néhány huzalt, meghajlíthatja 90 fokra, és behelyezheti az egyik csatlakozó alján, úgy, hogy a huzal vágott vége felragadjon a tábla felett. Ezután csak kis mennyiségű forraszanyagra van szüksége a terminálhoz tartásához, és könnyen levághatja a felesleget.

A tömör huzallal nehezebb dolgozni, mivel hajlamos maradni arra, hogy hajlított legyen. Ez a projekt azonban előnyt jelentett. A vezetékeket úgy vágtam és alakítottam, hogy a helyzetérzékelő tájolása következetes legyen, amikor behelyeztem és eltávolítottam a kalapból az elektronikát a csípés és a programozás érdekében.

4. lépés: Programozás

Most, hogy minden össze van állítva, szüksége lesz egy Arduino -kompatibilis programozó eszközre. A tényleges Arduino IDE -t használtam (Linux, Mac és PC -vel működik). Szüksége lesz a Teensyduino szoftverre is, hogy csatlakozzon a Teensy táblához. Ez a projekt nagymértékben használja a FastLED könyvtárat a LED -ek szín- és pozícióprogramozásához.

Kalibrálás

Először el kell mennie Kris Winer kiváló GitHub tárolójához a BNO055 számára, és le kell töltenie BNO_055_Nano_Basic_AHRS_t3.ino vázlatát. Telepítse ezt a kódot futó soros monitorral, és megmondja, hogy a BNO055 kártya megfelelően elérhető -e az interneten, és megfelel -e az önellenőrzésnek. Ezenkívül végigvezeti a BNO055 kalibrálásán, amely később következetesebb eredményeket ad.

Kezdő lépések a Fancy LED vázlattal

A Fancy LED kalap kódja kifejezetten a GitHub lerakatomban található. Azt tervezem, hogy további módosításokat végzek a kódon, és ezeket közzéteszem a GitHub repóban. Az itt található fájl az Instructable közzétételének kódját tükrözi. A vázlat letöltése és megnyitása után néhány dolgot meg kell változtatnia. A változtatni kívánt fontos értékek többsége a legfelső helyen van, mint #define kijelentések:

24. sor: #define NUM_LEDS 89 - ezt módosítsa a LED -szalagon lévő LED -ek tényleges számára

28. sor: #define SERIAL_DEBUG false - valószínűleg ezt szeretné igazolni, hogy láthassa a kimenetet a soros monitoron

Helyzetérzékelő kód

A helyzetérzékelés és a csípés nagy része a 742 -es sorban kezdődik, és a 802 -en megy keresztül. A helyzetérzékelőtől kapunk Pitch, Roll és Yaw adatokat, és ezekkel állítunk be értékeket. Attól függően, hogy az elektronikát hogyan szerelték fel, szükség lehet ezek módosítására. Ha a helyzetérzékelőt úgy helyezi fel, hogy a chip a kalap teteje felé nézzen, és a táblára nyomtatott X melletti nyíl a kalap eleje felé mutat, akkor a következőket kell látnia:

  • Pitch a fejével bólogat
  • Roll billenti a fejét, pl. érintse meg a fülét a vállához
  • Yaw melyik irányba. szembenéz (észak, nyugat stb.).

Ha a táblát más tájolásban szerelik fel, cserélnie kell a Pitch/Roll/Yaw irányt, hogy azok a kívánt módon viselkedjenek.

A tekercsbeállítások módosításához a következő #define értékeket módosíthatja:

  • ROLLOFFSET: ha a kalapod stabil, és amennyire csak lehet, ha a tekercs nem 0, akkor ezt a különbséggel változtasd meg. Azaz. Ha a Roll -20 -at látja, amikor a kalapja középre van állítva, tegye ezt a 20 -at.
  • ROLLMAX: a tekercsméréshez használható maximális érték. A legegyszerűbb megtalálni, ha kalapot visel, és jobb fülét a jobb válla felé mozgatja. Ehhez a soros monitor használata közben hosszú USB -kábelre lesz szüksége.
  • ROLLMIN: a legalacsonyabb érték, amelyet a tekercs mérésére használhat, amikor a fejét balra döntheti

Hasonlóképpen a Pitch esetében:

  • MAXPITCH - a maximális érték, ha felnéz
  • MINPITCH - a minimális érték, ha lefelé néz
  • PITCHCENTER - a hangmagasság értéke, ha egyenesen előre néz

Ha a SERIALDEBUG értékét true értékre állítja a fájl tetején, akkor látnia kell a soros monitor Roll/Pitch/Yaw kimenetének aktuális értékeit, hogy segítsen módosítani ezeket az értékeket.

Egyéb paraméterek, amelyeket érdemes módosítani

  • MAX_LED_DELAY 35 - a LED -részecske leglassabb mozgása. Ez ezredmásodpercben van megadva. Ez a késleltetés az egyik LED -ről a másikra való átmenetben a karakterláncban.
  • MIN_LED_DELAY 10 - a böjt, amelyet a LED részecske mozgatni tud. Mint fent, ezredmásodpercben van.

Következtetés

Ha eddig elment, akkor legyen egy teljesen működőképes és szórakoztató LED kalapja! Ha többet szeretne tenni vele, a következő oldalon néhány speciális információ található a beállítások megváltoztatásáról és a saját dolgairól. valamint néhány magyarázat arra, hogy a kódom többi része mit csinál.

5. lépés: Haladó és opcionális: A kódon belül

Ütés és centrifugálás érzékelés

Az ütés/centrifugálás észlelése a BNO055 magas G érzékelő funkcióival történik. Az érzékenységét az initBNO055 () következő soraival módosíthatja:

  • 316. sor: BNO055_ACC_HG_DURATION - mennyi ideig tart az esemény
  • 317. sor: BNO055_ACC_HG_THRESH - milyen keménynek kell lennie a hatásnak
  • 319. sor: BNO055_GYR_HR_Z_SET - forgási sebességküszöb
  • 320. sor: BNO055_GYR_DUR_Z - mennyi ideig kell még tartania a forgást

Mindkét érték 8 bites bináris, jelenleg a hatás B11000000, ami 192 a 255 -ből.

Amikor ütést vagy centrifugálást észlel, a BNO055 beállít egy értéket, amelyet a kód a ciklus elején keres:

// Érzékelje az esetlegesen kiváltott megszakításokat, azaz a magas G bájt miatt intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); if (intStatus> 8) {hatás (); } else if (intStatus> 0) {spin (); }

Keresse meg a fenti void impact () sort a kódban, hogy megváltoztassa a viselkedést az ütközéskor, vagy void spin () a spin viselkedésének megváltoztatásához.

Segítők

Létrehoztam egy egyszerű segítő funkciót (void setAllLeds ()) az összes LED gyors egyszínűre állításához. Az egyik segítségével kikapcsolhatja őket:

setAllLeds (CRGB:: Fekete);

Vagy választhat bármilyen színt, amelyet a FastLED könyvtár felismer:

setAllLeds (CRGB:: Piros);

Van egy fadeAllLeds () funkció is, amely 25%-kal tompítja az összes LED -et.

A részecske osztály

A kábelezés egyszerűsítése érdekében egyetlen LED -sorozatot akartam használni, de úgy kell viselkedni, mint több sztring. Mivel ez volt az első próbálkozásom, a lehető legegyszerűbbé akartam tenni, ezért az egyik karakterláncot kettőnek tekintem, a középső LED (ek) pedig ott lesznek. Mivel lehet páros vagy páratlan számunk, ezt el kell számolnunk. Kezdem néhány globális változóval:

/ * * Változó és tartályok LED -ekhez */ CRGB LED -ek [NUM_LEDS]; static unsigned int curLedDelay = MAX_LED_DELAY; static int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; static bool oddLeds = 0; statikus bool részecskeDir = 1; statikus bool speedDir = 1; előjeles hosszú dirCount; előjel nélküli hosszú színárnyalat;

És néhány kód a beállításban ():

ha (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } else {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }

Ha páratlan számokkal rendelkezünk, akkor az 1/2 pontot szeretnénk középként használni, ellenkező esetben a 1/2 pontot - 1. Ezt könnyen látni 10 vagy 11 LED -del:

  • 11 LED: a 11/2 egész számokkal 5 -re kell értékelni, és a számítógépek 0 -tól számolnak. Tehát a 0 - 4 az egyik fele, a 6 - 10 a másik fele, és 5 van közöttük. Az #5 -öt ebben az esetben úgy kezeljük, mintha mindkettő része lenne, azaz ez az első a LED -ek mindkét virtuális karakterláncához
  • 10 LED: 10/2 az 5. De mivel a számítógépek 0 -tól számolnak, el kell távolítanunk egyet. Akkor az egyik félhez 0 - 4, a másikhoz 5 - 9 van. Az első virtuális karakterlánc #1 lesz 4, a második virtuális karakterlánc pedig #5.

Ezután a részecske kódunkban számolnunk kell az általános helyzetünktől a LED -húr tényleges pozícióiig:

if (páratlan LED) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }

A kódnak vannak olyan feltételei is, amelyeknél a részecske megváltoztathatja az irányt, ezért ezt is figyelembe kell vennünk:

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

Tehát a tervezett irányt (particleDir) használjuk annak kiszámításához, hogy melyik LED -nek kell legközelebb világítania, de azt is mérlegelnünk kell, hogy elértük -e vagy a LED -húr valódi végét, vagy a középpontunkat, amely egyben célként is szolgál a virtuális karakterláncok mindegyike.

Miután mindezt kitaláltuk, szükség szerint felgyújtjuk a következő fényt:

if (particleDir) {if (páratlan LED) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }} else {if (oddLeds) {Pos1 = centerLed - currPos; Pos2 = centerLed + currPos; } else {Pos1 = centerLed - currPos; Pos2 = (centerLed -1) + currPos; }} ledek [Pos1] = CHSV (currHue, 255, 255); ledek [Pos2] = CHSV (currHue, 255, 255); FastLED.show ();}

Egyáltalán minek csinálni ezt az osztályt? Ez így van, nagyon egyszerű, és nem igazán kell osztályban lennie. A jövőben azonban azt tervezem, hogy frissítem a kódot, hogy egyszerre több részecske is előfordulhasson, és vannak olyanok, amelyek fordítva működnek, míg mások továbbmennek. Úgy gondolom, hogy nagyon nagy lehetőségek vannak a centrifugálás észlelésére több részecske használatával.

Ajánlott: