Merhaba arkadaşlar. Bugün sizlerle birlikte Arduino ile analog değer okuma uygulaması yapacağız.

Gerekli malzemeler:

Şimdiye kadar Arduino’muzun hep dijital giriş/çıkış pinlerini kullandık. Fakat siz de fark etmişsinizdir ki Arduino kartımızda bir de “Analog Input” kısmı mevcut. Bu pinleri kullanarak dijitalden analoğa dönüşüm yaparak voltaj okumamız mümkün.

Analogdan Dijitale Çeviriciler (Analog-to-Digital Converter, ADC)

Arduino UNO kartımızdaki işlemcide, 10-bit çözünürlüğe sahip analogdan dijitale dönüştürücü (ADC – analog to digital converter) mecvuttur. Peki, bu 10-bit ne anlama geliyor? Bildiğimiz üzere Arduino’muzun mikrokontrolcüsü 5V gerilimle çalışmakta. Bu mikrokontrolcüde sahip olduğunu söylediğimiz 10-bit ADC, 0V ile 5V arası gerilimleri 210 = 1024 adım hassasiyet ile okuyabilir. Yani analog input pinlerinden birine vereceğimiz 0V gerilim bize 0 değerini; aynı şekilde 5V gerilim ise 1023 değerine denk düşüyor.  Eğer 5V’tan daha düşük bir gerilimi referansımızın üst noktası olarak almamız gerekirse, Arduino üzerinde bulunan AREF pinini kullanmamız ve kodda küçük bir değişiklik yapmamız gerekir. Bu pine herhangi bir gerilim uygulamadığımız takdirde ADC’miz 0-5V arasında çalışacaktır.

Potansiyometre

Potansiyometre, aslında çevremizde her gün kullandığımız cihazların neredeyse hepsinde mevcut olan bir devre elemanıdır. Örneğin, müzik setimizin ses seviyesini değiştirmek için çevirdiğimiz düğme bir potansiyometredir. En basit açıklama ile potansiyometre, değerini elimizle çevirerek ayarladığımız bir dirençtir. Mikrokontrolcü uygulamalarında ise genellikle gerilim bölücü olarak kullanılır.

potans

Potansiyometreyi bir yöne çevirdiğimizde yan yana olan iki bacağının direnci değişir. Bunu bir multimetreyle ölçerek görebiliriz. Biz bu uygulamamızda ise 0 ile 5V arasında voltaj değişimini sağlamak için potansiyometre kullanacağız.

Uygulamamızın ilk adımında sadece analog giriş pininden gelen gerilimin sayısal karşılığını seri porttan okuma işlemini yapacağız. Devremizi bu şekilde kuruyoruz:

Bu şekilde bağlantı yapıldığında, potansiyometremizin orta bacağında 0-5V arası değişen bir gerilim alabiliriz. Şimdi yazacağımız kodla bu gerilimin sayısal karşılığını seri porttan görebileceğiz:

int potPin = A0;
void setup() 
{
  Serial.begin(9600);
  Serial.println("Analog input okuma ornegi.");
}
void loop() 
{
  int deger  = analogRead(potPin);
  Serial.println(deger);
  delay(100);
}

Bu yazdığımız kodu Arduino’muza yükledikten sonra seri port ekranını açıyoruz ve potansımızı çevirmeye başlıyoruz. Değerlerdeki değişimi görebilirsiniz:

serial_port1

Şimdi ise analog giriş pininden okuduğumuz değere göre daha önce yaptığımız çoklu LED yakma uygulamasını yapalım. Önceki uygulamamızdan devre olarak tek farkı, potansiyometrenin eklenmesi:

Devre şeması 17/01/2017 tarihinde güncellenmiştir.

Bu devre ile kullanacağımız kod:

int potPin = 0;
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
int leds = 0;


void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

void loop() 
{
  int deger  = analogRead(potPin);
  int yanan_ledsayisi = deger / 114;  //1023 / 9
  leds = 0;
  for (int i = 0; i < yanan_ledsayisi; i++)
  {
    bitSet(leds, i); 
  }
  registeraYaz();
}

void registeraYaz()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

Bu kod, potansiyometremizin voltaj değerini 8 LED için ayrı adımlara bölerek, gerilim arttıkça daha fazla LED’in yanmasını sağlıyor. Bu uygulamadaki potansiyometreyi, analog çıkışlı başka elemanlarla değiştirerek sizler de farklı uygulamalar yapabilirsiniz. Örneğin LM35 sıcaklık sensörüyle bir sıcaklık seviyesi göstergesi ya da bir mikrofon ile birlikte kullanacağınız preamfi devresiyle ses şiddeti göstergesi (vumetre) yapmak mümkün. Biz de bir sonraki uygulamamızda ışık şiddetine göre artan sayıda LED yakma işlemini yapacağız. Bir sonraki derse devam edecekseniz devrenizi sökmeyin 🙂

25 Yorumlar

  1. öncelikle böyle faydalı bir site hazırladığınız çok teşekkür ederim emeği geçen herkesin ellerine sağlık
    hocam şuan 220 direnç yok bende ledleri direnç bağlamadan takdım çalışmadı dirençle mi alakalı

  2. İyi günler. Potansiyometre değerlerini kontrol etmek için dediğiniz kodları kullandık fakat potansiyometreyi çevirmediğimiz halde 320 ile 298 arasında sürekli bir artıp bir azalıyor. Bunun sebebi ne olabilir ?

    • 74HC595, bu devrede kolaylık sağlaması amacılığıyla ve bu serideki diğer derslerde de kullanıldığı için tercih edilmiştir. Arzu ederseniz kullanmayabilir, LED’leri analog değere göre teker tekre digitalWrite() komutu ile açıp kapatabilirsiniz.

  3. arduino ya birden fazla potansiyometre bağlayabilirmiyim?Mümkünse bağlantısını nasıl yaparım.Cevaplarsanız sevinirim hocam

    • Bağlayabilirsiniz. Her bir potansiyometrenin uç bacaklarınından birini +5V ve GND’ye, orta bacağını da Arduino’nuzun analog girişlerine bağlamanız gereklidir. Aslında bu dersteki şemanın aynısı, yalnızca her bir potansiyometrenin orta bacağı farklı bir analog girişe gidecek.

  4. hocam arduino adc girişi 5khzlik bir sinüs sinyali okuyup genlikteki değişimi ekrana yazabilir mi dalgayı doğrultmak mı gerekir? şimdiden teekkür ederim

    • Malesef Arduino’nun ADC girişleri 5kHz mertebelerindeki frekansa sahip sinyalleri okuman için yeterince hızlı değildir.

  5. arduıno bağlantı kırmızı – siyah (+ – )
    sonra breadbord kırmızı – yeşil (arduıonoya gidiyor) siyah => ama bu nereye bağlanıyor bunu çözemedim lütfen yardım..
    Hiç bilmiyorum….
    öğrenmeye çalışıyorum bağlantıları yaparak …
    Önceki dersler tamam LED leri yaktım, buton kontrollü LED i de yaptım ama burda 5 5 5 5 giden beradbord üstünde 6. deliğe giden o siyah kabloyu çözemedim ki öbür derslere geçeyim.
    Hiç bilmediğim belli olmuştur. heralde 🙂
    lütfen yardım..

  6. slm fırcasız dc motora potansiyo metresiz devir ayarı yapmak ıstiyorum bunun icin nsl bir surucu devresi yapmam lazım

    • Fırçasız motorlar için ESC adı verilen sürücü devreler kullanmanız gereklidir. Bu sürücüleri tıpkı servo motor kontrol eder gibi kullanabilirsiniz. 0 derece konumu motorun durmasını, 180 derece konumu ise tam gazda çalışmasını sağlayacaktır. Servo motor kullanımı ile ilgili bu yazıyı inceleyebilirsiniz: Arduino Dersleri 13: Servo Motor Kontrolü

CEVAP VER