Çeşitli Çözeltilerin pH Değerlerini Bulmaya Yarayan "pH Metre" Arduino Projesi

in #utopian-io7 years ago (edited)

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.

proje.jpg
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.jpg
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.

elektrot.gif
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

ph_metre.jpg
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.

indir.png

2. Arduino programını açıp sırasıyla Sketch->Include Library->Add .ZIP Library seçeneklerini seçin.

ekle.png

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.

baglanti.png

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.

1.PNG

4. Ardından sensörden aldığımız verileri saklayacak bir array oluşturun ve bu arrayi 0’ıncı indexten başlatın.

2.PNG

5. void setup() fonksiyonunun içine, 9600 baud hızında seri haberleşmeyi başlatacak komutu yazın.

3.PNG

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.

4.PNG
5.PNG
6.PNG

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.

7.PNG

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.

8.PNG

9.Önce “Verify”, sonra “Upload” butonlarına basarak, kodunuzu compile edip, Arduino’nuza yükleyin.

upload.png


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

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @drencolha I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • This is your first accepted contribution here in Utopian. Welcome!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

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

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