Sadržaj:
- Korak 1: Potrebne stvari
- Korak 2: Montaža
- Korak 3: Kôd i kalibracija
- Korak 4: Kako to funkcionira (izborno)
Video: Žiroskop zabava s neopikselnim prstenom: 4 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
U ovom ćemo vodiču koristiti žiroskop MPU6050, prsten od neopiksela i arduino za izradu uređaja koji svijetli LED diode prema kutu nagiba.
Ovo je jednostavan i zabavan projekt i bit će sastavljen na ploči. Ako slijedite korake, izgradit ćete ono što ste vidjeli u videu. To je dobar vodič za učenje o žiroskopu i prstenu od neopiksela.
Ovaj tutorial gradim zbog interesa koji sam vidio na svom prvom uputstvu ovdje (Kontrola sa žiroskopom s Arduinom). U ovom uputstvu zamijenio sam jednostavne LED diode prstenom od neopiksela. Prsten je jednostavniji za korištenje putem biblioteke Adafruit i definitivno je spektakularniji.
Dakle, ako imate ove komponente oko sebe, ovo je sjajan način da ih iskoristite, pokušat ću vas provesti korak po korak kroz izgradnju uređaja, a u posljednjem koraku objasniti i kako to radi.
Korak 1: Potrebne stvari
Dijelovi
1. Arduino pro mini 328p (eBay) 2 USD
2. Oglasna ploča
3. Žiroskop MPU6050 (eBay) 1,2 $
4. 24 neopixel LED prsten (Adafruit) 17 $
5. 4 x AA baterije sa 4 baterije
6. Premosni kabeli u obliku slova U (opcionalno). Koristio sam ove kratkospojne kabele jer izgledaju bolje na ploči, a LED diode su tako vidljivije. Na ebayu možete pronaći kutiju od 140 po cijeni od 4 USD. Ako nemate ove kabele, možete ih zamijeniti dupont žicama.
Alati:
1. USB na serijski FTDI adapter FT232RL za programiranje arduino pro mini
2. Arduino IDE
Vještine: 1. Lemljenje, provjerite ovaj vodič
3. Osnovno arduino programiranje, ovaj bi vodič mogao biti koristan
Korak 2: Montaža
Priložio sam shemu fritzinga u fzz formatu i njenu sliku radi lakše vizualizacije veza
1. Morate lemiti 3 muška igla na stražnjoj strani neopikselnog prstena kao što je prikazano na slici
- lemite pozitivni pin
- zalemiti tlo
- zalemite pin za unos podataka
2. Tada bi držač baterije za 4x trebao imati mogućnost povezivanja na matičnu ploču, jednostavno rješenje je lemljenje dvije muške žice dupont na njegove priključke.
3. Pripremite matičnu ploču.
- postavite neopikselni prsten, mikrokontroler i žiroskop na ploču kao na slici
- postavite sve negativne žice: na mikrokontroler, prsten od neopiksela, žiroskop
- postavite sve pozitivne žice: na mikrokontroler, prsten od neopiksela, žiroskop
- postavite sve podatkovne žice:
* SDA i SCL od mikrokontrolera do žiroskopa
* pin D6 s mikrokontrolera na prsten od neopiksela
- prije uključivanja dvaput provjerite sve veze
- po želji ljepljivom trakom zalijepite bateriju na stražnju stranu ploče kako biste je držali na mjestu i učinili prenosivijom
Korak 3: Kôd i kalibracija
Prvo morate preuzeti i instalirati dvije biblioteke:
1. Adafruit neopixel biblioteka koja kontrolira neopixel
2. Knjižnica MPU6050 za žiroskop
3. Izvor knjižnice I2CDev
To su dvije velike knjižnice koje će učiniti teške poslove!
Više detalja o neopikselima ovdje
Zatim preuzmite i instalirajte moju biblioteku odavde ili je kopirajte odozdo:
#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 traka = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); unsigned long lastPrintTime = 0; bool inicijalizacija = false; // postavljanje true ako je DMP init bio uspješan uint8_t mpuIntStatus; // sadrži stvarni bajt statusa prekida iz MPU -a uint8_t devStatus; // vraća status nakon svake operacije uređaja (0 = uspjeh,! 0 = pogreška) uint16_t packetSize; // očekivana veličina paketa DMP (zadana vrijednost je 42 bajta) uint16_t fifoCount; // broj svih bajtova trenutno u FIFO uint8_t fifoBuffer [64]; // FIFO međuspremnik za pohranu Quaternion q; // [w, x, y, z] kvaterionski spremnik VectorFloat gravitacija; // [x, y, z] plovak gravitacijskog vektora ypr [3]; // [skretanje, nagib, kotrljanje] spremnik za skretanje/nagib/kotrljanje i vektor gravitacije hlapiva bool mpuInterrupt = false; // označava je li pin za prekid MPU -a otišao visoko
void setup ()
{Serial.begin (9600); Serial.println ("Program je pokrenut"); initialization = initializeGyroscope (); strip.begin (); } void loop () {if (! inicijalizacija) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); povratak; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, veličina paketa); fifoCount -= veličina paketa; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitacija, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & 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 = ograničenje (x, -1 * MAX_ANGLE, MAX_ANGLE); y = ograničiti (y, -1 * MAX_ANGLE, MAX_ANGLE); if (y 0) {lightLeds (y, z, 0, 5, 0, 89); } inače ako (y <0 i z 0 i z 0 i 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 = karta (kut, odAngle, doAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, kut); boja uint32_t; for (int i = 0; i position + LED_OFFSET) {return position + LED_OFFSET; } povratna pozicija + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (angle); 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 ("Veza MPU6050 uspješna"): F ("Veza MPU6050 nije uspjela")); Serial.println (F ("Inicijalizacija DMP -a …")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP inicijalizacija nije uspjela (kôd")); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Omogućavanje detekcija prekida (Arduino vanjski prekid 0) … ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP spreman! Čekanje prvog prekida … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Učitajte kôd:
Pomoću FTDI adaptera prenesite kôd na arduino.
Priključite napajanje (baterije)
Kalibriranje:
Najvažnija stvar za kalibriranje ovdje je konstanta "LED_OFFSET". U mom primjeru je 12. Morate to podesiti od 0 do 23 tako da će nakon uključivanja ploče LED dioda svijetliti u smjeru u kojem naginjete ploču.
Ako želite saznati više detalja o tome kako funkcionira, pogledajte zadnji korak
Korak 4: Kako to funkcionira (izborno)
Prvo malo informacija o žiroskopu MPU6050. Ovo je MEMS žiroskop (MEMS označava mikroelektromehaničke sustave).
Svaka vrsta žiroskopa MEM ima neki oblik oscilirajuće komponente odakle se može otkriti akkrelacija, a time i promjena smjera. To je zato što, prema zakonu o očuvanju kretanja, vibrirajući objekt voli nastaviti vibrirati u istoj ravnini, a bilo koje vibracijsko odstupanje može se koristiti za izvođenje promjene smjera.
Žiroskop također sadrži vlastiti mikrokontroler za izračunavanje rolanja, koraka i zakretanja kroz neke fantastične matematike.
No, sirovi žiroskopski podaci pate od buke i zanošenja pa smo upotrijebili vanjsku knjižnicu kako bismo izgladili stvari i dali nam čiste upotrebljive podatke.
Neopixel su RGB LED diode koje se pojedinačno mogu adresirati i povezane u trake i prstenove. Rade na 5V i sadrže vlastita kola pa trebate samo napajati neopiksele i komunicirati s njima putem podatkovne linije. Komunikacija se odvija s jednom podatkovnom linijom koja sadrži sat i podatke (više detalja ovdje). Adafruit pruža čistu biblioteku za interakciju s neopikselnim prstenovima.
Kod
Unutar funkcije l oop () poziva se biblioteka MPU6050_6Axis_MotionApps20. Kad knjižnica ima nove podatke iz žiroskopa, poziva redrawLeds (x, y, z) s 3 argumenta koji predstavljaju skretanje, pomak i pomak
Unutar redrawLeds ():
- fokusiramo se na dvije osi: y, z
- ograničavamo obje osi od -MAX_ANGLE do +MAX_ANGLE, definirali smo maksimalni kut na 45 i može se mijenjati
- dijelimo 360 stupnjeva u 4 kvadranta i pozivamo lightLeds () funkcije za svaki na sljedeći način:
* y negativan, z pozitivan prvi kvadrant će kontrolirati LED diode od 0 do 5, kut će biti od 0 do 89
* y negativno, z negativno u drugom kvadrantu kontrolira LED diode od 6 do 12, kut će biti od 89 do 0
* … itd
- unutar funkcije lightLeds
* Računam kut na temelju dvije osi pomoću arctangente (pogledajte priloženu sliku)
* Računam što je dovelo do prikaza pomoću funkcije arduino map
* Resetiram sve LED diode osim dva LED -a, jedan koji odgovara položaju LED -a koji sam već izračunao i LED položaj prije (za prikaz efekta blijeđenja)
* Koristim funkciju koja se zove normalizeLedPosition () kako bi uzela u obzir kalibraciju neopiksela. Kalibracija je korisna jer se neopikselni prsten može okretati prema želji i treba ga poravnati sa žiroskopom
* također ispisujem osi za vuču, ono što LED ima svjetlo i kut
Matematika
Priložio sam sliku sa LED prstenom i trigonometrijskom funkcijom za određivanje kuta.
Preporučeni:
Žiroskop MPU 6050, komunikacija akcelerometra s Arduinom (Atmega328p): 5 koraka
Žiroskop MPU 6050, komunikacija akcelerometra s Arduinom (Atmega328p): MPU6050 IMU ima troosni akcelerometar i troosni žiroskop integriran na jednom čipu. Žiroskop mjeri brzinu rotacije ili brzinu promjene kutnog položaja tijekom vremena, duž Osi X, Y i Z. Izlazi žiroskopa su
Zabava s OLED zaslonom i Arduinom: 12 koraka (sa slikama)
Zabava s OLED zaslonom i Arduinom: Prilično sam siguran da ste definitivno čuli za OLED tehnologiju prikaza. Relativno je nov i nudi bolju kvalitetu od stare LCD tehnologije. U ovom vodiču želimo pregledati korake potrebne za prikaz podataka na jednom od najčešćih pojedinačnih ko
Pomodoro mjerač vremena sa LED prstenom: 5 koraka
Pomodoro mjerač vremena s LED prstenom: Za ITTT-projekt heb ik varijante varijacija Pomodoro timer gemaakt. De Pomodoro " tehnika " is een tijdmanagementmethode die gebruikers kan helpen om grote projecten in kleine stappen te verdelen en regelmatig pauze te houden. Hierbij
Upravljanje neopikselnim LED prstenom senzorom gesta: 3 koraka (sa slikama)
Upravljanje neopikselnim prstenom s senzorom gesta: U ovom tutorialu igrat ćemo se sa senzorom gesta (APDS-9960) i prstenom od neopiksela kako bismo naučili kako ih kombinirati pomoću Arduino UNO-a. Krajnji proizvod će reagirati na geste lijevo -desno animirajući kretanje LED -a desno ili lijevo, a na
Kako napraviti svjetlo pod prstenom: 3 koraka (sa slikama)
Kako napraviti LED svjetlo sa prstenom: Ovdje je to jednostavna i laka metoda izrade LED svjetiljke osim kupovine skupocjenih prstenastih svjetiljki od 100 USD. Cijena je vrlo niska i također zabavan projekt. Jedinstven dizajn uklanja sjenu s vašeg lice i na proizvodu photogr