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.
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:
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); }
leds değişkeni byte tipinde olmalı sanırım?
devre çalışmadı hocam 74hc595 çok ısındı neden acaba
Bağlantılarınız yanlış olabilir, kontrol etmenizi tavsiye ederim.
Bağlantı resminizde hc595 in 8. bacağı GND olmalıdır. VCC olduğu için hc595 bozulacaktır.
Voltu düşür
ö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ı
LED’leriniz aşırı akım çekip yanmış olabilir. LED’ler ile neden direnç kullanılması gerektiğini anlatan Arduino Ders 1: LED Yakıp Söndürme (Blink) yazısına bakabilirsiniz.
rgb ledi tek potansiyometre ile parlaklık ayarlama yapar mısın? kodlar ve baglantılar lazım
RGB LED ile ilgili https://maker.robotistan.com/arduino-dersleri-6-buton-kontrollu-rgb-led/ dersini inceleyebilirsiniz.
İ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 ?
Potansiyometrenizde bir arıza vardır veya bağlantılarınızda bir problem olabilir.
sn74hc595 register yerine sn54390registeri kullansam olurmu
Malesef.
74HC595 kullanmasam ne olur?
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.Teşekkürler hocam
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.
Teşekkürler hocam
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.
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..
potansiyometrenin direnci farklı olsa sıkıntı olur mu?
Sıkıntı olmaz. İstediğiniz değerde potansiyometre kullanabilirsiniz.
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ü
Hocam şebeke gerilimini arduino ile ölçmemiz mümkün mü yani analog girişe ac gerilim uygulayabiliyor muyuz
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.
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ı?
Öncelikle SW-420 sensörün ölçüm yapmasını ve veriyi seri ekrana yazmasını sağlayarak başlayabilirsiniz. Daha sonra LCD ekran kullanımı ile ilgili dersimizi inceleyerek bu değeri bir LCD ekrana yazdırmayı öğrenebilirsiniz. İlgili dersler:
Arduino Dersleri 4: Seri Haberleşme (UART)
Arduino Dersleri 10: 16×2 LCD Ekran
8 bit binary olarak nasıl ledleri yakabilirim mesela 4.2 volt karşılığı (1111 1101) bunu ledlerde nasıl uyguları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.
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
Doğrudan analog girişe verebilirsiniz.
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
Arduino’nuz ile istediğiniz potansiyometreyi kullanabilirsiniz. Çoğunlukla projelerde bu tip potansiyometreler kullanılır.
Sürgülü potans olarak ne kullanmam gerekiyor Hocam onu sormayı unutmuşum
Hoşunuza giden istediğiniz potansı kullanabilirsiniz 🙂
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.
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
Bu durumun kullandığınız potans ile ilgili yoktur. Büyük olasılıkla Arduino kartınız üzerindeki 5V çıkışı yeterince akım sağlayamamaktadır. Harici bir 5V regülatör ile besleme yapıp GND uçlarını Arduino ile ortak bağlamayı deneyebilirsiniz.
http://arduinom.org/arduino-elemanlarini-harici-guc-kaynagi-ile-kullanma/
buradaki gibi mi
Benzer şekilde, tek farkı regülatörün bulunmaması. Arduino’nun analog girişlerine 5V’tan fazlasını giriş olarak veremezsiniz.
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
digitalRead, giriş yapacağınız sinyalin frekansı için yavaş kalabilir. Arduino ile yapılmış basit osiloskop örnekleri mevcut, buradaki bilgilerden faydalanabileceğinizi düşünüyorum: http://www.instructables.com/id/Oscilloscope-Arduino-Processing/
abi teşkkürler bilişim dersinde 1 numarayım
Hocam merhabalar,
https://maker.robotistan.com/arduino-dersleri-7-analog-girisler/ notunda analaog signalimiz 0-5V aralıgında olup 5Vdan kuçük oldugunda AREF pinini kullanmamız gerektigini yazmışsınız bununla ilgili geniş bir bilgilendirme bulamadım bunun için detaylı bir bilgilendirme var mı elinizde
merhaba.Bir projemde aynı anda 2 jumpera dokunduğumda hem ses çıkmasını hem de ledin yanmasını istiyorum yardımcı olabilir misiniz?
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?
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
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.