Arduino Gimbal Yapımı - İlginç Arduino Projeleri | Robocombo

Arduino Gimbal Yapımı - İlginç Arduino Projeleri | Robocombo

 
Gimbal'ı 3B modelleme yazılımı kullanarak tasarladık. 3D çıktı alacağımız parçalar içerisinde 3 eksenli kontrol için MG996R servo motor "L" dirsekleri, MPU6050 6 eksen ivme ve gyro sensörü, Arduino ve pilin yerleştirileceği bir tabandan oluşur.
 
 
 

Arduino Gimbal Yapımı - Birleştirme

Arduino gimbal yapımı projemiz de gimbal'ı monte etmek oldukça kolaydır. Servoyu kurmaya başlayalım.

M3 cıvata ve somun kullanarak tabana sabitleyelim.

 Sonra, aynı yöntemi kullanarak diğer servo motorun güvenliğini sağlayalım. Parçalar, MG996R servolarına kolayca uyacak şekilde özel olarak tasarlanmıştır.

 Parçaları birbirine bağlamak için servo aksesuarı yuvarlak mili takalım.  İlk önce mili tabana iki cıvatayla tutturmamız ve daha sonra başka bir cıvata kullanarak önceki servoya takmamız gerekiyor.  Kalan bileşenler için servo'nun ve üst platformun montajı bu işlemini tekrarlayalım.  Daha sonra, düzenli tutmak için servo kablolarını tutucu açıklıklarından geçirelim. MPU6050 sensörünü taktıktan sonra bir cıvata ve somun ile tabana sabitleyelim. Arduino gimbal yapımı projesine güç vermek için, pil yuvasına 2 adet pil yerleştirelim. Pil yuvasını tabana iki cıvata ve somun kullanarak sabitleyelim.  2 Li-ion pil yaklaşık 7.4V üretecektir, ancak Arduino ve servoları çalıştırmak için 5V'a ihtiyacımız var.  Bu yüzden 7.4V ile 5V arasında dengeyi sağlayan bir çevirici kullanalım.

Arduino Gimbal Devre Şeması

Şimdi geriye, her şeyi birbirine bağlamak kaldı. İşte bu projenin devre şeması ve her şeyin nasıl bağlanması gerektiğini aşağıdan görebilirsiniz.  Arduino Gimbal Yapımı Projesi için gerekli malzemeleri aşağıdaki linklerden satın alabilirsiniz:   Sonunda elektronik bileşenleri ve telleri taban içerisine yerleştirip kapağı kullanarak kapatalım.  

 

 

 Kod açıklaması:

// Get Yaw, Pitch and Roll values
#ifdef OUTPUT_READABLE_YAWPITCHROLL
    mpu.dmpGetQuaternion(&q, fifoBuffer);
    mpu.dmpGetGravity(&gravity, &q);
    mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
    // Yaw, Pitch, Roll values - Radians to degrees
    ypr[0] = ypr[0] * 180 / M_PI;
    ypr[1] = ypr[1] * 180 / M_PI;
    ypr[2] = ypr[2] * 180 / M_PI;
    
    // Skip 300 readings (self-calibration process)
    if (j <= 300) {
      correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
      j++;
    }
    // After 300 readings
    else {
      ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract  the last random Yaw value from the currrent value to make the Yaw 0 degrees
      // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
      int servo0Value = map(ypr[0], -90, 90, 0, 180);
      int servo1Value = map(ypr[1], -90, 90, 0, 180);
      int servo2Value = map(ypr[2], -90, 90, 180, 0);
      
      // Control the servos according to the MPU6050 orientation
      servo0.write(servo0Value);
      servo1.write(servo1Value);
      servo2.write(servo2Value);
    }
#endif

 

Kod açıklaması 2:

Değerleri aldıktan sonra, ilk önce radyandan dereceye çevirip düzenleyelim.
// Yaw, Pitch, Roll values - Radians to degrees
    ypr[0] = ypr[0] * 180 / M_PI;
    ypr[1] = ypr[1] * 180 / M_PI;
    ypr[2] = ypr[2] * 180 / M_PI;


Daha sonra bekleyip 300 okuma yaparız, çünkü sensör bu süre zarfında hala kendi kendine kalibrasyon sürecindedir. Ayrıca, başlangıçta Pitch and Roll değerleri gibi "0"(sıfır) olmayan Yaw değerini yakalarız.
// Skip 300 readings (self-calibration process)
    if (j <= 300) {
      correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
      j++;
    }

300 okumadan sonra, yukarıdaki yakalanan rastgele değeri çıkartarak önce Yawdeğerini "0"a ayarlarız. Daha sonra Yaw, Pitch ve Rolldeğerlerini - 90 - +90 derece arasında, servoları sürmek için kullanılan 0 - 180 değerlerine eşleriz.
// After 300 readings
    else {
      ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract  the last random Yaw value from the currrent value to make the Yaw 0 degrees
      // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
      int servo0Value = map(ypr[0], -90, 90, 0, 180);
      int servo1Value = map(ypr[1], -90, 90, 0, 180);
      int servo2Value = map(ypr[2], -90, 90, 180, 0);
      
      // Control the servos according to the MPU6050 orientation
      servo0.write(servo0Value);
      servo1.write(servo1Value);
      servo2.write(servo2Value);
    }

Arduino Gimbal Yapımı Projesi - Sonuç

Sonunda write işlevini kullanarak bu değerleri servolara kontrol sinyali olarak göndeririz. Tabii ki, eğer X ve Y ekseni için sadece dengeleme yapmak istiyorsanız, servoyu devre dışı bırakabilir ve bu platformu Kamera gimbal olarak kullanabilirsiniz. Hareketler pürüzsüz değildir çünkü bu servolar böyle bir amaç için tasarlanmamıştır. Proje amaçlı yapılmıştır. Gerçek hassasiyete sahip bir gimbal için bir kaç bin tl'yi gözden çıkarıp satın alabilirsiniz :) Gerçek kamera gimbal'ları, yumuşak hareketler elde etmek için özel bir fırçasız motor tipi kullanır. Yani, bu projeyi sadece eğitim amaçlı düşünün. Umarım beğenmiş ve yeni bir şeyler öğrenmişsinizdir.  
Etiketler: Arduino Gimbal Yapımı - İlginç Arduino Projeleri
Ekim 24, 2021
Listeye dön
Çerez Uyarısı

Alışveriş deneyiminizi iyileştirmek için yasal düzenlemelere uygun çerezler (cookies) kullanıyoruz. Detaylı bilgiye Gizlilik ve Çerez Politikası
sayfamızdan erişebilirsiniz.