Sisällysluettelo:
- Vaihe 1: Tarvittavat asiat
- Vaihe 2: Kokoonpano
- Vaihe 3: Koodi ja kalibrointi
- Vaihe 4: Kuinka se toimii (valinnainen)
Video: Gyroskooppi hauskaa neopikselirenkaalla: 4 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Tässä opetusohjelmassa aiomme käyttää MPU6050 -gyroskooppia, neopikselirengasta ja arduinoa rakentaaksesi laitteen, joka sytyttää ledit kaltevuuskulman mukaisesti.
Tämä on yksinkertainen ja hauska projekti, ja se kootaan leipälaudalle. Jos noudatat ohjeita, rakennat videossa näkemäsi. Se on hyvä opetusohjelma gyroskoopin ja neopikselirenkaan oppimiseen.
Rakennan tätä opetusohjelmaa kiinnostukseni vuoksi, jota näin ensimmäisessä opetusohjelmassani (Gyroscope Led Control With Arduino). Tässä ohjeessa olen korvannut yksinkertaiset ledit neopikselirenkaalla. Rengas on yksinkertaisempi käyttää Adafruit -kirjaston kautta ja se on ehdottomasti näyttävämpi.
Joten jos sinulla on näitä komponentteja, tämä on loistava tapa käyttää niitä, yritän opastaa sinua askel askeleelta laitteen rakentamisen läpi ja selittää myös, miten se toimii viimeisessä vaiheessa.
Vaihe 1: Tarvittavat asiat
Osat
1. Arduino pro mini 328p (eBay) 2 dollaria
2. Leipälauta
3. MPU6050 gyroskooppi (eBay) 1,2 dollaria
4. 24 neopixel led -rengas (Adafruit) 17 $
5. 4 x AA -paristo 4 paristolla
6. U-muotoiset hyppyjohdot (valinnainen). Olen käyttänyt näitä hyppyjohtoja, koska ne näyttävät paremmilta leipälaudalla ja ledit näkyvät paremmin tällä tavalla. Löydät 140 laatikon ebaystä noin 4 dollaria. Jos sinulla ei ole näitä kaapeleita, voit korvata ne dupont -johdoilla.
Työkalut:
1. USB -sarja FTDI -sovitin FT232RL arduino pro minin ohjelmointiin
2. Arduino IDE
Taidot: 1. Juotos, tarkista tämä opetusohjelma
3. Perus arduino -ohjelmointi, tämä opetusohjelma voi olla hyödyllinen
Vaihe 2: Kokoonpano
Olen liittänyt fritzing -kaavion fzz -muodossa ja kuvan siitä yhteyksien visualisoimiseksi
1. Sinun on juotettava 3 urospistettä neopikselirenkaan takaosaan kuten kuvassa
- juota positiivinen tappi
- juottaa maata
- juota tietojen syöttötappi
2. Tällöin 4x -paristopidikkeellä pitäisi olla tapa liittää leipälevyyn, helppo ratkaisu on juottaa kaksi urospuolista dupont -johtoa sen liittimiin.
3. Valmistele leipälauta.
- aseta neopikselirengas, mikrokontrolleri ja gyroskooppi leipälevylle kuten kuvassa
- aseta kaikki negatiiviset johdot: mikrokontrolleriin, neopikselirenkaaseen, gyroon
- aseta kaikki positiiviset johdot: mikrokontrolleriin, neopikselirenkaaseen, gyroon
- aseta kaikki datajohdot:
* SDA ja SCL mikrokontrollerista gyroskooppiin
* nasta D6 mikrokontrollerista neopikselirenkaaseen
- tarkista kaikki liitännät ennen virran kytkemistä
- vaihtoehtoisesti käyttämällä teippiä, teippaa akku bradboardin takaosaan, jotta se pysyy paikallaan ja tekee siitä kannettavamman
Vaihe 3: Koodi ja kalibrointi
Ensin sinun on ladattava ja asennettava kaksi kirjastoa:
1. Adafruit -neopikselikirjasto, joka hallitsee neopikseliä
2. MPU6050 -kirjasto gyroskoopille
3. I2CDev -kirjaston lähde
Ne ovat kaksi suurta kirjastoa, jotka tekevät raskaan nostamisen!
Lisätietoja neopikseleistä täällä
Lataa ja asenna sitten kirjasto täältä tai kopioi se alta:
#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 strip = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); allekirjoittamaton pitkä lastPrintTime = 0; boolin alustus = false; // aseta tosi, jos DMP -aloitus onnistui uint8_t mpuIntStatus; // omistaa todellisen keskeytystilan tavun MPU: sta uint8_t devStatus; // palautustila jokaisen laitteen käytön jälkeen (0 = onnistunut,! 0 = virhe) uint16_t packetSize; // odotettu DMP -paketin koko (oletus on 42 tavua) uint16_t fifoCount; // kaikkien tällä hetkellä FIFO: ssa olevien tavujen määrä uint8_t fifoBuffer [64]; // FIFO -tallennuspuskuri Quaternion q; // [w, x, y, z] kvaternionisäiliö VectorFloat gravity; // [x, y, z] painovoimavektori float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll säiliö ja painovoimavektori haihtuva bool mpuInterrupt = false; // osoittaa, onko MPU -keskeytystappi korkea
mitätön asennus ()
{Serial.begin (9600); Serial.println ("Ohjelma käynnistyi"); alustus = initializeGyroscope (); strip.begin (); } void loop () {if (! initialization) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); palata; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& painovoima, & q); mpu.dmpGetYawPitchRoll (ypr, & q ja & gravity); 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 = rajoita (x, -1 * MAX_ANGLE, MAX_ANGLE); y = rajoittaa (y, -1 * MAX_ANGLE, MAX_ANGLE); jos (y 0) {lightLeds (y, z, 0, 5, 0, 89); } muu jos (y <0 ja z 0 ja z 0 ja z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} tyhjä valoLed (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 = kartta (kulma, kulmasta, kulmasta, kulmaan, kulmastaLedPosition, toLedPosition); printDebug (x, y, ledNr, kulma); uint32_t väri; for (int i = 0; i position + LED_OFFSET) {return position + LED_OFFSET; } paluupaikka + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int kulma) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (kulma); 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 -yhteys onnistui"): F ("MPU6050 -yhteys epäonnistui")); Serial.println (F ("DMP: n alustaminen…")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP -alustus epäonnistui (koodi))); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F (" Käytössä keskeytyksen tunnistus (Arduino ulkoinen keskeytys 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP valmis! Odotetaan ensimmäistä keskeytystä … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Lataa koodi:
Lataa koodi FDDI -sovittimella arduinoon.
Liitä virtalähde (paristot)
Kalibrointi:
Tärkein kalibroitava asia tässä on "LED_OFFSET" -vakio. Esimerkkini on 12. Sinun on säädettävä tämä 0: sta 23: een, jotta LED -valo syttyy levyn virran kytkemisen jälkeen siihen suuntaan, johon lautaa kallistetaan.
Jos haluat lisätietoja sen toiminnasta, tutustu viimeiseen vaiheeseen
Vaihe 4: Kuinka se toimii (valinnainen)
Ensin vähän tietoa MPU6050 -gyroskoopista. Tämä on MEMS -gyroskooppi (MEMS tarkoittaa mikroelektromekaanisia järjestelmiä).
Jokaisessa MEMs -gyroskoopin tyypissä on jonkinlainen värähtelevä komponentti, josta kertyminen ja siten suunnanmuutos voidaan havaita. Tämä johtuu siitä, että liikelainsäädännön mukaan värisevä esine haluaa jatkaa värähtelyä samassa tasossa, ja mitä tahansa värähtelypoikkeamaa voidaan käyttää suunnanmuutoksen johtamiseen.
Gyrossa on myös oma mikrokontrolleri, joka laskee heiton, sävelkorkeuden ja kääntymisen hienojen matematiikan avulla.
Mutta gyro -raakatiedot kärsivät melusta ja ajelehtimisesta, joten käytimme ulkoista kirjastoa tasoittaaksemme asiat ja saadaksemme puhtaita käyttökelpoisia tietoja.
Neopixelit ovat RGB -ledit, jotka voidaan yksilöidä erikseen ja ketjuttaa nauhoiksi ja renkaiksi. Ne toimivat 5 V: n jännitteellä ja sisältävät oman piirinsä, joten sinun tarvitsee vain syöttää virtaa neopikseleille ja kommunikoida niiden kanssa tietolinjan avulla. Tiedonsiirto tapahtuu yhdellä datalinjalla, joka sisältää kellon ja tiedot (lisätietoja täältä). Adafruit tarjoaa puhtaan kirjaston vuorovaikutukseen neopikselirenkaiden kanssa.
Koodi
L oop () -funktion sisällä kutsutaan MPU6050_6Axis_MotionApps20 -kirjastoa. Kun kirjastolla on uusia tietoja gyroscpeista, se kutsuu redrawLeds (x, y, z), jossa on 3 argumenttia, jotka edustavat kääntymistä, nousua ja heilumista
Sisällä redrawLeds ():
- keskitymme kahteen akseliin: y, z
- rajoitamme molempia akseleita arvosta -MAX_ANGLE arvoon +MAX_ANGLE, määritimme maksimikulman 45 ja se on vaihdettavissa
- jaamme 360 astetta neljään neljännekseen ja kutsumme lightLeds () -funktiot kullekin seuraavasti:
* y negatiivinen, z positiivinen ensimmäinen kvadrantti ohjaa ledit 0: sta 5: een, kulma on 0 - 89
* y negatiivinen, z negatiivinen toisen neljänneksen ohjaimet johtivat 6: sta 12: een, kulma on 89 - 0
* …jne
- LightLeds -toiminnon sisällä
* Lasken kulman kahden akselin perusteella arktangentin avulla (tarkista oheinen kuva)
* Lasken arduino -karttatoiminnon avulla, mikä johti näyttämiseen
* Nollaan led -nauhan kaikki kaksi lukuun ottamatta lediä, joka vastaa aiemmin laskemaani led -asentoa ja led -asentoa ennen (häivytysvaikutuksen näyttämiseksi)
* Käytän funktiota normalizeLedPosition () ottaakseni huomioon neopikselin kalibroinnin. Kalibrointi on hyödyllistä, koska neopikselirengasta voidaan kääntää miellyttävästi ja se tulee kohdistaa gyroskoopin kanssa
* tulostan myös hinausakselia, missä ledissä on valo ja kulma
Matematiikka
Olen liittänyt kuvan, jossa on led -rengas ja kulman määrittämiseen käytetty trigonometrinen funktio.
Suositeltava:
Stone Lcd + kiihtyvyys gyroskooppi -anturi: 5 vaihetta
Stone Lcd +kiihtyvyys gyroskooppianturi: Tämä asiakirja opettaa sinulle STM32 MCU +MPU6050 kiihtyvyysanturin gyroskooppianturin +STONE STVC070WT -sarjaporttinäytön käyttämistä DEMO.STVC070WT on yrityksemme sarjakuva, sen kehittäminen on yksinkertaista, helppokäyttöistä , voit mennä meille
Kupla -herätyskello tekee heräämisestä hauskaa (ish): 7 vaihetta (kuvilla)
Kupla -herätyskello tekee heräämisestä hauskaa (ish): Herääminen surisevalle herätyskellolle on paskaa. Olen yksi niistä ihmisistä, jotka eivät halua herätä ennen kuin aurinko paistaa (tai on ollut poissa monta tuntia). Mikä olisikaan parempi tapa tehdä heräämisestä hauskaa kuin kuplat juhlia sängyssä! Käyttämällä arduinoa ja
3-akselisen gyroskooppi-anturin liitäntä BMG160 Arduino Nanon kanssa: 5 vaihetta
3-akselisen gyroskooppianturin liitäntä BMG160 Arduino Nanon kanssa: Nykymaailmassa yli puolet nuorista ja lapsista pitää pelaamisesta ja kaikki, jotka pitävät siitä, ovat kiinnostuneita pelaamisen teknisistä näkökohdista, tietävät liikkeen tunnistamisen tärkeyden. tällä verkkotunnuksella. Olimme myös hämmästyneitä samasta asiasta
Hauskaa OLED -näytön ja Arduinon kanssa: 12 vaihetta (kuvilla)
Hauskaa OLED -näytön ja Arduinon kanssa: Olen melko varma, että olet varmasti kuullut OLED -näyttötekniikasta. Se on suhteellisen uusi ja tarjoaa parempaa laatua kuin vanha LCD -tekniikka. Tässä opetusohjelmassa haluamme tarkastella vaiheita, jotka ovat tarpeen tietojen näyttämiseksi yhdessä yleisimmistä yksittäisistä
GY-521 MPU6050 3-akselinen kiihtyvyys gyroskooppi 6DOF-moduulin opetusohjelma: 4 vaihetta
GY-521 MPU6050 3-akselinen kiihtyvyys gyroskooppi 6DOF-moduulin opetusohjelma: Kuvaus Tämä yksinkertainen moduuli sisältää kaiken tarvittavan Arduinon ja muiden ohjainten liitäntään I2C: n kautta (käytä Wire Arduino -kirjastoa) ja antaa liiketunnistustietoja kolmelle akselille-X, Y ja Z Tekniset tiedot Kiihtyvyysmittarin alueet: ± 2, ±