Tartalomjegyzék:

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

Videó: Fancy LED kalap: 5 lépés (képekkel)

Videó: Fancy LED kalap: 5 lépés (képekkel)
Videó: California Hair Stylist Sets Client's Hair on Fire to Get Rid of Split Ends 2024, November
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: