This is a Turkish tutorial of how to make a Arduino pH meter which shows the pH value of various solutions using a Gravity Analog pH sensor. Throughout this tutorial I will give vital information about Gravity Analog pH sensor and how to use them while also giving information about what are pH meters and how do they work.
Merhaba, bu yazıda size Arduino’muzla Gravity Analog pH sensörü kullanarak, çeşitli çözeltilerin pH’ını ölçebileceğiniz bir pH metre projesi yapmayı anlatacağım. Önceki yazılarımdaki bilgilerden de yararlanabileceğiniz bu projeyi gerçekleştirirken, kullanacağımız Gravity Analog pH sensörü hakkında bilgi verip bu sensörün Arduino bağlantısının nasıl yapılacağını, nasıl kullanılacağını ve pH metrelerin nasıl çalıştığını anlatacağım.
Arduino ile gerçekleştirilmiş bir pH metre.
pH Metre Nedir ve Nasıl Çalışır?
pH Metre bir çözeltinin pH değerini ölçmeye yarayan alete denir. 1934 yılında Amerikalı kimyager Arnold Beckman tarafından icat edilmiştir. pH Metreler iki elektrot ve bir analog veya dijital göstergeden oluşurlar.
Arnold Beckman ve ilk pH metre.
Elektrotlar çözeltiye batırılarak, batırılan sıvının iletkenliğini ölçer ve oluşan gerilim farkını pH değerine çevirir. pH Metrelerdeki iki elektrottan ilki yani algılama (cam) elektrodu çözeltideki hidrojen iyon aktivitesine logaritmik oranlı olarak gerilim üretir. İkinci elektrot ise referans elektrotudur ve sabit gerilim üretir.
pH Metre elektrotları.
Gravity Analog pH Sensörü Hakkında Bilgi ve Kütüphane Kurulumu
Bu projede kullanacağımız analog pH sensörü, Gravity konektörü sayesinde Arduino’ya bağlanır. 25 derece ortam sıcaklığında +-0.1 pH hata payına sahip bu analog sensörü kullanırken, sıvıyla temas süresini uzun tutmadığınız sürece düzgün çalışacaktır. Sensör açık olduğunu üzerindeki LED’in yanıp yanmamasından anlayabilirsiniz.
Gravity analog pH sensörünün özellikleri:
*Çalışma Gerilimi : 5V
*Boyutları : 42x32mm
*pH Ölçüm Aralığı :0 - 14PH
*Ölçüm Yapabildiği Sıcaklık Aralığı: 0 - 60 ℃
*Hata Payı : ± 0.1pH (25 ℃)
*Tepki Süresi : ≤ 1 dk
Gravity analog pH sensörü.
Analog pH sensörü kütüphanesinin Arduino IDE’sine yüklenme adımları aşağıdaki gibidir.
1. https://github.com/frdteknikelektro/AnalogPHMeter 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. AnalogPHMeter-develop.zip dosyasını seçin ve Open'a tıklayın.
Kodlar ve Detaylı Anlatımı
Analog pH sensörünü Arduino'nuza bağlayın. Gravity analog pH sensörünün Arduino'ya bağlantı şeması aşağıda verilmiştir.
1. Boş bir Arduino sketch’i açın ve “Ctrl+S” kısayolunu kullanarak, “pH_Metre” olarak kaydedin.
2. Kullanacağınız pH metrenin kütüphanesini kodun en başına #include <AnalogPHMeter.h> yazarak ekleyin.
3. Kütüphaneyi ekledikten sonra 4 değişken tanımlayın.Bu değişkenler pH metrenin Arduino'ya Analog 1 pininden bağlanmasını, ortalama işlemi için kaç adet örnekleme alınacağını, kaç saniyede bir ölçülen değerin ekrana yansıtılacağını ve kaç kere ölçüm alınacağını belirtirler.
4. Ardından sensörden aldığımız verileri saklayacak bir array oluşturun ve bu arrayi 0’ıncı indexten başlatın.
5. void setup() fonksiyonunun içine, 9600 baud hızında seri haberleşmeyi başlatacak komutu yazın.
6. Ekrana yansıtacağımız pH ölçümün hata payını (olası gürültüyü düşürmek, bağlantı kaynaklı yanlış ölçümleri elimine etmek) düşürmek adına 2 saniye içinde 20 ölçüm alıp, bu ölçümlerin ortalamasını ekrana yansıtacak fonksiyonu oluşturun. Bu fonksiyonu oluşturmadığınız takdirde pH metre yine çalışacaktır, fakat ölçümlerin sağlıklı olmama ihtimali yükselir.
Oluşturduğunuz fonksiyonun içine aşağıdaki if koşullarını ekleyin. If koşullarının sonuna bulunacak olan ortalama değer yani “ort” değişkenine dönecek şekilde komut ekleyin.
7. void loop() fonksiyonunun içine, zaman tanımlarını yapın. Zaman tanımlarını mikrokontrolörünüzün saati gibi düşünebilirsiniz. Ölçüm için pH ve gerilim değişkenlerini atayın.
8. Son olarak iki adet if koşulu oluşturun. İlk if koşuluna pH değeri ölçümünü yapacak komutları ekleyin. Bu komutlarda önce analog olarak veri (gerilim) okunur, ardından okunan veri matematiksel işlemler sonucu pH değerine çevrilir. İkinci if koşulunun içine her iki saniyede bir okunan ve ortalaması alınarak doğruluğu arttırılan pH değerini ekrana yansıtacak kodu yazın.
9.Önce “Verify”, sonra “Upload” butonlarına basarak, kodunuzu compile edip, Arduino’nuza yükleyin.
Bu yazımda Arduino mikrokontrolörünü kullanarak ve eski yazılarımdaki bilgilerden öğrendiklerimizi kullanarak çeşitli çözeltilerin pH değerini ölçerek pH değerlerini ekrana yansıtan bir pH metre projesi yaptık. Umuyorum ki vermiş olduğum bilgileri ve projeyi beğenirsiniz, okuduğunuz için teşekkürler. Başka yazılarda görüşmek dileğiyle.
GitHub: https://github.com/arduino/arduino
Kodun tamamı:
#include <AnalogPHMeter.h>
#define SensorPin A1 // pH metrenin Arduino'ya Analog 1 pininden bağlanmasını sağlar.
#define orneklemeAraligi 20 // Ortalama işlemi için kaç adet örnekleme alınacağı.
#define printAraligi 2000 // Kaç saniyede bir ölçülen değerin ekrana yansıtılacağı.
#define arrayUzunlugu 40 // Kaç kere ölçüm alınacağını belirtir.
int pHArray[arrayUzunlugu]; // Sensörden alınan verileri saklayan array.
int pHArrayIndex=0; // Arrayin başladığı index.
void setup()
{
Serial.begin(9600); // 9600 baud rate'de seri haberleşmeyi başlatır.
}
void loop()
{
unsigned long orneklemeZaman = millis(); // Zaman tanımları.
unsigned long printZaman = millis();
float pH_degeri; // Ölçüm değeri için pH ve gerilim değişkenleri.
float gerilim;
if(millis()-orneklemeZaman > orneklemeAraligi) // pH değeri ölçümünü yapan kod.
{
pHArray[pHArrayIndex++]=analogRead(SensorPin);
if(pHArrayIndex==arrayUzunlugu)pHArrayIndex=0;
gerilim = ortalamaArray(pHArray, arrayUzunlugu)*5.0/1024;
pH_degeri = 3.5*gerilim;
orneklemeZaman=millis();
}
if(millis() - printZaman > printAraligi) //Her 2 saniyede ölçülen pH değerini ekrana yansıtır.
{
Serial.print("pH ölçümü: ");
Serial.println(pH_degeri);
}
}
double ortalamaArray(int* arr, int sayi){ // Ekrana yansıtılacak bir ölçüm için 20 adet örnek alıp
int i; // bu örneklerin ortalamasını hesaplayarak
int max,min; // ve stabil sonuçlar elde edilmesini sağlar.
double ort;
long miktar = 0;
if(sayi<=0){ // Ölçüm sayısı 0 ise ekrana herhangi bir değer yansıtılmaz.
return 0;
}
if(sayi<5){ // Ölçüm sayısı 5'ten az ise ortalamayı basit işlemler ile geri döndürür.
for(i=0;i<sayi;i++){
miktar+=arr[i];
}
ort = miktar/sayi;
return ort;
}
else{
if(arr[0]<arr[1]){
min = arr[0];max=arr[1];
}
else{
min=arr[1];max=arr[0];
}
for(i=2;i<sayi;i++){
if(arr[i]<min){
miktar+=min;
min=arr[i];
}else {
if(arr[i]>max){
miktar+=max;
max=arr[i];
}else{
miktar+=arr[i];
}
}
}
ort = (double)miktar/(sayi-2);
}
return ort;
}
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]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
You got a 0.78% upvote from @upme requested by: @drencolha.
Send at least 2.5 SBD to @upme with a post link in the memo field to receive upvote next round.
To support our activity, please vote for my master @suggeelson, as a STEEM Witness
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit