Arduino Arduino Dersleri Yazılım

Python İle Arduino Kodlama-2 “Analog Giriş-Çıkışlar”

Önceki yazımızda arduino’yu python ile nasıl kontrol edebiliriz ve digital giriş çıkışları nasıl algılarız değinmiştik. Gerekli kurulumları yapmadıysanız hemen oraya göz atmanızı öneririz.

Analog Girişleri Okuma

Yalnızca açık veya kapalı olabilen dijital girişlerin aksine , bazı aralıktaki değerleri okumak için analog girişler kullanılır. Arduino Uno’da analog girişe giden voltaj 0V ile 5V arasında değişir. Mesafeler gibi fiziksel nicelikleri ölçmek için uygun sensörler kullanılır. Bu sensörler, Arduino tarafından okunabilmeleri için bu fiziksel miktarları uygun voltaj aralığında kodlamaktan sorumludur.

Bir analog voltajı okumak için Arduino , giriş voltajını sabit sayıda bit ile dijital bir sayıya dönüştüren bir analogdan dijitale dönüştürücü (ADC) kullanır . Bu, dönüşümün çözünürlüğünü belirler. Arduino Uno, 10 bitlik bir ADC kullanır ve 1024 farklı voltaj seviyesi belirleyebilir.

Bir analog giriş için voltaj aralığı 0 ile 1023 arasında değişen sayılara kodlanmıştır. 0V uygulandığında Arduino bunu 0 sayısına kodlar . 5V uygulandığında kodlanmış sayı 1023’tür . Tüm ara voltaj değerleri orantılı olarak kodlanmıştır.

Yapacağımız örnekte bir potansiyometre gelen voltajı ayarlamak için Arduino analog girişine bağlanmıştır. Yanıp sönen bir LED’in frekansını bu potansiyometre ile kontrol etmeye çalışacağız:

Analog giriş için devre

Devre bağlantı şemaları şekildeki gibidir

LED’i bağlantısını yapmadan önce, potansiyometrenin konumuna bağlı olarak Arduino’nun okuduğu farklı değerleri görmek için de devreyi kullanabilirsiniz. Bunu yapmak için PC’nizde aşağıdaki programı çalıştırın:

 1 import pyfirmata
 2 import time
 3
 4 board = pyfirmata.Arduino('/dev/ttyACM0')
 5 it = pyfirmata.util.Iterator(board)
 6 it.start()
 7
 8 analog_input = board.get_pin('a:0:i')
 9
10 while True:
11    analog_value = analog_input.read()
12    print(analog_value)
13    time.sleep(0.1)

8. satırda analog_input, koduyla analog A0 giriş pini olarak ayarladınız 'a:0:i'. Sonsuz whiledöngü içinde, bu değeri okur, içinde saklar analog_value ve çıktıyı konsolda görüntülersiniz print(). Program çalışırken potansiyometreyi hareket ettirdiğinizde aşağıdakine benzer bir çıktı almalısınız:

0.0
0.0293
0.1056
0.1838
0.2717
0.3705
0.4428
0.5064
0.5797
0.6315
0.6764
0.7243
0.7859
0.8446
0.9042
0.9677
1.0
1.0

Yazdırılan değerler, potansiyometrenin konumu bir uçtayken 0’dan diğer uçtayken 1’e kadar değişir. Bunları herhangi bir uygulamaya bağlı olarak dönüştürülen değerler olduğunu unutmayın.

Yanıp sönen LED’in frekansını değiştirmek için analog_value, LED’in ne kadar süreyle açık veya kapalı tutulacağını kontrol etmek için kullanabilirsiniz :

 1 import pyfirmata
 2 import time
 3
 4 board = pyfirmata.Arduino('/dev/ttyACM0')
 5 it = pyfirmata.util.Iterator(board)
 6 it.start()
 7
 8 analog_input = board.get_pin('a:0:i')
 9 led = board.get_pin('d:13:o')
10
11 while True:
12    analog_value = analog_input.read()
13    if analog_value is not None:
14        delay = analog_value + 0.01
15        led.write(1)
16        time.sleep(delay)
17        led.write(0)
18        time.sleep(delay)
19    else:
20        time.sleep(0.1)

Program Çalışması: Program der ki, eğer Analog girişi sıfıra eşit değilse : Led delay aralığında yanıp sönsün. Delay ise gelen Analog Value+0.01 kadar olsun. Yani eğer potansiyometreden 0.05 değeri okuyorsak, Led 0.06 saniye aralıklarla yanıp sönecek. Yani led frekansını bu şekilde azaltıp çoğaltabileceğiz.

Programı çalıştırmayı ve potansiyometrenin konumunu değiştirmeyi deneyin. Yanıp sönen LED değişikliklerinin sıklığını fark edeceksiniz:

Analog giriş tarafından kontrol edilen led

Şimdiye kadar devrelerinizde dijital girişleri, dijital çıkışları ve analog girişleri nasıl kullanacağınızı gördünüz. Bir sonraki bölümde, analog çıkışların nasıl kullanılacağını göreceksiniz.

Analog Çıkışları Kullanma

Bazı durumlarda, analog sinyal gerektiren bir cihazı çalıştırmak için bir analog çıkışa sahip olmak gerekir. Arduino, voltajın belirli bir aralıkta herhangi bir değere ayarlanabileceği gerçek bir analog çıkış içermez. Bunu kullanmak için , Arduino Darbe Genişliği Modülasyonu (PWM) çıkışı içerir.

PWM, değişken güçte bir sinyal üretmek için dijital bir çıkışın kullanıldığı bir modülasyon tekniğidir. Bunu yapmak için, görev döngüsünün istenen güce göre değiştirildiği sabit frekanslı bir dijital sinyal kullanır.

Tüm Arduino dijital pinleri PWM çıkışı olarak kullanılamaz. PWM çıkışlar ( ~) ile tanımlanabilirer :

Arduino One PWM bağlantı noktaları

Bu bölümde, bir potansiyometre tarafından verilen bir analog girişin değerine göre bir LED’in parlaklığını kontrol etmek için PWM’i kullanacaksınız.

Program: Bir LED’e bir PWM sinyali uygulandığında, parlaklığı PWM sinyalinin görev döngüsüne göre değişir. Aşağıdaki devreyi kullanacaksınız:

Analog çıkış devresi

Pin 13 ile PWM kullanmak mümkün olmadığı için LED için kullanılan dijital çıkış pini pin 11’dir.

Devre monte edildiğinde, aşağıdaki program ile PWM kullanarak LED’i kontrol edebilirsiniz:

 1 import pyfirmata
 2 import time
 3
 4 board = pyfirmata.Arduino('/dev/ttyACM0')
 5
 6 it = pyfirmata.util.Iterator(board)
 7 it.start()
 8
 9 analog_input = board.get_pin('a:0:i')
10 led = board.get_pin('d:11:p')
11
12 while True:
13    analog_value = analog_input.read()
14    if analog_value is not None:
15        led.write(analog_value)
16    time.sleep(0.1)

Daha önce kullandığınız programlardan birkaç fark var:

  1. 10. satırdaled , argümanı ileterek PWM moduna ayarladınız 'd:11:p'.
  2. 15. satırda , argüman olarak led.write()ile çağırırsınız analog_value. Bu, analog girişten okunan 0 ile 1 arasında bir değerdir.

Potansiyometre hareket ettirildiğinde LED davranışını burada görebilirsiniz:

Osiloskopta PWM çıkışı

Görev döngüsündeki değişiklikleri göstermek için pin 11’e bir osiloskop takılır. Potansiyometre sıfır konumundayken, pin 11’in çıkışında 0V olduğundan LED’in kapalı olduğunu görebilirsiniz. Potansiyometreyi çevirdikçe, PWM görev döngüsü arttıkça LED daha parlak hale gelir. Potansiyometreyi sonuna kadar çevirdiğinizde görev döngüsü %100’e ulaşır. LED, maksimum parlaklıkta sürekli olarak açılır.

Bu örnekle, bir Arduino ve onun dijital ve analog giriş ve çıkışlarını kullanmanın temellerini ele aldınız. Bir sonraki bölümde, PC’de olayları yönlendirmek için Arduino’yu Python ile kullanmak için bir uygulama göreceksiniz.

Kaynak: https://realpython.com/arduino-python/

Similar Posts

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir