Orodha ya maudhui:
- Hatua ya 1: Vitu vinahitajika
- Hatua ya 2: Mkutano
- Hatua ya 3: Kanuni na Upimaji
- Hatua ya 4: Jinsi Inavyofanya kazi (hiari)
Video: Furaha ya Gyroscope na Gonga ya Neopikseli: Hatua 4 (na Picha)
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:50
Katika mafunzo haya tutatumia gyroscope ya MPU6050, pete ya neopixel na arduino kujenga kifaa ambacho taa ziliongoza zinazoendana na pembe ya mwelekeo.
Huu ni mradi rahisi na wa kufurahisha na utakusanywa kwenye ubao wa mkate. Ikiwa utafuata hatua utaunda kile ulichoona kwenye video. Ni mafunzo mazuri ya kujifunza kuhusu gyroscope na pete ya neopixel.
Ninaunda mafunzo haya kwa sababu ya maslahi niliyoyaona kwenye mafunzo yangu ya kwanza hapa (Gyroscope Led Control With Arduino). Katika hii inayoweza kufundishwa nimebadilisha iliyoongozwa rahisi na pete ya neopixel. Pete ni rahisi kutumia kupitia maktaba ya Adafruit na ni ya kushangaza zaidi.
Kwa hivyo ikiwa una vifaa hivi vimelala hapa ni njia nzuri ya kuzitumia, nitajaribu kukuchukua hatua kwa hatua kupitia kujenga kifaa na pia kuelezea jinsi inavyofanya kazi katika hatua ya mwisho.
Hatua ya 1: Vitu vinahitajika
Sehemu
1. Arduino pro mini 328p (eBay) 2 $
2. Bodi ya mkate
3. MPU6050 gyroscope (eBay) 1.2 $
4. pete 24 iliyoongozwa na neopixel (Adafruit) 17 $
5. 4 x AA pakiti ya betri na betri 4
6. Kamba za jumper za umbo la U (hiari). Nimetumia nyaya hizi za kuruka kwa sababu zinaonekana vizuri kwenye ubao wa mkate, na viongo vinaonekana zaidi kwa njia hii. Unaweza kupata sanduku la 140 kwenye ebay karibu $ 4. Ikiwa hauna nyaya hizi unaweza kuzibadilisha na waya za dupont.
Zana:
1. USB kwa adapta ya serial FTDI FT232RL kusanidi mini ya arduino pro
2. Arduino IDE
Ujuzi: 1. Kuunganisha, angalia mafunzo haya
3. Programu ya msingi ya arduino, mafunzo haya yanaweza kuwa muhimu
Hatua ya 2: Mkutano
Nimeambatanisha muundo wa fritzing katika muundo wa fzz na picha yake kwa taswira rahisi ya unganisho
1. Unahitaji kutia pini 3 za kiume nyuma ya pete ya neopixel kama inavyoonekana kwenye picha
- solder pini nzuri
- solder chini
- solder pini ya kuingiza data
2. Kisha mmiliki wa betri 4x anapaswa kuwa na njia ya kuunganisha kwenye ubao wa mkate, suluhisho rahisi ni kuziunganisha waya mbili za dupont kwa vituo vyake.
3. Andaa ubao wa mkate.
- weka pete ya neopixel, microcontroller na gyroscope kwenye ubao wa mkate kama kwenye picha
- weka waya zote hasi: kwa microcontroller, neopixel pete, gyro
- weka waya zote chanya: kwa microcontroller, pete ya neopixel, gyro
- weka waya zote za data:
* SDA na SCL kutoka kwa hadi kwa mdhibiti mdogo hadi gyro
* piga D6 kutoka kwa mdhibiti mdogo hadi kwenye pete ya neopixel
- angalia maunganisho yote kabla ya kuwezesha
- kwa hiari kutumia mkanda wa bomba, weka pakiti ya betri nyuma ya bradboard ili kuishikilia na kuifanya iweze kusonga
Hatua ya 3: Kanuni na Upimaji
Kwanza unahitaji kupakua na kusanikisha maktaba mbili:
1. Fir ya maktaba ya neopixel inayodhibiti neopixel
2. Maktaba ya MPU6050 kwa gyroscope
3. Chanzo cha maktaba ya I2CDev
Ni maktaba mbili kubwa ambazo zitafanya kuinua nzito!
Maelezo zaidi juu ya neopixels hapa
Kisha pakua na usakinishe maktaba yangu kutoka hapa au unakili kutoka hapa chini:
# pamoja na "I2Cdev.h"
# pamoja # # pamoja na "MPU6050_6Mhimili_MotionApps20.h" # pamoja na "Wire.h" #fafanua NEOPIXED_CONTROL_PIN 6 #fafanua NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Ukanda wa Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); unsigned longPrintTime ndefu = 0; uanzishaji wa bool = uwongo; // weka kweli ikiwa init ya DMP ilifanikiwa uint8_t mpuIntStatus; // inashikilia hali halisi ya usumbufu kutoka kwa MPU uint8_t devStatus; // hali ya kurudi baada ya kila operesheni ya kifaa (0 = mafanikio,! 0 = kosa) uint16_t packetSize; // ukubwa wa pakiti ya DMP inayotarajiwa (chaguo-msingi ni ka 42) uint16_t fifoCount; // hesabu ya ka zote zilizo katika FIFO uint8_t fifoBuffer [64]; // bafa ya kuhifadhi FIFO Quaternion q; // [w, x, y, z] chombo cha quaternion mvuto wa VectorFloat; // [x, y, z] vector ya mvuto kuelea ypr [3]; // [yaw, lami, roll] yaw / lami / chombo na roll ya mvuto bool tete boat mpuInterrupt = uongo; // inaonyesha ikiwa pini ya kukatiza ya MPU imepanda juu
kuanzisha batili ()
{Serial.begin (9600); Serial.println ("Programu imeanza"); kuanzisha = kuanzishaGyroscope (); strip. kuanza (); } kitanzi batili () {if (! initialization) {return; } mpuInterrupt = uongo; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); ikiwa (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); kurudi; } ikiwa (mpuIntStatus & 0x02) {wakati (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, pakitiSize); fifoCount - = pakitiSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpPata Uzito (& mvuto, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & mvuto); redrawLeds (ypr [0] * 180 / M_PI, ypr [1] * 180 / M_PI, ypr [2] * 180 / M_PI); }} boolean hasFifoOverflown (int mpuIntStatus, int fifoCount) {kurudi mpuIntStatus & 0x10 || fifoCount == 1024; } batili redrawLeds (int x, int y, int z) {x = kubana (x, -1 * MAX_ANGLE, MAX_ANGLE); y = kubana (y, -1 * MAX_ANGLE, MAX_ANGLE); ikiwa (y 0) {taa nyepesi (y, z, 0, 5, 0, 89); } vingine ikiwa (y <0 na z 0 na z 0 na z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} taa nyepesi za taa (int x, int y, int kutokaLedPosition, int toLedPosition, int kutokaAngle, int toAngle) {double angle = (atan ((double) abs (x) / (double) abs (y)) * 4068) / 71; int ledNr = ramani (angle, fromAngle, toAngle, fromLedPosition, toLedPosition); kuchapisha Suluhisho (x, y, ledNr, angle); rangi ya uint32_t; kwa (int i = 0; i nafasi + LED_OFFSET) {nafasi ya kurudi + LED_OFFSET; } nafasi ya kurudi + LED_OFFSET - NUM_LEDS; } uchapishaji batiliDebug (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 (";"); mwishoPrintTime = millis (); } bool anzishaGyroscope () {Wire.begin (); TWBR = 24; mpu kuanzisha (); Serial.println (mpu.testConnection () F? Serial.println (F ("Inazindua DMP…")); devStatus = mpu.dmp Anzisha (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); ikiwa (devStatus! = 0) {Serial.print (F ("Uanzishaji wa DMP umeshindwa (msimbo")); Serial.println (devStatus); kurudi uwongo;} mpu.setDMPEnabled (kweli); kukatiza kugundua (Arduino nje kukatiza 0)… ")); ambatanishaInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP iko tayari! Inangojea usumbufu wa kwanza… ")); pakitiSize = mpu.dmpGetFIFOPacketSize (); kurudi kweli;} batili dmpDataReady () {mpuInterrupt = true;}
Pakia nambari:
Kutumia adapta ya FTDI pakia nambari kwa arduino.
Unganisha usambazaji wa umeme (betri)
Upimaji:
Jambo muhimu zaidi la kupima hapa ni "LED_OFFSET" mara kwa mara. Katika mfano wangu ni miaka 12. Unahitaji kurekebisha hii kutoka 0 hadi 23 ili baada ya kuwekea bodi bodi iliyoongozwa itawaka kwa mwelekeo unaoweka bodi.
Ikiwa unataka kujua maelezo zaidi juu ya jinsi inavyofanya kazi angalia hatua ya mwisho
Hatua ya 4: Jinsi Inavyofanya kazi (hiari)
Kwanza habari kidogo juu ya gyroscope ya MPU6050. Hii ni gyroscope ya MEMS (MEMS inasimama kwa mifumo ya Microelectromechanical).
Kila aina ya gyroscope ya MEMs ina aina fulani ya sehemu inayosababisha kutoka mahali ambapo kuongeza kasi, na kwa hivyo mabadiliko ya mwelekeo, inaweza kugunduliwa. Hii ni kwa sababu, kulingana na uhifadhi wa sheria ya mwendo, kitu kinachotetemeka kinapenda kuendelea kutetemeka katika ndege ile ile, na kupotoka kwa kutetemeka kunaweza kutumiwa kupata mabadiliko katika mwelekeo.
Gyro pia ina microcontroller yake ni yake mwenyewe kuhesabu roll, lami na yaw kupitia hesabu kadhaa za kupendeza.
Lakini data ghafi ya gyro inakabiliwa na kelele na kuteleza, kwa hivyo tulitumia maktaba ya nje kulainisha vitu na kutupa data safi inayoweza kutumika.
Neopixel inaongozwa na RGB mmoja mmoja kushughulikiwa na kufungwa kwa bendi na pete. Wanafanya kazi kwenye 5V na zina mzunguko wao kwa hivyo unahitaji tu kuwezesha neopixels na kuwasiliana nao kwa kutumia laini ya data. Mawasiliano hufanywa na laini moja ya data iliyo na saa na data (maelezo zaidi hapa). Adafruit hutoa maktaba safi ya kuingiliana na pete za neopixel.
Nambari
Ndani ya kazi ya l oop () MPU6050_6Axis_MotionApps20 maktaba inaitwa. Wakati maktaba ina data mpya kutoka kwa gyroscpe inaita redrawLeds (x, y, z) na hoja 3 zinazowakilisha yaw, lami na roll
Ndani ya redrawLeds ():
- tunazingatia mhimili mbili: y, z
- tunazuia mihimili yote kutoka -MAX_ANGLE hadi + MAX_ANGLE, tulielezea angle kubwa hadi 45 na inaweza kubadilika
- tunagawanya digrii 360 ndani ya quadrants 4 na kupiga simu lightLeds () kwa kila mmoja kama ifuatavyo:
* y hasi, z chanya kwanza roboduara ya kwanza itadhibiti kuongozwa kutoka 0 hadi 5, pembe itakuwa kutoka 0 hadi 89
* y hasi, z hasi udhibiti wa roboduara ya pili iliyoongozwa kutoka 6 hadi 12, pembe itakuwa kutoka 89 hadi 0
* …na kadhalika
- ndani ya kazi ya LightLeds
* Ninahesabu pembe kulingana na mhimili mbili kwa kutumia arctangent (angalia picha iliyoambatishwa)
* Ninahesabu kile kilichosababisha kuonyesha kutumia kazi ya ramani ya arduino
* Ninaweka upya kamba iliyoongozwa yote isipokuwa mbili zilizoongozwa, ile inayolingana na nafasi iliyoongozwa nimehesabu hapo awali na nafasi iliyoongozwa hapo awali (kuonyesha athari ya kufifia)
* Ninatumia kazi inayoitwa normalizeLedPosition () kuzingatia usanifu wa neopixel. Ulinganishaji ni muhimu kwa sababu pete ya neopixel inaweza kuzungushwa kama inavyopendeza, na inapaswa kuoanishwa na gyroscope
* Ninachapisha pia mhimili wa kukokota, kile kilichoongoza kina mwanga na pembe
Hesabu
Nimeambatanisha picha na pete iliyoongozwa na kazi ya trigonometri inayotumiwa kuamua pembe.
Ilipendekeza:
Sanduku la Kufuli la Gonga la NFC: Hatua 6 (na Picha)
Sanduku la Kufuli la Gonga la NFC: Halo kila mtu! Karibu kwenye mafunzo yangu ya kwanza! Ninaomba msamaha mapema kwa kiwango changu duni kwa Kiingereza. Katika mwongozo huu wa hatua kwa hatua nitakufundisha jinsi ya kujenga sanduku la Rahisi na la bei rahisi sana la NFC
Gonga Gonga Upinde wa mvua - Mchezaji 2 wa Mchezo wa Kugundua Haraka: Hatua 4 (na Picha)
Gonga Gonga Upinde wa mvua - Mchezaji 2 wa Mchezo wa Kujibu kwa Haraka: wiki 2 zilizopita binti yangu alikuwa na wazo la fikra kufanya mchezo wa majibu ya haraka na rangi za upinde wa mvua (yeye ni mtaalam wa upinde wa mvua: D). Nilipenda wazo hilo mara moja na tukaanza kufikiria ni jinsi gani tunaweza kuifanya iwe mchezo halisi. Wazo lilikuwa. Una upinde wa mvua katika
Gonga la Antistatic: Hatua 5 (na Picha)
Pete ya Antistatic: Pete hii inaruhusu kujitolea umeme tuli bila kuhisi mshtuko wa umeme usumbufu. Kulingana na Wikipedia, Moja ya sababu za hafla za ESD ni umeme wa tuli. Umeme tuli mara nyingi hutengenezwa kupitia tribocharging,
MagicCube - Gonga ili Ubadilishe Rangi: Hatua 6 (na Picha)
MagicCube - Gonga ili Ubadilishe Rangi: Karibu kwenye mafunzo yangu ya kwanza. Natumahi unaweza kufuata hatua zote. Ikiwa kuna maswali yoyote, uliza na nitaongeza yaliyomo kwenye mafunzo. Wazo la mradi huu lilikuwa, kujenga na kukuza mchemraba mdogo na athari maalum kama zawadi kwa C
Teua piano yako ya Gonga-A-Tune: Hatua 9 (na Picha)
Teua piano yako ya Gonga-A-Tune: Unda muziki wa punk wa majaribio na athari za sauti za sinema na mradi huu ulioongozwa na " Electric Gigar Box Guitar " Inayoweza kufundishwa na EvanKale " Ukelele wa Umeme na Udhibiti wa Toni "Inayoweza kufundishwa. Gonga-a-tune piano ni