Asenkron Seri Haberleşme ile Led Kontrolü
Bir önceki yazıda asenkron seri haberleşme ile bilgisayardan girdiğimiz verileri kullanabileceğimiz bir python programı yazmış ve bu programı incelemiştik. Bu program alınan verilere göre çıkan sonuçları, verileri orange pi ekranına ve seri ekrana yazıyordu.
Bu yazıda asenkron seri haberleşmeyi kullanarak bilgisayardan girdiğimiz bir veri ile Orange pi üzerindeki pinleri kontrol edeceğiz. Bu programı python ile yazacağız ve hem python ile seri haberleşme hem de python ile giriş çıkış pinlerinin kontrolü konularına değineceğiz.
Gerekli malzemeler:
-Orange Pi
-USB to TTL
-Led
-110 ohm direnç
Bu yazıda inceleyeceğimiz programda, ledi kontrol ederek iki farklı şekilde yanması için seri ekrandan komutlar gireceğiz. Bu led yanma durumlarından biri "1 sn aralıklarla ledin yanması" diğeri ise "flash led".
Yukarıda bağlantı şeklimizi görebilirsiniz. Burada ledin artı bacağını bir 110 ohm'luk dirençle birlikte "PA12" portuna yani Orange pi "3." pinine bağlıyoruz. USB to TTL modülümüzün TTL kısmında "Rx" ve "Tx" pinlerini UART1(ttys1 portu) pinleri olan Orange pi "38." ve "40." pinlerine bağlıyoruz. GND kısmını ise Orange pi "6." pinine bağlıyoruz.
Python'da Orange pi pin isimlerine aşağıdaki görselden bakabilirsiniz.
Kod kısmına geçecek olursak bir önceki yazdığımız program olan "yaş-burç uygulaması"na bakabiliriz. Kullanıcının seri ekrana gireceği karakteri alıp belirtilen kategorideki işlemi gerçekleştireceğiz. Fakat bu işlemler pin kontrolü işlemi olduğu için programa ekleme yapmamız gereken birkaç kütüphane var.
from pyA20.gpio import gpio
from pyA20.gpio import port
"gpio.init()" ile giriş çıkış pin işlemlerini başlatıp kullanacağımız pine bir isim verdikten sonra bu bini çıkış olarak tanımlarız.
Seri haberleşme için haberleşme parametrelerini tanımladıktan sonra artık programın ne yapacağını kodlayabiliriz.
Seri ekrana yazdırdığımız bilgilendirici yazıdan sonra kullanıcıdan bir seçim yapmasını istiyoruz ve kullanıcının girdiği karakteri "secenek" değişkenine atıyoruz.
Kullanıcı '1' i girmişse ledi 20 saniye boyunca(10 tur) bir saniye aralıklarla yanıp söndürmek için "gpio.output(pin , durum)" fonksiyonunu kullanıyoruz. Burada programın o an için ne yaptığını da seri ekrana yazdırıyorum ki programı test ederken veya ekran görüntüsü ile sizlere bir şey aktarırken ledin durumunu size aktarabileyim.
Kullanıcı '2' yi girmişse ledin 10 saniye boyunca(50 tur) hızlı bir şekilde yanıp sönmesi için "gpio.output(pin , durum)" fonksiyonunu kullanıyoruz. Aynı şekilde ledin o anki durumu seri ekrana yazılır.
Eğer bu iki seçenekten biri seçilmemişse program uyarı mesajı verir ve tekrar başa döner.
Yukarıdaki görüntüye bakarak programın nasıl ilerlediğini görebilirsiniz.
Kodun tamamına https://github.com/koksalkapucuoglu/asenkron_seri_haberlesme/blob/master/led_kontrol.py deposundan ulaşabilirsiniz.
Bu basit yapıyı kullanılarak ledin yapacağı işlemler çeşitlenebilir, birden fazla pin kontrol edilebilir. Bir sonraki yazıda asenkron seri haberleşme ile fan kontrolünden bahsedeceğim. 12 voltluk bir fanı nasıl kontrol edebiliriz? Eksta olarak bir şeye ihtiyacımız var mı gibi soruları da cevaplandırmış olacağız.
Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.
Python'da Orange pi pin isimlerine aşağıdaki görselden bakabilirsiniz.
Kod kısmına geçecek olursak bir önceki yazdığımız program olan "yaş-burç uygulaması"na bakabiliriz. Kullanıcının seri ekrana gireceği karakteri alıp belirtilen kategorideki işlemi gerçekleştireceğiz. Fakat bu işlemler pin kontrolü işlemi olduğu için programa ekleme yapmamız gereken birkaç kütüphane var.
from pyA20.gpio import gpio
from pyA20.gpio import port
"gpio.init()" ile giriş çıkış pin işlemlerini başlatıp kullanacağımız pine bir isim verdikten sonra bu bini çıkış olarak tanımlarız.
Seri haberleşme için haberleşme parametrelerini tanımladıktan sonra artık programın ne yapacağını kodlayabiliriz.
Seri ekrana yazdırdığımız bilgilendirici yazıdan sonra kullanıcıdan bir seçim yapmasını istiyoruz ve kullanıcının girdiği karakteri "secenek" değişkenine atıyoruz.
Kullanıcı '1' i girmişse ledi 20 saniye boyunca(10 tur) bir saniye aralıklarla yanıp söndürmek için "gpio.output(pin , durum)" fonksiyonunu kullanıyoruz. Burada programın o an için ne yaptığını da seri ekrana yazdırıyorum ki programı test ederken veya ekran görüntüsü ile sizlere bir şey aktarırken ledin durumunu size aktarabileyim.
Kullanıcı '2' yi girmişse ledin 10 saniye boyunca(50 tur) hızlı bir şekilde yanıp sönmesi için "gpio.output(pin , durum)" fonksiyonunu kullanıyoruz. Aynı şekilde ledin o anki durumu seri ekrana yazılır.
Eğer bu iki seçenekten biri seçilmemişse program uyarı mesajı verir ve tekrar başa döner.
Yukarıdaki görüntüye bakarak programın nasıl ilerlediğini görebilirsiniz.
Kodun tamamına https://github.com/koksalkapucuoglu/asenkron_seri_haberlesme/blob/master/led_kontrol.py deposundan ulaşabilirsiniz.
Bu basit yapıyı kullanılarak ledin yapacağı işlemler çeşitlenebilir, birden fazla pin kontrol edilebilir. Bir sonraki yazıda asenkron seri haberleşme ile fan kontrolünden bahsedeceğim. 12 voltluk bir fanı nasıl kontrol edebiliriz? Eksta olarak bir şeye ihtiyacımız var mı gibi soruları da cevaplandırmış olacağız.
Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.
Hiç yorum yok:
Yorum Gönder