#62 Arduino MPU6050 İle Servo Motor Kontrolü
Merhabalar, bu yazımızda Arduino MPU6050 İle Servo Motor Kontrolü hakkında bilgi vereceğim. Arduino’ da MPU6050 ivme ve gyro modülü kullanarak iki adet servo motoru nasıl kontrol edebiliriz? konusunu işleyeceğiz. Bu projeyi robot kol kontrolü, kamera gimbal sistemleri, eğimle yönlenen cihazlar, oyun kumandası veya simülasyon sistemlerinde kullanabilirsiniz.
Devre bağlantı şeması, Arduino programı ayrıntılı kod kısmı, devre kurulumu detaylı anlatımı ve devre çalışma videosu şu şekildedir.
Arduino’ da kullanabileceğimiz üç eksenli ivmeölçer + üç eksenli jiroskop, toplamda 6 eksenli ivme ve gyro modülü özellikleri nelerdir? Hangi pinler kullanılır? Kullanıldığı alanlar nelerdir? Örnek Arduino çalıştırma kodu nedir? MPU6050 devreye nasıl bağlanır? gibi konularda bilgi almak için bir önceki yazımıza aşağıdaki linkten bakabilirsiniz.
https://egitim.ahmetcandemir.com.tr/mpu6050-ivme-ve-gyro-sensoru-nedir-nasil-calisir/
ARDUINO MPU6050 İLE SERVO MOTOR KONTROLÜ
DEVRE BAĞLANTI ŞEMASI:
DEVRE KURULUMU:
Malzemeler:
Arduino Uno
Deney Tahtası (Breadboard)
1 adet ivme ve gyro modülü (MPU6050)
2 adet SG90 Servo Motor
12 adet iki ucu erkek jumper kablo
MPU6050 modülü, deney tahtası (breadboard) üzerine yerleştirilir. Modülün VCC pini, deney tahtası alt kısımdaki + şeride bağlanır. Modülün GND pini, deney tahtası alt kısımdaki – şeride bağlanır. Modülün SCL pini, Arduino’nun SCL pinine bağlanır. Modülün SDA pini, Arduino’nun SDA pinine bağlanır.
1. servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu deney tahtası üzerindeki + şeride bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak, kablonun diğer ucu deney tahtası üzerindeki – şeride bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak, kablonun diğer ucu Arduino’nun 10 numaralı PWM dijital pinine bağlanır.
2. servo motorun kırmızı uç çıkışına (+) jumper kablo bağlanarak kablonun diğer ucu deney tahtası üzerindeki + şeride bağlanır. Servo motorun kahverengi uç çıkışına (-) jumper kablo bağlanarak, kablonun diğer ucu deney tahtası üzerindeki – şeride bağlanır. Servo motorun turuncu uç çıkışına (data) jumper kablo bağlanarak, kablonun diğer ucu Arduino’nun 11 numaralı PWM dijital pinine bağlanır.
Deney tahtası + şeridine kablo bağlanarak kablonun diğer ucu, Arduino +5V pinine bağlanır. Deney tahtası – şeridine kablo bağlanarak kablonun diğer ucu, Arduino GND pinine bağlanır ve devre tamamlanır.
KOD BÖLÜMÜ:
NOT: Kod bölümü içerisinde yer alan ve // işareti ile başlayan satırlar açıklama satırlarıdır. O satırda, kod bloğunun ne anlama geldiği ve nasıl çalıştığı ile ilgili bilgi verir. Arduino // işaretli alanı çalıştırmaz. İsterseniz kod satırından // işaret ile başlayan açıklama satırlarını silebilirsiniz.
//MPU6050 İki Servo Motor Kontrolü
#include <Wire.h> // I2C haberleşme için gerekli kütüphane
#include <MPU6050.h> // MPU6050 sensör kütüphanesi
#include <Servo.h> // Servo motor kütüphanesi
MPU6050 sensor; // MPU6050 sensörüne sensor ismini verdik
Servo Xservo; // X ekseni için servoya isim verdik
Servo Yservo; // Y ekseni için servoya isim verdik
void setup() {
Serial.begin(9600); // Seri haberleşmeyi başlat
Wire.begin(); // I2C haberleşmesini başlat
sensor.initialize(); // MPU6050 sensörünü başlattık
Xservo.attach(10); // X servo motor dijital pin 10'a bağlı
Yservo.attach(11); // Y servo motor dijital pin 11'a bağlı
if (sensor.testConnection()) { // Eğer bağlantı var ise
Serial.println("MPU6050 bağlantısı başarılı!");
} else {
Serial.println("MPU6050 bağlantı hatası!");
while (1); // Bağlantı yoksa döngüyü durdur
}
}
void loop() {
int16_t ax, ay, az; // X, Y, Z eksenlerindeki ivme değerleri
sensor.getAcceleration(&ax, &ay, &az); // Ham ivme verilerini oku
// Seri monitöre ham verileri yazdır
Serial.print("ivmeX: "); Serial.print(ax);
Serial.print(" | ivmeY: "); Serial.print(ay);
Serial.print(" | ivmeZ: "); Serial.println(az); //3. servoda kullanılabilir.
// İvme değerlerini servo açılarına dönüştür (map)
// 17000 değerini sensörü döndürme derecesine göre azaltabilirsiniz. Örneğin -8000, 8000 gibi
int servoPosX = map(ax, -8000, 8000, 0, 180);
int servoPosY = map(ay, -8000, 8000, 0, 180);
// Açıları 0–180 arasında sınırla - constrain komutu ile- servo zarar görmesin diye
servoPosX = constrain(servoPosX, 0, 180);
servoPosY = constrain(servoPosY, 0, 180);
// Servo motorları döndür
Xservo.write(servoPosX);
Yservo.write(servoPosY);
delay(100); // 100 ms bekle
}
MPU6050 Kütüphanesi ni sitemizdeki Dosyalar sayfasında bulabilirsiniz. Dosyalar sayfasına üstteki menüden ya da direk aşağıdaki linke tıklayarak gidebilirsiniz. Wire.h ve Servo.h kütüphanesi Arduino içerisinde yüklü gelmektedir.
https://egitim.ahmetcandemir.com.tr/download-category/arduino-kutuphaneleri/
DEVRENİN ÇALIŞMASI:
MPU6050 İvme ve Gyro modülünü deney tahtası üzerinde aşağı yukarı hareket ettirdiğimizde servo motorun bir tanesi sağa veya sola hareket edecektir. Deney tahtasını öne arkaya hareket ettirdiğimizde ise diğer servo motor sağa veya sola doğru hareket edecektir. Böylece harekete duyarlı olarak servo motorları çalıştırmış oluruz.
Arduino MPU6050 İle Servo Motor Kontrolü
Devre hakkında yorumlarınızı aşağıdaki yorum kısmına yazabilirsiniz. Youtube kanalımızda da mBlock ve Arduino ile ilgili ders videoları bulabileceksiniz. Youtube kanalıma abone olmayı da unutmayınız.
https://www.youtube.com/@candemirahmet
Yorum Yap