Python kodları ile Arduino programlamak istiyorsunuz. Bunu yapmak gerçekten kolay. Bunu gerçekleştirmek yapmamız gereken iki adım var.
- Arduino’ya Firmata Örneğini Yüklemek
- 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 :
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.
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ğer | Seviye | Voltaj |
---|---|---|
0 | Düşük | 0V |
1 | Yüksek | 5V |
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:
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
vetime
. - 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
while
dö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 ,
while
dö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:
- Pin tipi (
a
analog veyad
dijital için) - pin numarası
- Pin modu (
i
giriş veyao
çı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.