Analog giriş ikilik sistemde olmayan , belirli aralıklarda değişen sinyalleri okumak için kullanılır. Örneğin dijital girişleri okurken sinyal var ya da sinyal yok, 1 ya da 0, True ya da False şeklinde okuyorduk. Analog girişleri okurken 0 ile 5V arasında sinyali okuma çözünürlülüğüne göre dijital – analog çevirme işlemine tabi tutuyoruz. Örneğin bir sıcaklık sensörü düşünelim. Bize verdiği değer 0 ile 5 volt arasında herhangi bir değer olabilir. Örneğin sensörümüz 2,756V sinyal versin. Kullandığımız arduino Analog – Dijital Dönüştürme (ADC) çözünürlülüğü 10 bit olsun. 10 bit değerindeki en yüksek sayımızı 1023 olarak buluyoruz. Arduino cihazımız dönüştürme işlemini yaparken analog girişimizin maksimum giriş voltajı olan 5V değerini 1023 eşit parçaya bölüyor. Bu işleme ADC (Analog – Dijital Dönüştürme) işlemi deniyor. Gelin şimdi 2,756 değerinin analog – dijital dönüşümünü hesaplayalım.
Dönüştürme işlemi 10 bit çözünürlülüğünde olacağı için 5 voltluk değerimizi 1023 eşit parçaya bölelim;
5/1023 = 0,004887 buluyoruz.
Yani sıfırdan itibaren her 0,004887V voltaj artımında dijital değerimiz bir artacak. Şimdi analog dijital dönüşümünden sonraki değerimizi bulalım. Yukarıda bahsettiğimiz gibi sıcaklık sensörümüz 2,756V değer döndürüyordu, şimdi 2,756V değerin dijital değere dönüşümünü hesaplarsak; 2,756/0,004887 = 564 olarak bulunur.
Yukarıdaki işlemi arduinomuz bizim yerimize otomatik olarak analogRead(analog_pin_numarasi); fonksiyonu ile yapacak. Bize ise sıcaklık değerini bulma işlemi kalacak.
Peki bu dijital değer bizim ne işimize yarayacak?
Örnek olarak sıcaklık sensörü yerine herkesin kolayca bulabileceği bir potansiyometre örneği yapalım. Arduino kartımızın A0 pinine bağlı potansiyometremizin dönen kısmını çevirerek analog pine değişik sinyaller göndereceğiz ve bu sinyallerle dijital pinlere bağlı olan 5 adet ledlerimizi yakacağız.
Programımızı yazmaya başlıyoruz;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/* * Analog pinden aldığımız değeri hafızada tutmak için pot adında * integeer (tamsayı) türünden değişken oluşturuyoruz ve * başlangıç değerini sıfır olarak atıyoruz. */ int pot = 0; void setup() { /* * ledlerimizi bağlayacağımız 2,3,4,5 ve 6 nolu pini * çıkış olarak ayarlıyoruz. */ pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } void loop() { pot = analogRead(A0); // A0 pinindeki analog değeri okuyup pot değişkenine aktarıyoruz /* * Bildiğimiz üzere Arduino Uno kartımızdaki mikrodenetleyicimiz * 10 bit çözünürlülüğünde Analog - Dijital dönüştürme yapmaktadır * yani dönüştürme sonucu dijital değerimiz 0 ile 1023 sayısı arasında olacaktır. * Bu da demek oluyor ki analog pinimize 5V uyguladığımızda dönüştürme sonucu 1023 olacak * 0V uyguladığımızda ise dönüştürme sonucu 0 olacak. * */ if (pot < 200) { // Eğer Analog - Dijital dönüştürme sonucu değerimiz 200'den küçük ise digitalWrite(2, LOW); // 2 numaralı çıkıştaki ledi söndürüyoruz } else { // değilse (eğer 200'den büyük ise) digitalWrite(2, HIGH); // 2 numaralı pindeki ledi yakıyoruz. } if (pot < 400) { // Eğer Analog - Dijital dönüştürme sonucu değerimiz 400'den küçük ise digitalWrite(3, LOW); // 3 numaralı çıkıştaki ledi söndürüyoruz } else { // değilse (eğer 400'den büyük ise) digitalWrite(3, HIGH); //2 numaralı pindeki ledi yakıyoruz. } if (pot < 600) { digitalWrite(4, LOW); } else { digitalWrite(4, HIGH); } if (pot < 800) { digitalWrite(5, LOW); } else { digitalWrite(5, HIGH); } if (pot < 1000) { digitalWrite(6, LOW); } else { digitalWrite(6, HIGH); } } |
Yukarıdaki kodda sadece ilk iki if-else sorgusunun açıklamalarını yazdım. Diğerleri zaten aynı mantık ile çalışıyor.
Devre şemamız ise aşağıdaki şekilde olacak;
İkinci if de açıklamada 200 yerine 400 yazmalısınız
Uyardığınız için teşekkürler 🙂