27 Aralık 2018 Perşembe

ORANGE PI VE GÖRÜNTÜ ÇIKIŞLARI - II

Orange Pi ve Görüntü Çıkışları - 2


Serimizin ikinci yazısında lcd ekranlara bakacağız. Bunun için Orange pi üretici firması olan Xunlong firması tarafından üretilen lcd ekranlar mevcut. Şuan için 5 inç ve 7 inç seçenekleri var. 


Her iki lcd yanında bir kart ile kullanılıyor. Lcd ile kullanılan kartı otg girişinden beslememiz gerekiyor. Daha sonrasında Orange pi kartı ile lcd kartı arasındaki bağlantıyı da hdm-hdmı kablo ile yapıyoruz.
















Burada 5 inç lcd ve Orange pi plus 2e modelini kullanıyorum. Bağlantılarını ve beslemelerini yaptıktan sonra ve "armbian xenial 5.65 desktop" imajını sd karta yazdıktan sonra Orange pi' yi çalıştırıyorum. 

İlk ön yüklemede bizden root için yeni şifre oluşturmamızı ardından yeni bir kullanıcı adı ve şifre oluşturmamız isteniyor. Tüm bu işlemlerden sonra başlangıç için ekran çözünürlüğünün varsayılan olarak "1280*720" olduğu belirtiliyor. Kullandığımız 5 inç lcd için Orange pi sitesinde verilen orange "640*480". Bu çözünürlük ayarını iki şekilde ayarlayabiliriz. script.bin ve h3disp. Her iki yöntemle de denedim fakat "1024*768" ve "1280*720" dışında bir çözünürlükte çalıştıramadım. Bu çözünürlük ayarlarında çalışıyor fakat hem ekran hem de yazılar net değil.





Yukarıda denediğim işletim sistemleri Armbian Xenial ve Ubuntu LXDE desktop. 

Ekran netliğin iyi olması için çözünürlüğün kullandığımız ekran için en uygun olanı olması gerekiyor. Fakat biz bu çözünürlük değerlerini(5 inç için 640*480) ayarladığımızda ekranda görüntü oluşmuyordu. 

script.bin dosyasını yapılandırarak pll_video değerlerini değiştirdim fakat bu sefer de ekranın arka rengi yeşil oldu ve kötü bir görüntü oluştu.


Bir sonraki aşamada son sürüm olan Ubuntu bionic'i kullandım. Şuan için bu sürüm masaüstü kurulumu hazır şekilde indirilmiyor. Terminal ekranında armbian-config ile kurulum yapmamız gerekiyor. Burada "install desktop with browser" ile yüklemeyi başlatacağız.



Kurulumu bu şekilde Putty ile bağlanarak terminal üzerinden yaptıktan sonra cihazı tekrar başlatıyoruz. Kurulumdan sonra armbian-config menüsü aşağıdaki şekilde olacaktır.



Ekran açıldığında settings=>display diyerek açılan ekrandan çözünürlüğü kolayca ayarlayabiliriz.
Denemelerime göre 5 inç lcd ekran "640*480" ve "800*600" gibi ekran çözünürlüklerinde çalışıp "1280*768" ekran çözünürlüğünde çalışmıyor. Bu yüzden başlangıçta ekran direk açılmayabilir. Böyle bir durumlar karşılaştığınızda herhangi bir monitör ile Orange pi'yi bağlayıp settings=>display sekmesinden "Configure new displays when connected" kutucuğunu işaretleyin. Daha sonra cihazı tekrar başlatın ve bu sırada lcd ekranı Orange pi'ye bağlayın.


 Önerildiği gibi "640*480" çözünürlükte ekrandaki yazılar net bir şekilde okunabilmektedir.


Ekran ayarlarını son sürümde bu şekilde kolayca yapabiliyoruz. Fakat eski çekirdekte yukarıda da gördüğünüz gibi ekran ayarlarını tam istenilen şekilde yapamıyoruz. Eğer eski çekirdek kullanıyorsanız en uygun ayarların nasıl yapılacağını dair araştırmalarım devam ediyor ve eğer kesin bir çözüm bulursam bunları da sizle paylaşmaktan mutluluk duyarım.

5 inç ekranı incelediğimizde göre 7 inç ekranla çalışmaya başlayalım. Yukarıda belirttiğim "Configure new displays when connected" kutucuğunu işaretlemiş iseniz 5 inç ekranı çıkarıp yerine 7 inç ekran çıkardığımızda ve kartı yeniden başlattığımızda ekran çözünürlüğü otomatik olarak 7 inç ekrana göre ayarlanacak.


7 inç lcd ve boardunun görüntüsü yukarıdaki gibidir.  

Ekran çözünürlüğü ayarlarına bakmak için settings => display yolunu izliyoruz.


Burada kırmızı kutucuk içine aldığım kısımda LTM 40" olduğunu görüyorsunuz. 5 inç ekranı bağladığımızda ise buranın LTM 32" yazdığını görürüz. Bu iki seçenek bulundukları lcd'yi tanımlar. 7 inç ekran ile en iyi görüntüyü "800*600" de aldım. Geri kalan seçenekleri de denedim fakat bir kısmında ekran çok titriyordu bir kısmında ise görüntü kayboluyordu.  

5 inç lcd, 7 inç lcd ve lcd'ler için kullanılan board'ların büyüklüğü hakkında bilgi sahibi olmak isterseniz alttaki fotoğrafa bakınız.



Bu yazıda asıl amacım Orange pi ile kullanılabilen ekranları incelemekti fakat elimde şuan dokunmatik ekran olmadığı için sadece 5 inç ve 7 inç ekranları inceledim fakat sonra bu yazıya eklemeler olacak. 

Ayrıca eski çekirdekte ekranların kullanımı istediğimiz gibi net değil. Bu konuyla alakalı da bir şeyler öğrenirsem buraya eklemeler yapacağım.

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






12 Aralık 2018 Çarşamba

ORANGE PI VE GÖRÜNTÜ ÇIKIŞLARI - I

Orange Pi ve Görüntü Çıkışları -1

Bu seride  Orange pi'den görüntü çıkışı almak istediğimizde, Orange pi bize ne gibi imkanlar sağlıyor bundan bahsedeceğim.


























Yukarıda Orange pi Pc Plus , Orange pi genişleme kartı ve Orange pi Win modellerindeki  görüntü çıkış yerlerini görüyoruz.  Bunlar HDMI, CVBS  ve LCD çıkışları.Bu çıkışların dışında pinleri kullanarak da dışarıya çıktı verebiliriz. I2C ile 2x16 LCD kullanabilir, I2C veya SPI ile bir OLED ekran kullanabiliriz. Bunların dışında SPI ile dokunmatik TFT ekran kullanabiliriz. Bunları sıra sıra inceleyeceğimiz bir yazı dizisi olacak.

HDMI çıkışı

İlk olarak HDMI çıkışına bakalım. Orange pi özelliklerine baktığımızda sırayla ;

- HDCP ile HDMI çıkışını destekler.

- HDMI-CEC' i destekler.

Peki bu ifadeler nedir?

HDCP, High Bandwith Digital Content Protection  harflerinin kısaltması olup "Yüksek Bant Genişliği Dijital İçerik Koruması" anlamına gelir. Bir aygıttan televizyonunuza gelen dijital telif hakkıyla korunan içeriği korumaktır.Örneğin Netflix'i izlemek için HDMI çıkışının HDCP desteklemesi gerekir.

CEC, Consumer Electronic Control harflerinin kısaltması olup "Tüketici elektroniği kontrolü" anlamına gelir. Bu özelliğe sahip çıkışlarda HDMI ile bağlantı sağladığımızda cihaz programlama ya da kurulum yapılmadan tek bir kumanda ile kontrol edilebilir. ekran dahil 10 farklı cihaz HDMI üzerinden kontrol edilebilir.

HDMI çıkışı yukarıdaki özelliklerle birlikte HDMI veya HDMI'dan dönüştüren(HDMI to VGA gibi) kablolarla bir ekrana bağlanıp görüntü elde edilebilir. HDMI ile görüntü alabileceğimiz çıkışlardan bahsedeceğim. 

HDMI kablo ve dönüştürme ile bağlantı


Bu tarz bir monitöre Orange pi'den aldığımız HDMI çıkış ile 3 farklı şekilde görüntü verebiliriz.

- HDMI-HDMI kablo



- HDMI to VGA kablo 




















- HDMI to DVI kablo



Bu kablolardan herhangi biri ile bağlantı yapıp görüntü alabiliriz. Bu bağlantıyı düzgün bir şekilde yapmanıza rağmen bazı durumlarda ekranda görüntü göremeyebilir veya sadece pembe bir görüntü görebilirsiniz.  Burada Orange pi'yi daha aktif kullanabilmek için bilmemiz gereken bir dosyaya değineceğiz. 

Script.bin dosyasındaki değerlerini ne anlama geldiğini bilmek lazım. Script.bin dosyası direk okunamıyor fakat bin2fex dönüşümü ile bu dosyayı fex formatına dönüştürüp herhangi bir metin editörü (örneğin nano) ile açıp düzenleyebiliriz. Burada bizim en büyük yardımcımız fex rehberi olacak.

Yine aynı şekilde böyle bir sorunla karşılaştığımızda kullanabileceğimiz bir yöntem daha var, h3disp kullanımı. Buna orange pi'de ekran çözünürlüğü yazısında değinmiştim fakat burada yeni eklemeler olduğu için burada bir kez daha değineceğiz.



Yukarıdaki fotoğrafta monitörün HDMI çıkışı olmadığı için HDMI to VGA dönüştürücü kullandık ve ortaya çıkan sonuç bu. Ekran pembe renk ve bu durumda ne yapabiliriz? Sadece yukarıdaki durum için değil "out of range" hatası veya hdmi kabloda sıkıntı olmamasına rağmen ekranda bir şey gözükmemesi gibi durumlarda ne yapabiliriz?

İlk olarak "script.bin" dosyasını yapılandırarak bu sorunu çözelim. 

cd /boot diyerek boot dizinine giriyoruz.

sudo cp script.bin script.bin.bak diyerek dosyamızı yedekliyoruz. İlk seferde bu şekilde yedeklemeniz önerilir.

sudo bin2fec script.bin script.fex diyerek dosyamızı fex formatına dönüştürüyoruz.

sudo nano script.fex diyerek dosyamızı açıyoruz.


Burada disp_init başlığı altına geldiğimizde bazı değerler olduğunu görüyoruz. Burada yararlanacağımız kaynak fex klavuzu. Bu klavuzda dosyadaki değerlerin ne anlama geldiklerini, ne gibi değerler verebildiğimizi görebiliyoruz. 


Kısaca şu anki ayarlarımızdan bahsetmek gerekirse çıkış tipi HDMI fakat çıkış çözünürlüğü 720*480. Bu değerleri kullandığınız monitör için ideal olan 1024*768 veya 1280*720 gibi seçeneklere ayarlayacağız. Eğer başlangıç için bunun nasıl yapılandıracağınızı bilmiyorsanız Orange pi sitesinde örnek yapılandırmalar mevcut.  Buradaki yapılandırmayı  kullanalım ve aynı zamanda bu ayarları da denemiş olalım.


Bu ayarlara bakacak olursak çıkış tipi HDMI. Çıkış çözünürlüğü mod 5 olarak ayarlanmış yani 1280*720. Bu ayarları yaptıktan sonra CRTL+X diyip yapılan değişikleri kaydediyoruz ve dosyadan çıkıyoruz.

sudo fex2bin script.fex script.bin diyerek dosyamızı tekrardan bin formatına dönüştürüyoruz.

Daha sonra cihazı "reboot" komutu ile Orange pi'yi tekrar başlatıyoruz.



Gördüğünüz gibi görüntümüz artık düzgün.

Aynı işlemi h3disp komutu ile yapalım.

H3disp komutunun kaynak dosyasına buradan bakabilirsiniz. H3disp komutu aslında bizim işlemleri tek komutla halletmemize olanak sağlar. Kullanacağını ekranın çözünürlüğüne uygun seçeneği bu komutla birlikte giriyoruz ve cihazı tekrar başlattığımızda bu ayarlar uygulanmış oluyor.



Temelde h3disp komutu da script.bin dosyasını yapılandırarak çalışır. Örneğin biz "sudo h3disp -m -32" dedik, 32 değeri yukarıdaki tabloya bakarsanız 1024*768 değerlerine denk geliyor. H3disp komutu da bu değerleri script.bin'e yazar. Bu sayede işiniz daha çabuk olur.

H3disp komutu ile kullanabileceğimiz yeni özellik ise framebuffer ayarlaması. Bu özellikle beraber script.bin dosyasına yazmaya gerek kalmadan işlemlerimizi halledebiliyoruz.



Ekstra olarak DVI kullandığımızda bunu da h3disp ile belirtmemiz gerekiyor. H3disp kullanım örneklerinde de gösterildiği gibi "h3disp -m 1080p60 -d" şeklinde belirtmemiz gerekiyor.

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


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:

28 Kasım 2018 Çarşamba

ASENKRON SERİ HABERLEŞME İLE LED KONTROLÜ

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.

Ö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...