Arduino voltmetre etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Arduino voltmetre etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino ile voltaj okuma | Arduino ile voltmetre | Arduino ADC örnek Kod

 

Arduino ile voltaj okuma

    Arduino güç özellikleri konusunda detaylıca anlattığımız üzere, Arduino UNO için konuşuyorsak; mikro denetleyicimizin anlamlandırabildiği maksimum potansiyel fark +5V 'tur. Bunun konumuzu ilgilendiren kısmı da standart olarak bir Arduino UNO ile ölçebileceğimiz en fazla potansiyel farkın 5V olmasıdır. Daha yüksek seviyelerdeki voltajların Arduino ile ölçülebilmesi için ek elemanlara ve devrelere ihtiyaç duyulmaktadır, ileride bu konuyla ilgili yazı yayınlarsam linkini buralarda paylaşıyor olurum. Voltaj Bölücü Devresi şimdilik size yardımcı olacaktır. Gerekli hesapları yapıp Vout için maksimumda 5v gelecek şekilde dirençlerinizi seçip devrenizi tasarlayabilirsiniz. Bu yazı Arduino UNO ile daha önce hiç voltaj ölçmemiş, nasıl ölçüldüğü konusunda fikri olmayan okuyucularımızı hedef almaktadır :) 

       Arduino ADC ölçümlerinde yalnızca 0-5V arası DC gerilim ölçülebilir!

    Devre şemamız görseldeki gibi, biraz anlatmamız gerekirse, potansiyometremizin dış uçlarından birini 5V pinine diğerini de GND pinine bağlıyoruz, yerleri farkeder mi? aslına bakarsanız hiç farketmez, peki ne gibi bir değişikliğe sebep olur? şöyle : şekilde gördüğünüz potansiyometrenin kadranı Kırmızıya yakın bu durumda orta pinden çıkan voltaj 5v 'a yakın olur, yaani saat yönünde çevirdikçe voltajımız 0 dan 5V ' a doğru yükselir. Tam tersi bağlamış olsaydık olay tam olarak ters şekilde gerçekleşiyor olacaktı. Potansiyometrenin de buradaki fonksiyonu anlaşılmıştır diye tahmin ediyorum, bizim için 0v ile 5v arasını kademelendirmiş oluyor. Sağdaki pini 5V 'a değil de hemen yanındaki 3.3v 'a bağlamış olsaydık, A0 pinine bağlı olan terminalinde 0 v ile 3.3v arasında bir voltaj değişimine şahit olacaktık. Soldakini 3.3V 'a sağdakini 5V 'a bağlasaydık ne olurdu ki? 😲 cevabı bilenleri yorumlarda görmek isteriz :) Potansiyometremiz 1K - 10 K -100K vs olabilir, sorun yok.

    Harici bir kaynaktaki voltajı ölçmek için kaynağın GND 'sini Arduino kartın GND 'sine, + ucunu da kullanmak istediğiniz analog pine bağlayıp ölçüm yapabilirsiniz. Tekrar etmek gerekirse yalnızca 0-5v arası DC!

Kod kısmına gelecek olursak kurgumuz şöyle olsun A0 pinindeki voltajı okuyup Arduino Serial Ekran 'a belirli zaman aralıklarıyla yazdıralım. Aşağıdaki kod kurgumuzu tam olarak gerçekleştirecektir :

void setup()
{
  Serial.begin(115200);
}
void loop()
{
  int adcVal = analogRead(0);
  float voltage = adcVal * 5.0f / 1023.0f;
  Serial.println(voltage);
  delay(10);
}

gördüğünüz üzere gayet basit bir kod, açıklamaya çalışalım dilimiz döndüğünce:

Serial.begin(115200); seri iletişimi 115200 hızında başlatmayı hedefler

int adcVal = analogRead(0); satırı konumuzun göz bebeği, adcVal adında int tipinde bir değişken oluşturup,analogRead(0) fonksiyonuyla A0 pinindeki voltajın okunmasını sağlamış oluyoruz, neden int? çünkü Arduino UNO için ADC çeviricisi 10 bittir. Bunun anlamı nedir? 10 haneli binary sayı tutabilir. Yaani 2^10 değeri için maksimum seviyedir diyebiliriz. Bu da bizim numerik 10 sisteminde 1023 e denk gelir, uint8_t char gibi 8 bitlik tamsayı değişkenlerine sığmaz demeye çalışıyorum. Özetle anlamlandırabildiği maksimum voltaj olan 5V 'u bizim için sayısal olarak 1023 değeriyle ifade eder. Bir sonraki satırdaki matematik kafanıza oturmuş olmalı bu noktada!

float voltage = adcVal * 5.0f/ 1023.0f; satırıyla okumuş olduğumuz adc değerini voltaja çeviriyoruz, basit bir dil ile 5.0V u 1023 ise adcVal neye denk gelir? doğrusal denkleminin cevabını arıyoruz, klasik içler dışlar meselesi. 5 i 1023 e bölerek 1 adc değerinin ne ettiğini hesaplamış oluyoruz, bu değeri de okunan adc değeri ile çarpınca voltaj tipinde bir değer elde etmiş oluyoruz, bu kadar basic. Bu bölmedeki .0f ler nerden geliyor diyenleri C++ Intreger Literal konusunu okumaya davet ediyoruz.. He bir de neden float? çünkü biraz detay istiyoruz yani voltaj seviyesini en azından virgülden sonra iki hane de olsa görelim değil mi.

Serial.println(voltage); ile nihai voltaj değerimizi seri ekrana yazıdırıyoruz, ln olması yazdırdıktan sonra bir sonraki satıra geçişi sağlıyor, print de yazabilirsiniz, o zaman yan yana yazıyor olur, inanmıyorsanız deneyin :)

delay(10); ile 10ms lik bir gecikme ekliyoruz, 100 olabilir 1000 olabilir keyfinize göre ayarlayın.

Artık Seri Ekranda değerleri görebilirsiniz, aynı zamanda Serial Plotter ile çizim halini de görebilirsiniz. Tinkercad gibi simulasyonlarda bu çizim çok düzgün bir şekilde çıkarken, gerçek bir uygulamada çok da düzgün çıkmayabilir, hiç dokunmadığınız halde oynamalar düşmeler çıkmalar, sakallar görülebilir, bunları da atlamanın yöntemleri var ancak bu yazıda değil de daha sonra yazar ve paylaşıyor oluruz. 

250ms lik beklemelerle benim tinkercad ile aldığım çıktı şu şekilde :

Arduino voltaj ölçme

Tinkercad Simulasyonu için tıklayınız!

Detaylıca anlatmaya çalıştım, yine de kafanıza takılan herşeyi yorumlarda sorabilirsiniz!

Okuduğumuz voltaj değerini bir ekrana yazdırmak istersek diye ekran kullanımıyla alakalı yazıların linkleri : 

16x2 LCD Arduino ile 4 bit Paralel modda sürülmesi

Arduino ADC Referans Voltajı Değiştirme konusunu okuyarak, daha hassas ölçümleri nasıl yapabileceğinizi öğrenebilirsiniz.

Herkese kolay gelsin!

Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...