Python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Python etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Haziran 2019 Çarşamba

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART

Python kurulum yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra Python Gpio yazısında giriş çıkış pinlerini konuştuk. Bu yazımızda Python dilini kullanarak Orange pi ile bir cihaz arasında nasıl haberleşme kuracağımız konusuna giriş yapacağız.

Uart(Evrensel Asenkron Alıcı-Verici); verici tarafta paralelden seriye dönüştürme işlemi yapan, alıcı tarafta ise seriden paralele dönüştürme işlemi yapan bir IC(entegre devre) çipidir. Yani Uart, işlemci ve seri iletişim portu arasında köprü görevi gören bir donanımdır.

Eski bilgisayarlarda Uart kullanılarak fare, yazıcı ile iletişim kurulurdu. Günümüzde ise GPS alıcıları, Bluetooth modülleri, GSM ve GPRS modemlerinde UART kullanılmaktadır.

Uart bir asenkron seri iletişim şeklidir ve asenkron seri iletişim demek verilerin harici bir saat sinyalinden destek almadan aktarılması anlamına gelir. Bu yüzden Uart haberleşmede; "Baud hızı", "Veri bitleri yığını(asıl verinin taşındığı kısım)" ve "Senkronizasyon bitleri" önemlidir. 

Uart ve veri iletimi ile ilgili daha fazla bilgi için diğer blog sayfamızda bulunan aşağıdaki yazıları inceleyebilirsiniz.



Orange Pi ve Uart

Orange pi kartında da diğer bilgisayar ve elektronik kartlar gibi Uart entegre devresi bulunuyor. Orange pi modellerinin herbirinde aynı sayıda giriş/çıkış pini bulunmuyor. Zero modelinde 26 + 3 pin var. 3 pin diğer 26 pinden ayrı bir şekilde ve Uart haberleşme için kullanılır. Bunun dışında 26 pin içinde de 2 çift Uart pini bulunuyor. Bununla birlikte Zero'da toplam 3 çift Uart haberleşme pini mevcut.


Çoğu Orange pi modelinde ise 40 + 3 pin bulunur. 3 pin ayrı bir şekilde Uart için ayrılmıştır. 40 pini içinde de 3 çift Uart pini bulunuyor. Bununla birlikte toplam 4 çift Uart haberleşme pini bulunuyor.


Yüklemeler ve Ayarlamalar

Yükleme işlemleri için komut satırını kullanacağız.

İlk önce güncellemeleri yükleyelim.

sudo apt-get update && apt-get upgrade -y

Daha sonra Python ile seri haberleşme için gerekli olan "pyserial" kütüphanesini indirelim.

sudo python -m pip install pyserial


Daha sonra "armbianEnv.txt" dosyasını açarak Uart pinlerini aktif ediyoruz. Biz burada 38. ve 40. pin olan Uart1 pinlerini aktif etmek istiyoruz. Bunun için "overlays=uart1" satırını ekliyoruz ve daha sonra cihazı reboot ediyoruz.

Cihaz tekrar açıldıktan sonra Uart1 yani ttyS1'in aktif olup olmadığına bakıyoruz.

dmesg | grep tty



Komut satırına "python" yazarak serial kütüphanesini kullanıyoruz ve test ediyoruz.



Tüm bu işlemlerden sonra seri haberleşme için gerekli bağlantıyı yapıyoruz. Biz burada Orange pi ile bilgisayarı haberleştirmeye çalıştıracağız. Bu yüzden bilgisayara bağlanmak için bir "usb to ttl" modülü kullanıyoruz. "usb to ttl" modülün ttl kısmındaki pinleri Orange pi'ye aşağıdaki gibi bağlıyoruz.



Bilgisayar-aygıt yönetici-bağlantı noktasından bağlandığımız portu öğreniyoruz. Bu port Orange pi'den gönderdiğimiz verileri görmek için ihtiyaç duyduğumuz seri haberleşme arayüzünü kullanırken işimize yarayacak.


Python ve Uart

Python ile seri haberleşme uygulaması yapmak için pyserial kütüphanesini indirmiştik. Bu kütüphanenin bize sağladığı kod yapılarını görmek için pyserialdokümanını incelemek gerekiyor. Birkaç kod yapısını inceleyelim.

Gpio metotları

  • serial.Serial() : Seri haberleşme parametrelerini tanımlarız. Örneklerimizde sadece Uart portu ve Baud hızını tanımlayacağız fakat burada diğer haberleşme parametreleri de tanımlanabilir. Bunlar için yazının başında verdiğim linkleri veya pyserial dokümanını inceleyebilirsiniz. Ayrıca bu fonksiyonu genelde bir isme atayarak, daha sonra bu fonksiyonu kullanacağımız yerlerde kolaylık sağlıyoruz.

  • flushInput() : Her okuma ve yazma öncesi input tamponunu temizler.

  • write() : Seri bağlantı ile karşı tarafa veri göndermemizi sağlar. Buraya girilecek verinin byte olması gerekir. Bu yüzden veri yapıları arası dönüştürme fonksiyonları kullanırız.

  • read() : Seri bağlantı ile karşı taraftan veri okumamızı sağlar. Buradan okunacak veri byte formatındadır. Bu yüzden veri yapıları arası dönüştürme fonksiyonları kullanırız.


Uart Haberleşme Örnekler

İlk örneğimizde temel bir veri okuma ve yazma işlemi yapalım. Bilgisayardan aldığımız bir karakteri Orange pi tarafında bizim belirlediğimiz karakter ile karşılaştıralım ve bilgisayara durum mesajı yollayalım.



Yukarıdaki örnekte görebileceğiniz gibi bilgisayardan aldığımız karakterleri Orange pi tarafında "y" ve "n" karakteri ile karşılaştırarak bir sonuca vardık ve bunu bilgisayara bildirdik. Seri haberleşmede yazma ve okuma komutlarının byte veri döndürmesi dolayısıyla veri tipleri arasında dönüştürme işlemi yaptık.

Burada bir soruya daha cevap vermek istiyoruz. Biz bu programı Orange pi üzerinde çalıştırdığımızda, bilgisayar tarafında bu verileri nasıl göreceğiz ve nasıl veri girişi yapacağız? Bu durumlar için bilgisayarınıza indirebileceğiniz seri haberleşme arayüzü programları var. Putty programı da bu programlardan biri. Fakat biz genelde Hercules programını kullanıyoruz. Orange pi tarafında port kısmına nasıl "/dev/ttyS1" yazıyorsak, bilgisayarda Hercules port kısmına da aygıt yöneticisinde gördüğümüz portu yazıyoruz. Diğer seri haberleşme arayüz programları için aşağıdaki yazıya göz atabilirsiniz. Aşağıdaki yazıda buna daha geniş bir kapsamda değinmiştik.

Örnek kodlara dönecek olursak yukarıdaki örnegi, veri tipi dönüştürmelerini aşağıdaki şekilde ayarlayıp da yapabilirdik.


Bir diger örneğimizde ise hem seri haberleştirmeyi kullanalım hem de gpio pin işlemlerini kullanalım.



Yukarıdaki örnekte, bilgisayardan aldığımız veriye göre Orange pi üzerindeki pinlere bağlı ledi kontrol ediyoruz.



Bir diğer örneğimizde ise bir kontrol otomasyon örneği yapalım. Orange pi'ye bağlı olan bir lamba ve klimayı kontrol eden bir sistem kuralım.




Yukarıdaki örnekte "lambayak", "klimaac" ve "tumsondur" gibi komutları kullanarak, bilgisayardan girdiğimiz komuta göre Orange pi üzerindeki sistemi kontol ediyoruz.

Buradaki örnek kodlara github üzerinden erişebilirsiniz.

Python Uart haberleşme ile ilgili işlemleri sizlere sade ve anlaşılır bir biçimde anlatmaya çalıştık. Gerek gördükçe görsellerle bunu destekledik. Yazıda anlaşılmayan veya yanlış olduğunu düşündüğünüz kısımları iletişim adreslerinden bizlere bildirebilir ve öğretici yazıların daha kaliteli olması için destek verebilirsiniz. Python ile alakalı sonraki yazılarda Python ile i2c-spi portlarından ve sensörlerin kullanımından bahsedeceğiz. Herkese iyi çalışmalar.

20 Haziran 2019 Perşembe

ORANGE PI PYTHON GPIO

ORANGE PI PYTHON GPIO


Python kurulum yazısında Orange pi'de Python konusuna giriş yapmıştık. Bu yazımızda Python dili ile Orange pi'deki giriş çıkış pinlerini(gpio) nasıl programlayacağımızı inceleyeceğiz.


Yüklemeler

Yükleme işlemleri için komut satırını kullanacağız.

İlk önce güncellemeleri yükleyelim.

sudo apt-get update && apt-get upgrade -y

Daha sonra gpio pinlerini Python ile kontrol etmek için gerekli olan kütüphaneyi indirelim.

Zero modelleri için;

sudo git clone https://github.com/nvl1109/orangepi_zero_gpio.git

Diğer modeller için;

sudo git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

Elimizdeki modele göre Python gpio kütüphanesi yükledikten sonra kurulum işlemine yapıyoruz.

cd orangepi_PC_gpio_pyH3

sudo python setup.py install



Yükleme işlemi bitti fakat Python gpio kodlarını, yapılarını anlamak için indirdiğimiz dizine giderek örnekleri inceleyelim.


Python Kütüphanesi İnceleme


"orangepi_PC_gpio_pyH3/examples" dizinine giderek, "blink_led.py" kodunu açıp çalıştıralım. Başlangıçta elinizde elektronik malzemeler olmasa bile, bizim gibi koda birkaç satır ekleyerek durumu terminal üzerinden görebilirsiniz. Buradaki asıl amaç yüklemelerin tam olduğunu ve kodun hata vermediğini test etmek.




Eğer program yukarıdaki gibi çalışıyorsa, artık kendi programımızı yazmak için gerekli kodları, pin diyagramını vs. öğrenebiliriz.

İlk çalıştırdığımız koda bir göz attığımızda init(), setcfg() gibi kodlar olduğunu görüyoruz. Lede bir değer atmak için gpio.output() kodunu görüyoruz. Şimdi indirdiğimiz kütüphane ile hangi yapıları ve kodları kullanabildiğimize bakalım.

Gpio metotları

  • init() : Modülün başlatılmasını sağlar. Program dosyasında her zaman ilk çağrılır.

  • getcfg() : Gpio'nun mevcut konfigürasyonunu okur.

  • setcfg() : Gpio durumunu(giriş/çıkış) ayarlar.

  • input() : Gpio'nun mevcut konumunu(0/1) okur.

  • output() : Gpio'nun konumunu ayarlar.

  • pullup() : Pull-up/pull-down durumunu ayarlar.

Yukarıdaki metotların kullanabileceği değerler :

  • LOW / HIGH : 0 /1

  • INPUT / OUTPUT : 0 / 1

  • PULLUP / PULLDOWN : 1 / 2

Python gpio kütüphanesi kullanırken gpio pinlerini tanımlarken iki farklı isimlendirme kullanabiliyoruz. Bu isimlendirmeleri "port" ve "connector" modülleri ile birlikte kullanabiliyoruz.

Port isimlendirmesi bizim daha aşina olduğumuz isimlendirme biçimi. Terminalden Python Shell'e girerek bu adlandırmanın nasıl olduğunu görebiliriz.

python

>>>from pyA20.gpio import port

>>>dir(port)


Port adı ile adlandırmada aşağıdaki pin diyagramını kullanabiliriz.


Yukarıdaki pin diyagramına bakarak istediğimiz pini programlayabiliriz. Örneğin;

from pyA20.gpio import port

gpio.setcfg(port.PA6, OUTPUT)

Yukarıdaki kod "PA6" pinini, yani 7.pini çıkış olarak ayarlar.

Connector isimlendirmesi için de Python Shell'e girerek bu adlandırmanın nasıl olduğunu görebiliriz.

>>>from pyA20.gpio import connector

>>>dir(connector)


Kullandığımız Python gpio kütüphanesi ilk olarak A-20 OlinuXino-Mino kartının yapısı düşünülerek yazılmıştır. Aşağıdaki resme bakabilirsiniz. Bu yüzden bağlayıcı(connector)(Pin grubu) adı ile adlandırma, o kartın yapısı düşünüldüğünde kolaylık sağlayabilir. Fakat Orange pi'de pinler tek grupta olduğu için bu adlandırmanın bizim açımızdan bir avantajı yok.



Port adı ile adlandırmada aşağıdaki pin diyagramını kullanabiliriz.



Orange pi'de tek grup gpio grubu olduğu için, eğer bu isimledirmeyi kullanmak istiyorsan bağlayıcı grup ismini sürekli "gpio1" olarak kullanmak gerekecek. Örneğin;

from pyA20.gpio import connector

gpio.setcfg(connector.gpio1p7, OUTPUT)
Yukarıda "gpio1" pin grubunu, "p7" ise 7.pin olduğunu ifade eder. Yukarıdaki kod 7. pini çıkış olarak ayarlar.


Python Gpio Programlama

Python'da gpio pinlerin kontrol etmemize olanak sağlayan metotları yukarıda açıkladık. Şimdi bunları örnek programlarla açıklayalım.

from time import sleep
from pyA20.gpio import gpio
from pyA20.gpio import port

#gpio islevlerini baslat.
gpio.init()

#gpio atamasi yap.
led = port.PA6
gpio.setcfg(led, gpio.OUTPUT)

#ledlerin durumunu ayarla(high/low)
while True:
        gpio.output(led, gpio.HIGH)
        sleep(1)
        gpio.output(led,gpio.LOW)
        sleep(1)

Yukarıda temel bir led programı var. Port numarası ile isimlendirme kullanılmış. Yukarıdaki programda, PA6 portuna bağlı led 1'er saniye aralıkla açık ve kapalı konumda oluyor.

Bağlantı şekli ise aşağıdaki gibidir.


from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()


gpio.setcfg(port.PC4, gpio.OUTPUT)
gpio.setcfg(port.PC7, gpio.INPUT)

gpio.pullup(port.PC7, 0) #Pullup'ları temizler.
gpio.pullup(port.PC7, gpio.PULLDOWN) #PC7 pini için Pulldown'u aktif eder.

while True:
        if gpio.input(port.PC7) == 1:
         gpio.output(port.PC4, gpio.HIGH)
        else:
         gpio.output(port.PC4,gpio.LOW)

Yukarıda program ise buton kontrollü bir led programı. Butona bastığımızda led yanıyor. Burada "Pulldown" ve "input" metotlarını kullandık. Pin adlandırılmasında da yine port kütüphanesini kullandık.

Bağlantı şekli ise aşağıdaki gibidir. Neden pull-down drenci kullandığımızı burada açıklamıştık.



Python gpio ile ilgili işlemleri sizlere sade ve anlaşılır bir biçimde anlatmaya çalıştık. Gerek gördükçe görsellerle bunu destekledik. Yazıda anlaşılmayan veya yanlış olduğunu düşündüğünüz kısımları iletişim adreslerinden bizlere bildirebilir ve öğretici yazıların daha kaliteli olması için destek verebilirsiniz. Python ile alakalı sonraki yazılarda Python ile haberleşme portlarının ve sensörlerin kullanımından bahsedeceğiz. Herkese iyi çalışmalar.

19 Haziran 2019 Çarşamba

ORANGE PI PYTHON KURULUM

Orange Pi Python Kurulum


Python; genel amaçlı, nesneye yönelik, kolay okunabilir ve anlaşılabilen bir programlama dilidir. Orange pi ile birlikte kullanım alanı çok geniştir. Python'ı kullanarak ister görevler oluşturun ister Orange pi pinlerini kontrol edin ister algoritmalar oluşturup işlemler yapın. Orange pi ile bir sensör kullanırken Python ve C'ye sık sık başvuracağız. Bu yazımızda "Python nasıl yüklenir?"e bakacağız.


Yüklemeler 



Yükleme işlemleri için komut satırını kullanacağız.

İlk önce güncellemeleri yükleyelim.

sudo apt-get update && apt-get upgrade -y

Şu an Python'ın iki versiyonu mevcut; Python2 ve Python3. Python2 desteği, 01.01.2020 tarihinde sona ereceği için biz adımlarımızı Python3'e göre yapacağız ve sizlere de Python3 kullanmayı tavsiye ederiz.

Biz bu yazıyı yazarken Armbian Bionic son sürümü kullanıyoruz ve bu işletim sistemi Python3 yüklü bir şekilde geliyor. Python3 yüklü olanlar için de bu yazıda yararlı birkaç bilgi vereceğiz.

Orange pi'de normalde Python2'yi çağırmak istediğimizde "Python" komutunu, Python3'ü çağırmak istediğimizde ise "Python3" komutunu kullanırız. Genelde diğer platformlarda da bu şekilde adlandırılır. İndirilen son sürüm işletim sistemlerinde Python2 yüklü olmadığı için komut satırına "Python" yazdığımızda hata verir. Bu yüzden biz genel olarak Python3 ile çalışacağımızdan Python3'ü çağırmak için "Python" komutunu kullanabiliriz.



Yüklemelere başlayalım. Python3, Python3-pip ve Git yüklüyoruz.

sudo apt-get install -y python3 git python3-pip





Yukarıda gördüğünüz gibi Python3'ün yanında Pip ve Git yükledik. Bunların ne anlama geldiğine bakalım.

PyPI Nedir?

PyPI, Python topluluğu tarafından geliştirilen ve paylaşılan bir yazılım deposudur.

Pip Nedir?

Pip, Python'daki paketleri indirmemizi ve kaldırmamızı sağlayan bir paket yöneticisidir. PYPI'daki paketleri Pip komutu ile birlikte rahatça indirebilir ve kullanabiliriz.

Git Nedir?

Git bir versiyon kontrol sistemidir. Git; yazdığınız kodları, projeleri internet üzerinde tutmanızı ve yönetmenizi sağlayan bir kontrol sistemidir. Bu sayede başka biri tarafından Git üzerinde tutulan bir kütüphaneye, projeye ulaşabiliyoruz.


Kurulum tamamlandıktan sonra Python3 çalıştırmak için "Python" komutunu kullanmak için gerekli komutu girelim. Siz burada "3.6.8" yerine sizde bulunan Python sürümünü girin.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6.8





Son olarak Pip gibi bir paket ve kütüphane yüklemek için bize lazım olabilecek Setuptools güncellemesini yapıyoruz.

sudo pip3 install --upgrade setuptools



Python'ı kurduktan sonra bir kaç temel program yazalım. Girilen sayının asal olup olmadığını söyleyen bir program yazalım.



Python kurulumu ile ilgili işlemleri sizlere sade ve anlaşılır bir biçimde anlatmaya çalıştık. Gerek gördükçe görsellerle bunu destekledik. Yazıda anlaşılmayan veya yanlış olduğunu düşündüğünüz kısımları iletişim adreslerinden bizlere bildirebilir ve öğretici yazıların daha kaliteli olması için destek verebilirsiniz. Python ile alakalı sonraki yazılarda Python ile haberleşme ve gpio portlarını kullanımından bahsedeceğiz. Herkese iyi çalışmalar.

30 Kasım 2018 Cuma

ASENKRON SERİ HABERLEŞME LAMBA VE KLİMA OTOMASYON UYGULAMASI

Asenkron Seri Haberleşme Lamba ve Klima Otomasyon Uygulaması

Bu yazımızda bir otomasyon uygulaması yapacağız. Bunun diğer programlardan farkı seri ekrandan bir komut gireceğiz ve her komutun Orange pi üzerinde yapacağı bir işlem olacak. 

Daha önceki yazılarda genelde yapmak istediklerimizi '1', '2' gibi gibi isimlendirip kullanıcılardan bu kategori sırasına göre bir giriş yapmasını istiyorduk. Bu uygulamada kullanıcıdan yapmak istediği işlem için belirlediğimiz komutları girmesini isteyeceğiz. Lambanın yanması için kullanıcının bizim belirlediğimiz "lambayak" gibi bir komut girmesi lazım. 

Bu aşamada önceki programlarda kullandığımız kullanıcıdan veri alma ve veri gönderme bilgimizi kullanacağız fakat burada ek olarak bir kaç işlem daha uygulayacağız.


Program kodlarının yazmaya başlayalım. Kütüphane olarak burada yapacağız işlemler için gerekli olan serial, time, gpio, port kütüphanelerini ekliyoruz. Daha sonra kullanacağız pinlere program içinde kolaylık olsun diye isim atıyoruz. Ledi "PC4" fanı ise "PD14" pinine bağlamayı düşündüğümüz için bu şekilde bir atama yapıyoruz. Daha sonra kullanacağımız pinler birer çıkış pini olacağı için "gpio.setcfg()" ile pin giriş/çıkış durumunu ayarlıyoruz.

Seri haberleşme parametrelerini tanıttıktan sonra hem seri ekrana hem de Orange pi terminal ekranına programın başladığına dair bir yazı yazdırdıktan sonra program içinde kullanılacak komutları, kullanıcıya bildirmek için seri ekrana yazdırıyoruz. Siz bu komutları çeşitlendirebilir, sadeleştirebilirsiniz.


Burası aslında bu programın daha teorik olan kısmı. Kullanıcıdan bir veri almamız lazım. Bu veri string veri tipinde ve boyutu belli değil. Normalde ser.read(n) ile belirli sayıda karakterde veri alabiliyorduk fakat burada girilecek komutların hepsi aynı uzunlukta değil. Bu yüzden tek seçeneğimiz ve bu da "ser.readline()".

Bu komutu daha önce yaş-burç uygulamasında kullanmıştık.Bahsettiğim uygulamada doğum tarihini ay-gün şeklinde alırken "readline()" ile almış ve bunu "int(secenek)" ile sayıya dönüştürüp devam etmiştim ve bir sıkıntı çıkmamıştı. Örneğin ben seri ekranda '123' girip enter'a tıkladığımda bu veri Orange pi'ye '123Enter' diye gelir.  Bunu aldığımız veriyi binary formatına dönüştürüp ekrana yazdırdığımızda rahatça görürüz. Sonrasında ben gelen bu veriyi integer veri tipine dönüştürdüğümde 'enter' karakteri atılır ve geriye '123' sayısı kalır. Bu işlemi yaparken bir sorun çıkmaz. Bunu koda çok küçük bir ekleme yapıp görelim.


Koda aldığımız verinin binary halini ve sayı halini ekrana yazdıran 2 satır kod ekledim.


Burada da gördüğünüz gibi '1', '2' ve '3' karakterlerinin yanı sıra iki karakter daha gelmiş. Bunlar enter'a bastığımız için gelen karakterler. Yukarıda enter karakteri dedim fakat enter iki karakteri temsil eder. Buna bilgisayarda kullanabileceğimiz seri arayüz programları yazısında detaylıca değindim. Kısaca enter'a bastığımızda Orange pi'ye veri olarak CR(13-1101) ve LF(10-1010) gelir. Bunun sebebi windows'da satır sonu bu şekilde belirtiliyor. Biz gelen veriyi sayı formatına dönüştürdüğümüzde bu karakterler atılıyor fakat veriyi string(karakter dizisi ) veya karakter formatında kullanırsak enter karakterini de göz önünde bulundurmak gerekiyor.

Gelen veriyi bir string(karakter dizisi) ile karşılaştıracaksak 'enter' ile gelen karakterleri de göz önünde bulundurmak gerekiyor. Bunun için karşılaştırma yapacağımız verilerin sonuna "\r\n" eklemesi yaparız.  Burada "\r" ifadeyi satır başına döndürür yani CR işlevi görür. "\n" ise bir alt satıra indirir bu da LF işlevi görür.


Koda sadece gelen veriyi binary haline döndürmek için ekleme yapıp  Orange pi'ye gelen veriyi görelim.


Yukarıdaki görüntüden program çıktısına bakarsak bir veri girip enter'a tıkladığımızda(ser.readline() ile veri aldığımız için ) son iki karakterin enter karakteri olduğunu görürüz.

Bu yüzden alınan veri ile istediğimiz bir karakteri karşılaştırma yaparken bu karakterin sonuna "\r\n" ekleriz. Örneğin girilen veriyi "lambayak" ile karşılaştırmak için; if secenek =='lambayak\r\n' diye kodlamak gerekiyor.

Bu şekilde istediğimiz komutları if yapısında karşılaştırarak ayarlayabiliriz. Daha sonrasında her komut için yapılması gereken işlemleri if bloğuna yazabilirsiniz.

 

Son olarak hem seri ekrana hem de Orange pi terminaline kullanıcıya kolaylık sağlamak için Orange pi çıkışlarının durumunu yazdırıyoruz. Burada pin okumak için "gpio.input(pin ismi)" kullanıyoruz. 

Bu şekilde lamba ve klima için 4 farklı durum olabilir. Lamba açık klima kapalı, lamba açık klima açık, lamba kapalı klima açık ve lamba kapalı klima kapalı. Her bir durum için ekrana toplu durum çıktısı yazdırıyoruz.


Yukarıdaki görüntüye bakarak programın nasıl ilerlediğini görebilirsiniz.

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.

29 Kasım 2018 Perşembe

ASENKRON SERİ HABERLEŞME İLE FAN KONTROLÜ

Asenkron Seri Haberleşme ile Fan Kontrolü

Bu yazımızda asenkron seri haberleşme ile bilgisayardan aldığımız verilerle Orange pi'ye bağladığımız "led" ve "fan"ı kontrol edeceğiz. 

Bu öğretici seriye başlayıp haberleşmenin teorik kısmını anladıktan sonra öğrendiklerimizi bir de örnek uygulamalarla beraber kullanmamız gerekiyor. Bunun için şu anlık "python" ve "c" üzerine örnek uygulamaları göreceğiz ve kendimiz bu uygulamalara ekstra bir şeyler eklemeye çalışacağız. 

İlk aşamada "python" ile seri haberleşme nasıl yapılıyor, ne bilmemiz gerekiyor bunlara değindik. Sonra elimizdeki örnek kodu ve python'daki kodlama bilgilerini kullanarak bu örnek uygulamaları zenginleştirmeye çalıştık. 





Örnek uygulamada seri ekrandan girilen belirlediğimiz verilerde Orange pi terminal ekranına bir şey yazdırdık. Sonrasında yaş-burç uygulamasında seri ekrandan girilen verileri birden fazla karakter(string) olarak aldık ve bu verileri kullanarak tekrar seri ekrana bir veri yazdırdık. Sonrasında seri ekrandan alınan veri ile Orange pi çıkış pinini kontrol ettik. 

Bu yazıda fan kontrolü için yine bir pini kontrol edeceğiz fakat sadece bu pini kontrol etmek fanı döndürmek için bize yeterli olmayacak. Burada ekstra olarak transistör kullanımını da göreceğiz ve bunu projemizde uygulayacağız.

Elimizde üzerinde 12 V yazan bir fan var ve biz bunu döndürmek istiyoruz. Tabi bu 12 V' a kadar besleme yapabiliriz demek. Biz de bunu direk Orange pi pinine bağlıyoruz ve bu pini '1' konumuna getirdiğimizde fanın çalışmadığını ya da çok yavaş döndüğünün görüyoruz. Buna sebep pin çıkış geriliminin 3 V - 3.3 V olması ve çıkış akımını düşük olması gösterilebilir. Direk 5 volta bağlasak bu sefer de kontrol edeyeceğiz. Fan sürekli döner. Bu yüzden kullanımı da yaygın olan "S0850 NPN" transistörünü kullanacağız.


İlk önce kullanacağımız transistörü biraz inceleyelim. Biz burada "S0850 NPN" transistörünün akım yükseltme ve anahtarlama özelliğini kullanacağız.

Temel olarak 2 tip transistör vardır. Bunlar BJT ve MOSFET transistörler. Bizim kullanacağımız transistör BJT tipi  NPN transistördür ve genel olarak transistörlerin 3 bacağı olur.  BJT tipinde bu bacaklar yayıcı(emitter), baz(base) ve toplayıcı(collector) bacaklarıdır.  

NPN transistörleri açık konuma geçirmek için baz(base) kısmından pozitif akım geçmeli. Buna ikinci geilim kaynağı diyoruz. İlk gerilim kaynağının artısı ise fana(yüke), fandan da toplayıcıya(collector) bağlanır.

Base gerilimi bizim Orange pi piniden çıkan gerilim olacak. Fana bağlanacak gerilim ise Orange pi üzerindeki 5 V pinidir.

Yukarıda gördüğünüz gibi toplayıcı(collector) 500 miliampere kadar akım çekebilir.

Bağlantımız ise şu şekilde olacak. 

  

Base bacağını kontrol edeceğimiz Orange pi pinine bağlayacağız. Bu pin aslında devrenin anahtarı konumda. Eğer biz bu pine '1' vermezsek devrede fan dönmez.

Yapacağımız uygulamanın ikinci kısmında ise yine led kontrolü yapacağız. Bunun için detaylı bilgiye bir önceki yazıdan bakabilirsiniz.


Bu programda yine 2 seçeneğimiz var ve bu seçeneklerden ilk 1 saniye aralıklarla ledin yanması. Diğer bir seçenek ise fanı döndür seçeneği. Programdan sürekli bu ikisinden birini seçme hakkın olsun diye  olsun diye bu işlemlerim süresini sınırlıyoruz. Ledin yanma sönme durumu ve fanın dönmesini 10 saniyeye ayarlıyoruz. Böylece bir işlem bittiğinde bize tekrar led mi fan mı diye sorsun.


Eğer kullanıcı seri ekrana '2' girerse fanı kontrol ettiğimiz transistörün baz bacağına pozitif bir gerilim uyguluyoruz ve böylece fan çalışmaya başlıyor. 10 saniye sonra bu pini sıfırladığımızda fan duruyor.

Else durumunda kullanıcıya "sadece 2 kategorimiz vardır" ve "lütfen bir kategori seçiniz" dedikten sonra bu döngüden çıkıp tekrar bir alttaki mesajı da yazmasın diye burada continue kullanıyoruz. Böylece program döngü başına geliyor ve bizden tekrar bir giriş bekliyor.



Yukarıdaki görüntüye bakarak programın nasıl ilerlediğini görebilirsiniz.
Led ve fanı kontrol edebildiğimize göre bir sonraki yazıda küçük bir otomasyon programı yazacağız. Bu sefer işlemlerimizi string komutlar halinde seri ekrana yazacağız. Örneğin "ledyak" gibi. Bu tarz komutlar belirleyip programı ona göre yönlendireceğiz. Her program döngüsünde ekrana kontrol ettiğimiz çıkışların son durumunu yazdırarak kullanıcının güncel durumu görmesini sağlayacağız. Programı çalıştırdığımızda bir giriş parolası isteyeceğiz. Bu şekilde basit ama temel bir kaç ekleme yapacağı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.

Kaynakça:

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...