ዝርዝር ሁኔታ:

የእንቅስቃሴ ቁጥጥር ጂምባል 12 ደረጃዎች
የእንቅስቃሴ ቁጥጥር ጂምባል 12 ደረጃዎች

ቪዲዮ: የእንቅስቃሴ ቁጥጥር ጂምባል 12 ደረጃዎች

ቪዲዮ: የእንቅስቃሴ ቁጥጥር ጂምባል 12 ደረጃዎች
ቪዲዮ: እርግዝና እና የአካል ብቃት እንቅስቃሴ 2024, ሀምሌ
Anonim
Image
Image

ሰላም ሁላችሁም ፣ ስሜ ሃርጂ ናጊ ነው። በአሁኑ ጊዜ ከፕራኔቨር ሲንግ ቴክኖሎጂ ኦፍ ቴክኖሎጂ ፣ ካንpር (UP) የኤሌክትሮኒክስ እና የግንኙነት ኢንጂነሪንግን የምማር የሁለተኛ ዓመት ተማሪ ነኝ። በሮቦት ፣ አርዱinoኖ ፣ አርቲፊሻል ኢንተለጀንስ እና አናሎግ ኤሌክትሮኒክስ ላይ ከፍተኛ ፍላጎት አለኝ።

“ጂምባል” የሚለው ቃል የማንኛውም ነገር በአንድ ዘንግ ውስጥ እንዲሽከረከር የሚያስችል ድጋፍ ያለው ድጋፍ ነው። ስለዚህ ባለ ሶስት ዘንግ ጂምባል በጂምባል ላይ የተጫነ ማንኛውም ነገር ጂምባልን ከሚይዝ ሰው እንቅስቃሴ ነፃ እንዲሆን ያስችለዋል። ጂምባል የነገሩን እንቅስቃሴ ያዛል ፣ የተሸከመውን አይደለም።

ለ 3-ዘንግ መቆጣጠሪያ 3 MG996R servo ሞተሮችን እና የ MPU6050 ዳሳሽ ፣ አርዱዲኖ እና ባትሪው የሚቀመጡበትን መሠረት ያካተተ ነው። ካሜራው ያለ ንዝረት ተረጋግቶ እንዲቆይ ለማድረግ ያገለግላል። ባለ 3-ዘንግ ጂምባል የካሜራው እንቅስቃሴ የተረጋጋና ወደ ላይ ፣ ወደ ግራ እና ወደ ቀኝ ፣ ከፊትና ከኋላ ቢሄድም የተረጋጋ መሆኑን ያረጋግጣል። እኛ ያው ፣ የጩኸት እና የጥቅል ማረጋጊያ ብለን የምንጠራው ይህ ነው።

ደረጃ 1 የአካል ክፍሎች ዝርዝር

የአካል ክፍሎች ዝርዝር -

1) አርዱዲኖ ኡኖ

2) አርቪዲኖ ኡኖን ለማጎልበት 8V ፣ 1.5 አምፕ ባትሪ

3) 7805 የቮልቴጅ ተቆጣጣሪ Ic ወይም የባንክ ማጓጓዣን መጠቀም ይችላሉ

4) MPU 6050

5) 3*(MG995 SERVO ሞተርስ)

6) ዝላይ ሽቦዎች

ሌሎች መሣሪያዎች:

1) ብረት ማጠጫ

2) ሙጫ ጠመንጃ

3) ቁፋሮ ማሽን

4) የምግብ ጣሳ

የዳቦ ቦራድን ከመጠቀም ይልቅ ለአዎንታዊ እና ለአሉታዊ የአውቶቡስ ትስስር አነስተኛ የኮስቶም ሽቶ ሰሌዳ እጠቀማለሁ።

ደረጃ 2 - መሰብሰብ

በመገጣጠም ላይ
በመገጣጠም ላይ
በመገጣጠም ላይ
በመገጣጠም ላይ

Foamcore ፣ የአረፋ ሰሌዳ ወይም የወረቀት ፊት ያለው የአረፋ ሰሌዳ ሰርቪ ሞተርን ለመጫን እና የመለኪያ ሞዴሎችን ለመሥራት የሚያገለግል ቀላል እና በቀላሉ የተቆረጠ ቁሳቁስ ነው።

በመጀመሪያ በአረፋ ሰሌዳ እገዛ የ servo ሞተርን ለመጫን DIY ኤል-ቅርፅ ቅንፎችን ሠራሁ።

ደረጃ 3

ምስል
ምስል

ጂምባልን መሰብሰብ በጣም ቀላል ነበር። የ Yaw servo ን ፣ MPU 6050 አነፍናፊን እና ON-OFF ማብሪያን በመጫን ጀመርኩ። መቀርቀሪያዎችን እና ፍሬዎችን በመጠቀም ከመሠረቱ አረጋገጥኩት

ደረጃ 4: በመቀጠል ፣ ተመሳሳይ ዘዴን በመጠቀም የጥቅልል ሰርቪስን ደህንነት አስጠብቄአለሁ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው

በመቀጠል ፣ ተመሳሳዩን ዘዴ በመጠቀም የጥቅልል ሰርቪስን ደህንነት አረጋገጥኩ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው
በመቀጠል ፣ ተመሳሳዩን ዘዴ በመጠቀም የጥቅልል ሰርቪስን ደህንነት አረጋገጥኩ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው

ደረጃ 5: በመቀጠል ፣ ተመሳሳይ ዘዴን በመጠቀም የጥቅልል ሰርቪስን ደህንነት አስጠብቄአለሁ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው

በመቀጠል ፣ ተመሳሳዩን ዘዴ በመጠቀም የጥቅልል ሰርቪስን ደህንነት አረጋገጥኩ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው
በመቀጠል ፣ ተመሳሳዩን ዘዴ በመጠቀም የጥቅልል ሰርቪስን ደህንነት አረጋገጥኩ። ክፍሎቹ በተለይ MG995 ሰርቪሶችን በቀላሉ ለማሟላት የተነደፉ ናቸው

ደረጃ 6 - ግንኙነቶች

ግንኙነቶች
ግንኙነቶች

በወረዳ ዲያግራም ውስጥ 8V ን ወደ 5 ቮ ለመለወጥ የባክ መቀየሪያን ወይም 7805 የቮልቴጅ ተቆጣጣሪ IC ን መጠቀም ይችላሉ።

የ MPU 6050 የ SCL እና SDA ፒኖች ከአርዱዲኖ አናሎግ ፒን A5 እና A4 ጋር ተገናኝተዋል። (SCL እና SDA ፒን ሊለያይ ይችላል ፣ ስለዚህ ለ SCl እና ለ SDA ፒኖች የውሂብ ሉህ ይመልከቱ ለሌላ ማይክሮ መቆጣጠሪያ)

ደረጃ 7 ከ 7805 የቮልቴጅ ተቆጣጣሪ IC ጋር ግንኙነት

ከ 7805 የቮልቴጅ ተቆጣጣሪ አይሲ ጋር ግንኙነት
ከ 7805 የቮልቴጅ ተቆጣጣሪ አይሲ ጋር ግንኙነት

ይህ የወረዳ ዲያግራም ለ 7805 የ voltage ልቴጅ ተቆጣጣሪ አይሲ ግንኙነት ነው ፣ 8 ቪ ባትሪውን በቪን ያገናኙ እና የ 5 ቮ ውፅዓት ቮልቴጅ ያገኛሉ።

ደረጃ 8 ኮድ መስጠት

የሚከተሉትን ቤተ -መጻሕፍት ማካተት አለብዎት

1)#ያካትቱ ዚፕ ፋይልን ለማውረድ እዚህ ጠቅ ያድርጉ

2) ዚፕ ፋይልን ለማውረድ#ጠቅ ያድርጉ እዚህ ጠቅ ያድርጉ

የዚፕ ፋይሉን ካወረዱ በኋላ በአርዲኖ ንድፍ ውስጥ የዚፕ ቤተ -መጽሐፍትን ያክሉ

ለ ኮድ

/*

DIY Gimbal - በ MPU6050_DMP6 ምሳሌ ላይ በ MPU6050_DMP6 ምሳሌ ላይ ከ i2cdevlib ቤተመፃሕፍት በጄፍ ሮውበርግ - https://github.com/jrowberg/i2cdevlib */// I2Cdev እና MPU6050 እንደ ቤተ -መጽሐፍት መጫን አለባቸው ፣ ወይም ካልሆነ.cpp/.h ፋይሎች // ለሁለቱም ክፍሎች በፕሮጀክትዎ መንገድ ውስጥ መሆን አለባቸው #"I2Cdev.h" #ያካትቱ "MPU6050_6Axis_MotionApps20.h" // #ማካተት "MPU6050.h" // አስፈላጊ አይደለም MotionApps ፋይልን የሚያካትት ከሆነ /አስፈላጊ አይደለም I2Cdev I2CDEV_ARDUINO_WIRE ትግበራ // በ I2Cdev.h ውስጥ ጥቅም ላይ ከዋለ የአርዱዲኖ ሽቦ ቤተመፃሕፍት ያስፈልጋል (I2CDEV_ARDUINO_WIRE #“Wire.h” #endif #include / ክፍል ነባሪ I2C አድራሻ 0x68 ነው) እንደ መለኪያ እዚህ አለፈ / AD0 low = 0x68 (ለ SparkFun breakout እና InvenSense ግምገማ ቦርድ ነባሪ) // AD0 high = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- ለ AD0 ከፍተኛ ይጠቀሙ/ 3 የ servo ሞተሮችን Servo servo0 ን ይግለጹ; Servo servo1; Servo servo2; ተንሳፋፊ ትክክል; int j = 0; #መግለፅ OUTPUT_READABLE_YAWPITCHROLL #INFRPPPPPPPPP 2P / 2 ን ይግለጹ // // በአርዱዲኖ ኡኖ ላይ ፒን 2 ን ይጠቀሙ እና አብዛኛዎቹ ሰሌዳዎች bool blinkState = ሐሰት; // የ MPU ቁጥጥር/ሁኔታ ቫርስ bool dmpReady = ሐሰት; / ዲኤምፒ init ስኬታማ ከሆነ uint8_t mpuIntStatus/ ከሆነ እውነት ያዘጋጁ። // ከ MPU uint8_t devStatus ትክክለኛ የማቋረጥ ሁኔታ ባይት ይይዛል ፤ // ከእያንዳንዱ የመሣሪያ አሠራር (0 = ስኬት ፣ 0 = ስህተት) uint16_t packetSize በኋላ የመመለስ ሁኔታ; // የሚጠበቀው የ DMP ፓኬት መጠን (ነባሪ 42 ባይት ነው) uint16_t fifoCount; // በአሁኑ ጊዜ በ FIFO ውስጥ የሁሉም ባይቶች ብዛት መቁጠር uint8_t fifoBuffer [64]; // የ FIFO ማከማቻ ቋት // አቀማመጥ/እንቅስቃሴ ቫርስ Quaternion q; // [w, x, y, z] quaternion መያዣ VectorInt16 aa; // [x, y, z] የአሴል ዳሳሽ መለኪያዎች VectorInt16 aaReal; // [x, y, z] ከስበት ኃይል ነፃ የሆነ የአሴል ዳሳሽ መለኪያዎች VectorInt16 aaWorld; // [x, y, z] የዓለም-ፍሬም አክሴል ዳሳሽ መለኪያዎች VectorFloat ስበት; // [x, y, z] የስበት ቬክተር ተንሳፋፊ ኢውለር [3]; // [psi, theta, phi] የዩለር አንግል መያዣ ተንሳፋፊ ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll መያዣ እና የስበት ቬክተር // ፓኬት መዋቅር ለ InvenSense teapot demo uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0 ፣ 0 ፣ 0 ፣ 0x00 ፣ 0x00 ፣ ‘\ r’ ፣’\ n’}; // ====================================================== ================ // === INTERRUPT DETECTION ROUTINE === // ===================== ============================================== የማይለዋወጥ bool mpuInterrupt = ሐሰት; // የሚያመለክተው የ MPU ማቋረጫ ፒን ከፍ ያለ ባዶ መሆኑን dmpDataReady () {mpuInterrupt = true; } // ======================================================= ================= // == የመጀመሪያ ደረጃ ቅንጅት === // ===================== ============================================== ባዶነት ማዋቀር () {// I2C አውቶቡስን ይቀላቀሉ (I2Cdev ቤተ -መጽሐፍት ይህንን በራስ -ሰር አያደርግም) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C ሰዓት። የማጠናቀር ችግሮች ካጋጠሙዎት ይህንን መስመር አስተያየት ይስጡ #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: ማዋቀር (400 ፣ እውነት) ፤ #endif // ተከታታይ ግንኙነትን ያስጀምራል // (115200 የተመረጠው ለ Teapot Demo ውፅዓት ስለሚያስፈልገው ነው ፣ ግን በፕሮጀክትዎ ላይ በመመስረት / በእውነቱ የእርስዎ ነው) Serial.begin (38400); ሳለ (! ተከታታይ); // የሊዮናርዶን ቆጠራ ይጠብቁ ፣ ሌሎች ወዲያውኑ ይቀጥላሉ // መሣሪያን ያስጀምሩ //Serial.println(F("I2C መሳሪያዎችን ማነቃቃት…”)); mpu.initialize (); pinMode (INTERRUPT_PIN ፣ ማስገቢያ); devStatus = mpu.dmpInitialize (); // የራስዎን የጂሮ ማካካሻዎች እዚህ ያቅርቡ ፣ ለደቂቃ ትብነት mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 ለሙከራዬ ቺፕ የፋብሪካ ነባሪ // መስራቱን ያረጋግጡ (እንደዚያ ከሆነ 0 ይመልሳል) (devStatus == 0) {// ዲኤምፒውን ያብሩ ፣ አሁን ዝግጁ ከሆነ // Serial.println (F (“ማንቃት) DMP…”)); mpu.setDMPEnabled (እውነት); አባሪ ማቋረጫ (digitalPinToInterrupt (INTERRUPT_PIN) ፣ dmpDataReady ፣ RISING); mpuIntStatus = mpu.getIntStatus (); // ዋናው የ loop () ተግባሩ እሱን መጠቀም ምንም ችግር እንደሌለው ያውቅ ዘንድ የዲኤምፒኤፍ ዝግጁ ባንዲራችንን ያዋቅሩ //Serial.println(F("DMP ዝግጁ! የመጀመሪያውን ማቋረጥ በመጠበቅ ላይ… ")); dmpReady = እውነት; // በኋላ ላይ ለማነጻጸር packetSize = mpu.dmpGetFIFOPacketSize () የሚጠበቀውን የ DMP ጥቅል መጠን ያግኙ። } ሌላ {// ስህተት! // 1 = የመነሻ ማህደረ ትውስታ ጭነት አልተሳካም // 2 = የዲኤምኤፍ ውቅረት ዝመናዎች አልተሳኩም // (የሚሰብር ከሆነ ፣ ብዙውን ጊዜ ኮዱ 1 ይሆናል) // Serial.print (ኤፍ (“ዲኤምፒ ማስጀመር አልተሳካም (ኮድ”))); //Serial.print (deVStatus); //Serial.println (F (")")); } // የ 3 ሰርቮ ሞተሮች የተገናኙባቸውን ፒኖች ይግለጹ servo0.attach (10); servo1.attach (9); servo2.attach (8); } // ======================================================= ================= // == ዋና የፕሮግራም መዘጋት === // = ================== ========================================== = ባዶ ባዶ () { / / ፕሮግራሙ ካልተሳካ ((dmpReady) ከተመለሰ ምንም ለማድረግ አይሞክሩ። // (! mpuInterrupt && fifoCount <packetSize) {ካለ (mpuInterrupt && fifoCount

= 1024) {

በንፅህና mpu.resetFIFO () መቀጠል እንድንችል // ዳግም ማስጀመር ፤ fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO overflow!")); // አለበለዚያ ፣ ለዲኤምፒኤም ውሂብ ዝግጁ መቋረጥን ይፈትሹ (ይህ ብዙ ጊዜ መከሰት አለበት)} ሌላ (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// ትክክለኛውን የሚገኝ የውሂብ ርዝመት ይጠብቁ ፣ በጣም አጭር ጊዜ በሚቆይበት ጊዜ (fifoCount 1 ፓኬት ይገኛል / / (ይህ መቋረጥ ሳይጠብቅ ወዲያውኑ የበለጠ እንድናነብ ያስችለናል) fifoCount -= packetSize; // ያው ፣ ፒች እና ሮል እሴቶችን #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q ፣ fifoBuffer) ፤ mpu.dmpGetpuravity (& gravity).dmpGetYawPitchRoll (ypr, & q, & gravity); // ያው ፣ ፒች ፣ ሮል እሴቶች - ራዲያዎች እስከ ypr [0] = ypr [0] * 180 / M_PI ፤ ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI ፤ // 300 ንባቦችን (ራስን የመለካት ሂደት) ዝለል (j <= 300) {ትክክል = ypr [0] ፤ // ያው በዘፈቀደ እሴት ይጀምራል ፣ ስለዚህ እኛ ከ 300 ንባቦች j ++ በኋላ የመጨረሻውን እሴት ይያዙ ፣} // ከ 300 ንባቦች በኋላ ሌላ {ypr [0] = ypr [0] - ትክክል ፤ // ያውን ወደ 0 ዲግ ያዘጋጁ - የመጨረሻውን የዘውግ የያውን እሴት ከአሁኑ እሴት በመቀነስ አዎ 0 ዲግሪ es // የ MPU6050 ዳሳሽ እሴቶችን ከ -90 ወደ 90 ለ servo ቁጥጥር ተስማሚ ከሆኑ እሴቶች ከ 0 እስከ 180 int servo0Value = ካርታ (ypr [0] ፣ -90 ፣ 90 ፣ 0 ፣ 180)። int servo1Value = ካርታ (ypr [1], -90, 90, 0, 180); int servo2Value = ካርታ (ypr [2], -90, 90, 180, 0); // በ MPU6050 አቅጣጫ servo0.write (servo0Value) መሠረት ሰርዶቹን ይቆጣጠሩ። servo1. ጻፍ (servo1Value); servo2. ጻፍ (servo2Value); } #endif}}

በመጨረሻም የመፃፍ ተግባሩን በመጠቀም እነዚህን እሴቶች እንደ ሰርቪስ ቁጥጥር እንደ ቁጥጥር ምልክቶች እንልካቸዋለን። ለ X እና Y ዘንግ ማረጋጊያ ብቻ ከፈለጉ የ Yaw servo ን ማሰናከል እና ይህንን መድረክ እንደ ካሜራ ጂምባል ይጠቀሙ።

ደረጃ 9: ሁሉም አካላት ሲገናኙ ፣ የእሱ ገጽታ ከዚህ ስዕል ጋር ይመሳሰላል

ሁሉም አካላት ሲገናኙ ፣ የእሱ ገጽታ ከዚህ ስዕል ጋር ይመሳሰላል
ሁሉም አካላት ሲገናኙ ፣ የእሱ ገጽታ ከዚህ ስዕል ጋር ይመሳሰላል

ደረጃ 10: አሁን ሁሉንም መሰረታዊ ነገሮች በምግብ መያዣው ውስጥ ያስገቡ

አሁን በምግብ ጣውያው ውስጥ ሁሉንም መሰረታዊ ነገሮችን ያስገቡ
አሁን በምግብ ጣውያው ውስጥ ሁሉንም መሰረታዊ ነገሮችን ያስገቡ

ደረጃ 11 - ሁሉም ሽቦዎች እና አካላት በምግብ ውስጥ ሲቀመጡ ከዚያ በአረፋ ሰሌዳ መሠረት የሙጫ ጠመንጃ ይተገበራል።

ሁሉም ሽቦዎች እና አካላት በምግብ ውስጥ ሲቀመጡ ከዚያ በአረፋ ቦርድ መሠረት ሙጫ ጠመንጃ ይተግብሩ።
ሁሉም ሽቦዎች እና አካላት በምግብ ውስጥ ሲቀመጡ ከዚያ በአረፋ ቦርድ መሠረት ሙጫ ጠመንጃ ይተግብሩ።

ደረጃ 12 መደምደሚያ

እባክዎን ይህንን ከመልካም ካሜራ ጂምባል ያስተውሉ። እንቅስቃሴዎቹ ለስላሳ አይደሉም ምክንያቱም እነዚህ ሰርቪስ ለእንደዚህ ዓይነት ዓላማ የታሰቡ አይደሉም። እውነተኛ የካሜራ ጂምባሎች ለስላሳ እንቅስቃሴዎችን ለማግኘት ልዩ የ BLDC ሞተርን ይጠቀማሉ። ስለዚህ ይህንን ፕሮጀክት ለትምህርት ዓላማ ብቻ ያስቡበት።

ለዚህ አጋዥ ስልጠና ያ ብቻ ይሆናል ፣ እርስዎ እንደተደሰቱበት እና አዲስ ነገር እንደተማሩ ተስፋ አደርጋለሁ። ከዚህ በታች ባለው የአስተያየቶች ክፍል ውስጥ ማንኛውንም ጥያቄ ለመጠየቅ ነፃነት ይሰማዎት እና ለፕሮጀክቱ ቼክ ስብስቦችን አይርሱ

የሚመከር: