Arduino Arduino Dersleri Yazılım

Python ile Arduino Kodlama – 1 “Digital Giriş-Çıkışlar”

Python kodları ile Arduino programlamak istiyorsunuz. Bunu yapmak gerçekten kolay. Bunu gerçekleştirmek yapmamız gereken iki adım var.

  1. Arduino’ya Firmata Örneğini Yüklemek
  2. Python arayüzüne pyFirmata Kütüphanesini yüklemek

Hepsi bu ardından kodlarınızı yazıp Python komutları ile Arduino üzerinde digital ve analog giriş çıkışlarınızı kontrol edebilirsiniz. İşte bu yazımızda bununla ilgili örnekler görecekseniz.

Firmata Sketch’in Yüklenmesi

Arduino’yu kullanmak için Python programınızı yazmadan önce, kartı kontrol etmek için Firmata örneğini arduino’ya yüklemelisiniz.  Açmak için Dosya menüsüne, ardından Örnekler’e , ardından Firmata’ya ve son olarak StandardFirmata’ya erişin :

Arduino IDE üzerinde Firmata örnek çizimi

Yükleme tamamlandıktan sonra Arduino’da herhangi bir aktivite görmeyeceksiniz. Geri kalan tüm işlemleri Python kodlarımızla yapıyoruz.

pyFirmata Kütüphanesinin Yüklenmesi

Şimdi sıra geldi Python kısmına. Arduino ile haberleşmek için seri bağlantı üzerinden haberleşebilecek bir programa ihtiyacınız var. Bunun için, yükleyebileceğiniz pyFirmata paketine ihtiyacınız olacak pip:

$ pip install pyfirmata

Kurulum tamamlandıktan sonra Python ve Firmata kullanarak eşdeğer bir Blink uygulamasını gerçekleştireceğiz:

import pyfirmata
import time

board = pyfirmata.Arduino('COM4')

while True:
    board.digital[13].write(1)
    time.sleep(1)
    board.digital[13].write(0)
    time.sleep(1)

Bilgi Notu: COM4 portunu arduino sizde hangi porta bağlı ise o şekilde değiştirmeniz gerekmekte.

  • 7. satırda , LED’i bir saniyeliğine açan dijital pim 13 açılır.
  • 9. satırda, bu pin kapatılır, bu da LED’i bir saniyeliğine kapatır.
Arduino built-in and external LEDs blinking

Artık bir Arduino’yu Python ile nasıl kontrol edeceğinizin temellerini bildiğinize göre, girişleri ve çıkışları ile etkileşim kurmak için bazı uygulamaları gözden geçirelim.

Python İle Dijital Girişleri Okuma

Dijital girişler yalnızca iki olası değere sahip olabilir. Bir devrede, bu değerlerin her biri farklı bir voltajla temsil edilir. Aşağıdaki tablo, standart bir Arduino Uno kartı için dijital giriş gösterimini göstermektedir:

DeğerSeviyeVoltaj
0Düşük0V
1Yüksek5V

LED’i kontrol etmek için, bir buton kullanacaksınız. Buton serbest bırakıldığında karta 0V, basıldığında karta 5V göndermelidir. Aşağıdaki şekil, butonun Arduino kartına nasıl bağlanacağını gösterir:

Dijital giriş devresi

LED’in daha önce olduğu gibi dijital pin 13’te Arduino’ya bağlı olduğunu fark edebilirsiniz. 

Yukarıdaki devreyi de birleştirmek için bir breadboard kullanabilirsiniz:

Artık devreyi kurdunuz, pyFirmata kullanarak kontrol etmek için Python arayüzünde bir program çalıştırmanız gerekiyor. Bu program, buton durumuna bağlı olarak LED’i açacaktır:

1 import pyfirmata
2 import time
3 
4 board = pyfirmata.Arduino('PORT4')
5 
6 it = pyfirmata.util.Iterator(board)
7 it.start()
8 
9 board.digital[10].mode = pyfirmata.INPUT
10
11while True:
12    sw = board.digital[10].read()
13    if sw is True:
14        board.digital[13].write(1)
15    else:
16        board.digital[13].write(0)
17    time.sleep(0.1)

Bu programı inceleyelim:

  • Satır 1 ve 2  kütüphane ekleme pyfirmata ve time.
  • Hat 4 kullanımları pyfirmata.Arduino() Arduino ile bağlantı kurmak için.
  • 6. satır , devrenin girişlerinin durumunu okumak için kullanılacak bir yineleyici atar.
  • 7. satır , ana kodunuzla paralel olarak çalışan bir döngü tutan yineleyiciyi başlatır. Döngü board.iterate(), Arduino kartından alınan giriş değerlerini güncellemek için yürütülür.
  • Satır 9 , pin 10’u ile dijital giriş olarak ayarlar pyfirmata.INPUT. Default olarak dijital pinler çıkış olarak atandığı için bu gereklidir.
  • 11. satır sonsuz bir whiledöngü başlatır . Bu döngü, giriş pininin durumunu okur, içinde saklar ve bu değeri pin 13’ün değerini değiştirerek LED’i açıp kapatmak için kullanır.
  • Satır 17 , whiledöngünün yinelemeleri arasında 0,1 saniye bekler . Bu gerekli değildir, ancak döngüde bekleme komutu olmadığında %100 yüke ulaşan CPU’nun aşırı yüklenmesini önlemek için güzel bir uygulamadır.

pyfirmata ayrıca giriş ve çıkış pinleriyle çalışmak için daha kompakt bir sözdizimi sunar. Bu, birkaç pinle çalışırken iyi bir seçenek olabilir. Daha kompakt sözdizimine sahip olmak için önceki programı şu şekilde yeniden yazabilirsiniz:

 1 import pyfirmata
 2 import time
 3
 4 board = pyfirmata.Arduino('PORT4')
 5
 6 it = pyfirmata.util.Iterator(board)
 7 it.start()
 8
 9 digital_input = board.get_pin('d:10:i')
10 led = board.get_pin('d:13:o')
11
12 while True:
13    sw = digital_input.read()
14    if sw is True:
15        led.write(1)
16    else:
17        led.write(0)
18    time.sleep(0.1)

Bu sürümde, board.get_pin() iki nesne oluşturmak için kullanırsınız . digital_input dijital giriş durumunu, led, LED durumunu temsil eder. Bu yöntemi çalıştırdığınızda, iki nokta ile ayrılmış üç öğeden oluşan bir dize argümanı iletmeniz gerekir:

  1. Pin tipi ( aanalog veya ddijital için)
  2. pin numarası
  3. Pin modu ( igiriş veya oçıkış için)

digital_input'd:10:i' Digital 10 numaralı pin Giriştir. 
led = 'd:13:o'13 numaralı Digital pin çıkıştır, anlamı okunur.

board.get_pin() kullandığınızda  daha önce yaptığınız gibi pin 10’u giriş olarak açıkça ayarlamanıza gerek yoktur pyfirmata.INPUT. Pinler ayarlandıktan sonra read() ile dijital giriş pininin durumuna ulaşabilir ve write() ile dijital çıkış pininin durumunu ayarlayabilirsiniz .

BİLGİ NOTU: İki programda yüzde yüz doğru olarak çalışır. Hangisi kendinize kolay gelirse o programı kullanarak yazabilirsiniz.

Kodları yüklediğinizde butona bağlı olarak Ledin yanıp söndüğünü göreceksiniz.

Dijital girişler elektronik projelerinde yaygın olarak kullanılmaktadır. Birkaç sensör, devrelerinize giriş olarak kullanılabilir. Ancak, mesafe veya fiziksel miktarlar gibi analog değerleri ölçmeniz gereken bazı durumlar vardır. Bir sonraki bölümde, Python ile Arduino kullanarak analog girişlerin nasıl okunacağını göreceksiniz.

Similar Posts

Bir cevap yazın

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