PİNPON TOPUNU PID KONTROL İLE DENGEDE TUTMA
Merhaba arkadaşlar bugün size Pinpon topunu Pıd kontrol yöntemi dengede tutmaya çalışacağız.
MALZEMELER
- Arduino Uno
- Ultrasonik Mesafe Sensörü(HC SR04)
- Servo Motor
- Jumper Kablo
- Board
Elektronik Kısım
Alttaki devrede Güç kaynağından enerji sağlamış ve HC SR04 sensör kullanmamış . Biz Arduinodan 5Voltluk enerji sağlıyacağız ve Sensördeki Trig girişi Arduinoda D6'ya takıcaz Echo girişi ise D7'ye takacağız.

SERVO MOTOR BAĞLANTILARI
Sinyal pin - Dijital Pin
VCC - 5V
GND - GND
MEKANİK KISIM

ARDUİNO KODLARI
#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;#define trigPin 6#define echoPin 7void setup() {Serial.begin(9600);myServo.attach(servoPin);Input = readPosition();myPID.SetMode(AUTOMATIC);myPID.SetOutputLimits(-80,80); // -80 ile 80 derece arasıpinMode(trigPin, OUTPUT);pinMode(echoPin, INPUT);}void loop(){Setpoint = 15; // Denge NoktasıInput = readPosition();myPID.Compute();ServoOutput=102+Output;myServo.write(ServoOutput);}float readPosition() {delay(40);long duration, cm;unsigned long now = millis();digitalWrite(trigPin, LOW);delayMicroseconds(2);digitalWrite(trigPin, HIGH);delayMicroseconds(10);digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH);cm = (duration/2) / 29.1;if(cm > 30) // 30 cm top için maksimum pozisyon{cm=30;}Serial.println(cm);return cm; //Mesafe değerini döndürür.}KAYNAK:robimek.com





