Hoşgeldin Misafir

Kod Arduino ile Drone Yapımı - Lojistik Tim

bypatnos

DeepWeb
28 Haz 2024
614 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Merhabalar Ben @bypatnos Lojistik grup adına paylaşılan Arduino ile Drone Yapımı makalesinde sizi görmekten mutluk duyarım.

Drone yapma fikri, teknolojiye olan merakım ve havacılığa duyduğum ilgiden doğdu. İlk başta gözümde büyüse de, araştırmalarım ve sabrım sayesinde adım adım ilerleyerek kendi insansız hava aracımı inşa etmeyi başardım. Bu süreçte, temel bileşenlerin nasıl çalıştığını anlamak ve onları bir araya getirmek en kritik adımlardı.

Drone yapımı projesini adım adım kodlarla detaylandırarak açıklayayım. Bu süreçte, Arduino ile temel drone işlevlerini nasıl gerçekleştirebileceğimizi göreceğiz.

Adım 1: Gerekli Malzemeler

  • Arduino Uno veya Nano
  • 4 adet Fırçasız Motor (Brushless motor)
  • 4 adet ESC (Elektronik Hız Kontrol Cihazı)
  • 4 adet Pervane
  • Li-Po batarya (güç kaynağı)
  • MPU6050 Gyro ve İvmeölçer sensörü (denge için)
  • Uzaktan Kumanda ve Alıcı (Drone kontrolü için)
  • Çerçeve (Drone’un fiziksel yapısı)

Adım 2: Elektronik Bağlantıların Yapılması

  • Arduino'yu drone’un gövdesine sabitleyin.
  • ESC’leri fırçasız motorlara bağlayın.
  • Motorlara pervaneleri takın.
  • ESC'leri Arduino’ya şu pinlerle bağlayın:
    • Motor 1: Arduino pin 9
    • Motor 2: Arduino pin 10
    • Motor 3: Arduino pin 11
    • Motor 4: Arduino pin 12
  • MPU6050 Gyro/İvmeölçeri Arduino’ya bağlayın:
    • VCC → 5V
    • GND → GND
    • SCL → A5
    • SDA → A4
g7nwzcy.png

Adım 3: MPU6050 Kütüphanesi Kurulumu

Arduino IDE'yi kullanarak MPU6050 sensörü ile çalışmak için kütüphane eklememiz gerekiyor.

  1. Arduino IDE’yi açın.
  2. SketchInclude LibraryManage Libraries menüsüne gidin.
  3. MPU6050 kütüphanesini aratın ve "MPU6050 by Electronic Cats" kütüphanesini yükleyin.

Adım 4: MPU6050 Sensörünü Test Etme

MPU6050'yi drone’un dengesini sağlamak için kullanacağız. Önce sensörün doğru çalıştığından emin olalım. Sensörün ivme ve jiroskop verilerini okuyan basit bir kod aşağıda verilmiştir:
Kod:
#include <Wire.h>
#include <MPU6050.h>

MPU6050 mpu;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();

  if (mpu.testConnection()) {
    Serial.println("MPU6050 bağlantısı başarılı!");
  } else {
    Serial.println("MPU6050 bağlantısı başarısız!");
  }
}

void loop() {
  int16_t ax, ay, az;
  int16_t gx, gy, gz;

  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  Serial.print("Accel: ");
  Serial.print(ax); Serial.print(", ");
  Serial.print(ay); Serial.print(", ");
  Serial.print(az); Serial.print("\t");

  Serial.print("Gyro: ");
  Serial.print(gx); Serial.print(", ");
  Serial.print(gy); Serial.print(", ");
  Serial.println(gz);

  delay(500);
}
Bu kod, sensörün ivmeölçer ve jiroskop verilerini seri portta gösterecektir.

Adım 5: Motorların Hız Kontrolü (ESC'ler ile)

ESC'leri kontrol etmek için Arduino'nun PWM pinlerini kullanacağız. Bu motorların hızını belirlemek için kullanılır.

Aşağıda, dört motorun hızını ayarlayan bir örnek kod:

Kod:
#include <Servo.h>

Servo motor1, motor2, motor3, motor4;

void setup() {
  motor1.attach(9);  // Motor 1 PWM pini
  motor2.attach(10); // Motor 2 PWM pini
  motor3.attach(11); // Motor 3 PWM pini
  motor4.attach(12); // Motor 4 PWM pini

  // Motorların başlangıç hızını ayarla
  motor1.writeMicroseconds(1000); // Minimum hız
  motor2.writeMicroseconds(1000);
  motor3.writeMicroseconds(1000);
  motor4.writeMicroseconds(1000);

  delay(1000); // ESC'lerin hazır olmasını bekle
}

void loop() {
  int throttle = 1300; // İstenilen motor hızı (1000-2000 arasında)

  // Tüm motorların hızını aynı ayarla
  motor1.writeMicroseconds(throttle);
  motor2.writeMicroseconds(throttle);
  motor3.writeMicroseconds(throttle);
  motor4.writeMicroseconds(throttle);

  delay(10); // Motor hızını belirli aralıklarla güncelle
}
Bu kodda writeMicroseconds fonksiyonu ile motorların hızını kontrol ediyoruz. Hız değeri 1000 ile 2000 arasında olmalıdır; 1000 minimum, 2000 ise maksimum hızdır.

Adım 6: Drone Stabilizasyonu

Drone’un dengeli uçması için jiroskop ve ivmeölçer verilerini kullanarak motor hızlarını ayarlamamız gerekiyor. Aşağıda basit bir PID (Proportional-Integral-Derivative) kontrolör ile drone’un dengesini sağlama işlemi açıklanıyor:
Kod:
#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>

MPU6050 mpu;
Servo motor1, motor2, motor3, motor4;

// PID kontrol değişkenleri
float pid_p = 0.0, pid_i = 0.0, pid_d = 0.0;
float kp = 1.5, ki = 0.5, kd = 0.1;
float previous_error = 0;
float setpoint = 0; // İdeal denge açısı

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();

  motor1.attach(9);
  motor2.attach(10);
  motor3.attach(11);
  motor4.attach(12);

  if (!mpu.testConnection()) {
    Serial.println("MPU6050 bağlantı hatası!");
    while (1);
  }
}

void loop() {
  int16_t ax, ay, az;
  int16_t gx, gy, gz;

  // Sensör verilerini al
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  // Yalın bir açı hesabı (daha gelişmiş hesaplama için düzeltmeler yapılabilir)
  float current_angle = gx / 131.0;

  // PID kontrol hesaplamaları
  float error = setpoint - current_angle;
  pid_p = kp * error;
  pid_i = ki * (pid_i + error);
  pid_d = kd * (error - previous_error);
  previous_error = error;

  // Motor hızlarını PID sonucuna göre ayarla
  float pid_output = pid_p + pid_i + pid_d;

  int throttle_base = 1300; // Sabit gaz
  motor1.writeMicroseconds(throttle_base + pid_output);
  motor2.writeMicroseconds(throttle_base - pid_output);
  motor3.writeMicroseconds(throttle_base + pid_output);
  motor4.writeMicroseconds(throttle_base - pid_output);

  delay(10);
}
Bu kod ile drone’un dengesi sağlanır. PID kontrol mekanizması, jiroskop verilerini kullanarak motor hızlarını ayarlayarak drone'un sabit bir uçuş yapmasını sağlar.

Adım 7: İlk Uçuş Testi

Tüm bu aşamalardan sonra, drone’unuzu uçuşa hazır hale getirdiniz. Bataryayı bağlayın ve uzaktan kumanda ile motorları kontrol etmeye başlayın. İlk başta drone’un dengeli olup olmadığını kontrol edin ve gerekirse PID ayarlarını optimize edin.

Programlama, sensör kullanımı ve motor kontrolü hakkında daha fazla bilgi edinerek drone’unuzu daha da geliştirebilirsiniz!
LOJİSTİK TİM SUNDU

btn1pyf.png
 

erwald

7 Eyl 2025
16 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Merhabalar Ben @bypatnos Lojistik grup adına paylaşılan Arduino ile Drone Yapımı makalesinde sizi görmekten mutluk duyarım.

Drone yapma fikri, teknolojiye olan merakım ve havacılığa duyduğum ilgiden doğdu. İlk başta gözümde büyüse de, araştırmalarım ve sabrım sayesinde adım adım ilerleyerek kendi insansız hava aracımı inşa etmeyi başardım. Bu süreçte, temel bileşenlerin nasıl çalıştığını anlamak ve onları bir araya getirmek en kritik adımlardı.

Drone yapımı projesini adım adım kodlarla detaylandırarak açıklayayım. Bu süreçte, Arduino ile temel drone işlevlerini nasıl gerçekleştirebileceğimizi göreceğiz.

Adım 1: Gerekli Malzemeler

  • Arduino Uno veya Nano
  • 4 adet Fırçasız Motor (Brushless motor)
  • 4 adet ESC (Elektronik Hız Kontrol Cihazı)
  • 4 adet Pervane
  • Li-Po batarya (güç kaynağı)
  • MPU6050 Gyro ve İvmeölçer sensörü (denge için)
  • Uzaktan Kumanda ve Alıcı (Drone kontrolü için)
  • Çerçeve (Drone’un fiziksel yapısı)

Adım 2: Elektronik Bağlantıların Yapılması

  • Arduino'yu drone’un gövdesine sabitleyin.
  • ESC’leri fırçasız motorlara bağlayın.
  • Motorlara pervaneleri takın.
  • ESC'leri Arduino’ya şu pinlerle bağlayın:
    • Motor 1: Arduino pin 9
    • Motor 2: Arduino pin 10
    • Motor 3: Arduino pin 11
    • Motor 4: Arduino pin 12
  • MPU6050 Gyro/İvmeölçeri Arduino’ya bağlayın:
    • VCC → 5V
    • GND → GND
    • SCL → A5
    • SDA → A4
g7nwzcy.png

Adım 3: MPU6050 Kütüphanesi Kurulumu

Arduino IDE'yi kullanarak MPU6050 sensörü ile çalışmak için kütüphane eklememiz gerekiyor.

  1. Arduino IDE’yi açın.
  2. SketchInclude LibraryManage Libraries menüsüne gidin.
  3. MPU6050 kütüphanesini aratın ve "MPU6050 by Electronic Cats" kütüphanesini yükleyin.

Adım 4: MPU6050 Sensörünü Test Etme

MPU6050'yi drone’un dengesini sağlamak için kullanacağız. Önce sensörün doğru çalıştığından emin olalım. Sensörün ivme ve jiroskop verilerini okuyan basit bir kod aşağıda verilmiştir:
Kod:
#include <Wire.h>
#include <MPU6050.h>

MPU6050 mpu;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();

  if (mpu.testConnection()) {
    Serial.println("MPU6050 bağlantısı başarılı!");
  } else {
    Serial.println("MPU6050 bağlantısı başarısız!");
  }
}

void loop() {
  int16_t ax, ay, az;
  int16_t gx, gy, gz;

  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  Serial.print("Accel: ");
  Serial.print(ax); Serial.print(", ");
  Serial.print(ay); Serial.print(", ");
  Serial.print(az); Serial.print("\t");

  Serial.print("Gyro: ");
  Serial.print(gx); Serial.print(", ");
  Serial.print(gy); Serial.print(", ");
  Serial.println(gz);

  delay(500);
}
Bu kod, sensörün ivmeölçer ve jiroskop verilerini seri portta gösterecektir.

Adım 5: Motorların Hız Kontrolü (ESC'ler ile)

ESC'leri kontrol etmek için Arduino'nun PWM pinlerini kullanacağız. Bu motorların hızını belirlemek için kullanılır.

Aşağıda, dört motorun hızını ayarlayan bir örnek kod:

Kod:
#include <Servo.h>

Servo motor1, motor2, motor3, motor4;

void setup() {
  motor1.attach(9);  // Motor 1 PWM pini
  motor2.attach(10); // Motor 2 PWM pini
  motor3.attach(11); // Motor 3 PWM pini
  motor4.attach(12); // Motor 4 PWM pini

  // Motorların başlangıç hızını ayarla
  motor1.writeMicroseconds(1000); // Minimum hız
  motor2.writeMicroseconds(1000);
  motor3.writeMicroseconds(1000);
  motor4.writeMicroseconds(1000);

  delay(1000); // ESC'lerin hazır olmasını bekle
}

void loop() {
  int throttle = 1300; // İstenilen motor hızı (1000-2000 arasında)

  // Tüm motorların hızını aynı ayarla
  motor1.writeMicroseconds(throttle);
  motor2.writeMicroseconds(throttle);
  motor3.writeMicroseconds(throttle);
  motor4.writeMicroseconds(throttle);

  delay(10); // Motor hızını belirli aralıklarla güncelle
}
Bu kodda writeMicroseconds fonksiyonu ile motorların hızını kontrol ediyoruz. Hız değeri 1000 ile 2000 arasında olmalıdır; 1000 minimum, 2000 ise maksimum hızdır.

Adım 6: Drone Stabilizasyonu

Drone’un dengeli uçması için jiroskop ve ivmeölçer verilerini kullanarak motor hızlarını ayarlamamız gerekiyor. Aşağıda basit bir PID (Proportional-Integral-Derivative) kontrolör ile drone’un dengesini sağlama işlemi açıklanıyor:
Kod:
#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>

MPU6050 mpu;
Servo motor1, motor2, motor3, motor4;

// PID kontrol değişkenleri
float pid_p = 0.0, pid_i = 0.0, pid_d = 0.0;
float kp = 1.5, ki = 0.5, kd = 0.1;
float previous_error = 0;
float setpoint = 0; // İdeal denge açısı

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();

  motor1.attach(9);
  motor2.attach(10);
  motor3.attach(11);
  motor4.attach(12);

  if (!mpu.testConnection()) {
    Serial.println("MPU6050 bağlantı hatası!");
    while (1);
  }
}

void loop() {
  int16_t ax, ay, az;
  int16_t gx, gy, gz;

  // Sensör verilerini al
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  // Yalın bir açı hesabı (daha gelişmiş hesaplama için düzeltmeler yapılabilir)
  float current_angle = gx / 131.0;

  // PID kontrol hesaplamaları
  float error = setpoint - current_angle;
  pid_p = kp * error;
  pid_i = ki * (pid_i + error);
  pid_d = kd * (error - previous_error);
  previous_error = error;

  // Motor hızlarını PID sonucuna göre ayarla
  float pid_output = pid_p + pid_i + pid_d;

  int throttle_base = 1300; // Sabit gaz
  motor1.writeMicroseconds(throttle_base + pid_output);
  motor2.writeMicroseconds(throttle_base - pid_output);
  motor3.writeMicroseconds(throttle_base + pid_output);
  motor4.writeMicroseconds(throttle_base - pid_output);

  delay(10);
}
Bu kod ile drone’un dengesi sağlanır. PID kontrol mekanizması, jiroskop verilerini kullanarak motor hızlarını ayarlayarak drone'un sabit bir uçuş yapmasını sağlar.

Adım 7: İlk Uçuş Testi

Tüm bu aşamalardan sonra, drone’unuzu uçuşa hazır hale getirdiniz. Bataryayı bağlayın ve uzaktan kumanda ile motorları kontrol etmeye başlayın. İlk başta drone’un dengeli olup olmadığını kontrol edin ve gerekirse PID ayarlarını optimize edin.

Programlama, sensör kullanımı ve motor kontrolü hakkında daha fazla bilgi edinerek drone’unuzu daha da geliştirebilirsiniz!
LOJİSTİK TİM SUNDU

btn1pyf.png
teşekkür ederim hocam gayet detaylı olmuş eline sağlık.
 

THS-AI

THS-AI

THS YAPAY ZEKA
Turkhacks Kurumsal
20 Haz 2025
11,255 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Arduino ile drone yaparken, motor ve ESC uyumuna dikkat et. Ayrıca, stabilite için sensörleri (İvmeölçer, jiroskop) kullan. Güç kaynağını sağlam ve güvenli seç; deneme-yanılma ile ayar yapmayı unutma.