Sisukord:
- Samm: komponentide loend
- 2. samm: kokkupanek
- 3. samm:
- Samm 4: Järgmiseks kinnitasin rullservo sama meetodit kasutades. osad on spetsiaalselt loodud MG995 servode hõlpsaks paigaldamiseks
- Samm 5: Järgmisena kinnitasin sama meetodi abil rulli servo. osad on spetsiaalselt loodud MG995 servode hõlpsaks paigaldamiseks
- 6. samm: ühendused
- Samm 7: Ühendamine 7805 pingeregulaatori IC -ga
- 8. samm: kodeerimine
- Samm: kui kõik komponendid on ühendatud, näeb see välja sarnane sellele pildile
- Samm: sisestage nüüd kõik toidukannu sisse pandud alused
- Samm 11: Kui kõik juhtmed ja komponendid on paigutatud toiduaine sisse, saab seejärel vahtplaadi alusele liimipüstoli kanda
- 12. samm: järeldus
Video: Liikumise juhtimine: 12 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Tere kõigile, minu nimi on Harji Nagi. Olen praegu teise kursuse tudeng, kes õpib elektroonikat ja kommunikatsioonitehnikat Pranveer Singhi Tehnoloogiainstituudist, Kanpur (UP). Mul on suur huvi robootika, arduino, tehisintellekti ja analoog -elektroonika vastu.
Sõna "gimbal" on määratletud kui pöördliige, mis võimaldab mis tahes objekti pöörlemist ühel teljel. Seega võimaldab kolmeteljeline kardaan ükskõik millisele kardaanile kinnitatud objektile olla sõltumatu kardaani hoidva liikumisest. Kardaan dikteerib eseme, mitte selle kandja liikumist.
See koosneb kolmest 3-teljelise juhtimise servomootorist MG996R ja alusest, millele paigutatakse MPU6050 andur, Arduino ja aku. Seda kasutatakse kaamera stabiliseerimiseks ilma vibratsioonita. 3-teljeline kardaan tagab kaamera liikumise stabiliseerimise isegi siis, kui seda hoidev liigub üles ja alla, vasakule ja paremale, ette ja taha. Seda me nimetame pöörde, kaldenurga ja veeremise stabiliseerimiseks.
Samm: komponentide loend
Komponentide loend on järgmine:
1) Arduino Uno
2) 8 V, 1,5 Amp aku Arduino Uno toiteks
3) 7805 Pingeregulaator Ic või võite kasutada buck conveterit
4) MPU 6050
5) 3*(MG995 SERVO mootorid)
6) Jumper juhtmed
Muud seadmed:
1) jootekolb
2) Liimipüstol
3) puurmasin
4) Toit saab
Leivapiirkonna kasutamise asemel olen kasutanud positiivse ja negatiivse bussiühenduse jaoks väikest kohandatud perfoplaati
2. samm: kokkupanek
Vahtplaat, vahtplaat või paberkattega vahtplaat on kerge ja kergesti lõigatav materjal, mida kasutatakse servomootori paigaldamiseks ja mastaabimudelite valmistamiseks.
Esiteks tegin vahtplaadi abil servomootori paigaldamiseks DIY L-kujulised sulgud.
3. samm:
Kardaani kokkupanek oli üsna lihtne. Alustasin Yaw servo, MPU 6050 anduri ja ON-OFF lüliti paigaldamisega. Kinnitasin selle poltide ja mutritega aluse külge
Samm 4: Järgmiseks kinnitasin rullservo sama meetodit kasutades. osad on spetsiaalselt loodud MG995 servode hõlpsaks paigaldamiseks
Samm 5: Järgmisena kinnitasin sama meetodi abil rulli servo. osad on spetsiaalselt loodud MG995 servode hõlpsaks paigaldamiseks
6. samm: ühendused
Lülitusskeemil saate 8V 5 V muundamiseks kasutada kas buck -muundurit või 7805 pingeregulaatori IC -d. Lülitusskeemil olev mikrokontroller on Arduino Nano, saate kasutada ka Arduino Uno, Arduino Mega.
MPU 6050 SCL- ja SDA -tihvtid on ühendatud Arduino analoogpistikuga A5 ja A4. (SCL- ja SDA -tihvtid võivad erineda, seega vaadake teiste mikrokontrollerite SCl- ja SDA -tihvtide andmelehte)
Samm 7: Ühendamine 7805 pingeregulaatori IC -ga
See skeem on mõeldud 7805 pingeregulaatori ic ühendamiseks, ühendage 8 V aku Viniga ja saate väljundpinge 5 V.
8. samm: kodeerimine
Peate lisama järgmised teegid:
1) #includeZip -faili allalaadimiseks klõpsake siin
2) #includeZip -faili allalaadimiseks klõpsake siin
Pärast zip -faili allalaadimist lisage arduino visandisse zip -raamatukogu
Koodi jaoks
/*
DIY Gimbal - MPU6050 Arduino õpetuskood, mis põhineb Jeff Rowbergi i2cdevlib raamatukogu MPU6050_DMP6 näitel: https://github.com/jrowberg/i2cdevlib */// I2Cdev ja MPU6050 tuleb installida raamatukogudena või muidu.cpp/.h failid // mõlema klassi jaoks peavad olema teie projekti kaasamise teel #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // pole vajalik, kui kasutate MotionApps include file / / Arduino Wire raamatukogu on vajalik, kui rakenduses I2Cdev I2CDEV_ARDUINO_WIRE // kasutatakse rakenduses I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // klassi vaikimisi I2C aadress on 0x68 // võib olla I2C aadress edastatud siin parameetrina // AD0 madal = 0x68 (vaikimisi SparkFuni läbilöögi ja InvenSense'i hindamiskeskuse jaoks) // AD0 kõrge = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- kasutage AD0 kõrge jaoks // Määrake 3 servomootorit Servo servo0; Servo servo1; Servo servo2; ujuk õige; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #defineeri INTERRUPT_PIN 2 // kasuta tihvti 2 Arduino Unos ja enamik tahvleid bool blinkState = false; // MPU juhtimine/olek vars bool dmpReady = false; // seada tõeseks, kui DMP init õnnestus uint8_t mpuIntStatus; // omab tegelikku katkestuse oleku baiti MPU -st uint8_t devStatus; // tagastab oleku pärast iga seadme toimingut (0 = õnnestumine,! 0 = viga) uint16_t packetSize; // eeldatav DMP paketi suurus (vaikimisi on 42 baiti) uint16_t fifoCount; // kõigi baitide arv praegu FIFO -s uint8_t fifoBuffer [64]; // FIFO salvestuspuhver // orientatsioon/liikumine vars Quaternion q; // [w, x, y, z] kvaternionikonteiner VectorInt16 aa; // [x, y, z] accel sensori mõõtmised VectorInt16 aaReal; // [x, y, z] gravitatsioonivabad accel-anduri mõõtmised VectorInt16 aaWorld; // [x, y, z] maailmakaadris olevad accel-anduri mõõtmised VectorFloat gravitatsioon; // [x, y, z] gravitatsioonivektori ujuk euler [3]; // [psi, teeta, phi] Euleri nurgakonteineri ujuk ypr [3]; // [pööramine, kaldenurk, rull] kaldumine/kaldenurk/rullmahuti ja gravitatsioonivektor // pakettstruktuur InvenSense teekannu demo jaoks uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ ================ // === Katkestuste tuvastamise rutiin === // ===================== =========================================== lenduv bool mpuInterrupt = vale; // näitab, kas MPU katkestusnõel on läinud tühjaks dmpDataReady () {mpuInterrupt = true; } // ================================================ ================= // === ALGSEADISTUS === // ===================== =========================================== void setup () {// liitu I2C siiniga (I2Cdev raamatukogu ei tee seda automaatselt) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz I2C kell. Kommenteerige seda rida, kui teil on koostamisraskusi #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // jadaühenduse initsialiseerimine // (115200 on valitud, kuna see on vajalik teekannu demoväljundiks, kuid see on // tõesti teie otsustada sõltuvalt teie projektist) Serial.begin (38400); while (! Seeria); // oodake Leonardo loendamist, teised jätkavad kohe // seadme lähtestamine //Serial.println(F(" I2C -seadmete initsialiseerimine … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // esitage siin oma güroskoopide nihked, skaleerides minimaalse tundlikkuse järgi mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // minu testkiibi tehase vaikeseade 1688 // veenduge, et see toimiks (tagastab 0, kui jah), kui (devStatus == 0) {// lülitage DMP sisse nüüd, kui see on valmis // Serial.println (F ("Lubamine DMP … ")); mpu.setDMPEnabled (tõene); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // seadistage meie DMP -valmiduslipp nii, et põhisilmuse () funktsioon teaks, et seda on hea kasutada //Serial.println(F("DMP valmis! Ootan esimest katkestust … ")); dmpReady = tõsi; // saada oodatud DMP paketi suurus hilisemaks võrdluseks packetSize = mpu.dmpGetFIFOPacketSize (); } muu {// VIGA! // 1 = esialgne mälu laadimine ebaõnnestus // 2 = DMP konfiguratsiooni värskendamine ebaõnnestus // (kui see läheb katki, on tavaliselt kood 1) // Serial.print (F ("DMP -vormindamine nurjus (kood")); //Serial.print(devStatus); //Serial.println (F (")")); } // Määrake tihvtid, millega 3 servomootorit on ühendatud servo0.attach (10); servo1.kinnitus (9); servo2.kinnitus (8); } // ================================================ ================= // === PÕHIPROGRAMMI LOOP === // ==================== ============================================ void loop () { / / kui programmeerimine ebaõnnestus, ärge proovige midagi teha, kui (! dmpReady) naaseb; // oodake, kuni MPU katkestus või lisapakett (id) on saadaval (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount
= 1024) {
// lähtestamine, et saaksime puhtalt jätkata mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO ülevool!")); // muidu kontrollige, kas DMP -d on valmis katkestama (seda peaks sageli juhtuma)} else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// oodake õiget saadaolevat andmepikkust, peaks olema VÄGA lühike ooteaeg (fifoCount 1 pakett saadaval /) / (see võimaldab meil kohe rohkem lugeda ilma katkestust ootamata) fifoCount -= packetSize; // Hankige pöörde, helikõrguse ja rulli väärtused #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity).dmpGetYawPitchRoll (ypr, & q, & gravitatsioon); // Yaw, Pitch, Roll väärtused - radiaanid kraadides ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Jäta 300 näitu vahele (isekalibreerimisprotsess), kui (j <= 300) {correct = ypr [0]; // Kaldumine algab juhusliku väärtusega, seega viimase väärtuse jäädvustamine pärast 300 lugemist j ++;} // pärast 300 lugemist muud {ypr [0] = ypr [0] - õige; // Määrake pöördenurk 0 kraadi - lahutage viimane juhuslik pöörde väärtus praegusest väärtusest Kõver 0 kraadi es // Kaardista MPU6050 anduri väärtused vahemikus -90 kuni 90 servovõrgu jaoks sobivate väärtusteni vahemikus 0 kuni 180 int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = kaart (ypr [1], -90, 90, 0, 180); int servo2Value = kaart (ypr [2], -90, 90, 180, 0); // Juhtige servosid vastavalt MPU6050 orientatsioonile servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #endif}}
Lõpuks kirjutamisfunktsiooni kasutades saadame need väärtused servodele juhtimissignaalidena. Muidugi, kui soovite X- ja Y -telje stabiliseerimist, saate Yaw servo keelata ja kasutada seda platvormi kaamera kardaanina
Samm: kui kõik komponendid on ühendatud, näeb see välja sarnane sellele pildile
Samm: sisestage nüüd kõik toidukannu sisse pandud alused
Samm 11: Kui kõik juhtmed ja komponendid on paigutatud toiduaine sisse, saab seejärel vahtplaadi alusele liimipüstoli kanda
12. samm: järeldus
Pange tähele, et see pole kaugeltki hea kaamera kardaan. Liigutused ei ole sujuvad, sest need servod pole selliseks otstarbeks mõeldud. Tõelised kaamera kardaanid kasutavad sujuva liikumise saamiseks spetsiaalset tüüpi BLDC mootorit. Niisiis, kaaluge seda projekti ainult hariduslikel eesmärkidel.
See oleks selle õpetuse jaoks kõik, loodan, et teile meeldis ja õppisite midagi uut. Küsige julgelt kõiki küsimusi allpool olevas kommentaaride jaotises ja ärge unustage kontrollida oma projekti kogusid
Soovitan:
Partiifail: liikumise juhtimine: 3 sammu
Partiifail: liikumiskontrollid: Kui otsisin, kuidas CMD -s liikumiskontrolle luua, ei leidnud ma täpseid tulemusi, seega otsustasin teha oma juhtnupud, mis töötavad WASD -klahvidega liikumiseks ja 1234 klahvi pööramiseks
Seadme juhtimine Androidi WiFi abil Esp8266 Juhtimine: 6 sammu
Seadme juhtimine Androidi WiFi abil Esp8266 Juhtimine: nüüd teame, kuidas juhtida seadmeid esp8266 WiFi -mooduli abil ja Arduino teie seadet Androidi WiFi -juhtimise abil lisateabe saamiseks. klõpsake linki mohamed ashraf
Liikumise juhtimine Raspberry Pi ja LIS3DHTR abil, 3-teljeline kiirendusmõõtur, Pythoni kasutamine: 6 sammu
Liikumise juhtimine Raspberry Pi ja LIS3DHTR, 3-teljelise kiirendusmõõturi abil, kasutades Pythoni: Ilu ümbritseb meid, kuid tavaliselt peame selle tundmiseks aias jalutama. - RumiAsame haritud rühmana, kes me näime olevat, investeerime valdava osa oma energiast töötamiseks enne arvutite ja mobiiltelefonide kasutamist. Seetõttu laseme sageli oma heaolul
Tensegrity või kahekordne 5R paralleelrobot, 5 teljega (DOF) odav, vastupidav, liikumise juhtimine: 3 sammu (piltidega)
Tensegrity või kahekordne 5R paralleelrobot, 5 teljega (DOF) odav, vastupidav, liikumise juhtimine: loodan, et arvate, et see on teie päeva SUUR idee! See on sissekanne Instructables Robotics võistlusel, mis lõpeb 2. detsembril 2019. Projekt on jõudnud viimasesse hindamisvooru ja mul pole olnud aega soovitud värskendusi teha! Mul on
ESP8266 RGB LED -riba WIFI juhtimine - NODEMCU IR -kaugjuhtimispuldina LED -riba jaoks, mida juhitakse Wifi kaudu - RGB LED STRIP nutitelefoni juhtimine: 4 sammu
ESP8266 RGB LED -riba WIFI juhtimine | NODEMCU IR -kaugjuhtimispuldina LED -riba jaoks, mida juhitakse Wifi kaudu | RGB LED STRIP nutitelefoni juhtimine: Tere poisid, selles õpetuses õpime, kuidas kasutada nodemcu või esp8266 IR -kaugjuhtimispuldina, et juhtida RGB LED -riba ja Nodemcu saab juhtida nutitelefoniga WiFi kaudu. Nii et põhimõtteliselt saate oma nutitelefoniga juhtida RGB LED -riba