INHOUDSOPGAWE:
- Stap 1: Vereiste dinge
- Stap 2: Montering
- Stap 3: Die kode en kalibrasie
- Stap 4: Hoe dit werk (opsioneel)
Video: Gyroscooppret met Neopixel -ring: 4 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
In hierdie handleiding gaan ons die MPU6050 -gyroscoop, 'n neopixelring en 'n arduino gebruik om 'n toestel te bou wat LED's aansteek wat ooreenstem met die hellingshoek.
Dit is 'n eenvoudige en prettige projek wat op 'n broodbord aangebring sal word. As u die stappe volg, bou u wat u in die video gesien het. Dit is 'n goeie handleiding om te leer oor die gyroscoop en die neopixelring.
Ek bou hierdie tutoriaal vanweë die belangstelling wat ek op my eerste instruksies hier (Gyroscope Led Control With Arduino) gesien het. In hierdie instruksies het ek eenvoudige LED's vervang met 'n neopixelring. Die ring is eenvoudiger om te gebruik deur 'n Adafruit -biblioteek en dit is beslis meer skouspelagtig.
As u dus hierdie komponente het, is dit 'n goeie manier om dit te gebruik, ek sal u stap vir stap probeer om die toestel te bou en ook te verduidelik hoe dit in die laaste stap werk.
Stap 1: Vereiste dinge
Dele
1. Arduino pro mini 328p (eBay) 2 $
2. Broodbord
3. MPU6050 gyroscoop (eBay) 1.2 $
4. 24 neopixel led ring (Adafruit) 17 $
5. 4 x AA battery pack met 4 batterye
6. U-vormige trukkabels (opsioneel). Ek het hierdie springkabels gebruik omdat dit beter lyk op die broodbord, en die leds is meer sigbaar op hierdie manier. U kan 'n boks van 140 op eBay vind teen ongeveer $ 4. As u nie hierdie kabels het nie, kan u dit vervang met dupont -drade.
Gereedskap:
1. USB na seriële FTDI -adapter FT232RL om die arduino pro mini te programmeer
2. Arduino IDE
Vaardighede: 1. Soldeer, kyk na hierdie handleiding
3. Basiese arduino -programmering, hierdie handleiding kan nuttig wees
Stap 2: Montering
Ek het die fritzing -skematika in fzz -formaat aangeheg en 'n foto daarvan om die verbindings maklik te visualiseer
1. U moet 3 penne aan die agterkant van die neopixelring soldeer, soos op die foto getoon
- soldeer die positiewe pen
- soldeer die grond
- soldeer die data -invoerpen
2. Dan moet die 4x batteryhouer 'n verbinding met die broodbord hê; 'n maklike oplossing is om twee manlike dupontdrade aan sy terminale te soldeer.
3. Berei die broodbord voor.
- plaas die neopixelring, mikrobeheerder en gyroscoop op die broodbord soos op die foto
- plaas al die negatiewe drade: na die mikrobeheerder, neopixelring, gyro
- plaas al die positiewe drade: na die mikrobeheerder, neopixelring, gyro
- plaas al die data drade:
* SDA en SCL van die na die mikrobeheerder na die gyro
* pen D6 van die mikrobeheerder na die neopixelring
- Kontroleer alle aansluitings voordat u aanskakel
- plak die battery op die agterkant van die bradbord vas om dit op sy plek te hou en dit draagbaarder te maak.
Stap 3: Die kode en kalibrasie
Eerstens moet u twee biblioteke aflaai en installeer:
1. Adafruit neopixel biblioteek vir die beheer van die neopixel
2. MPU6050 biblioteek vir die gyroscoop
3. I2CDev biblioteek bron
Dit is twee groot biblioteke wat die swaar werk sal doen!
Meer besonderhede oor die neopixels hier
Laai dan my biblioteek hier af en installeer dit, of kopieer dit van onder af:
#sluit "I2Cdev.h" in
#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 strip = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); ongetekende lang lastPrintTime = 0; bool inisialisering = vals; // stel waar as DMP init suksesvol was uint8_t mpuIntStatus; // hou die werklike onderbrekingsstatusbyte van MPU uint8_t devStatus; // terugkeerstatus na elke apparaatbewerking (0 = sukses,! 0 = fout) uint16_t packetSize; // verwagte DMP -pakkiegrootte (standaard is 42 grepe) uint16_t fifoCount; // telling van alle grepe wat tans in FIFO uint8_t fifoBuffer [64] is; // FIFO -stoorbuffer Quaternion q; // [w, x, y, z] quaternion houer VectorFloat swaartekrag; // [x, y, z] swaartekragvektor float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll container en gravitasie vektor vlugtige bool mpuInterrupt = false; // dui aan of die MPU -onderbrekingspen hoog is
leemte opstelling ()
{Serial.begin (9600); Serial.println ("Program begin"); inisialisering = initializeGyroscope (); strip.begin (); } leemte -lus () {if (! initialization) {return; } mpuInterrupt = vals; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); as (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); terugkeer; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& swaartekrag, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & gravitasie); redrawLeds (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }} boolean hasFifoOverflown (int mpuIntStatus, int fifoCount) {return mpuIntStatus & 0x10 || fifoCount == 1024; } void redrawLeds (int x, int y, int z) {x = beperking (x, -1 * MAX_ANGLE, MAX_ANGLE); y = beperking (y, -1 * MAX_ANGLE, MAX_ANGLE); as (y 0) {lightLeds (y, z, 0, 5, 0, 89); } anders as (y <0 en z 0 en z 0 en 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 = kaart (hoek, vanAngle, naAngle, vanLedPosition, toLedPosition); printDebug (x, y, ledNr, hoek); uint32_t kleur; vir (int i = 0; i posisie + LED_OFFSET) {terugkeer posisie + LED_OFFSET; } terugkeer posisie + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (hoek); Serial.print (";"); Serial.print ("ll ="); Serial.print (lightLed); Serial.print (";"); Serial.print ("y ="); Serial.print (y); Serial.print (";"); Serial.print ("z ="); Serial.print (z); Serial.println (";"); lastPrintTime = millis (); } bool initializeGyroscope () {Wire.begin (); TWBR = 24; mpu.initialize (); Serial.println (mpu.testConnection ()? F ("MPU6050 verbinding suksesvol"): F ("MPU6050 verbinding misluk")); Serial.println (F ("Initialiseer DMP …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP Initialization failed (code")); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Aktiveer interrupt -opsporing (Arduino eksterne onderbreking 0) … ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP gereed! Wag vir eerste onderbreking … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Laai die kode op:
Laai die kode na die arduino met die FTDI -adapter.
Koppel die kragtoevoer (batterye) aan
Kalibrasie:
Die belangrikste ding om hier te kalibreer, is die "LED_OFFSET" -konstante. In my voorbeeld is 12. U moet dit van 0 tot 23 aanpas sodat die led na die aanstuur van die bord sal brand in die rigting waarin u die bord kantel.
As u meer inligting wil kry oor hoe dit werk, kyk dan na die laaste stap
Stap 4: Hoe dit werk (opsioneel)
Eerstens 'n bietjie inligting oor die MPU6050 -gyroscoop. Dit is 'n MEMS -gyroscoop (MEMS staan vir mikro -elektromeganiese stelsels).
Elke tipe MEM -gyroscoop het 'n vorm van ossillerende komponent waarvandaan die versnelling, en dus rigtingverandering, opgespoor kan word. Dit is omdat 'n trillende voorwerp, volgens die behoud van bewegingswet, daarvan hou om in dieselfde vlak voort te gaan, en enige vibrasie -afwyking kan gebruik word om 'n rigtingverandering af te lei.
Die gyro bevat ook 'n eie mikrobeheerder vir die berekening van die rol, toonhoogte en gaai deur 'n paar fyn wiskunde.
Maar die gyro rou data ly aan geraas en wegdrywing, so ons het 'n eksterne biblioteek gebruik om dinge glad te maak en ons bruikbare data te gee.
Die Neopixel is RGB -leds wat individueel aangespreek kan word en in bande en ringe vasgeketting word. Hulle werk op 5V en bevat hul eie stroombane, dus u hoef slegs die neopixels aan te dryf en met hulle te kommunikeer via die datalyn. Die kommunikasie geskied met 'n enkele data lyn wat klok en data bevat (meer besonderhede hier). Adafruit bied 'n skoon biblioteek vir interaksie met die neopixelringe.
Die kode
Binne die l oop () -funksie word die MPU6050_6Axis_MotionApps20 -biblioteek genoem. As die biblioteek nuwe data van die gyroscpe het, noem dit redrawLeds (x, y, z) met 3 argumente wat yaw, pitch en roll voorstel
Binne redrawLeds ():
- ons fokus op twee as: y, z
- ons beperk albei aksies van -MAX_ANGLE tot +MAX_ANGLE, ons definieer maksimum hoek tot 45 en dit kan verander word
- ons verdeel 360 grade in 4 kwadrante en noem lightLeds () funksies vir elkeen soos volg:
* y negatief, z positief eerste kwadrant sal LED's van 0 na 5 beheer, die hoek is van 0 tot 89
* y negatief, z negatief tweede kwadrant kontroles led's van 6 tot 12, die hoek sal van 89 tot 0 wees
* … ens
- binne die lightLeds -funksie
* ek bereken 'n hoek op grond van die twee as met behulp van arctangent (kyk die aangehegte prentjie)
* Ek bereken wat deur die arduino -kaartfunksie aan die lig gekom het
* ek stel die LED -strook op alles behalwe twee LED's, die een wat ooreenstem met die LED -posisie wat ek voorheen bereken het en 'n LED -posisie voorheen (om 'n vervaag -effek aan te toon)
* Ek gebruik 'n funksie genaamd normalizeLedPosition () om die neopixel -kalibrasie in ag te neem. Die kalibrasie is handig omdat die neopixelring na wens gedraai kan word en in lyn gebring moet word met die gyroscoop
* ek druk ook die sleepas, die led het lig en die hoek
Die wiskunde
Ek het 'n prentjie aangeheg met die ring en die trigonometriese funksie wat gebruik word om die hoek te bepaal.
Aanbeveel:
RGB LED MATRIX MET NEOPIXEL: 8 stappe (met foto's)
RGB LED MATRIX MET NEOPIXEL: In hierdie tutoriaal gaan ek u wys hoe u 'n 5*5 RGB LEDMATRIX met NEOPIXEL kan bou. Met hierdie matriks kan ons boeiende animasies, emoji's en letters super aantreklik vertoon. laat ons begin
Vu -meter met Neopixel Leds: 8 stappe (met foto's)
Vu -meter met behulp van Neopixel Leds: In hierdie tutoriaal gaan ek u wys hoe u 'n pragtige VU -meter kan bou met behulp van neopixel LEDs.its het 5 verskillende animasies, ligintensiteitsbeheer en sensitiwiteitsbeheer. super maklik, laat ons begin
Trek die lig - ligmodule met behulp van Neopixel en optel -skakelaar: 6 stappe (met foto's)
Trek die lig - ligmodule met behulp van Neopixel & pull -up switch: kenmerke van die Light -module Arduino Uno Hardware & omhulsel gekoop van internet Neopixel & Kragtoevoer geleen by die School of Informatics & Produkontwerp Ligmodule wat deur kragtoevoer beheer word Alle funksies wat beheer word deur
Unicorn Horn met NeoPixel LED's en Arduino Lilypad: 8 stappe (met foto's)
Unicorn Horn Met NeoPixel LED's en Arduino Lilypad: Hallo almal, vandag maak ek 'n 3D -gedrukte Unicorn Horn. Ek het die projek ongeveer 'n jaar gelede op Adafruit se webwerf gesien en gedoen, maar ek kon nie 'n geleentheid kry om dit te deel nie. Dit lyk wonderlik as u na die partytjie gaan, veral in die aande
Hoe om 'n rekenaar met maklike stappe en foto's uitmekaar te haal: 13 stappe (met foto's)
Hoe om 'n rekenaar uitmekaar te haal met eenvoudige stappe en foto's: dit is 'n instruksie oor hoe om 'n rekenaar uitmekaar te haal. Die meeste basiese komponente is modulêr en kan maklik verwyder word. Dit is egter belangrik dat u daaroor georganiseerd is. Dit sal u verhinder om onderdele te verloor, en ook om die montering weer