Kazalo:
- 1. korak: Potrebne stvari
- 2. korak: Montaža
- 3. korak: Koda in kalibracija
- 4. korak: Kako deluje (neobvezno)
Video: Zabava z žiroskopom z obročem Neopixel: 4 koraki (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
V tej vadnici bomo uporabili žiroskop MPU6050, obroč iz neopiksela in arduino za izdelavo naprave, ki prižge luči, ki ustrezajo naklonskemu kotu.
To je preprost in zabaven projekt, sestavljen pa bo na podlagi. Če sledite korakom, boste zgradili tisto, kar ste videli v videoposnetku. To je dobra vadnica za spoznavanje žiroskopa in obroča neopikselov.
To vadnico gradim zaradi zanimanja, ki sem ga videl pri prvem poučevanju tukaj (Gyroscope Led Control With Arduino). V tem navodilu sem preproste LED diode zamenjal z obročem iz neopiksela. Prstan je enostavnejši za uporabo v knjižnici Adafruit in je vsekakor bolj spektakularen.
Če imate na razpolago te komponente, je to odličen način, da jih uporabite, poskušal vas bom korak za korakom voditi skozi izdelavo naprave in v zadnjem koraku razložiti, kako deluje.
1. korak: Potrebne stvari
Deli
1. Arduino pro mini 328p (eBay) 2 USD
2. Ogledna plošča
3. Žiroskop MPU6050 (eBay) 1,2 $
4. 24 neopixel LED obroček (Adafruit) 17 $
5. 4 x AA baterija s 4 baterijami
6. Mostični kabli v obliki črke U (neobvezno). Uporabil sem te mostične kable, ker izgledajo bolje na plošči, LED diode pa so tako bolj vidne. Na ebayu lahko najdete škatlo 140 za približno 4 USD. Če teh kablov nimate, jih lahko zamenjate z dupont žicami.
Orodja:
1. USB na serijski adapter FTDI FT232RL za programiranje arduino pro mini
2. Arduino IDE
Spretnosti: 1. Spajkanje, preverite to vadnico
3. Osnovno programiranje arduino, ta vadnica je lahko koristna
2. korak: Montaža
Priložil sem shemo fritovanja v formatu fzz in njeno sliko za lažjo vizualizacijo povezav
1. Na hrbtni strani neopixel obroča morate spajkati 3 moške zatiče, kot je prikazano na sliki
- spajkajte pozitivni zatič
- spajkajte zemljo
- spajkajte vhodni zatič podatkov
2. Potem bi moralo držalo za 4 -kratno baterijo imeti možnost povezave z matično ploščo, enostavna rešitev je, da dve spoji moških žic dupont spajkate na njegove sponke.
3. Pripravite ploščo.
- prstan neopiksela, mikrokrmilnik in žiroskop postavite na ploščo, kot je na sliki
- postavite vse negativne žice: na mikrokrmilnik, neopixel obroč, žiroskop
- postavite vse pozitivne žice: na mikrokrmilnik, neopixel obroč, žiroskop
- postavite vse podatkovne žice:
* SDA in SCL od mikrokontrolerja do žiroskopa
* pin D6 od mikrokrmilnika do obroča neopixel
- pred vklopom dvakrat preverite vse povezave
- po želji z lepilnim trakom prilepite baterijo na zadnjo stran plošče, da jo držite na mestu in jo naredite bolj prenosljivo
3. korak: Koda in kalibracija
Najprej morate prenesti in namestiti dve knjižnici:
1. Knjižnica Adapruit neopixel, ki nadzoruje neopixel
2. Knjižnica MPU6050 za žiroskop
3. Vir knjižnice I2CDev
To sta dve odlični knjižnici, ki bosta opravili težko delo!
Več podrobnosti o neopixelih tukaj
Nato prenesite in namestite mojo knjižnico od tukaj ali jo kopirajte od spodaj:
#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); unsigned long lastPrintTime = 0; bool inicializacija = false; // nastavimo na true, če je bil init DMP uspešen uint8_t mpuIntStatus; // vsebuje dejanski bajt stanja prekinitve iz MPU uint8_t devStatus; // vrne stanje po vsaki operaciji naprave (0 = uspeh,! 0 = napaka) uint16_t packetSize; // pričakovana velikost paketa DMP (privzeto je 42 bajtov) uint16_t fifoCount; // štetje vseh bajtov, ki so trenutno v FIFO uint8_t fifoBuffer [64]; // pomnilnik za shranjevanje FIFO Quaternion q; // [w, x, y, z] kvaterionski vsebnik VectorFloat gravitacija; // [x, y, z] plovec gravitacijskega vektorja ypr [3]; // [nihanje, nagib, zvitek] nihanje/smola/zvitek vsebnika in vektor gravitacije hlapna bool mpuInterrupt = false; // označuje, ali je prekinitveni pin MPU previsok
void setup ()
{Serial.begin (9600); Serial.println ("Program se je začel"); initialization = initializeGyroscope (); strip.begin (); } void loop () {if (! inicializacija) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); vrnitev; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= velikost paketa; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity, & 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 = omeji (x, -1 * MAX_ANGLE, MAX_ANGLE); y = omeji (y, -1 * MAX_ANGLE, MAX_ANGLE); if (y 0) {lightLeds (y, z, 0, 5, 0, 89); } drugače, če (y <0 in z 0 in z 0 in z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} void lightLeds (int x, int y, int fromLedPosition, int toLedPosition, int fromAngle, int toAngle) {dvojni kot = (atan ((dvojni) abs (x) / (dvojni) abs (y)) * * 4068) / 71; int ledNr = zemljevid (kot, odAngle, doAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, kot); barva uint32_t; for (int i = 0; i position + LED_OFFSET) {return position + LED_OFFSET; } povratni položaj + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int kot) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (kot); 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 ("Povezava MPU6050 uspešna"): F ("Povezava MPU6050 ni uspela")); Serial.println (F ("Inicializiranje 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 ("Omogočanje zaznavanje prekinitev (Arduino zunanji prekinitev 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP pripravljen! Čakanje na prvo prekinitev … ")); packetSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Naloži kodo:
Z vmesnikom FTDI naložite kodo v arduino.
Priključite napajalnik (baterije)
Praznovanje:
Najpomembnejša stvar za umerjanje je konstanta "LED_OFFSET". V mojem primeru je 12. To morate prilagoditi od 0 do 23, tako da bo LED po vklopu plošče zasvetil v smeri, na katero nagnete ploščo.
Če želite izvedeti več podrobnosti o tem, kako deluje, si oglejte zadnji korak
4. korak: Kako deluje (neobvezno)
Najprej nekaj informacij o žiroskopu MPU6050. To je žiroskop MEMS (MEMS pomeni mikroelektromehanski sistemi).
Vsaka vrsta žiroskopa MEM ima neko obliko nihajoče komponente, od koder je mogoče zaznati akkrelacijo in s tem spremembo smeri. To je zato, ker v skladu z ohranitvijo zakona gibanja vibrirajoči predmet rad še naprej vibrira v isti ravnini, zato je za spremembo smeri mogoče uporabiti vsako vibracijsko odstopanje.
Žiroskop vsebuje tudi lasten mikrokrmilnik za izračun zvitka, koraka in nihanja skozi nekaj domišljijske matematike.
Toda surovi žiroskopski podatki trpijo zaradi hrupa in premikanja, zato smo z zunanjo knjižnico poenostavili stvari in nam dali čiste uporabne podatke.
Neopixel so LED diode RGB, ki so individualno naslovljive in vezane v pasove in obroče. Delujejo na 5V in vsebujejo lastno vezje, zato morate napajati neopiksele in komunicirati z njimi prek podatkovne linije. Komunikacija poteka z eno samo podatkovno vrstico, ki vsebuje uro in podatke (več podrobnosti tukaj). Adafruit ponuja čisto knjižnico za interakcijo z obroči neopikselov.
Koda
Znotraj funkcije l oop () se pokliče knjižnica MPU6050_6Axis_MotionApps20. Ko ima knjižnica nove podatke iz žiroskopa, pokliče redrawLeds (x, y, z) s 3 argumenti, ki predstavljajo nihanje, višino in višino
Znotraj redrawLeds ():
- osredotočamo se na dve osi: y, z
- omejujemo obe osi od -MAX_ANGLE do +MAX_ANGLE, določili smo največji kot na 45 in ga je mogoče spremeniti
- 360 stopinj razdelimo na 4 kvadrante in za vsakega pokličemo funkcije lightLeds ():
* y negativno, z pozitivno prvi kvadrant bo nadzoroval LED od 0 do 5, kot bo od 0 do 89
* y negativno, z negativno v drugem kvadrantu vodi LED od 6 do 12, kot bo od 89 do 0
*… Itd
- znotraj funkcije lightLeds
* z arctangentom izračunam kot na podlagi dveh osi (preverite priloženo sliko)
* z uporabo funkcije zemljevida arduino izračunavam, kaj se je pokazalo
* ponastavim vse LED diode, razen dveh, ena ustreza položaju LED, ki sem ga že izračunal, in položaj LED pred tem (za prikaz učinka zbledelosti)
* Uporabljam funkcijo, imenovano normalizeLedPosition (), da upoštevam kalibracijo neopiksela. Umerjanje je uporabno, ker je neopixel obroč mogoče poljubno zavrteti in ga poravnati z žiroskopom
* Tiskam tudi vlečno os, kaj ima LED svetlobo in kot
Matematika
Priložil sem sliko z LED obročem in trigonometrično funkcijo za določanje kota.
Priporočena:
Šeststranske LED kocke z vezjem PCB z WIFI in žiroskopom - PIKOCUBE: 7 korakov (s slikami)
Šeststranske LED kocke z vezjem PCB z WIFI in žiroskopom - PIKOCUBE: Pozdravljeni izdelovalci, izdelovalec moekoe! Danes vam želim pokazati, kako sestaviti prave LED kocke na podlagi šestih tiskanih vezij in skupaj 54 LED. Kocka poleg notranjega žiroskopskega senzorja, ki zazna gibanje in položaj kock, vsebuje ESP8285-01F, ki je
Koš "CleanBasket" s košarkarskim obročem: 4 koraki
Koš "CleanBasket" s košarkarskim obročem: Ali si vedno želite čisto mizo? Potem je CleanBasket zagotovo za vas. Vedno vse vrzi v smeti in si s tem prisluži točke. Poskusite prebiti svoj vrhunski večer
Kaleidoskop z obročem NeoPixel: 8 korakov (s slikami)
Kaleidoskop z obročem NeoPixel: Z veseljem vam ponujam navodila in datoteke z materiali za izdelavo kaleidoskopa LightLogo! O tem sem razmišljal že več mesecev in končno izdelal zasnovo. Če imate kakršne koli izboljšave pri tem dizajnu, jih delite! Ne boste
Bat s ključnim obročem ojnice: 3 koraki
Bat z ojnico za ključe: Iščem izvirno idejo o posebnem obesku za ključe, za ključe za mehanike in ljudi, ki imajo radi mehaniko. Za to sem uporabil majhen bat z ojnico. Ta bat sem našel v majhnem kladivu zlomljenega
Kako narediti luč z obročem: 3 koraki (s slikami)
Kako narediti Ring Led Light: tukaj je preprost in enostaven način izdelave LED obročev, ki ne bo kupil dragih obročev v vrednosti 100 USD, cena je zelo nizka in tudi enostaven zabaven projekt. Njegova edinstvena oblika odpravlja senco iz vašega obraz in v izdelku photogr