Arduino İle Top Dengeleme Robotu Yapımı
Projemizde, PID kontrol ile topu denge noktasında tutan iki eksenli top dengeleme mekanizma yapımını paylaşacağım.Top dengeleme sisteminde kullanılan yöntem , topun mesafesini ölçerek dengede tutmak.Bu projemizin dengeleme sistemi için topun mesafesini ölçerek PID algoritmasında belirlediğimiz noktada sabitlenmesini sağlayacak bir algoritma geliştireceğiz.Ayrıca matlab üzerinden de topun mesafesini anlık olarak görülebilir.Top dengeleme projemize başlayalım.
Malzemeler
Normalde , Ping Ultrasonik Sensör kullanılır fakat fiyatı çok olduğu için(169 tl den başlayan fiyatlar) çok farkı olmayan hc sr04 kullandık.
Devre Şeması
Bordun + ve - ucunu Ardiuno nun 5V ve GND uçlarına bağlayarak besleme işlemini yapıyoruz.
Mekanik Şema
Ölçülere birebir yapmak fayda var.Eğer kendi ölçülerinize göre yapmak istiyorsanız kodlarda biraz değişiklik yapmak zorundasınız.
Ardiuno Kodları
- #include<Servo.h>
- #include<PID_v1.h>
- const int servoPin = 9;
- float Kp = 2.5;// İlk Oransal Kazanç
- float Ki = 0; // İlk İntegral Kazancı
- float Kd = 1.1; //İlk Türev Kazancı
- double Setpoint, Input, Output, ServoOutput;
- PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
- Servo myServo;
- void setup() {
- Serial.begin(9600);
- myServo.attach(servoPin);
- Input = readPosition();
- myPID.SetMode(AUTOMATIC);
- myPID.SetOutputLimits(-80,80); // -80 ile 80 derece arası
- }
- void loop()
- {
- Setpoint = 15; // Denge Noktası
- Input = readPosition();
- myPID.Compute();
- ServoOutput=102+Output;
- myServo.write(ServoOutput);
- }
- float readPosition() {
- delay(40);
- const int pingPin = 7;
- long duration, cm;
- unsigned long now = millis();
- pinMode(pingPin, OUTPUT);
- digitalWrite(pingPin, LOW);
- delayMicroseconds(2);
- digitalWrite(pingPin, HIGH);
- delayMicroseconds(5);
- digitalWrite(pingPin, LOW);
- pinMode(pingPin, INPUT);
- duration = pulseIn(pingPin, HIGH);
- cm = duration/(29*2);
- if(cm > 30) // 30 cm top için maksimum pozisyon
- {cm=30;}
- Serial.println(cm);
- return cm; //Mesafe değerini döndürür.
- }
Arduino yazılım kısmında Setpoint tanımlaması topun duracağı noktadır.Bu noktanın değerini değiştirerek topun istediğimiz noktada kalmasını sağlayacağız.
Not: Topun hareket ettiği düzlemin yatay olabilmesi için, servo motor açısı 102 derece olmalıdır.
Kendi tasarladığım mekanizmadan ufak bir video;
projeyi matlab ile mi yaptınız
YanıtlaSil