Oca 102018
 
214 kez okundu

Raspberry Pi Maceralarım No-08

Raspberry Pi 3 GPIO ile İki Yönde Yürüyen ve Rasgele Yanıp Sönen Işıklar

Önceki yazımda “Yürüyen ışık” örneğini vermiştim. Bu kez iki betik vereceğim. Birinci betikle aynı LED’lerin her iki yönde yürümesini, diğeriyle ise LED’lerin rasgele yanıp sönmesini sağlayacağız.

GPIO iğne yerleşim şemasını bir kez daha paylaşayım:

Raspberry Pi Maceralarım No-07

İki yönlü yürüyen ışık kodlarımız kolay anlaşılır:

Kodların açıklaması

Sadece while döngüsü içindeki ikici for bloğu öncekinden farklı

Bu bloktaki tek fark, for döngüsünün sondan başlayıp, birer birer azalarak sıfıra kadar inmesi…

İlk örneğimizdeki 10 ledli devreyi ikinci betiğimizde de kullanıyoruz.

Kodlarımız şöyle:

Bu betiğimizde sadece while bloğunun içeriği farklı. (Burada random modülünü kullandığımız için betiğin başında bu modülü içeri aktarıyoruz.)

Döngünün her aşamasında önce tüm ledlerin söndüğünden emin olmak için hepsini_sondur() fonksiyonunu çağırıyoruz.

Daha sonra pinler[] listesinden, indis numarasını 0 ile liste boyu arasından rasgele seçtirdiğimiz bir sayıyı kullanarak, rasgele bir LED numarası belirleyip pin değişkenine aktarıyoruz.

Pin numarasını vererek yaktığımız LED’in yanık kalma süresini de 0 ile 9 arasındaki rasgele bir sayıyı 50.0’ye bölerek saptıyoruz. bekle değişkenine atadığımız bu değeri, time.sleep() fonksiyonuna argüman olarak vererek LED’in yanık kalma süresini belirliyoruz.

Kısacası, bu betiğimizde hem yanacak LED’in indisini, hem de yanık kalma süresini rasgele belirledik. Bu süreyi

satırındaki değerlerle oynayarak istediğiniz gibi değiştirebilirsiniz.

LED’lerimizin davranışını gösteren videomuz aşağıda.

Bir sonraki yazımda GPIO 12 numaralı iğnenin PWM (Pulse Width Modulation) özelliğini kullanarak bir LED’in parlaklığını istediğimiz gibi denetlemeyi örnekleyeceğim.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-08

Oca 062018
 
255 kez okundu

Raspberry Pi Maceralarım No-07

Raspberry Pi 3 GPIO ile Yürüyen Işıklar

Önceki yazımda “Yanıp-sönen LED” örneğini vermiştim. Bu kez yan yana dizilmiş 10 adet LED’in sırayla yanıp sönerek bir “Yürüyen Işık” oluşturmasını sağlayacağız.

GPIO iğne yerleşim şemasını tekrar paylaşayım:

Raspberry Pi Maceralarım No-07

Kodlarımız oldukça basit:

Kodların açıklaması

Betiğimizin ilk satırları önceki örneğimizinkiyle aynı. Gerek duyarsanız, açıklamalar için önceki yazıma bakabilirsiniz.

Bu fonksiyonumuz, listedeki tüm pinlerin gerilimini toprak seviyesine düşürerek ledleri söndürüyor.
Aslında pinlerin çoğunda ledleri yakacak gerilim yok. Sadece HIGH (True) konumundakini söndürmek yeterli. Ama başka yerlerde de kullanmak amacıyla bu fonksiyonu hazırladım. Burada da işimizi görüyor.

pini_yak(pin) fonksiyonu iğne numarasını belirttiğimiz bağlantıyı aktif hale getiriyor.

bekle değişkenine 0.2 değerini yükledik. Bu değişken ledlerin yanık kalma süresini belirliyor.
Döngünün içinde her aşamada önce tüm ledlerin sönmüş olmasını sağladıktan sonra sırası gelen ledi yakıyor ve bekle saniye bekliyoruz.

Sonsuz döngüyü sonlandırmak istediğimizde Ctrl-C tuşlarına basmamız gerekiyor.

İlk örneğimizdeki 10 ledli devreyi burada da aynen kullanıyoruz.

Videomuz aşağıda.

Bir sonraki yazımda yine aynı devreyi kullanarak iki yönlü yürüyen ışık yapacağız.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-07

http://python.gurmezin.com/raspberry-pi-maceralarim-no-01/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-06/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-07/

Oca 052018
 
299 kez okundu

Raspberry Pi Maceralarım No-06

Raspberry Pi 3 GPIO ile LED kontrolü

GPIO (General-Purpose Input/Output) sözcüklerinin ilk harfleriyle oluşturulmuş bir terimdir. Genel amaçlı Giriş-Çıkış anlamına gelmektedir.

Raspery Pi 3 Model B kartlarda 40 iğneli GPIO sistemi bulunur.

Raspberry Pi Maceralarım No-06

Bazı eski modellerdeki GPIO 26 iğnelidir. Bu iğneler, 40 iğneli bağlayıcının (konnektörün) ilk 26 iğnesi ile özdeştir. Bu yüzden 40 iğneli sistem, “extended-genişletilmiş” olarak da adlandırılmaktadır.

İğnelerin özellikleri yukarıdaki basitleştirilmiş şemada yer alıyor.

Şimdi ilk örneğimizi geliştirelim:

Kodların açıklaması

GPIO iğneleri 2 farklı yöntemle isimlendirilir. BROADCOM yönteminde iğneler tiplerine göre karışık bir şekilde yer alıyor. Bu yüzden, konuya yabancı kişilerin bu iğnelerin konumunu bulabilmesi için ellerinde bir şema bulundurmaları gerekir.
İkinci yöntemde (BOARD) ise iğneler fiziksel konumlarına göre numaralandırılır. GPIO iğnelerinin köşe iç tarafı 1, dış taraftaki ise 2 numaralı iğnedir. İç taraftakiler 1, 3,…, 39; dış taraftakiler ise 2, 4, …, 40 şeklinde sıralanırlar.
Yukarıdaki şemada iğnelerin her iki yönteme göre sahip oldukları numaralar yer alıyor.
Daha kolay bir yöntem olduğu için ben BOARD yöntemini, yani fiziksel konuma göre numaralandırma yöntemini tercih ediyorum. Bu nedenle verdiğim örneklerde genellikle bu yöntemi kullanacağım.

Örnek kodumuzun hem python, hem de python3 komutuyla çalışmasını sağlamak için ilk satıra kodlama sistemimizin UTF-8 olduğunu tanımlıyoruz. Bu tanıma python3 için gerek yoktur ama, python2 için kullanmamız gerekiyor.

Kod dosyamızı led01.py olarak adlandırdığımızı burada belirtiyoruz.

Python2 ve python3 print fonksiyonlarının aynı şekilde çalışabilmesi için __future__.print_function çağırıyoruz.

RPi kütüphanesi sistem kurulumunda ön yüklenmiş olarak gelir. Kurmamıza gerek yoktur.
GPIO kontrolünü RPi kütüphanesindeki GPIO modülü ile sağlıyoruz. Bu nedenle RPi.GPIO modülünü GPIO adıyla içe aktarıyoruz.
time modülüne ise, LED ışıklarının yanık ve sönük olduğu süreleri denetlemek için gerek var.

# ile kapattığımız bu satırlarda BROADCOM yöntemini seçseydik, 18 numaralı iğneyi kullanmamız gerektiğini görüyoruz. Ama biz BOARD yöntemini kullanacağız ve bize gereken iğne numarası 12. (12 yerine pek çok farklı iğne numarasını da kullanabiliriz. Elbette kablolamayı da ona göre yapmamız lazım.)

6 numaralı iğne toprak (ground) iğnesidir. 9, 14, 20, 25, 30, 34, 39 numaralı iğneler de topraktır. Bunlardan herhangi birini güç kaynağımızın (-) ucuna bağlıyoruz.

Sistemin işimize yaramayacak uyarı mesajlarını bu satırla baskılıyoruz. Uyarıların nasıl çalıştığını görmek isterseniz, # işaretiyle kapatabilirsiniz.

“led” adına atadığımız 12 numaralı iğneyi OUT (çıkış) amacıyla kullanacağımızı tanımlıyoruz. Güç kaynağının pozitif bağlantısı bu uçta etkisini gösterecek.

Burada GPIO modülünün sürüm numarasını görüyoruz.

Asıl döngü burada. while sonsuz döngüsünün içinde 12 numaralı iğnemize “GPIO.HIGH” ile pozitif voltaj yüklüyoruz. Bu durumda 12 numaralı pine bağlı led yanıyor. time.sleep(1) komutuyla 1 saniye bekliyoruz.
Sonra “GPIO.LOW” ile 12 nolu iğnenin voltajını toprak seviyesine düşürüyoruz ve ledimiz sönüyor. Yine 1 saniye bekliyoruz.
Sonra döngünün başına dönüp aynı işlemleri yineliyoruz.
Ledimiz 1 saniye aralıklarla yanıyor ve sönüyor.

Sonsuz döngüyü sonlandırmak istediğimizde Ctrl-C tuşlarına basmamız gerekiyor.

Şimdi devremizi de kuralım. Ama kurduğumuz devreyi sadece bu örneğimizde değil, farklı örneklerde de aynen kullanabilelim. İşte bu yüzden 10 ledli bir devre kuracağız.

Gerekli malzemeler:
1 adet çalışır durumda Raspberry Pi 3 B
10 adet LED
10 adet 220 ohm direnç
1 adet devre montaj tahtası (breadboard)
11 adet atlama (jumper) kablosu

Devre şeması aşağıda.

Raspberry Pi Maceralarım No-06

Videomuzda 12 nolu iğneye bağlı ledimizin yanıp söndüğünü görüyoruz.

Bir sonraki yazımda aynı devredeki ledleri sırayla yakıp söndürerek, yürüyen ışık yapacağız.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-06

http://python.gurmezin.com/raspberry-pi-maceralarim-no-01/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-05/
http://python.gurmezin.com/raspberry-pi-maceralarim-no-06/