Tartalomjegyzék:
- 1. lépés: Szükséges dolgok
- 2. lépés: Összeszerelés
- 3. lépés: A kód és a kalibrálás
- 4. lépés: Hogyan működik (opcionális)
Videó: Giroszkóp szórakozás neopixel gyűrűvel: 4 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Ebben az oktatóanyagban az MPU6050 giroszkópot, egy neopixelgyűrűt és egy arduino -t fogunk használni egy olyan eszköz felépítéséhez, amely a dőlésszögnek megfelelő LED -eket világít.
Ez egy egyszerű és szórakoztató projekt, és egy kenyértáblára lesz szerelve. Ha követi a lépéseket, felépítheti a videóban látottakat. Ez egy jó oktatóanyag a giroszkóp és a neopixelgyűrű megismeréséhez.
Ezt az oktatóanyagot azért építem, mert érdeklődtem az első itt olvasható (Gyroscope Led Control With Arduino) iránt. Ebben az utasításban az egyszerű LED -eket lecseréltem egy neopixel gyűrűre. A gyűrűt egyszerűbb használni az Adafruit könyvtáron keresztül, és határozottan látványosabb.
Tehát ha ezeket az alkatrészeket körülveszi, ez nagyszerű módja annak, hogy kihasználja őket, megpróbálom lépésről lépésre végigvezetni Önt az eszköz építésén, és elmagyarázni, hogyan működik az utolsó lépésben.
1. lépés: Szükséges dolgok
Alkatrészek
1. Arduino pro mini 328p (eBay) 2 $
2. Kenyeretábla
3. MPU6050 giroszkóp (eBay) 1,2 $
4. 24 neopixel led gyűrű (Adafruit) 17 $
5. 4 x AA elemcsomag 4 elemmel
6. U alakú áthidaló kábelek (opcionális). Azért használtam ezeket az áthidaló kábeleket, mert jobban néznek ki a kenyértáblán, és a LED -ek így jobban láthatók. 140 dobozban találsz az ebay -en, körülbelül 4 dollárért. Ha nincsenek ezek a kábelek, kicserélheti őket dupont vezetékekre.
Eszközök:
1. USB -soros FTDI adapter FT232RL az arduino pro mini programozásához
2. Arduino IDE
Képességek: 1. Forrasztás, nézze meg ezt az oktatóanyagot
3. Alapvető arduino programozás, ez az oktatóanyag hasznos lehet
2. lépés: Összeszerelés
Csatoltam a frizázó vázlatot fzz formátumban és egy képet róla, hogy könnyen látható legyen a kapcsolatok
1. A neopixel gyűrű hátoldalán 3 db tűt kell forrasztani, ahogy az a képen látható
- forrasztja a pozitív csapot
- forrasztani a talajt
- forrasztani az adatbeviteli tűt
2. Ezután a 4x -es elemtartónak csatlakoznia kell a kenyérlaphoz, egyszerű megoldás az, ha két dugaszos dugaszt csatlakoztat a csatlakozókhoz.
3. Készítse elő a panelt.
- helyezze a neopixelgyűrűt, a mikrokontrollert és a giroszkópot a kenyérsütő táblára, mint a képen
- helyezze el az összes negatív vezetéket: a mikrokontrollerhez, a neopixelgyűrűhöz, a giroszkóphoz
- helyezze el az összes pozitív vezetéket: a mikrokontrollerhez, a neopixelgyűrűhöz, a giroszkóphoz
- helyezze el az összes adatvezetéket:
* SDA és SCL a mikrokontrollertől a giroszkópig
* D6 tű a mikrokontrollerről a neopixelgyűrűre
- áramellátás előtt ellenőrizze az összes csatlakozást
- opcionálisan ragasztószalag használatával ragasztja be az akkumulátort a bradboard hátoldalára, hogy a helyén tartsa és hordozhatóbbá tegye
3. lépés: A kód és a kalibrálás
Először le kell töltenie és telepítenie kell két könyvtárat:
1. Adafruit neopixel könyvtár fenyő, amely a neopixelt vezérli
2. MPU6050 könyvtár a giroszkóphoz
3. I2CDev könyvtár forrás
Két nagy könyvtárról van szó, amelyek elvégzik a nehéz feladatokat!
További részletek a neopixelekről itt
Ezután töltse le és telepítse a könyvtáramat innen, vagy másolja le alulról:
#include "I2Cdev.h"
#include #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h" #define NEOPIXED_CONTROL_PIN 6 #define NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Adafruit_NeoPixel csík = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); unsigned long lastPrintTime = 0; bool inicializálás = hamis; // igazítsa be, ha a DMP init sikeres volt uint8_t mpuIntStatus; // tényleges megszakítási állapot bájtot tartalmaz az MPU -ból uint8_t devStatus; // visszatérési állapot minden eszközművelet után (0 = siker,! 0 = hiba) uint16_t packetSize; // várható DMP csomagméret (alapértelmezett 42 bájt) uint16_t fifoCount; // az összes bájt száma a FIFO -ban uint8_t fifoBuffer [64]; // FIFO tárolópuffer Quaternion q; // [w, x, y, z] kvaternion konténer VectorFloat gravity; // [x, y, z] gravitációs vektor float ypr [3]; // [rázkódás, dőlésszög, tekerés] rázkódás/dőlés/tekercstartály és gravitációs vektor illékony bool mpuInterrupt = false; // jelzi, hogy az MPU megszakító csapja magasra emelkedett -e
üres beállítás ()
{Serial.begin (9600); Serial.println ("A program elindult"); inicializálás = inicializálásGyroscope (); strip.begin (); } void loop () {if (! inicializálás) {return; } mpuInterrupt = hamis; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); Visszatérés; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitáció, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & gravitáció); redrawLeds (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }} logikai hasFifoOverflown (int mpuIntStatus, int fifoCount) {return mpuIntStatus & 0x10 || fifoCount == 1024; } void redrawLeds (int x, int y, int z) {x = constrain (x, -1 * MAX_ANGLE, MAX_ANGLE); y = kényszerít (y, -1 * MAX_ANGLE, MAX_ANGLE); ha (y 0) {lightLeds (y, z, 0, 5, 0, 89); } else if (y <0 és z 0 és z 0 és z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} void lightLeds (int x, int y, int fromLedPosition, int toLedPosition, int fromAngle, int toAngle) {double angle = (atan ((double) abs (x) / (double) abs (y)) * 4068) / 71; int ledNr = térkép (szög, tólAngle, toAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, szög); uint32_t szín; for (int i = 0; i pozíció + LED_OFFSET) {visszatérési pozíció + LED_OFFSET; } visszatérési pozíció + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int szög) {if (millis () - lastPrintTime <500) {return; } Soros.nyomtatás ("a ="); Soros.nyomat (szög); Soros.nyomtatás (";"); Serial.print ("ll ="); Serial.print (lightLed); Serial.print (";"); Soros.nyomtatás ("y ="); Soros.nyomtatás (y); Soros.nyomtatás (";"); Serial.print ("z ="); Serial.print (z); Serial.println (";"); lastPrintTime = millis (); } bool initializeGyroscope () {Wire.begin (); TWBR = 24; mpu.initialize (); Serial.println (mpu.testConnection ()? F ("Az MPU6050 kapcsolat sikeres"): F ("Az MPU6050 kapcsolat sikertelen")); Serial.println (F ("DMP inicializálása …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("A DMP inicializálása nem sikerült (kód"))); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Engedélyezés megszakítás észlelése (Arduino külső megszakítás 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP kész! Várakozás az első megszakításra … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Töltse fel a kódot:
Az FTDI adapter segítségével töltse fel a kódot az arduino -ba.
Csatlakoztassa a tápegységet (elemek)
Kalibráció:
A legfontosabb dolog a kalibráláshoz a "LED_OFFSET" állandó. Példámban a 12. Ezt 0 -ról 23 -ra kell állítania, hogy a tápfeszültség bekapcsolása után a led a tábla döntési irányába világítson.
Ha további részleteket szeretne megtudni a működéséről, nézze meg az utolsó lépést
4. lépés: Hogyan működik (opcionális)
Először egy kis információ az MPU6050 giroszkópról. Ez egy MEMS giroszkóp (a MEMS a mikroelektromechanikus rendszereket jelenti).
A MEMs giroszkóp minden típusa rendelkezik valamilyen rezgő komponenssel, ahonnan kimutatható a felhalmozódás és ezáltal az irányváltozás. Ennek oka az, hogy a mozgástörvény szerint a rezgő objektum szeret ugyanabban a síkban rezegni, és bármilyen rezgéseltérés felhasználható az irányváltozás levezetésére.
A giroszkóp tartalmaz egy saját mikrokontrollert is, amely kiszámítja a dobást, a hangmagasságot és az elfordulást néhány divatos matematika segítségével.
De a giroszkóp nyers adatok zajtól és sodródástól szenvednek, ezért külső könyvtárat használtunk a dolgok elsimítására és tiszta használható adatok megadására.
A Neopixel RGB LED -ek egyedileg címezhetők, sávokba és gyűrűkbe láncolva. 5 V -on működnek, és saját áramkört tartalmaznak, így csak a neopixelek tápellátására van szükség, és az adatvezeték használatával kommunikálni kell velük. A kommunikáció egyetlen adatvonallal történik, amely órát és adatokat tartalmaz (további részletek itt). Az Adafruit tiszta könyvtárat biztosít a neopixelgyűrűkkel való interakcióhoz.
A kód
A l oop () függvényben az MPU6050_6Axis_MotionApps20 könyvtárat hívják meg. Ha a könyvtár új adatokkal rendelkezik a gyroscpe -ből, akkor redrawLeds -nek (x, y, z) hívja, 3 argumentummal, amelyek az elfordulást, a hangmagasságot és a görgetést jelzik
Inside redrawLeds ():
- két tengelyre fókuszálunk: y, z
- mindkét tengelyt -MAX_ANGLE -ról +MAX_ANGLE -ra korlátozzuk, a maximális szöget 45 -re határoztuk meg, és ez megváltoztatható
- 360 fokos rétegeket négy negyedre osztunk, és mindegyikhez meghívjuk a lightLeds () függvényeket:
* y negatív, z pozitív első kvadráns 0 és 5 között vezérli a ledeket, a szög 0 és 89 között lesz
* y negatív, z negatív második kvadráns vezérlő 6 -tól 12 -ig vezetett, a szög 89 és 0 között lesz
*… Stb
- a lightLeds funkció belsejében
* A szöget a két tengely alapján számolom arctangent segítségével (ellenőrizze a mellékelt képet)
* Az arduino térkép funkció segítségével kiszámítom, hogy mi mutatkozott
* visszaállítom a led szalagot két kivételével, az egyik megfelel a korábban számított led pozíciónak és az előtte lévő led pozíciónak (hogy elhalványuljon a hatás)
* a normalizeLedPosition () nevű függvényt használom a neopixel kalibrálás figyelembevételéhez. A kalibrálás azért hasznos, mert a neopixelgyűrű tetszés szerint elforgatható, és a giroszkóphoz kell igazítani
* A vonótengelyt is kinyomtatom, a lednek van fénye és szöge
A matek
Csatoltam egy képet a led gyűrűvel és a szög meghatározásához használt trigonometrikus függvénnyel.
Ajánlott:
Giroszkóp platform/ kamera Gimbal: 5 lépés (képekkel)
Giroszkóp Platform/ Camera Gimbal: Ez az oktatható a Dél -Floridai Egyetem Makecourse projektkövetelményének teljesítésével jött létre (www.makecourse.com)
Transzfer tanulás az NVIDIA JetBot segítségével - Szórakozás a forgalmi kúpokkal: 6 lépés
Transzfer tanulás az NVIDIA JetBot segítségével-Szórakozás a Traffic Cones segítségével: Tanítsa meg robotját, hogy keressen utat a forgalmi kúpok útvesztőjében a kamera és a legmodernebb mély tanulási modell segítségével
Szórakozás az OLED kijelzővel és az Arduino -val: 12 lépés (képekkel)
Szórakozás az OLED kijelzővel és az Arduino -val: Biztos vagyok benne, hogy biztosan hallott az OLED kijelzőtechnológiáról. Viszonylag új, és jobb minőséget kínál, mint a régi LCD technológia. Ebben az oktatóanyagban át akarjuk tekinteni azokat a lépéseket, amelyek szükségesek az adatok megjelenítéséhez az egyik leggyakoribb, egyetlen
Neopixel óra három neopixel gyűrűvel: 7 lépés
Neopixel óra három neopixel gyűrűvel: A Neo Pixel óra ragyogó megalkotása Steve Manley hatására arra késztetett, hogy elkészítsem ezt az utasítást arról, hogyan készítsünk hasonló órát a legkevesebb pénzért. (Egy fontos holland szokás mindig pénzt takarítani;-)) rájöttem, hogy az o
Univerzális, 2 giroszkóp képstabilizátor: 6 lépés (képekkel)
Univerzális, 2 gyros képstabilizátor: Ez a képstabilizátor bármilyen objektívvel és fényképezőgéppel használható. Ugyanúgy működik, mint a Hubble teleszkóp, több napos expozíció során ugyanarra a tárgyra mutat. Ez a stabilizátor sikeresen használható mérsékelten hosszú expozíciókkal és mérsékelt