back to top

Arduino Gimbal Yapımı

Merhaba, bu projede Arduino kullanarak bir gimbal yapacağız. Elektronik gimballar, kamera veya diğer cihazların sabit bir şekilde tutulmasını ve titreşimlerin veya sarsıntıların azaltılmasını sağlayan harika cihazlardır. Bunlar profesyonel video çekimlerinden hobi projelerine kadar birçok farklı uygulamada kullanılırlar. İyi haber şu ki, kendi ev yapımı gimbalınızı oluşturmak sandığınızdan daha kolaydır.

Arduino ile Gimbal Yapımı
Arduino ile Gimbal Yapımı

Elektronik gimbal yapımı için bazı kütüphanelere ihtiyacınız olacak. Biz bu projede Wire.h, MPU6050.h ve Servo.h kütüphanelerini kullanacağız. Wire.h kütüphanesi, I2C haberleşme yöntemiyle donanımsal olarak senkron seri haberleşme sağlayan kütüphanedir. Bu kütüphane ile bir clock hattı ve bir veri hattı kullanılarak 2 ya da daha fazla cihaz ile donanımsal senkron seri haberleşme sağlanabilir. MPU6050, üç eksenli ivmeölçer ve üç eksenli jiroskop verilerini hesaplayan altı eksenli hareket takip cihazıdır. MPU6050’yi kullanmak için MPU6050.h kütüphanesine ihtiyaç duyacağız. Servo.h kütüphanesi ise bir Arduino’nun servo motorları kontrol etmesine izin verir.

Arduino ile Gimbal Nasıl Çalışır?

MPU6050 sensöründen alınan ivme (ax, ay, az) ve jiroskop (gx, gy, gz) verileri okunur. Bu veriler, cihazın hareketini ve rotasyonunu temsil eder. Verilerin geçerliliği kontrol edilir. Eğer herhangi bir veri hatalı ise, sensör verileri okunamıyor demektir. Bu durumda bir hata mesajı yazdırılır ve 10 milisaniye beklenir. İvme verileri normalleştirilir. Bu, her bir eksen için -1 ile 1 arasında değerler elde etmenizi sağlar. Hesaplanan ivme verileri kullanılarak X, Y ve Z eksenlerindeki açılar hesaplanır. Bu açılar, cihazın eğimini temsil eder. X eksenindeki motor sağa ve sola, Y eksenindeki motor yukarı ve aşağı, Z eksenindeki motor cihazın kendi etrafında hareket etmesini sağlar. Hesaplanan açılara göre servo motorlarının pozisyonları belirlenir ve bu pozisyonlara hareket ettirilir. Hesaplanan açı değerleri ve servo motor hareketleri 10 milisaniyede bir güncellenir. Hadi şimdi evde gimbal yapımı için gerekli malzemelere göz atalım.

.pico-a a{ color:white !important; }

Arduino ile Gimbal Yapımı Kodları

#include <Wire.h> //I2C haberleşme için gerekli
#include <MPU6050.h> //ivmeölçerden veri okumak için gerekli kütüphane
#include <Servo.h> //servo hareketleri için gerekli kütüphane

MPU6050 mpu;
Servo servoX;
Servo servoY;
Servo servoZ;
//sensörü ve servo motorları isimlendirme

int angleOffset = 90;
float targetAngle = 0.0;
float Kp = 2.0;
//motor kalibrasyonu, hedef açı değişkenlerini tanımlama

void setup() {

  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();
  //seri haberleşmeyi, i2c haberleşmesini ve mpu6050 sensörünü başlatma
  
  servoX.attach(9);  // X eksenine bağlı servo
  servoY.attach(10); // Y eksenine bağlı servo
  servoZ.attach(11); // Z eksenine bağlı servo
  //servo pinlerini tanımlama
}

void loop() {

  int16_t ax, ay, az, gx, gy, gz;
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  //16 bitlik ivme ve jiroskop verilerini okuma

  if (isnan(ax) || isnan(ay) || isnan(az) || isnan(gx) || isnan(gy) || isnan(gz)) {
    Serial.println("Sensör verileri okunamıyor!");
    delay(1000);
    return;
  }
  //okunamayan değerlerin kontrolü ve hata mesajı yazdırma

  float accX = ax / 16384.0;
  float accY = ay / 16384.0;
  float roll = atan2(-ay, az) * RAD_TO_DEG;
  
  float angleX = atan2(accX, sqrt(1 - accX * accX)) * 180.0 / PI;
  float angleY = atan2(accY, sqrt(1 - accY * accY)) * 180.0 / PI;
  float error = targetAngle - roll;
  float correction = Kp * error;
  //sensör verilerinin normalleştirilmesi ve eksenlerdeki açıların hesaplanması

  angleX = constrain(angleX, -90, 90);
  angleY = constrain(angleY, -90, 90);
  
  int servoPositionX = map(angleX, -90, 90, 0, 180);
  int servoPositionY = map(angleY, -90, 90, 0, 180);
  int servoPositionZ = static_cast<int>(angleOffset - roll - correction);
 
  servoX.write(servoPositionX);
  servoY.write(servoPositionY);
  servoZ.write(servoPositionZ);
  //Açıların belirli aralıklara sınırlandırılması ve motorların hedef açılara hareketi

  // Serial Monitor'da göster
  Serial.print("Açı (X): "); Serial.print(angleX);
  Serial.print(" | Açı (Y): "); Serial.print(angleY);
  Serial.print(" | Açı (Z): "); Serial.print(roll);
  Serial.print(" | Servo X Pozisyonu: "); Serial.print(servoPositionX);
  Serial.print(" | Servo Y Pozisyonu: "); Serial.println(servoPositionY);
  Serial.print(" | Servo Y Pozisyonu: "); Serial.println(servoPositionZ);

  delay(50); // 50 milisaniyede bir güncelleme
}

Gimbal Devre Şeması

Gimbal Devre Şeması

Arduino ile Gimbal projesinin sağlıklı bir şekilde çalışabilmesi için servo motorları 3B yazıcıdan aldığımız baskılara doğru bir şekilde yerleştirmeye dikkat etmek faydalı olacaktır.

STL Dosyaları

Arduino ile Gimbal projesi STL dosyalarını indirmek için tıklayın!

Arduino Gimbal Yapımı Proje Videosu

Gimballar, kameraların ve diğer görüntü veya algılama cihazlarının titremesini ve sarsılmasını en aza indirerek son derece istikrarlı ve profesyonel görüntüler ve videolar yakalamak için kullanılan harika araçlardır. Ayrıca, gimbalların endüstriyel drone’lar, deniz araştırmaları, hava çekimleri, sanal gerçeklik uygulamaları ve daha birçok alanda kullanıldığını görmekteyiz. Bu nedenle gimballar, görsel kalitenin ve hassas algılamanın önemli olduğu bir dizi uygulama için vazgeçilmez bir araçtır. Gimballar, titreme ve sarsıntıyı en aza indirerek daha pürüzsüz ve profesyonel sonuçlar elde etmek isteyen herkes için değerli bir üründür.

Hemen sizde Arduino, MG996R Servo Motor, Orta Boy Breadboard, MPU6050, 9V Pil Yuvası, 9V Pil ve Jumper Kablo kullanarak Arduino ile Gimbal yapabilirsiniz. 

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz