Renkler
- Güç
- İşlem
- Pinler
- Işıklar
- Breadboard
- Parçalar
- Kontrol
Bu cihaz 3D görüntüyü açamadı. Kartlardaki anlatım ve mini sınav çalışır.
Ekran kartı sahneyi durdurdu.
Bir deliğe dokun: bağlı delikler yeşil yanar
Parçalara dokunarak tanı
Panel ayarları
Panel genişliği
Yazı boyutu
Panel tarafı
Butonla LED Yakalım: 3D Arduino simülasyonu
Düğmeye basınca ne olur?
Kapı ziline basınca zil çalar, asansör düğmesine basınca düğmenin ışığı yanar. Peki cihaz düğmeye bastığımızı nasıl anlıyor? Bugün Arduino'ya bir buton bağlayıp ona ilk kez bilgi okutacağız.
Asansör düğmesine bastığınızda düğmenin ışığı yanar, asansör katınıza gelir. Kapı ziline basınca zil çalar. Bu cihazlar önce bizden bir bilgi alır, sonra bir iş yapar. Bugün Arduino'ya bir butonu okutacağız ve butona basılınca LED'i yakacağız.
Asansör, düğmeye basıldığını algılar, kararını verir ve sonra katınıza gelir. Bu da bir giriş ve çıkış örneği: düğme bilgi verir, motor ve ışık iş yapar. Önceki derste Arduino yalnız çıkış verdi. Bugün ilk kez dışarıdan bilgi okuyacak ve bu bilgiye göre karar verecek.
Asansör düğmesi, kapı zili ya da yaya geçidindeki bekleme butonu: hepsi bir insan hareketini elektrik sinyaline çevirir. Cihaz bu sinyali okur ve kodundaki koşula göre karar verir. Bugün Arduino'nun D2 pinini giriş olarak kullanıp butonun durumunu okuyacağız; buton basılıysa D13'teki LED'i yakan bir karar yapısı yazacağız.
Bu derste
- Butonun basınca iki tarafı birleştirdiğini göreceğiz.
- Kartın bilgi okuduğu pin ile ışık verdiği pini ayırt edeceğiz.
- Butona basınca LED'i yakan devreyi ve kodu deneyeceğiz.
Bu derste
- Giriş ve çıkış pinlerinin farkını örnekle açıklayacağız.
- 10 kΩ direncin devrede neden durduğunu anlatacağız.
- Eğer-değilse (if-else) yapısıyla çalışan bir kodu okuyacağız.
Bu derste
- Butonun durumunu HIGH ve LOW olarak okuyan bir giriş devresi kuracağız.
- Pull-down direnci olmadan girişin neden kararsız kaldığını açıklayacağız.
- if-else yapısının loop içinde nasıl sürekli karar verdiğini izleyeceğiz.
Bu derste
- Pull-down direncinin girişi 0 V'a nasıl çektiğini açıklayacağız.
- Buton basılıyken 10 kΩ üzerinden geçen akımı hesaplayacağız.
- digitalRead, karşılaştırma (==) ve if-else ile bir karar yapısı kuracağız.
Malzemelerimiz
Bu derste Ders 2'deki LED devresine bir buton ekliyoruz. Gerekenler: 1 buton, 1 adet 10 kΩ direnç, 1 adet 220 Ω direnç, 1 LED ve birkaç kablo. İki direnç birbirine benzer; renk çizgilerinden ayırt ederiz.
Gerekenler: 1 buton, 1 adet 10 kΩ direnç (kahverengi, siyah, turuncu, altın), 1 adet 220 Ω direnç (kırmızı, kırmızı, kahverengi, altın), 1 LED ve kablolar. 10 kΩ, 10.000 ohm demektir; k harfi bin anlamına gelir. İki direnci karıştırmamak için renk bantlarına bakalım.
Malzemeler: 1 buton, 1 adet 10 kΩ ve 1 adet 220 Ω direnç, 1 LED ve bağlantı kabloları. İki direncin görevi farklıdır: 220 Ω LED'in akımını sınırlar; 10 kΩ ise buton basılı değilken giriş pinini sabit bir değerde tutar. Bu ikinci görevi birazdan ayrıntılı göreceğiz.
Malzemeler: 1 buton (4 bacaklı), 1 adet 10 kΩ direnç (kahverengi-siyah-turuncu-altın: 10 × 1000 Ω), 1 adet 220 Ω direnç, 1 LED ve bağlantı kabloları. 220 Ω, çıkış devresinde LED akımını sınırlar; 10 kΩ ise giriş devresinde pull-down direnci olarak çalışır. Değerleri karıştırmak devrenin davranışını değiştirir; renk bantlarını takmadan önce kontrol edelim.
Butonu tanıyalım
Buton bir köprü gibidir. Basmadığımızda iki taraf ayrıdır, elektrik geçemez. Bastığımızda köprü kurulur ve iki taraf birleşir. Dört bacağı var: bacaklar içeride ikişer ikişer bağlıdır, basınca bu iki çift birbirine bağlanır.
Buton, basılınca devrenin iki noktasını birleştiren bir anahtardır. Basılı değilken o iki nokta ayrıdır (açık devre), basılıyken bağlanır (kapalı devre). Dört bacağı vardır: bacaklar içeride ikişer ikişer bağlıdır ve butona basınca bu iki çift birbirine bağlanır. Bıraktığımızda içindeki yay butonu geri iter.
Buton, basıldığı sürece iki noktayı birleştiren bir anahtardır; bırakınca bağlantı kopar. Ev ışık anahtarından farkı, konumunu korumamasıdır. Dört bacak içeride ikişer ikişer bağlıdır; basınca iki çift birleşir. Butonu kanalın üstüne takarız; böylece bacaklar ayrı şeritlere girer ve buton, basılmadan bağlı kalmaz.
Bu bir anlık butondur: yalnız basılı olduğu sürece iki kontağı birleştirir; bırakınca yay onu açık konuma döndürür. Dört bacak iki çift hâlinde içeriden bağlıdır; basılınca iki çift arasında iletken bir yol oluşur. Kanalın üstüne takılan butonun bacakları dört ayrı şeride girer; böylece bağlantıyı breadboard değil, buton kurar.
Giriş ve çıkış
Bu devrede iki pin var. Pin 2 kulak gibidir: butonu dinler, yani giriştir. Pin 13 ağız gibidir: LED'e ne yapacağını söyler, yani çıkıştır. Kart, duyduğuna göre karar verir.
Giriş, karta dışarıdan bilgi gelen yoldur; çıkış, kartın dışarıya iş yaptırdığı yoldur. Bu devrede pin 2 giriştir: butona basılıp basılmadığını okur. Pin 13 çıkıştır: LED'i yakar ya da söndürür. Bilgisayardaki klavye giriş, ekran çıkış birimidir; burada da aynı fikir var.
Her pin kodla bir göreve ayarlanır.
pinMode(buton, INPUT)pin 2'yi giriş yapar: pin, üzerindeki gerilimi okur.pinMode(led, OUTPUT)pin 13'ü çıkış yapar: pin gerilim verir. Program giriş bilgisini okur, bir karar verir ve sonucu çıkışa yazar: giriş, işlem, çıkış.INPUTolarak ayarlanan pin bir ölçüm ucu gibi davranır: neredeyse akım çekmeden üzerindeki gerilimi okur ve HIGH ya da LOW olarak yorumlar.OUTPUTolarak ayarlanan pin ise 5 V ya da 0 V vererek LED gibi bir yükü sürer. Bu devrede D2 giriş, D13 çıkıştır. Sistem modeli: giriş (D2), işlem (ifveelse), çıkış (D13).Devreyi kuralım
USB takılı değilken kuralım. Kırmızı kablo 5V'tan alttaki + rayına (en dıştaki kırmızı çizgili sıra), siyah kablo GND'den alttaki - rayına. Buton kanalın üstüne: bir yanı + rayına, öbür yanı pin 2'ye. 10 kΩ direnç pin 2 tarafından - rayına. LED, Ders 2'deki gibi.
USB takılı değilken kuralım. Kırmızı kablo 5V'u alttaki + rayına (en dıştaki kırmızı çizgili sıra), siyah kablo GND'yi alttaki - rayına bağlar. Buton kanalın üstüne takılır; bir yanı + rayına, öbür yanı pin 2'ye gider. 10 kΩ direnç, pin 2 tarafından - rayına iner. LED ve 220 Ω, Ders 2'deki gibi pin 13'te.
Devreyi USB takılı değilken kuralım. Kırmızı kablo 5V'u alttaki + rayına (en dıştaki kırmızı çizgili sıra), siyah kablo GND'yi alttaki - rayına taşır. Buton kanalın üstüne takılır: bir yanı 5 V'a, öbür yanı pin 2'ye bağlanır. 10 kΩ direnç pin 2 tarafını - rayına bağlar. Çıkış tarafı Ders 2'deki gibi: pin 13, LED, 220 Ω, - rayı. İki devre aynı GND'yi paylaşır.
Bağlantılar USB takılı değilken yapılır. Kırmızı kablo 5V'u alt kenardaki + rayına (en dıştaki kırmızı çizgili sıra), siyah kablo GND'yi hemen yanındaki - rayına bağlar. Giriş devresi: + rayı, buton, D2 bağlantı noktası; bu noktadan 10 kΩ ile - rayı. Çıkış devresi Ders 2'deki gibidir: D13, LED, 220 Ω, - rayı. İki devrenin ortak noktası GND'dir; bütün gerilimler bu ortak 0 V'a göre ölçülür.
10 kΩ direnç ne işe yarar?
Butona basmadığımızda pin 2 neyi okuyor? 10 kΩ direnç, kapıyı kendiliğinden kapatan bir yay gibidir: pin 2'yi GND'ye çeker ve basılı değilken kart LOW (kapalı) okur. Basınca 5V pin 2'ye ulaşır, kart HIGH (açık) okur.
10 kΩ direnç pin 2'yi GND'ye bağlar; buna pull-down (aşağı çeken) direnç denir. Basılı değilken pin 0 V'a çekilir ve kart LOW okur. Butona basınca pin 5V'a bağlanır ve kart HIGH okur. Direncin büyük olması, basınca 5V'tan GND'ye çok az elektrik akmasını sağlar.
Pin 2 giriş olarak ayarlıdır ve kendi başına bir gerilim vermez; yalnız bağlı olduğu yerin gerilimini okur. Butona basılı değilken 10 kΩ direnç pin 2'yi GND'ye bağlar, kart LOW okur. Basınca pin doğrudan 5V'a bağlanır ve HIGH okur. Neden düz bir kablo kullanmıyoruz? Kablo olsaydı butona basınca 5V ile GND kısa devre olurdu. Bu dirence pull-down denir.
Pull-down direnci, giriş pinini bilinen bir duruma çeker. Buton basılı değilken D2, 10 kΩ üzerinden GND'ye bağlıdır; giriş neredeyse akım çekmediği için direnç üzerinde neredeyse hiç gerilim düşmez ve D2 yaklaşık 0 V (LOW) olur. Buton basılınca D2 doğrudan 5 V'a bağlanır (HIGH). Bu sırada 10 kΩ üzerinden I = V / R = 5 V / 10.000 Ω = 0,5 mA akar; düz kablo kullansaydık R ≈ 0 olur, kısa devre oluşurdu.
Kodu okuyalım
Kodun başında pinlere ad veriyoruz: buton 2'de, LED 13'te.
loopiçinde kart sürekli soruyor: Butona basılı mı? Evetse LED'i yakar, değilse söndürür. Bu soru durmadan, çok hızlı tekrarlanır.Kodun ilk iki satırı pinlere ad verir:
buton2,led13.const, bu değerlerin sabit olduğunu, değişmeyeceğini söyler.setupiçinde pin 2 giriş, pin 13 çıkış yapılır.loopiçinde bir koşul var:if(eğer) butona basılıysa LED'i yak,else(değilse) söndür.const int buton = 2;satırı 2 sayısına bir ad verir; artık koddabutonyazınca program 2'yi anlar.const, değerin program boyunca değişmeyeceğini belirtir.loopiçindekiifyapısı bir karardır:digitalRead(buton)HIGH ise LED yanar, değilseelsebölümü çalışır ve LED söner. Döngü bu kararı sürekli yeniden verir.const int, adı olan ama değeri değişmeyen bir tam sayı tanımlar; pin numaralarına ad vermek kodu okunur yapar ve değişikliği tek satıra indirir.digitalRead(buton)D2'nin durumunu HIGH ya da LOW olarak döndürür;==karşılaştırma işlecidir (tek=atama yapar, karıştırmayalım). Koşul doğruysaifbloğu, yanlışsaelsebloğu çalışır.loopbu okuma, karar ve yazma döngüsünü sürekli tekrarlar.Arduino koduAltında Türkçesiconst int buton = 2;Butonun bağlı olduğu pine ad verelim: buton = 2. const, bu değer değişmez demek.const int led = 13;LED'in bağlı olduğu pine de ad verelim: led = 13.void setup() {Hazırlık bölümü: kart açılınca bir kez çalışır.pinMode(buton, INPUT);Buton pinini (2) giriş yap: bu pin bilgi okuyacak.pinMode(led, OUTPUT);LED pinini (13) çıkış yap: bu pin elektrik verecek.}Hazırlık bölümü bitti.void loop() {Tekrar bölümü: durmadan döner.if (digitalRead(buton) == HIGH) {Eğer buton pini HIGH okunuyorsa, yani butona basılıysa:digitalWrite(led, HIGH);LED'i yak.} else {Değilse, yani butona basılı değilse:digitalWrite(led, LOW);LED'i söndür.}Karar bölümü bitti.}Tekrar bölümü bitti; başa dön ve butonu yeniden oku.
Butona basalım
USB'yi takalım. Şimdi "Butona bas" düğmesine ya da ekrandaki butona dokunalım. Basılı tuttuğumuz sürece LED yanar, bırakınca söner. Kodda hangi satırın parladığına bakalım: basınca
ifbölümü, bırakıncaelsebölümü."Butona bas" düğmesine ya da 3D butona basıp bırakalım. Basılıyken LED yanıyor, bırakınca sönüyor. Vurgulanan satırı izleyelim: basılıyken
digitalWrite(led, HIGH), bırakıncadigitalWrite(led, LOW)çalışıyor. Butona kısa kısa basarak LED'in ne kadar hızlı tepki verdiğine de bakalım."Butona bas" düğmesiyle ya da 3D butona dokunarak deneyelim. Basılıyken pin 2 HIGH okunur,
ifkoşulu doğru olur ve LED yanar. Bırakınca pin 2 LOW olur,elsebölümü çalışır ve LED söner. Vurgulanan satırlara bakalım: döngü her turda butonu yeniden okuyor; bu yüzden LED, butona neredeyse anında tepki veriyor."Butona bas" ile D2'nin durumunu değiştirip vurgulanan satırları izleyelim. Döngünün her turunda
digitalReadyeniden çağrılır ve koşul baştan değerlendirilir. LED'in anında tepki vermesinin nedeni döngünün çok kısa sürmesidir; bu koddadelayyok. Düşünelim:loopsonunadelay(1000)eklenseydi kısa bir basış neden fark edilmeyebilirdi? Ders 4'te bu soruya yeniden döneceğiz.Arduino koduAltında Türkçesiconst int buton = 2;Butonun bağlı olduğu pine ad verelim: buton = 2. const, bu değer değişmez demek.const int led = 13;LED'in bağlı olduğu pine de ad verelim: led = 13.void setup() {Hazırlık bölümü: kart açılınca bir kez çalışır.pinMode(buton, INPUT);Buton pinini (2) giriş yap: bu pin bilgi okuyacak.pinMode(led, OUTPUT);LED pinini (13) çıkış yap: bu pin elektrik verecek.}Hazırlık bölümü bitti.void loop() {Tekrar bölümü: durmadan döner.if (digitalRead(buton) == HIGH) {Eğer buton pini HIGH okunuyorsa, yani butona basılıysa:digitalWrite(led, HIGH);LED'i yak.} else {Değilse, yani butona basılı değilse:digitalWrite(led, LOW);LED'i söndür.}Karar bölümü bitti.}Tekrar bölümü bitti; başa dön ve butonu yeniden oku.
Direnci çıkarırsak?
Önce tahmin edelim. Sonra "10 kΩ direnci çıkar" düğmesine basalım ve butona hiç dokunmadan LED'e bakalım. Kod aynı, buton aynı; yalnız pin 2'yi GND'ye bağlayan direnç gitti.
Tahmin et, sonra gör. "10 kΩ direnci çıkar" düğmesine basınca pin 2, butona basmadıkça hiçbir yere bağlı olmayacak. Önce sınıfça tahminimizi söyleyelim, sonra butona dokunmadan bir süre LED'i izleyelim.
Tek bir şeyi değiştiriyoruz: pull-down direncini çıkaracağız. Buton basılı değilken pin 2 hiçbir yere bağlı olmayacak. Önce gerekçeli bir tahmin yapalım: kart bu durumda ne okur? Sonra "10 kΩ direnci çıkar" düğmesine basalım, butona dokunmadan LED'i ve vurgulanan kod satırlarını izleyelim.
Değiştirdiğimiz tek şey pull-down direnci. "10 kΩ direnci çıkar" düğmesine basınca D2, buton basılı değilken hiçbir gerilim kaynağına bağlı olmaz. Önce şu soruyu yanıtlayalım: giriş pini neredeyse akım çekmiyorsa, bağlı olmadığında gerilimini ne belirler? Tahminimizi yazdıktan sonra butona dokunmadan LED'i ve
if,elsesatırlarının vurgusunu gözleyelim.Tahmin et: 10 kΩ direnci çıkarırsak, butona dokunmadığımızda LED ne yapar?
LED kararsız davranabilir: kendi kendine yanıp sönebilir. Pin 2 boşta kalınca kart ne okuyacağını bilemez, bazen açık bazen kapalı sanır. Direnç, pini GND'ye bağlayarak bu karışıklığı önler.
Tahmin et: Pull-down direnci yokken butona basmazsak kart pin 2'yi nasıl okur? LED ne yapar?
Pin 2 boşta kalır. Boştaki bir pin bazen HIGH, bazen LOW okunabilir ve bu rastgele değişebilir. Bu yüzden LED, butona dokunmasak da kendi kendine yanıp sönebilir. Pull-down direnci pini LOW'da tutarak bunu engeller.
Tahmin et: Pin 2 hiçbir yere bağlı değilken
digitalReadHIGH mı okur, LOW mu? LED'e ne olur?Pin boşta kalınca okunan değer belirsizleşir:
digitalReadbazen HIGH bazen LOW döndürebilir ve bu rastgele değişebilir. Buna boşta (floating) giriş denir. LED bu yüzden butona basılmadan da kararsız yanıp sönebilir. Pull-down direnci girişi LOW'a sabitler.Tahmin et: Bağlantısız (boşta) bir giriş pini hangi değeri okur? Bu, LED'in davranışına nasıl yansır?
Boşta kalan giriş floating olur: gerilimini belirleyen bir yol olmadığı için küçük elektriksel etkilerle kayabilir.
digitalReadbu yüzden rastgele HIGH ya da LOW döndürebilir ve LED kararsız yanıp sönebilir. Çözüm, girişi bilinen bir gerilime bağlayan dirençtir: pull-down (GND'ye) ya da pull-up (5 V'a; o zaman mantık tersine döner). Arduino'nun iç pull-up direnci içinINPUT_PULLUPda kullanılabilir.Özet
Bugün karta ilk kez bilgi okuttuk. Pin 2 butonu dinler (giriş), pin 13 LED'i yakar (çıkış). Buton basınca iki tarafı birleştirir. 10 kΩ direnç, basılı değilken pini kapalıda tutar. Kod sürekli sorar: basılı mı? Evetse yak, değilse söndür.
Özet: Giriş pini bilgi okur, çıkış pini iş yaptırır. Buton basılıyken iki noktayı birleştirir. 10 kΩ pull-down direnci, basılı değilken pin 2'yi GND'ye çekerek LOW okutur; basınca pin 5V'a bağlanır ve HIGH okunur.
ifveelseile kart her turda karar verir.Bir sistem giriş, işlem ve çıkıştan oluşur: buton (D2) giriş,
ifveelseişlem, LED (D13) çıkış. Pull-down direnci, buton basılı değilken girişin boşta (floating) kalıp rastgele değer okumasını önler; düz kablo yerine direnç kullanmamızın nedeni basınca kısa devreyi önlemektir.loopbutonu her turda yeniden okur.D2 INPUT olarak gerilimi okur; pull-down direnci buton açıkken onu 0 V'a çeker, buton kapanınca D2 5 V olur ve 10 kΩ üzerinden yalnız 0,5 mA akar. Boşta kalan giriş rastgele okunur. Koşul ifadesinde
==karşılaştırır;ifya daelsebloklarından her turda yalnız biri çalışır.delayolmayan döngü butona neredeyse anında tepki verir.Mini sınav
Mini sınav
Mini sınav
Mini sınav