back to top

Arduino Dersleri #4: Arduino Analog Okuma ve Seri Haberleşme

Merhaba arkadaşlar. Bugün sizlere analog read ve seri haberleşme hakkında bilgi vereceğiz ve birlikte Arduino ile analog değer okuma uygulaması yapacağız.

Daha önceki yazımızda Arduino Buton Kullanımından bahsetmiştik ! >>> Push Buton ile LED Yakma Uygulaması yapalım !

Arduino Analog Read – Hangi Pinleri Analog Değer Okumak İçin Kullanabiliriz?

Arduino serimizde ş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” yani analog giriş 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.

Yukarıda da bahsettiğimiz gibi Arduino’da ANALOG INPUT kısmındaki pinler analog giriş olarak kullanılır. Analog giriş pinlerini A0,A1,A2,A3,A4,A5 olarak sıralayabiliriz.

Arduinoda Seri Haberleşme

Daha önceki yazılarımızda da bahsettiğimiz gibi Arduino’muzu bilgisayarımıza bağladığımızda bir COM portu olarak tanınmıştı. Bu COM portu vasıtası ile seri haberleşme (UART) işlemini gerçekleştirebiliyoruz. Uygulamamızı yapmadan önce potansiyometre hakkında temel bir bilgi edineceğiz.

Potansiyometre Nedir? Çalışma Mantığı

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.

Potansiyometre hakkında daha detaylı bilgi edinmek isterseniz Potansiyometre Nedir? yazımıza göz atabilirsiniz.

Arduino İle Potansiyometre Kullanımı ve Bağlantısı

Gerekli malzemeler: ( Not: Arduino Seri Haberleşme ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)

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.

Haydi! Potansiyometre Okuma İçin Gerekli Kodu Yazalım.

#define potpin A0 //Potansiyometreyi A0 pinine tanımlıyoruz
int deger = 0; //"Değer" adlı 0 başlangıçlı bir değişken tanımlıyoruz
void setup() {
  Serial.begin(9600); //9600 Baund bir seri haberleşme başlatıyoruz
  Serial.println("Pot Deger Okuma"); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
}
void loop() {
  deger = analogRead(potpin); //"Değer" değişkeni potansiyometrenin değerini okuyup buna göre değişir
  Serial.println(deger); //Okunan değer seri monitörde mesaj olarak gönderilir
  delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
}

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

serial_port1

Yaptığımız uygulamaya ek olarak bu değerler ile voltaj seviyelerini nasıl eşleştirebileceğimizi görelim:

#define potpin A0
int deger = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("Pot Deger Okuma");
}
void loop() {
  deger = analogRead(potpin);
  float gerilim = (5.00 / 1024.00) * deger; //5V gerilim, 1024 bite bölünür ve potansiyometreden gelen değer ile çarpılır; değerin eşiti olan gerilim hesaplanır
  Serial.println(gerilim); //Hesaplanan gerilim seri monitörde mesaj olarak gönderilir
  delay(100);
}

Son Çıkan Yazılar

52 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 ?

    • 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.

  3. 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

  4. 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..

    • 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ü

    • Arduino’nun analog girişleri 0-5V DC gerilimi ölçebildiği için doğrudan şebeke gerilimini bu girişlere bağlamanız çok tehlikelidir. AC gerilim ölçümü için hazır sensörlerden faydalanabilir veya bir trafo ve op-amp ile kendi devrenizi kurarak ölçüm yapabilirsiniz. Tavsiyem, AC gerilim ile daha önceden tecrübeniz yoksa tercihinizi hazır sensörlerden yana kullanmanızdır.

  5. Merhaba hocam sw-420 titreşim sensörü ile alınan analog değerleri 2*16 lcd ekrana yazdırmak istiyorum bana yardımcı olacağını düşündüğünüz bir kod var mı?

    • leds isimli değişkeni doğrudan 8-bit binary veya hex olarak değiştirip bu değeri registeraYaz() fonksiyonu ile shift registere gönderebilirsiniz.

  6. Hayırlı günler hocam pot olmadan gelen sinyali nasıl okuyabiliriz
    ayarlı 555 li bir devre var ondan okumak istiyorum yardımcı olursanız sevinirim

  7. hocam bende simülatör için pedal sistemi yapacağım ama aklıma takılan tek şey var arduino unoya uygun potans hangi seri onu bulamadım yardımcı olursanız sevinirim

  8. Hocam okuduğumuz değerler gerilimden ziyade akıma göre değişmiyor mu? Sonuçta 5v pininden sabit gerilim geliyor ve biz direnci değiştiriyoruz sürekli

    • Analog girişler gerilimdeki değişimi ölçmektedir. 5V gerilimin potansiyometrenin orta bacağında sabit olmadığını bir voltmetre ile ölçerek görebilirsiniz. Akımda da mutlaka değişiklik olmakta, fakat bizim dikkate aldığımız değer gerilim değeridir.

  9. hocam arduinoda lm35 sıcaklık sensörü ve potansiyometreyi aynı anda kullanamıyorum. devreye potu ekleyince lm35 değerleri sapıyor. ne önerirsiniz. denediğim potlar B10K B22K B50K

  10. Arduino ya gelen 2 kare dalgayi bit düzeyinde karşılaştırma yapabilmem için digitalRead ile okuma yapıp karşılaştırma yapabilir miyim

  11. Merhabalar, AD8232 ile ekg sinyallerini seri plotter yaparak güzel bir şekilde görebiliyorum. Bu bir nevi analog sinyaldir. Bu veriyi HC-06 ile Bluetooth yoluyla telefondan okumak istediğimde bir sinyal grafiği göremiyorum. Sebebi nedir sizce?

  12. Benim bir kod sıkıntım var
    2 farklı analog okuyorum A0 A1
    Bu analiglara göre pin 6 dan pembe
    Çıkışı yapıyorum ben bu analog
    Girişleri int up pinini pin 2 Hi/Lo
    Yaparak seçmek istiyorum
    Pin2 Hı ise A0 oku Lo ise A1 oku

    Bu konuda bir kod desteğine
    İhtiyacım var selamlar

  13. Merhaba hocam her şeyi doğru yapmama rağmen potansiyometrenin değerini arttırırken seri port ekranını açtığımda değer 255 olduktan sonra sıfırlanıp tekrar 255 çıkıyor ardından tekrar olup 100 lü bir rakamda kalıyor . Hocam ne yapmalıyım nasıl düzeltebilirim.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz