Arduino-PID Library Kurulumu ve Kullanımı - Turkish Tutorial
This is a Turkish tutorial of an open source Arduino library, which is meant for turning your Arduino to a “Proportional Integral Derivative” aka. a PID controller. I will show you how to install the library to Arduino Ide and make an example project with the library, throughout this tutorial while giving information about proportional integral derivative controllers.
Merhaba, bu yazıda Arduino mikrokontrolörünüze “Proportional Integral Derivative” yani kısaca PID kontrolör olma özelliği ekleyen, açık kaynak bir PID kütüphanesinden bahsedeceğim. Yazı boyunca proportional integral derivative’in (Türkçeye oransal, integral ve türevsel olarak çevrilir) kısa bir özetini, bu PID kütüphanesinin kurulumunu ve röle ve ısıtıcı ile yapacağımız örnek bir proje kodlarını görebilirsiniz.
Endüstriyel bir PID kontrolör.
Proportional Integral Derivative (PID) Kontrol Nedir
Proportional Integral Derivative kısa adıyla PID, bir kontrol biçimidir. PID kontrolörler P (Proportional), I (Integral) ve D (Derivative) adı verilen üç parametreden oluşurlar. Derivative parametresi bir olayda meydana gelen değişim miktarını belirtir. Örneğin kapalı bir ortamdaki sıcaklık veya basınç değişim miktarı, topraktaki nem oranının değişim miktarı gibi. Integral parametresi belirlenen bir zaman dilimindeki tüm sinyallerin toplamıdır (Calculus derslerindeki integral tanımını hatırlayanlar bunu zaten biliyorlardır diye tahmin ediyorum). Proportional parametresi ise proportional kontrolü ifade eder ve oransal kazanca göre hatayı elimine etmeyi amaçlar(Teorik olarak hata asla tam olarak elimine edilemez, fakat sıfıra yeteri kadar yakınsanırsa pratikte hatasız hale gelebilir).
PID kontrolörler bir çıkıştan geri gelen feedback (geribesleme) sinyali ile giriş (input veya reference) sinyalini karşılaştırarak hata oranını bulur. Daha sonra, bu hatayı belirli bir katsayı ile çarpıp, türevini ve integralini alır. Oluşan sonuç çıkışa (output) gönderilir ve oluşan hata bu döngü ile minimuma indirilmeye çalışılır. Aşağıdaki fonksiyondan görülebileceği üzere, bu hatanın minimize edilmesi adına gerekli olan en önemli şey “Kp”, “Kd” ve “Ki” değerlerinin optimal değerlerde olmasıdır. Bu değerler kontrol teorisinde kullanılan çeşitli yöntemlerle belirlenebilir veya deneme yanılma yolu ile en uygun değer saptanabilir.
PID kontrolörün transfer fonksiyonu.
PID kontrolör olarak Arduino kullanan bir tank ısıtma projesi.
** PID Kütüphanesinin Arduino IDE’sine Kurulumu **
1.https://github.com/br3ttb/Arduino-PID-Library adresinden kütüphaneyi indirin.
2. Arduino programını açıp sırasıyla Sketch->Include Library->Add .ZIP Library seçeneklerini seçin.
3. Arduino-PID-Library-master.zip dosyasını seçin ve Open'a tıklayın.
** PID Kütüphanesinin Kullanımı **
Arduino-PID-Library kütüphanesinin kullanımını basit bir örnek ile adım adım göstereceğim. Bu örnek projemizde hayali bir rezistans ısıtıcı yardımıyla su dolu kapalı bir kaptaki suyu sabit bir sıcaklıkta tutmaya çalışan bir senaryoyu gerçekleştireceğiz. Bu işlem için Arduino mikrokontrolörümüzü PID kontrolöre çevirip, bir röle yardımıyla ısıtıcıyı açıp kapayarak suyun istenilen derecede kalmasını sağlayacağız. Kütüphanenin temellerini öğrendikten sonra başka projelerde kullanırsanız lütfen yorumlarda belirtin.
Örnek projemizde kullanacağımız "SSR" röle.
1. Yeni bir sketch açın ve "PID_Deneme" olarak kaydedin.
2. Öncelikle kütüphanemizi sketch’imize eklemek için, kodun en başına, #include <PID_v1.h> yazın.
3. Kütüphaneyi ekledikten sonra Arduino’da kullanacağınız pinleri belirleyen kodu yazın. Giriş pini olarak 0, çıkış yani röle pini olarak 6 numaralı pinleri atayın.
4. Pinleri atadıktan sonra değişkenleri tanımlamak gerekir. Setpoint, Input ve Output adında üç değişken tanımlayın. Daha sonra PID kontrol ayar parametrelerimiz olan “Kp”, “Ki” ve “Kd” parametrelerini belirleyin. Bu parametrelere belirli değerler atamanız gerekmektedir. Bu örnek için aşağıdaki resimdeki değerleri atayabilirsiniz. Değişik projeler için daha farklı değerler atamanız gerekmektedir. Kontrol teorisi hakkında bilgi sahibi iseniz bu değerleri hesaplayarak bulabilirsiniz, aksi takdirde deneme yanılma yoluyla da gidebilirsiniz.
5. PID kontrol fonksiyonunu ekleyin ve röleyi açıp kapayacak olan pulse’ımız için değişkenleri atayıp, ilk değişkene 1000 (ms) değerini yazın. Daha açıklayıcı olmak gerekirse, röleyi açık veya kapalı duruma getirmek için Arduino’dan dijital bir sinyal çıkması gerekmektedir. Bu sinyal belirli bir değerin üzerine çıkarsa röle açılır veya kapanır(kontaklanır).
6. void setup() fonksiyonunun içine aşağıdaki kodu ekleyin. Fonksiyonun içindeki ilk satır kod, 9600 baud rate’de analog iletişimi başlatır. İkinci satırda değişken atadıktan sonra üçüncü satırda senaryodaki suyun erişmesini arzuladığınız sıcaklığı belirtir. Alttaki resimde bu değer 90 olarak gösterilmiştir, istediğiniz değeri atayabilirsiniz.
7. void loop() fonksiyonunun içine aşağıdaki kodu ekleyin. Aşağıdaki kod iki if bir else koşulu kullanarak PID kontrolörümüzün röleyi açık kontak veya kapalı kontak durumuna getirme durumunu gerçekleştirir.
Bu yazımda Arduino mikrokontrolörü için "br3ttb" adlı GitHub kullanıcısı tarafından yazılmış "Arduino-PID-Library" kütüphanesinin kurulumu, PID kontrolörler hakkında bir giriş yaparak ve röle içeren basit bir su ısıtıcısı örneği yaparak kütüphanenin kullanımını gösterdim. Umuyorum ki vermiş olduğum bilgileri beğenirsiniz, okuduğunuz için teşekkürler. Başka yazılarda görüşmek dileğiyle.
Kütüphane hakkında daha fazla bilgi ve kaynak için aşağıdaki linki kullanabilirsiniz.
GitHub: https://github.com/br3ttb/Arduino-PID-Library
Örnek projenin kaynak kodu:
#include <PID_v1.h>
#define input_pin 0 // Kullanacağımız pinleri belirliyoruz.
#define role_pin 6
int Setpoint, Input, Output; // Değişkenleri tanımlıyoruz.
double Kp=1, Ki=5, Kd=1; // Ayar parametrelerimizi tanımlayıp belirliyoruz.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
int WindowSize = 1000; // Pulse için belirlediğimiz maksimum süre.
unsigned long windowStartTime;
void setup()
{
Serial.begin(9600);
windowStartTime = millis(); // Değişkenlerimizi atıyoruz, analog iletişimi başlatıyoruz.
Setpoint = 90; // Suyun gelmesini istediğimiz sıcaklık değeri.
myPID.SetOutputLimits(0, WindowSize); // PWM işleminin gerçekleşme süre aralığını belirliyoruz.
myPID.SetMode(AUTOMATIC); // PID kontrolörümüzü açıyoruz.
}
void loop()
{
Input = analogRead(input_pin); // PID kontrolörümüze göre rölenin açık duruma geçmesi
myPID.Compute(); // veya kapalı duruma geçmesini sağlayan kod.
if (millis() - windowStartTime > WindowSize)
{
windowStartTime += WindowSize;
}
if (Output < millis() - windowStartTime) digitalWrite(role_pin, HIGH);
else digitalWrite(role_pin, LOW);
}
Posted on Utopian.io - Rewarding Open Source Contributors
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
If you want support for your content visit @raise-me-up to check how.
Hey @drencolha I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x