Përmbajtje:
- Hapi 1: Lista e Komponentëve
- Hapi 2: Montimi
- Hapi 3:
- 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
- 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
- Hapi 6: Lidhjet
- Hapi 7: Lidhja me IC Rregullatorin e Tensionit 7805
- Hapi 8: Kodimi
- Hapi 9: 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
- 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
- Hapi 12: Përfundim
Video: Gimbal i Kontrollit të Lëvizjes: 12 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
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
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:
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
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
Hapi 6: 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
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
Hapi 10: 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
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:
Alarmi i sensorit të lëvizjes: 5 hapa
Alarmi i Sensorit të Lëvizjes: A jeni gjithmonë duke kontrolluar për të parë se kush është në derën tuaj? Ky është artikulli i përsosur për ju. Unë kam qenë gjithmonë kurioz të di nëse ka njerëz jashtë derës sime pa e ditur. Unë kam krijuar këtë Alarm të Sensorit të Lëvizjes me drita led të cilat do të tregojnë
Sistemi i Ndjekjes së Lëvizjes së Kokës për VR: 8 hapa
Sistemi i Ndjekjes së Lëvizjes Head për VR: Emri im është Sam KODO, Në këtë tuto, unë do t'ju mësoj hap pas hapi se si të përdorni sensorët Arduino IMU për të ndërtuar sistemin e përcjelljes së kokës për VR. Në këtë projekt do t'ju duhet: - Një ekran HDMI HDMI : https: //www.amazon.com/Elecrow-Capacitive-interfac…- Një
ITTT Rolando Ritzen - Doreza Arcade e Kontrollit të Lëvizjes: 5 Hapa
ITTT Rolando Ritzen - Doreza Arcade e Kontrollit të Lëvizjes: Mund të ketë një kontrollues të lëvizjes për kontrolluesit e lëvizjes ose për rekreativë në shina. Projekti i mashtrimit është se të gjithë kontrolli i lëvizjes është, përfshirë këtu. (Je schiet door te " gishti bangen ")
Rrëshqitësi i Kontrollit të Lëvizjes për Hekurudhën e Kohës së Kohëzgjatjes: 10 hapa (me fotografi)
Rrëshqitësi i Kontrollit të Lëvizjes për Hekurudhën Time Lapse: Ky udhëzues shpjegon se si të motorizoni një hekurudhë me kalimin e kohës duke përdorur një motor hap të drejtuar nga një Arduino. Ne do të fokusohemi kryesisht në Kontrolluesin e Lëvizjes që drejton motorin me hapa duke supozuar që ju tashmë keni një hekurudhë që dëshironi të motorizoni. Për shembull kur dis
Shtimi i Kontrollit të Lëvizjes në një orë Projektimi: 7 hapa
Shtimi i Kontrollit të Lëvizjes në një Orë Projektimi: Qëllimi: Shtoni një sensor lëvizjeje që ndriçon orën gjatë natës kur zbulon lëvizjen dhe bëni që ndriçimi i dritës së prapme të rregullohet me dorë. Pse: Unë kam vetëm disa kërkesa për një orë të mirë të shtratit. Duhet të jetë lehtësisht e dukshme, por jo e lehtë