Përmbajtje:

Gimbal i Kontrollit të Lëvizjes: 12 Hapa
Gimbal i Kontrollit të Lëvizjes: 12 Hapa

Video: Gimbal i Kontrollit të Lëvizjes: 12 Hapa

Video: Gimbal i Kontrollit të Lëvizjes: 12 Hapa
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Korrik
Anonim
Image
Image

Përshëndetje të gjithëve, emri im është Harji Nagi. Unë jam aktualisht një student i vitit të dytë që studioj inxhinieri elektronike dhe komunikimi nga Instituti i Teknologjisë Pranveer Singh, Kanpur (UP). Kam një interes të madh në robotikë, arduino, Inteligjencë Artificiale dhe elektronikë analoge.

Fjala "gimbal" përcaktohet si një mbështetje e rrotulluar që lejon rrotullimin e çdo objekti në një aks të vetëm. Pra, një gimbal me tre boshte lejon që çdo objekt i montuar në gimbal të jetë i pavarur nga lëvizja e atij që mban gimbalin. Gimbal dikton lëvizjen e objektit, jo atë që e mban atë.

Ai përbëhet nga 3 servo motorë MG996R për kontrollin me 3 boshte dhe një bazë në të cilën do të vendosen sensori MPU6050, Arduino dhe bateria. Përdoret për ta mbajtur kamerën të stabilizuar pa dridhje. Një gimbal me 3 boshte siguron që lëvizja e kamerës të stabilizohet edhe nëse ai që e mban atë po shkon lart e poshtë, majtas dhe djathtas, para dhe mbrapa. Kjo është ajo që ne i referohemi si stabilizim të hapjes, katranit dhe rrotullimit.

Hapi 1: Lista e Komponentëve

Lista e përbërësve janë:

1) Arduino Uno

2) Bateri 8V, 1.5 Amp për fuqizimin e Arduino Uno

3) 7805 Rregullatori i tensionit Ic ose mund të përdorni konvektor me kapak

4) MPU 6050

5) 3*(MG995 SERVO Motors)

6) Telat Jumper

Pajisje të tjera:

1) Hekuri për saldim

2) Armë ngjitëse

3) Makinë stërvitje

4) Ushqimi mund

Në vend që të përdor breadborad, unë përdor bord të vogël coustom perf për lidhje autobusi pozitiv dhe negativ

Hapi 2: Montimi

Montimi
Montimi
Montimi
Montimi

Shkumë shkumë, pllakë shkumë ose pllakë shkumë e veshur me letër është një material i lehtë dhe i lehtë për t'u përdorur për montimin e motorit Servo dhe për prodhimin e modeleve të shkallës.

Së pari unë bëra një kllapa DIY në formë L për të montuar servo motorin me ndihmën e bordit të shkumës.

Hapi 3:

Imazhi
Imazhi

Montimi i gimbalit ishte mjaft i lehtë. Fillova me instalimin e servo Yaw, sensorin MPU 6050 dhe çelësin ON-OFF. Duke përdorur bulona dhe arra e sigurova atë në bazë

Hapi 4: Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995

Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995
Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995

Hapi 5: Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995

Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995
Tjetra, duke përdorur të njëjtën metodë, unë sigurova servisin e rrotullimit. pjesët janë të dizajnuara në mënyrë specifike që të përshtaten lehtësisht me serviset MG995

Hapi 6: Lidhjet

Lidhjet
Lidhjet

Në diagramin e qarkut mund të përdorni ose konvertuesin buck ose 7805 IC të rregullatorit të tensionit për të kthyer 8V në 5 V. Mikrokontrolluesi i cili i është dhënë diagramit të qarkut është Arduino Nano gjithashtu mund të përdorni Arduino Uno, Arduino Mega.

Kunjat SCL dhe SDA të MPU 6050 janë të lidhura me kunjat Arduino Analog A5 dhe A4. (Pina SCL dhe SDA mund të ndryshojnë, kështu që shikoni fletën e të dhënave për kunjat SCl dhe SDA për mikrokontrollues të tjerë)

Hapi 7: Lidhja me IC Rregullatorin e Tensionit 7805

Lidhja me IC Rregullatorin e Tensionit 7805
Lidhja me IC Rregullatorin e Tensionit 7805

Ky diagram qarkor është për lidhjen e rregullatorit të tensionit 7805, lidhni baterinë 8v në Vin dhe do të merrni një tension dalës prej 5v.

Hapi 8: Kodimi

Duhet të përfshini bibliotekat e mëposhtme:

1) #includeKliko këtu për të shkarkuar skedarin zip

2) #includeKliko Këtu për të shkarkuar skedarin zip

Pas shkarkimit të skedarit zip, shtoni bibliotekën zip në skicën arduino

Për Kodin

/*

DIY Gimbal - MPU6050 Arduino Tutorial Code bazuar në shembullin MPU6050_DMP6 nga biblioteka i2cdevlib nga Jeff Rowberg: https://github.com/jrowberg/i2cdevlib */// I2Cdev dhe MPU6050 duhet të instalohen si biblioteka, ose ndryshe.cpp/.h skedarët // për të dy klasat duhet të jenë në rrugën e përfshirjes së projektit tuaj #përfshini "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #përfshijnë "MPU6050.h" // nuk është e nevojshme nëse përdorni MotionApps përfshijnë skedarin / / Biblioteka Arduino Wire kërkohet nëse zbatimi I2Cdev I2CDEV_ARDUINO_WIRE // përdoret në I2Cdev.h #nëse I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // adresa e paracaktuar e klasës I2C është 0x68 // të jetë I2 kaloi si parametër këtu // AD0 i ulët = 0x68 (parazgjedhje për SparkFun breakout dhe bordin e vlerësimit InvenSense) // AD0 i lartë = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- përdorimi për AD0 lartë // Përcaktoni 3 servo motorët Servo servo0; Servo servo1; Servo servo2; noton saktë; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // përdorni pin 2 në Arduino Uno & shumica e bordeve bool blinkState = false; // Kontrolli MPU/status vars bool dmpReady = false; // vendoset e vërtetë nëse DMP init ishte i suksesshëm uint8_t mpuIntStatus; // mban bajt të statusit aktual të ndërprerjes nga MPU uint8_t devStatus; // kthe statusin pas çdo operacioni të pajisjes (0 = sukses,! 0 = gabim) uint16_t packetSize; // madhësia e pritshme e paketës DMP (parazgjedhja është 42 bajt) uint16_t fifoCount; // numërimi i të gjithë byteve aktualisht në FIFO uint8_t fifoBuffer [64]; // Tampon i ruajtjes FIFO // orientim/lëvizje vars Quaternion q; // [w, x, y, z] enë kuaternion VectorInt16 aa; // [x, y, z] matjet e sensorit të akelit VectorInt16 aaReal; // [x, y, z] matje të sensorit të ngritjes pa gravitet VectorInt16 aaWorld; // [x, y, z] matjet e sensorit akel të kornizës botërore VectorFloat graviteti; // [x, y, z] vektori i gravitetit noton euler [3]; // [psi, theta, phi] Euler kënd enë noton ypr [3]; // [yaw, pitch, roll] yaw/katran/rrotull enë dhe vektori i gravitetit // struktura e paketave për demonstrimin e çajit InvenSense uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ =============== // === RUTINA E ZBULIMIT TTER NDTERRTYM === // ===================== ============================================ bool i paqëndrueshëm mpuInterrupt = false; // tregon nëse kunja e ndërprerjes MPU ka shkuar shumë lart void dmpDataReady () {mpuInterrupt = true; } // =============================================== ================= // === PARAPRAKIMI Fillestar === // ===================== ========================================== vendosjen e pavlefshme () {// bashkohuni me autobusin I2C (biblioteka I2Cdev nuk e bën këtë automatikisht) #nëse I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Ora 400kHz I2C. Komentoni këtë rresht nëse keni vështirësi në përpilim #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: konfigurimi (400, e vërtetë); #endif // iniconi komunikimin serik // (115200 i zgjedhur sepse kërkohet për daljen e Teapot Demo, por është // varet nga ju në varësi të projektit tuaj) Serial.begin (38400); ndërsa (! Serial); // prisni për regjistrimin e Leonardos, të tjerët vazhdojnë menjëherë // inicojnë pajisjen //Serial.println(F("Fillimi i pajisjeve I2C … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // furnizoni kompensimet tuaja xhiro këtu, të shkallëzuara për ndjeshmërinë minimale mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 parazgjedhja e fabrikës për çipin tim të provës // sigurohuni që ka punuar (kthen 0 nëse është kështu) nëse (devStatus == 0) {// aktivizoni DMP, tani që është gati // Serial.println (F ("Aktivizimi DMP … ")); mpu.setDMPE aktivizuar (e vërtetë); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // vendosni flamurin tonë DMP Ready në mënyrë që funksioni kryesor i lakut () të dijë se është në rregull ta përdorni //Serial.println(F("DMP gati! Duke pritur ndërprerjen e parë … ")); dmpReady = e vërtetë; // merrni madhësinë e pritshme të paketës DMP për pakot e krahasimit të mëvonshëmSize = mpu.dmpGetFIFOPacketSize (); } tjetër {// GABIM! // 1 = ngarkimi fillestar i kujtesës dështoi // 2 = Përditësimet e konfigurimit të DMP dështuan // (nëse do të prishet, zakonisht kodi do të jetë 1) // Serial.print (F ("Inicimi i DMP dështoi (kodi")); //Serial.print(devStatus); //Serial.println (F (")")); } // Përcaktoni kunjat me të cilët janë lidhur 3 servo motorët servo0.attach (10); servo1.tash (9); servo2.attach (8); } // =============================================== ================= // === LIGJI KRYESOR I PROGRAMIT === // ==================== =========================================== lak void () { / / nëse programimi dështoi, mos u përpiqni të bëni asgjë nëse (! dmpReady) ktheheni; // prisni për ndërprerjen e MPU ose paketat shtesë të disponueshme derisa (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount

= 1024) {

// rivendosni që të mund të vazhdojmë pastër mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO overflow!")); // përndryshe, kontrolloni për ndërprerjen e gatshme të të dhënave DMP (kjo duhet të ndodhë shpesh)} përndryshe nëse (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// prisni për gjatësinë e saktë të të dhënave të disponueshme, duhet të jetë një pritje SHUMY e shkurtër derisa (fifoCount 1 paketë në dispozicion / / (kjo na lejon të lexojmë menjëherë më shumë pa pritur një ndërprerje).dmpGetYawPitchRoll (ypr, & q, & graviteti); // Yaw, Pitch, Vlerat e rrotullimit - Radianët në gradë ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Kaloni 300 lexime (procesi i vetë-kalibrimit) nëse (j <= 300) {saktë = ypr [0]; // Yaw fillon me vlerë të rastësishme, kështu që ne kapni vlerën e fundit pas 300 leximeve j ++;} // Pas 300 leximeve të tjera {ypr [0] = ypr [0] - e saktë; // Vendosni Yaw në 0 deg - zbritni vlerën e fundit të rastësishme të Yaw nga vlera currrent për të bërë Yaw 0 gradë es // Hartoni vlerat e sensorit MPU6050 nga -90 në 90 në vlerat e pangopshme për kontrollin servo nga 0 në 180 int servo0Value = hartë (ypr [0], -90, 90, 0, 180); int servo1Value = hartë (ypr [1], -90, 90, 0, 180); int servo2Value = hartë (ypr [2], -90, 90, 180, 0); // Kontrolloni servot sipas servo0.write orientimit MPU6050 (servo0Value); servo1.shkruaj (servo1Vlera); servo2.shkruaj (servo2Vlera); } #endif}}

Më në fund duke përdorur funksionin e shkrimit, ne i dërgojmë këto vlera në servos si sinjale kontrolli. Sigurisht, ju mund të çaktivizoni servo Yaw nëse doni vetëm stabilizim për boshtin X dhe Y, dhe përdorni këtë platformë si gimbal të kamerës

Hapi 9: Kur të gjithë përbërësit janë të lidhur, duket e ngjashme me këtë foto

Kur të gjithë përbërësit janë të lidhur, duket e ngjashme me këtë foto
Kur të gjithë përbërësit janë të lidhur, duket e ngjashme me këtë foto

Hapi 10: Tani futni të gjitha sendet bazë brenda kutisë së ushqimit

Tani futni të gjitha sendet bazë brenda kutisë së ushqimit
Tani futni të gjitha sendet bazë brenda kutisë së ushqimit

Hapi 11: Kur të gjitha telat dhe përbërësit vendosen brenda një ushqimi, atëherë mund të aplikoni armë ngjitëse në bazën e pllakës së shkumës

Kur të gjitha telat dhe përbërësit vendosen brenda një ushqimi, atëherë mund të aplikoni armë ngjitëse në bazën e pllakës së shkumës
Kur të gjitha telat dhe përbërësit vendosen brenda një ushqimi, atëherë mund të aplikoni armë ngjitëse në bazën e pllakës së shkumës

Hapi 12: Përfundim

Ju lutemi vini re këtë larg nga gimbali i mirë i kamerës. Lëvizjet nuk janë të qeta sepse këto servos nuk janë të destinuara për një qëllim të tillë. Gimbalët e vërtetë të kamerës përdorin një lloj të veçantë të motorit BLDC për të bërë lëvizje të qetë. Pra, konsideroni këtë projekt vetëm për qëllime edukative.

Kjo do të ishte e gjitha për këtë tutorial, shpresoj që ju ka pëlqyer dhe keni mësuar diçka të re. Mos ngurroni të bëni ndonjë pyetje në pjesën e komenteve më poshtë dhe mos harroni të kontrolloni koleksionet e mia të projektit

Recommended: