![Kujisawazisha Robot Kutoka Magicbit: 6 Hatua Kujisawazisha Robot Kutoka Magicbit: 6 Hatua](https://i.howwhatproduce.com/images/001/image-88-16-j.webp)
Orodha ya maudhui:
2025 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2025-01-23 15:11
Mafunzo haya yanaonyesha jinsi ya kutengeneza roboti ya kusawazisha kwa kibinafsi ukitumia bodi ya Magicbit dev. Tunatumia magicbit kama bodi ya maendeleo katika mradi huu ambayo inategemea ESP32. Kwa hivyo bodi yoyote ya maendeleo ya ESP32 inaweza kutumika katika mradi huu.
Ugavi:
- uchawi
- Dereva wa gari mbili H-daraja L298
- Mdhibiti wa Linear (7805)
- Lipo 7.4V 700mah betri
- Kitengo cha Upimaji wa Inertial (IMU) (digrii 6 za uhuru)
- motors za gia 3V-6V DC
Hatua ya 1: Hadithi
![Hadithi Hadithi](https://i.howwhatproduce.com/images/001/image-88-17-j.webp)
![Hadithi Hadithi](https://i.howwhatproduce.com/images/001/image-88-18-j.webp)
Haya jamani, leo katika mafunzo haya tutajifunza juu ya kitu ngumu kidogo. Hiyo ni juu ya kujisawazisha roboti kutumia Magicbit na Arduino IDE. Basi lets kuanza.
Kwanza kabisa, hebu tuangalie ni nini kusawazisha robot. Self kusawazisha robot ni mbili tairi robot. Kipengele maalum ni kwamba robot inaweza kusawazisha yenyewe bila kutumia msaada wowote wa nje. Nguvu inapokuwa kwenye roboti itasimama na kisha ikawa sawa kila wakati kwa kutumia harakati za oscillation. Kwa hivyo sasa wote una wazo mbaya juu ya roboti ya kusawazisha ya kibinafsi.
Hatua ya 2: Nadharia na Mbinu
![Nadharia na Mbinu Nadharia na Mbinu](https://i.howwhatproduce.com/images/001/image-88-19-j.webp)
Ili kusawazisha roboti, kwanza tunapata data kutoka kwa sensorer fulani kupima angle ya robot kwa ndege wima. Kwa kusudi hilo tulitumia MPU6050. Baada ya kupata data kutoka kwa sensorer tunahesabu kuelekeza kwa ndege wima. Ikiwa robot katika nafasi sawa na usawa, basi pembe ya mwelekeo ni sifuri. Ikiwa sivyo, basi pembe ya mwelekeo ni thamani nzuri au hasi. Ikiwa roboti imeelekezwa upande wa mbele, basi roboti inapaswa kuhamia mwelekeo wa mbele. Pia ikiwa roboti imegeuzwa kugeuza upande basi roboti inapaswa kusonga kugeuza mwelekeo. Ikiwa pembe hii ya kuinama iko juu basi kasi ya majibu inapaswa kuwa juu. Kwa upande mwingine pembe ya kuinama iko chini basi kasi ya mmenyuko inapaswa kuwa ya chini. Kudhibiti mchakato huu tulitumia nadharia maalum inayoitwa PID. PID ni mfumo wa kudhibiti ambao ulidhibiti michakato mingi. PID inasimama kwa michakato 3.
- P- sawia
- I- muhimu
- D- inayotokana
Kila mfumo una pembejeo na pato. Kwa njia hiyo hiyo mfumo huu wa kudhibiti pia una pembejeo. Katika mfumo huu wa kudhibiti ambayo ni kupotoka kutoka hali thabiti. Tuliita kama kosa. Katika roboti yetu, kosa ni pembe ya mwelekeo kutoka ndege ya wima. Ikiwa roboti ina usawa basi pembe ya mwelekeo ni sifuri. Kwa hivyo thamani ya kosa itakuwa sifuri. Kwa hivyo pato la mfumo wa PID ni sifuri. Mfumo huu unajumuisha michakato mitatu tofauti ya kihesabu.
Kwanza ni kuzidisha makosa kutoka kwa faida ya nambari. Faida hii kawaida huitwa kama Kp
P = kosa * Kp
Ya pili ni kutengeneza ujumuishaji wa kosa katika kikoa cha wakati na kuzidisha kutoka kwa faida. Faida hii inaitwa Ki
I = Jumuishi (kosa) * Ki
Tatu ni inayotokana na kosa katika kikoa cha wakati na kuzidisha kwa kiasi fulani cha faida. Faida hii inaitwa kama Kd
D = (d (kosa) / dt) * kd
Baada ya kuongeza shughuli hapo juu tunapata pato letu la mwisho
Pato = P + I + D
Kwa sababu ya sehemu ya P robot inaweza kupata msimamo thabiti ambao ni sawa na kupotoka. Mimi sehemu huhesabu eneo la makosa dhidi ya grafu ya wakati. Kwa hivyo inajaribu kumfanya roboti awe na msimamo thabiti kila wakati kwa usahihi. Sehemu ya D inapima mteremko kwa wakati dhidi ya grafu ya makosa. Ikiwa kosa linaongeza thamani hii ni chanya. Ikiwa hitilafu inapungua thamani hii ni hasi. Kwa sababu hiyo, wakati roboti inahamia kwenye msimamo thabiti basi kasi ya mwitikio itapungua na hii itasaidia kuondoa vivutio visivyo vya lazima. Unaweza kujifunza zaidi juu ya nadharia ya PID kutoka kwa kiunga hiki kilichoonyeshwa hapo chini.
www.arrow.com/en/search-and-events/articles/pid-controller-basics-and-tutorial-pid-implementation-in-arduino
Pato la kazi ya PID ni kikomo kwa anuwai ya 0-255 (8 bit resolution PWM) na ambayo italisha malori kama ishara ya PWM.
Hatua ya 3: Usanidi wa vifaa
![Usanidi wa Vifaa Usanidi wa Vifaa](https://i.howwhatproduce.com/images/001/image-88-20-j.webp)
Sasa hii ni sehemu ya usanidi wa vifaa. Ubunifu wa robot unategemea wewe. Wakati ulibuni mwili wa roboti lazima uzingatie ulinganifu juu ya mhimili wima ambao uko kwenye mhimili wa magari. Pakiti ya betri iko hapa chini. Kwa hivyo robot ni rahisi kusawazisha. Katika muundo wetu tunatengeneza bodi ya Magicbit kwa wima. Tulitumia motors mbili za gia 12V. Lakini unaweza kutumia aina yoyote ya motors za gia. hiyo inategemea vipimo vya robot yako.
Tunapojadili juu ya mzunguko inaendeshwa na betri ya 7.4V Lipo. Magicbit ilitumia 5V kwa umeme. Kwa hivyo tulitumia mdhibiti wa 7805 kudhibiti voltage ya betri kwa 5V. Katika matoleo ya baadaye ya Magicbit mdhibiti huyo haitaji. Kwa sababu inaongeza hadi 12V. Tunasambaza moja kwa moja 7.4V kwa dereva wa gari.
Unganisha vifaa vyote kulingana na mchoro hapa chini.
Hatua ya 4: Usanidi wa Programu
Katika nambari tulitumia maktaba ya PID kwa mahesabu ya pato la PID.
Nenda kwa kufuata kiungo ili kuipakua.
www.arduinolibraries.info/libraries/pid
Pakua toleo lake jipya.
Ili kupata usomaji bora wa sensa tulitumia maktaba ya DMP. DMP inasimama kwa mchakato wa mwendo wa dijiti. Hii ni sifa iliyojengwa ya MPU6050. Chip hii imejumuisha kitengo cha mchakato wa mwendo. Kwa hivyo inachukua kusoma na kuchambuliwa. Baada ya kutoa matokeo sahihi yasiyo na sauti kwa mdhibiti mdogo (katika kesi hii Magicbit (ESP32)). Lakini kuna kazi nyingi katika upande wa microcontroller kuchukua usomaji huo na kuhesabu pembe. Kwa hivyo kwa urahisi kwamba tulitumia maktaba ya MPU6050 DMP. Pakua kwa goint kufuata kiungo.
github.com/ElectronicCats/mpu6050
Ili kusanikisha maktaba, kwenye menyu ya Arduino nenda kwa zana-> ni pamoja na maktaba-> ongeza.zip maktaba na uchague faili ya maktaba ambayo umepakua.
Katika nambari lazima ubadilishe angle ya setpoint kwa usahihi. Thamani za kila wakati za PID ni tofauti na robot hadi robot. Kwa hivyo katika kurekebisha hiyo, kwanza weka Ki na Kd inathamini sifuri na kisha ongeza Kp hadi upate kasi bora ya majibu. Kp zaidi husababisha sababu nyingi zaidi. Kisha ongeza thamani ya Kd. Ongeza kwa kila wakati kwa kiwango kidogo sana. Thamani hii kwa ujumla iko chini kuliko maadili mengine. Sasa ongeza Ki mpaka uwe na utulivu mzuri sana.
Chagua bandari sahihi ya COM na andika bodi. pakia nambari. Sasa unaweza kucheza na robot yako ya DIY.
Hatua ya 5: Skematiki
![Skimatiki Skimatiki](https://i.howwhatproduce.com/images/001/image-88-21-j.webp)
Hatua ya 6: Kanuni
# pamoja
# pamoja na "I2Cdev.h" # pamoja na "MPU6050_6Mhimili_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE # pamoja na "Wire.h" #endif MPU6050 mpu; bool dmpReady = uongo; // 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 cha roll na vector ya mvuto asili ya awaliSetpoint = 172.5; setpoint mara mbili = originalSetpoint; kusonga mara mbiliAngleOffset = 0.1; pembejeo mara mbili, pato; kusongaState = 0; mara mbili Kp = 23; // weka P kwanza mara mbili Kd = 0.8;, DIRECT); // pid kuanzisha int motL1 = 26; int motR1 = 27; int motR2 = 4; bool tete mpuInterrupt = uongo; // inaonyesha ikiwa pini ya kukatiza ya MPU imepita batili dmpDataReady () {mpuInterrupt = kweli; } kuanzisha batili () {ledcSetup (0, 20000, 8); // pwm kuanzisha ledcSetup (1, 20000, 8); ledcSetup (2, 20000, 8); ledcSetup (3, 20000, 8); // pinmode ya motors ledcAttachPin (motL2, 1); ledcAttachPin (motR1, 2); ledcAttachPin (motR2, 3); // jiunge na basi ya I2C (maktaba ya I2Cdev haifanyi hivi kiotomatiki) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // saa ya I2C ya 400kHz. Toa maoni kwenye mstari huu ikiwa na shida ya mkusanyiko #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: kuanzisha (400, kweli); #endif Serial.println (F ("Inazindua vifaa vya I2C…")); pinMode (14, INPUT); // anzisha mawasiliano ya serial // (115200 iliyochaguliwa kwa sababu inahitajika kwa pato la Demo ya Teapot, lakini ni // kweli kwako kulingana na mradi wako) Serial.begin (9600); wakati (! Serial); // subiri hesabu ya Leonardo, wengine wanaendelea mara moja // Anzisha kifaa Serial.println (F ("Kuanzisha vifaa vya I2C…")); mpu kuanzisha (); // thibitisha unganisho Serial.println (F ("Upimaji wa unganisho wa kifaa…")); Serial.println (mpu.testConnection () F? // mzigo na usanidi DMP Serial.println (F ("Inazindua DMP…")); devStatus = mpu.dmp Anzisha (); // usambazaji wa gyro yako mwenyewe hapa, iliyopunguzwa kwa unyeti wa dakika mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); // Chaguo-msingi cha kiwanda cha 1688 kwa chip yangu ya majaribio // hakikisha imefanya kazi (inarudi 0 ikiwa ni hivyo) ikiwa (devStatus == 0) {// washa DMP, sasa ikiwa iko tayari Serial.println (F ("kuwezesha DMP … ")); mpu.setDMPEnabled (kweli); // kuwezesha Arduino kukatiza kugundua Serial.println (F ("Kuwezesha kugundua kukatiza (Arduino nje kukatiza 0)…")); ambatishaKukatisha (14, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // weka bendera yetu iliyo tayari ya DMP kwa hivyo kitanzi kuu () kazi inajua ni sawa kuitumia Serial.println (F ("DMP iko tayari! Inangojea usumbufu wa kwanza…")); dmpReady = kweli; // pata ukubwa wa pakiti ya DMP inayotarajiwa kwa pakiti ya kulinganisha baadayeSize = mpu.dmpGetFIFOPacketSize (); // kuanzisha PID pid. SetMode (AUTOMATIC); pid. SetSampleTime (10); pid. SetOutputLimits (-255, 255); } mwingine {// KOSA! // 1 = mzigo wa kumbukumbu ya awali umeshindwa // 2 = sasisho za usanidi wa DMP zimeshindwa // (ikiwa itaenda kuvunjika, kawaida nambari itakuwa 1) Serial.print (F ("Uanzishaji wa DMP umeshindwa (nambari")); Serial. chapa (devStatus); Serial.println (F (")")); }} kitanzi batili () {// ikiwa programu imeshindwa, usijaribu kufanya chochote ikiwa (! dmpReady) inarudi; // subiri kukatizwa kwa MPU au pakiti (za) zaidi wakati (! mpuInterrupt && fifoCount <packetSize) {pid. Compute (); // kipindi hiki cha wakati kinatumiwa kupakia data, kwa hivyo unaweza kutumia hii kwa mahesabu mengine motorSpeed (pato); } // kuweka upya usumbue bendera na upate INT_STATUS byte mpuInterrupt = uongo; mpuIntStatus = mpu.getIntStatus (); // pata sasa hesabu ya FIFO fifoCount = mpu.getFIFOCount (); // angalia kufurika (hii haipaswi kamwe kutokea isipokuwa nambari yetu haina ufanisi sana) ikiwa ((mpuIntStatus & 0x10) || fifoCount == 1024) {// kuweka upya ili tuweze kuendelea safi mpu.resetFIFO (); Serial.println (F ("FIFO kufurika!")); // vinginevyo, angalia kukatizwa kwa data ya DMP tayari (hii inapaswa kutokea mara kwa mara)} mwingine ikiwa (mpuIntStatus & 0x02) {// subiri urefu sahihi wa data, inapaswa kuwa subira fupi SANA wakati (pakiti ya fifoCount 1 inapatikana // (hii inatuwezesha kusoma mara moja zaidi bila kusubiri usumbufu) fifoCount - = packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& mvuto, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & mvuto); #if LOG_INPUT Serial. chapa ("ypr / t"); Serial.print (ypr [0] * 180 / M_PI); // pembe za euler Serial.print ("\ t"); Serial.print (ypr [1] * 180 / M_PI); Serial.print ("\ t"); Serial.println (ypr [2] * 180 / M_PI); #endif pembejeo = ypr [1] * 180 / M_PI + 180;}} utupu motorSpeed (int PWM) {kuelea L1, L2, R1, R2; ikiwa (PWM> = 0) {// mwelekeo wa mbele L2 = 0; L1 = abs (PWM); R2 = 0; R1 = abs (PWM); ikiwa (L1> = 255) { L1 = R1 = 255;}} mwingine {// mwelekeo wa nyuma L1 = 0; L2 = abs (PWM); R1 = 0; R2 = abs (PWM); ikiwa (L2> = 255) {L2 = R2 = 255; }} // gari inayoongoza ledcWrite (0, L1); ledcWrite (1, L2); ledcWrite (2, R1 * 0.97); // 0.97 ni ukweli wa kasi au, kwa sababu motor ya kulia ina kasi kubwa kuliko ya kushoto, kwa hivyo tunaipunguza hadi mwendo wa gari ni sawa ledcWrite (3, R2 * 0.97);
}
Ilipendekeza:
Kujisawazisha Roboti - PIDI ya Udhibiti wa PID: 3 Hatua
![Kujisawazisha Roboti - PIDI ya Udhibiti wa PID: 3 Hatua Kujisawazisha Roboti - PIDI ya Udhibiti wa PID: 3 Hatua](https://i.howwhatproduce.com/images/001/image-2620-j.webp)
Roboti ya kusawazisha ya kibinafsi - Algorithm ya Udhibiti wa PID: Mradi huu ulibuniwa kwa sababu nilikuwa na hamu ya kujifunza zaidi juu ya Udhibiti wa algorithms na jinsi ya kutekeleza kwa ufanisi matanzi ya PID. Mradi huo bado uko katika awamu ya maendeleo kwani moduli ya Bluetooth bado haijaongezwa ambayo
Magurudumu mawili ya Kujisawazisha Roboti: Hatua 7
![Magurudumu mawili ya Kujisawazisha Roboti: Hatua 7 Magurudumu mawili ya Kujisawazisha Roboti: Hatua 7](https://i.howwhatproduce.com/images/002/image-4623-16-j.webp)
Roboti mbili ya Kujisawazisha ya Gurudumu: Hii inaweza kufundishwa kupitia mchakato wa kubuni na kujenga kwa roboti ya kujisawazisha. Kama noti, ninataka tu kusema kwamba roboti za kujilinganisha sio dhana mpya na zimejengwa na kuhifadhiwa na wengine. Ninataka kutumia fursa hii
HeadBot - Roboti ya Kujisawazisha ya STEM Kujifunza na Kufikia: Hatua 7 (na Picha)
![HeadBot - Roboti ya Kujisawazisha ya STEM Kujifunza na Kufikia: Hatua 7 (na Picha) HeadBot - Roboti ya Kujisawazisha ya STEM Kujifunza na Kufikia: Hatua 7 (na Picha)](https://i.howwhatproduce.com/images/011/image-30799-j.webp)
HeadBot - Roboti ya Kujisawazisha ya STEM Kujifunza na Kufikia: Headbot - urefu wa futi mbili, robot ya kujisawazisha - ni ubongo wa Timu ya Roboti ya Kusini (SERT, FRC 2521), timu ya roboti ya shule ya upili ya ushindani katika FIRST Mashindano ya Roboti, kutoka Eugene, Oregon. Roboti hii maarufu ya ufikiaji hufanya upya
Jinsi ya kuunda Roboti ya Kujisawazisha iliyodhibitiwa kwa mbali ya 3D: Hatua 9 (na Picha)
![Jinsi ya kuunda Roboti ya Kujisawazisha iliyodhibitiwa kwa mbali ya 3D: Hatua 9 (na Picha) Jinsi ya kuunda Roboti ya Kujisawazisha iliyodhibitiwa kwa mbali ya 3D: Hatua 9 (na Picha)](https://i.howwhatproduce.com/images/012/image-33291-j.webp)
Jinsi ya kuunda Roboti ya Kujisawazisha Iliyodhibitiwa kwa mbali ya 3D: Hii ni mageuzi ya toleo la zamani la B-roboti. CHANZO CHA KUFUNGUA 100% / roboti ya Arduino. CODE, sehemu za 3D na vifaa vya elektroniki viko wazi kwa hivyo jisikie huru kuibadilisha au kuunda toleo kubwa la roboti. Ikiwa una mashaka, maoni au unahitaji msaada fanya
Kujisawazisha Robot: 6 Hatua (na Picha)
![Kujisawazisha Robot: 6 Hatua (na Picha) Kujisawazisha Robot: 6 Hatua (na Picha)](https://i.howwhatproduce.com/images/002/image-3116-63-j.webp)
Kujisawazisha Roboti: Katika hii Tutaweza kufundishwa ’ tutakuonyesha jinsi ya kujenga roboti ya kujisawazisha tuliyoifanya kama mradi wa shule. Ni ’ s msingi wa roboti zingine, kama vile nBot na nyingine inayoweza kufundishwa. Roboti inaweza kudhibitiwa kutoka kwa smartphone ya Android vi