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.
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.
Arduino ile Gimbal Projesi Gerekli Malzemeler
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ı
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.