Bu projede pull up ve pull down direçlerini kullanarak Led kontrolü yapacağım.
Bu uygulamada ihtiyacımız olan bileşenler:
2x push button
2x Led
2x 10k direnç
2x 220R direnç
Bread boar
Jumper kablo
PULL UP ve PULL DOWN DİRENÇ NEDİR?
Pull-up ve Pull down dirençler; elektronik devrelerde lojik sistemlere girişlerin, eğer dışarıdan bağlı cihazdan gelen voltaj kesildiyse, umulan lojik seviyelerde kalmalarını sağlamada kullanılır.
Pull up ve pull down da kastedilen enerjiyi yukarıya yani 1'e çekemsi veya aşağıya yani 0'a çekemsinden kaynaklanıyor.
Pull up direnç butona basılmadığında değeri 1'dir ve butona basıldığında ise değeri 0 olur.Pull down direnç ise pull up direncin tam tersi mantığında çalışır, butona basılmadığında değeri 0'dır ve butona basıldığında ise değeri 1 olur.

İlk olarak direncimizi donanımsal olarak devremize pull up bağlı bir sistem kurup sadece butona basınca yanan ve butona basmadığımızda sönen bir devre tasarlayalım.
Devre şeması aşağıdaki gibidir. Raspberry pi piconun VBUS pini 5V enerji vermektedir ve pull up direnç için üst kısmını 5V a bağladık. Ve orta kısmını herhangi bir GPO pinine bağlayabilirsiniz. Led imizi 220R direnç ile başka bir GPO pinene bağlıyoruz.

Kod;
from machine import Pin
import utime
button = Pin(16,Pin.IN)
led = Pin(15,Pin.OUT)
while True :
print(button.value())
utime.sleep(0.3)
if button.value() == 0:
led.value(1)
if button.value() == 1:
led.value(0)
Aşağıda kod blokları satır satır açıklanmıştır.
from machine import Pin
Bu satırda pinlere atama yapabilmek için kütüphane dahil ettik.
import utime
Bu satırda süre kullanabilmek için kütüphanesini dahil ettik. utime ın class ı sleep objesidir. Fakat burada biz direk kütpheneyi çağardığımız için sleep in önünde utime ı yazarak kullanmamız lazım.
button = Pin(16,Pin.IN)
button adında bir değişeken tanımlayıp butonumuzu GPO16 pin ine bağladık. Ve buton bir MCU için veri girişi olduğundan dolayı 'IN' diyerek butonumuzu input olarak tanımladık.
led = Pin(15,Pin.OUT)
led adında bir değişken tanımlayıp led imizi GPO15 pin ine bağladık. Ve led MCU için bir output olduğundan dolayı 'OUT' olarak tanımladık.
while True :
Kodumuzu sonsuz döngüye sokmak için kullandık. Aslında bu kod için gerekli değildi ama kollanmakta zarar yok.
print(button.value())
Butondan okuduğumuz değeri görmek için okuduk ve konsola bu değeri yazdırdık. Bu sayede butona bastığımızda veya basmadığımızda değeri görebileceğiz ve durumlara göre kodumuz doğru çalışıyor mu teyit etmiş olacağız.
utime.sleep(0.3)
Butondan basıp çektikten sonra hemen değer değişmesin biraz devrenin algılama süresi olması için 300ms lik bir zaman verdik. Bu süreyi deneme yanılma ile kendinize uygun olan değeri bulabilirsiniz. Ben bu değeri 300 ms için yeterli buldum.
if button.value() == 0:
Bu satırda butondan okuduğumuz değer 0 a eşit mi onu kontrol etmek için yazıyoruz. Eğer okuduğumuz değer 0 a eşit ise bu if in altındaki satırdaki kod gerçekleşecek anlamına geliyor.
led.value(1)
Bu if in içinde olan bir komuttur. if koşulu sağlanıyorsa led in değerini 1 yap yani led imizi yak demektir.
if button.value() == 1:
Bu satırda aynı mantık . Okuduğumuz butonun değeri 1 e eşit mi onu kontrol etmek için yazıyoruz. Eğer okuduğumuz değer 1 e eşit ise bu if in altında satırdaki kod gerçekleşecek anlamına geliyor.
led.value(0)
Eğer bu if koşulu sağlanırsa bu kod bloğu çalışacaktır. Led imizin değerini 0 a çekecektir yani ledimizi kapatacaktır.
Pull Up ve Pull Down BUTON İLE LED KONTOL
Bu örnekten sonra biraz daha farkı bir örnek yapalım. 2 buton ve 2 led kullanalım. Butonlara her bastığımızda ilgili led bir önceki durumun tersi bir pozisyon alsın. Yani yanıyor ise sönsün, sönük ise yansın.
Hem bu örnek ile pull up ve pull down dirençlerini biraz daha iyi kavramış oluruz.
Devre şeması aşağıdaki gibidir.

Kod
from machine import Pin
import time
pull_up=Pin(0,Pin.IN)
pull_down=Pin(1,Pin.IN)
led1=Pin(14,Pin.OUT)
led2=Pin(15,Pin.OUT)
while True:
if pull_up.value()==0:
time.sleep(1)
led1.toggle()
print("pull_up")
if pull_down.value()==1:
time.sleep(1)
led2.toggle()
print("pull_down")
Bu kod diğer kod a benzediği için her satırı tek tek açıklamayacağım. Sadece farklı kısımları açıklayacağım.
pull_up=Pin(0,Pin.IN)
pull_down=Pin(1,Pin.IN)
2 tane buton kullandığımız için 2 tane değişken tanımladım.
if pull_up.value()==0:
time.sleep(1)
led1.toggle()
print("pull_up")
if pull_down.value()==1:
time.sleep(1)
led2.toggle()
print("pull_down")
Kodun bu kısmında if yapısında butonların alacağı değerlere göre ne yapası gerektiği belirtildi. Pull_up butona basılmadığı sürece "1" değerini verecektir basıldığında ise "0" değerini alarak if altındaki koşulu gerçekleştirecek, yani ledin önceki durumunu tersleyecektir. Pull_down button için ise durum tam tersidir normalde "0" değerini verirken basıldığında "1" değerini alarak if koşulunu sağlamış olacaktır.
Kommentare