Anlatıma geç
bote.web.tr blog (yeni sekmede açılır)3D Simülasyon MerkeziTrafik Işığı Yapalım
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ı

Adım 1 / 10

Trafik Işığı Yapalım: 3D Arduino simülasyonu

  1. Kavşakta kim karar veriyor?

    Kavşaktaki trafik ışıkları belli bir sırayla, belli sürelerle yanar. Her ışığın bir anlamı var: kırmızı dur, yeşil geç. Peki ışık ne zaman değişeceğini nereden biliyor? Bugün üç LED'le kendi trafik ışığımızı yapıp sırayı kodla söyleyelim.

    Trafik ışıkları, araçların ve yayaların yolu sırayla kullanmasını sağlar; bu yüzden sıra ve süre çok önemlidir. Işıkları belli bir sırayla yakan bir düzenek, aslında adım adım bir talimat listesini uygular. Bugün üç LED, üç direnç ve bir kodla küçük bir trafik ışığı modeli yapalım.

    Yönetmeliğe göre trafik ışıkları, araçların ve yayaların yolu sırayla kullanmasını düzenlemek için kurulur. Bir kavşağın güvenli olması, ışıkların doğru sırayla ve yeterli sürede yanmasına bağlıdır. Bu sırayı adım adım yazarsak bir algoritma elde ederiz. Bugün bu algoritmayı Arduino'ya kod olarak verelim.

    Trafik İşaretleri Hakkında Yönetmelik, ışıklı işaretlerin amacını araçların ve yayaların yolu sırayla kullanmasını düzenlemek olarak tanımlar. Bir trafik ışığını, her aşamada hangi ışıkların yanacağının ve ne kadar kalacağının belli olduğu bir aşamalar dizisi olarak düşünebiliriz. Bugün bu aşamaları sırayla yazıp üç çıkış pinini zamanlayarak bir trafik ışığı modeli kuracağız.

    Bu derste

    • Trafik ışığındaki renklerin anlamını söyleyeceğiz.
    • Üç LED'i ayrı pinlere bağlayan devreyi kuracağız.
    • Adımları sırayla yazmanın bir algoritma olduğunu göreceğiz.

    Bu derste

    • Işıkların sırasını adım adım bir algoritma olarak yazacağız.
    • Her LED'e neden ayrı direnç taktığımızı açıklayacağız.
    • loop ve delay komutlarının bu sıradaki görevini göstereceğiz.

    Bu derste

    • Trafik ışığı algoritmasını dört adımlık bir tablo ve akış şeması olarak düşüneceğiz.
    • Pinlerin yeni komut gelene kadar durumunu koruduğunu kodda göstereceğiz.
    • delay satırları olmadan ne olacağını gerekçesiyle tahmin edeceğiz.

    Bu derste

    • Yönetmelikteki ışık anlamlarından dört aşamalı bir döngü kuracağız.
    • Bir turun süresini hesaplayıp sürelerin algoritmayı nasıl etkilediğini açıklayacağız.
    • delay'in buton okumayı nasıl engellediğini ve PWM ile ilişkisini tartışacağız.
  2. Malzemelerimiz

    Bu derste üç LED kullanacağız: bir kırmızı, bir sarı, bir yeşil. Her LED'in kendi koruyucu direnci olacak: 3 adet 220 Ω direnç. Bir de kablolar, breadboard ve Arduino.

    Malzemeler: 1 kırmızı, 1 sarı, 1 yeşil LED; 3 adet 220 Ω direnç; 4 bağlantı kablosu (üç pin için birer tane, bir de GND için); Arduino UNO ve breadboard. Her LED'e ayrı direnç koyacağız, çünkü her biri ayrı bir yoldan elektrik alacak.

    Malzemeler: kırmızı, sarı ve yeşil birer LED, 3 adet 220 Ω direnç, bağlantı kabloları, breadboard ve Arduino UNO. Neden tek bir direnç yetmez? Her LED ayrı bir pinden beslenir ve ayrı bir yol oluşturur; her yolun akımını kendi direnci sınırlamalıdır. Üç LED'in eksi tarafları aynı - rayında, yani aynı GND'de buluşur.

    Malzemeler: kırmızı, sarı ve yeşil birer LED, 3 adet 220 Ω direnç, bağlantı kabloları. Her LED kendi pininden ve kendi direnciyle beslenir; böylece her dalın akımı ayrı sınırlanır. LED'in üzerindeki gerilim rengine göre değişebildiği için aynı dirençle parlaklıklar biraz farklı görünebilir. Tek ortak direnç kullansaydık, aynı anda yanan iki LED akımı paylaşır ve parlaklıklar birbirini etkilerdi.

  3. Işıkların sırası

    Trafik kurallarına göre kırmızı dur demektir. Kırmızıyla birlikte sarı yanarsa yeşil gelmek üzeredir: hazırlan ama henüz geçme. Yeşil geç demektir. Yeşilden sonra yalnız sarı yanarsa kırmızı gelmek üzeredir. Bizim sıramız: kırmızı, kırmızı ve sarı, yeşil, sarı.

    Trafik yönetmeliği ışıkların anlamını şöyle yazar: kırmızı dur; kırmızıyla birlikte sarı, yol açılmak üzere, hazırlan; yeşil geç; yeşilden sonra sarı, yol kapanmak üzere. Modelimiz bu sırayı izler: kırmızı, kırmızı ve sarı, yeşil, sarı. Süreleri sınıfta izleyebilmek için kısa seçtik.

    Trafik İşaretleri Hakkında Yönetmelik'e göre sarı ışığın anlamı sırasına bağlıdır: kırmızıyla birlikte yanarsa yol açılmak üzeredir ve bekleyen sürücüler hazırlanır; yeşilden sonra yanarsa yol kapanmak üzeredir. Kırmızı mutlak duruş, yeşil geçiş demektir. Modelimizin dört aşaması: kırmızı (3 sn), kırmızı ve sarı (1 sn), yeşil (3 sn), sarı (1 sn). Süreler sınıfta izlenebilsin diye kısa.

    Yönetmeliğe göre kırmızı, yolun kapalı olduğunu ve mutlak duruşu; kırmızıyla birlikte yanan sarı, yolun açılmak üzere olduğunu; yeşil, yolun açık olduğunu; yeşilden sonra yanan sarı ise yolun kapanmak üzere olduğunu bildirir. Bu anlamlardan döngüsel bir sıra çıkar: kırmızı, kırmızı ve sarı, yeşil, sarı, sonra yine kırmızı. Modelde süreleri 3000, 1000, 3000 ve 1000 ms seçtik; bir tam tur 8 saniye sürer. Süreler sınıfta izlenebilsin diye kısa tutuldu.

  4. Devreyi kuralım

    USB takılı değilken kuralım. Her LED'in uzun bacağı kendi pinine gider: kırmızı pin 10, sarı pin 9, yeşil pin 8. Kısa bacaklar birer 220 Ω dirençle - rayına bağlanır. GND de - rayına gider.

    USB takılı değilken kuralım. Üç LED'i ayrı sütunlara takalım. Anotlar kablolarla pinlere gider: kırmızı pin 10'a, sarı pin 9'a, yeşil pin 8'e. Her LED'in katodu kendi 220 Ω direnciyle - rayına bağlanır. Siyah kablo GND'yi - rayına bağlar. Böylece üç ayrı yol oluşur ama hepsi aynı GND'ye döner.

    Bağlantıları USB takılı değilken yapalım. Kırmızı LED'in anodu pin 10'a, sarınınki pin 9'a, yeşilinki pin 8'e bağlanır. Her katot ayrı bir 220 Ω ile - rayına iner; GND kablosu da - rayına takılır. Böylece kart üç ayrı çıkış devresini ayrı ayrı yönetir: hangi pin HIGH olursa yalnız onun LED'i yanar.

    USB takılı değilken üç dal kuralım: D10, kırmızı LED, 220 Ω, - rayı; D9, sarı LED, 220 Ω, - rayı; D8, yeşil LED, 220 Ω, - rayı. Siyah kablo GND'yi - rayına bağlar. Üç dal ayrı pinlerden beslenir, yalnız dönüş yolu (GND) ortaktır; her dalın akımı kendi direnciyle sınırlanır. Bir dalın açık kalması diğer ikisini etkilemez; örneğin sarı LED ters takılırsa yalnız o yanmaz.

  5. Kodu okuyalım

    Kodun başında her renge bir pin adı veriyoruz. setup üç pini de çıkış yapar. loop içinde dört adım var: kırmızıyı yak ve bekle, sarıyı da yak ve bekle, ikisini söndürüp yeşili yak ve bekle, yeşili söndürüp sarıyı yak ve bekle.

    Kodun ilk üç satırı renklere pin numarası verir: kirmizi 10, sari 9, yesil 8. setup üç pini de çıkış yapar. loop dört aşamadan oluşur ve her aşama delay ile biter. Bir LED'i söndürmedikçe yanık kalır; bu yüzden ikinci aşamada kırmızı hâlâ yanarken sarıyı ekleriz.

    Üç const int satırı renkleri pin numaralarına bağlar. setup içinde üç pin çıkış yapılır. loop dört aşamalıdır; her aşama önce ışıkları ayarlar, sonra delay ile bekler. Pinler yeni bir komut gelene kadar son durumlarını korur. Bu yüzden ilk satır, önceki turdan yanık kalan sarıyı söndürür. Kod yukarıdan aşağı çalışır, en alta gelince başa döner.

    Kod, trafik ışığının dört aşamasını sırayla kurar. Her aşama iki parçadan oluşur: çıkışları ayarlayan digitalWrite satırları ve aşamayı koruyan delay. digitalWrite yalnız yazdığı pini değiştirir; diğer pinler önceki değerini korur. Bu yüzden 2. aşamada yalnız sarıyı yakmak yeter, kırmızı zaten HIGH'tır. Döngünün başındaki digitalWrite(sari, LOW), 4. aşamadan kalan sarıyı söndürür. Bir tur: 3000 + 1000 + 3000 + 1000 = 8000 ms.

    Arduino koduAltında Türkçesi
    1. const int kirmizi = 10;Kırmızı LED pin 10'da. Kodda Türkçe harf kullanmadığımız için adı kirmizi.
    2. const int sari = 9;Sarı LED pin 9'da.
    3. const int yesil = 8;Yeşil LED pin 8'de.
    4. void setup() {Hazırlık bölümü: kart açılınca bir kez çalışır.
    5. pinMode(kirmizi, OUTPUT);Kırmızı LED'in pinini çıkış yap.
    6. pinMode(sari, OUTPUT);Sarı LED'in pinini çıkış yap.
    7. pinMode(yesil, OUTPUT);Yeşil LED'in pinini çıkış yap.
    8. }Hazırlık bölümü bitti.
    9. void loop() {Tekrar bölümü: dört adım sırayla çalışır, sonra başa döner.
    10. digitalWrite(sari, LOW);1. adım: Önceki turdan yanık kalan sarıyı söndür.
    11. digitalWrite(kirmizi, HIGH);Kırmızıyı yak: dur.
    12. delay(3000);3 saniye bekle.
    13. digitalWrite(sari, HIGH);2. adım: Kırmızı yanarken sarıyı da yak: hazırlan.
    14. delay(1000);1 saniye bekle.
    15. digitalWrite(kirmizi, LOW);3. adım: Kırmızıyı söndür.
    16. digitalWrite(sari, LOW);Sarıyı söndür.
    17. digitalWrite(yesil, HIGH);Yeşili yak: geç.
    18. delay(3000);3 saniye bekle.
    19. digitalWrite(yesil, LOW);4. adım: Yeşili söndür.
    20. digitalWrite(sari, HIGH);Sarıyı yak: kırmızı geliyor.
    21. delay(1000);1 saniye bekle.
    22. }Tekrar bölümü bitti; 1. adıma dön.
  6. Çalıştıralım

    USB'yi takalım ve ışıkları izleyelim: kırmızı, kırmızıyla sarı, yeşil, sarı ve yeniden kırmızı. Kodda o an çalışan satır parlıyor. Işık yanarken hangi satır parlıyor? "Süre" düğmeleriyle normal ve hızlı arasında geçip farkı görelim.

    Kodu çalıştıralım. Işıklar sırayla değişiyor ve sıra bitince en baştan başlıyor; bu tekrar loop sayesinde. Her ışık yanarken vurgulanan satır bir delay: kart o sırada bekliyor. "Süre" düğmeleriyle hızlıya geçelim; sıra aynı kalıyor mu, yalnız süreler mi kısalıyor?

    Kod çalışınca dört aşama sırayla gelir ve sonra başa döner. Vurgulanan satırı izleyelim: zamanın neredeyse tamamı delay satırlarında geçer, ışıkları değiştiren satırlar ise göz açıp kapayıncaya kadar çalışır. "Süre" düğmeleriyle hızlıya geçince sıra değişmez, yalnız bekleme süreleri kısalır. Sıra yanlış olsaydı kavşakta ne olurdu?

    Çalışan kodu izleyelim: aşamalar 3000, 1000, 3000 ve 1000 ms sürer ve loop sonunda başa döner. Zamanın neredeyse tamamı delay satırlarında geçer; bu sırada kart başka hiçbir satırı çalıştırmaz. "Süre" düğmesiyle hızlıya geçmek algoritmanın adımlarını değiştirmez, yalnız bekleme değerlerini küçültür. Not: Bu kod bir yaya butonunu ancak delay bitince okuyabilirdi; buna ileride döneceğiz.

    Süre
    Arduino koduAltında Türkçesi
    1. const int kirmizi = 10;Kırmızı LED pin 10'da. Kodda Türkçe harf kullanmadığımız için adı kirmizi.
    2. const int sari = 9;Sarı LED pin 9'da.
    3. const int yesil = 8;Yeşil LED pin 8'de.
    4. void setup() {Hazırlık bölümü: kart açılınca bir kez çalışır.
    5. pinMode(kirmizi, OUTPUT);Kırmızı LED'in pinini çıkış yap.
    6. pinMode(sari, OUTPUT);Sarı LED'in pinini çıkış yap.
    7. pinMode(yesil, OUTPUT);Yeşil LED'in pinini çıkış yap.
    8. }Hazırlık bölümü bitti.
    9. void loop() {Tekrar bölümü: dört adım sırayla çalışır, sonra başa döner.
    10. digitalWrite(sari, LOW);1. adım: Önceki turdan yanık kalan sarıyı söndür.
    11. digitalWrite(kirmizi, HIGH);Kırmızıyı yak: dur.
    12. delay(3000);3 saniye bekle.
    13. digitalWrite(sari, HIGH);2. adım: Kırmızı yanarken sarıyı da yak: hazırlan.
    14. delay(1000);1 saniye bekle.
    15. digitalWrite(kirmizi, LOW);3. adım: Kırmızıyı söndür.
    16. digitalWrite(sari, LOW);Sarıyı söndür.
    17. digitalWrite(yesil, HIGH);Yeşili yak: geç.
    18. delay(3000);3 saniye bekle.
    19. digitalWrite(yesil, LOW);4. adım: Yeşili söndür.
    20. digitalWrite(sari, HIGH);Sarıyı yak: kırmızı geliyor.
    21. delay(1000);1 saniye bekle.
    22. }Tekrar bölümü bitti; 1. adıma dön.
  7. Bu bir algoritma

    Bir işi yapmak için adımları sırayla yazmaya algoritma denir. Diş fırçalarken de belli adımları sırayla yaparız. Trafik ışığımızın algoritması: kırmızıyı yak, bekle, sarıyı ekle, bekle, yeşile geç, bekle, sarıya geç, bekle. Sonra döngü bunu baştan tekrarlar.

    Sırası belli adımlar dizisine algoritma denir. Kodumuz da bir algoritma: 1) Kırmızıyı yak, 3 sn bekle. 2) Sarıyı da yak, 1 sn bekle. 3) Yeşile geç, 3 sn bekle. 4) Sarıya geç, 1 sn bekle. Döngü bu dört adımı durmadan tekrarlar. Adımların yeri değişirse ışık yanlış çalışır.

    Sırası belli, açık ve sonlu adımlardan oluşan çözüm yoluna algoritma denir. Trafik ışığı algoritmamızın dört adımı var; her adımda hangi ışıkların yanacağı ve ne kadar bekleneceği bellidir. Bu adımları kâğıda yazıp bir akış şeması olarak da çizebiliriz. loop ise bir döngüdür: dördüncü adım bitince algoritma birinci adıma döner.

    Algoritma, bir problemi çözen, sırası belli, açık ve sonlu adımlar dizisidir. Trafik ışığımızda her adım bir durum (hangi ışıklar yanık) ve bir süre içerir; bu yapı bir tablo olarak da yazılabilir: kırmızı 3000 ms; kırmızı ve sarı 1000 ms; yeşil 3000 ms; sarı 1000 ms. loop, tablonun sonuna gelince başa dönen bir sonsuz döngüdür. Adımlar eksiksiz olmalıdır: kırmızıyı söndüren satırı unutursak yeşil ve kırmızı birlikte yanar.

    Arduino koduAltında Türkçesi
    1. const int kirmizi = 10;Kırmızı LED pin 10'da. Kodda Türkçe harf kullanmadığımız için adı kirmizi.
    2. const int sari = 9;Sarı LED pin 9'da.
    3. const int yesil = 8;Yeşil LED pin 8'de.
    4. void setup() {Hazırlık bölümü: kart açılınca bir kez çalışır.
    5. pinMode(kirmizi, OUTPUT);Kırmızı LED'in pinini çıkış yap.
    6. pinMode(sari, OUTPUT);Sarı LED'in pinini çıkış yap.
    7. pinMode(yesil, OUTPUT);Yeşil LED'in pinini çıkış yap.
    8. }Hazırlık bölümü bitti.
    9. void loop() {Tekrar bölümü: dört adım sırayla çalışır, sonra başa döner.
    10. digitalWrite(sari, LOW);1. adım: Önceki turdan yanık kalan sarıyı söndür.
    11. digitalWrite(kirmizi, HIGH);Kırmızıyı yak: dur.
    12. delay(3000);3 saniye bekle.
    13. digitalWrite(sari, HIGH);2. adım: Kırmızı yanarken sarıyı da yak: hazırlan.
    14. delay(1000);1 saniye bekle.
    15. digitalWrite(kirmizi, LOW);3. adım: Kırmızıyı söndür.
    16. digitalWrite(sari, LOW);Sarıyı söndür.
    17. digitalWrite(yesil, HIGH);Yeşili yak: geç.
    18. delay(3000);3 saniye bekle.
    19. digitalWrite(yesil, LOW);4. adım: Yeşili söndür.
    20. digitalWrite(sari, HIGH);Sarıyı yak: kırmızı geliyor.
    21. delay(1000);1 saniye bekle.
    22. }Tekrar bölümü bitti; 1. adıma dön.
  8. Beklemeleri silersek?

    Önce tahmin edelim: Koddaki bütün delay satırlarını, yani bekle komutlarını silersek ne olur? Işıklar yine sırayla yanar mı? Tahminimizi söyleyelim, sonra cevaba bakalım.

    Tahmin et, sonra tartış. Koddaki dört delay satırını silersek kart ışıkları yine aynı sırayla değiştirir mi? Değiştirirse biz bunu görebilir miyiz? Önce sınıfça tahmin edelim, sonra cevabı okuyalım.

    Bir satırın görevini anlamanın yolu, o satır olmasaydı ne olacağını düşünmektir. Bütün delay satırlarını silersek kod yine aynı sırayla çalışır mı? Her aşama ne kadar sürer? Gözümüz bu değişimi yakalayabilir mi? Önce gerekçeli tahminlerimizi yazalım, sonra cevaba bakalım.

    Düşünce deneyi: dört delay satırı silinirse algoritmanın sırası korunur ama her aşamanın süresi, birkaç digitalWrite satırının çalışma süresine iner. Bu süre, insan gözünün ayırt edebileceği süreyle karşılaştırıldığında nasıldır? Işıkları nasıl görürüz? İpucu: Ders 2'de bekleme 0,2 saniyeye indiğinde LED'in yanıp söndüğünü hâlâ görüyorduk; peki süre bunun binde birinden de kısa olursa? Tahminimizi gerekçesiyle yazalım; PWM ile bağlantısını da düşünelim.

    Tahmin et: Bütün delay satırlarını silersek ışıklar ne yapar?

    Kart yine sırayla çalışır ama çok çok hızlı. Işıklar gözümüzün yakalayamayacağı kadar hızlı değişir; üç ışık birden sönükçe yanıyor gibi görünebilir. Bekleme komutu, her ışığın görebileceğimiz kadar yanmasını sağlar.

    Tahmin et: Bekleme komutları olmadan ışıkların değiştiğini görebilir miyiz?

    Kart sırayı bozmaz ama her aşama saniyenin milyonda birkaçı kadar sürer. Göz bu kadar hızlı değişimi ayırt edemez: ışıklar göremeyeceğimiz hızda değişir, üçü birden sönükçe yanıyor gibi görünebilir. delay, her aşamanın insanların görebileceği kadar sürmesini sağlar.

    Tahmin et: delay satırları silinince kod sırayı bozar mı? Biz ışıkları nasıl görürüz?

    Sıra bozulmaz; kod yine yukarıdan aşağı çalışır. Ama her aşama yalnız birkaç digitalWrite satırı kadar, yani mikrosaniyeler sürer. Göz bu kadar hızlı değişimi ayrı ayrı göremez; ışıklar göremeyeceğimiz hızda değişir ve üçü birden sönükçe yanıyor gibi görünebilir. Demek ki delay algoritmanın bir parçasıdır: süre de bir adımdır.

    Tahmin et: Her aşama yalnız birkaç mikrosaniye sürerse LED'leri nasıl algılarız?

    Sıra korunur ama bir tur birkaç on mikrosaniyeye iner; LED'ler saniyede binlerce kez yanıp söner. Göz bu hızlı değişimi ortalar: her LED, açık kaldığı zamanın oranına göre sönük ve sürekli yanıyor gibi görünür. Bu, PWM'in temel fikridir: analogWrite, ~ pinlerde saniyede yaklaşık 490 kez (5 ve 6. pinlerde 980 kez) açıp kapatarak parlaklığı ayarlar. Trafik ışığı için ise anlamlı süreler gerekir; bu yüzden delay şarttır.

  9. Yaya butonu ekleyelim mi?

    Bazı yaya geçitlerinde bir buton vardır; yaya basınca ışık sistemi yayaların geçmek istediğini öğrenir. Ders 3'teki butonu bu devreye ekleyebiliriz. Butona basılınca kodun hangi adımı değişmeli? Sınıfça düşünelim.

    Ders 3'te butonu okumayı öğrendik, bu derste ışıkları sıraladık. İkisini birleştirelim: yaya butona basınca araçlar için ışık sarıya, sonra kırmızıya dönsün. Bunun için kodda bir if gerekir: eğer butona basıldıysa sırayı başlat. Butonu boştaki bir pine, örneğin pin 2'ye bağlayabiliriz.

    Yaya butonu fikri: Ders 3'teki buton devresini pin 2'ye kuralım. Işık yeşilken yaya butona basarsa sıra sarıya, sonra kırmızıya geçsin; kırmızıda yayalar geçsin. Kodda if (digitalRead(2) == HIGH) ile bir karar ekleriz. Ama dikkat: kart delay içindeyken butonu okumaz. Bu sorunu nasıl çözebiliriz?

    Yaya butonu, Ders 3 ile Ders 4'ü birleştirir: D2'ye pull-down dirençli bir buton ekleyip yeşil aşamasında okuyalım. Sorun: delay(3000) çalışırken kart girişi okumaz, kısa bir basış kaçabilir. Çözüm fikri: uzun bekleme yerine kısa beklemelerden oluşan bir döngü kurup her turda butonu okumak (ör. 100 kez delay(30)). Daha ileri bir yol, millis() ile zamanı ölçüp hiç durmadan butonu okumaktır.

  10. Özet

    Bugün üç LED ile bir trafik ışığı modeli yaptık. Her LED'in kendi pini ve direnci var. Kod, ışıkları sırayla yakan bir algoritma. loop bu sırayı hep tekrarlar. Bekleme olmasaydı ışıkların değiştiğini göremezdik.

    Özet: Kırmızı pin 10'da, sarı pin 9'da, yeşil pin 8'de; her LED'in kendi 220 Ω direnci var. Sıra: kırmızı, kırmızı ve sarı, yeşil, sarı. Sırası belli adımlar bir algoritmadır; loop bu algoritmayı tekrarlayan döngüdür. delay her adımın görülebilecek kadar sürmesini sağlar.

    Trafik ışığı algoritması dört adımdan oluşur ve her adımda hangi ışıkların yanacağı ile süresi bellidir. Pinler yeni bir komut gelene kadar durumunu korur; bu yüzden söndürme komutlarını unutmamak gerekir. loop adımları sonsuza kadar tekrarlar, delay ise süreyi belirler. Ders 3'teki butonla bu sisteme yaya isteği eklenebilir.

    Model, yönetmelikteki ışık anlamlarına uygun dört aşamalı bir döngüdür: 3000, 1000, 3000, 1000 ms; bir tur 8 s. digitalWrite yalnız yazdığı pini değiştirir, diğerleri durumunu korur. delay sırasında kart başka satır çalıştırmaz; bu, butonlu bir sistemde kısa basışların kaçmasına yol açabilir. Beklemesiz hızlı açıp kapama ise gözde sönük ve sürekli ışık etkisi yaratır: PWM'in temeli.

    Mini sınav

    Kırmızıyla birlikte sarı yanınca ne anlama gelir?
    Adımları sırayla yazmaya ne denir?
    Bütün delay satırlarını silersek ne olur?

    Mini sınav

    Bu devrede sarı LED hangi pine bağlı?
    Kodda kırmızı LED'i söndüren satır hangisi?
    Neden her LED'e ayrı bir 220 Ω direnç takıyoruz?

    Mini sınav

    Yeşilden sonra yalnız sarı yanınca bu ne anlama gelir?
    Kırmızıyı söndüren satırı unutursak yeşil aşamasında ne görürüz?
    İkinci aşamada neden yalnız sarıyı yakmak yeterlidir?

    Mini sınav

    Modelde bir tam tur kaç saniye sürer?
    delay(3000) çalışırken bir yaya butonuna kısa basılırsa ne olur?
    UNO'da analogWrite ile PWM üretilebilen pinler hangileridir?

Öğretmen notu

Süre: yaklaşık 30 dakika. Düzey: ortaokul; anlatım seçilen sınıfa (5-8) göre değişir.

Öğrenme hedefleri (5. sınıf)

Öğrenme hedefleri (6. sınıf)

Öğrenme hedefleri (7. sınıf)

Öğrenme hedefleri (8. sınıf)

Hazırlık

Ders 2'yi tamamlamış sınıflarla işleyin. Derse başlamadan öğrencilere kavşaktaki ışıkların sırasını sorup tahtaya yazın. Sıra, Trafik İşaretleri Hakkında Yönetmelik'in 9. maddesindeki ışık anlamlarına dayanır: kırmızıyla birlikte yanan sarı yolun açılmak üzere olduğunu, yeşilden sonra yanan sarı kapanmak üzere olduğunu bildirir. Süreler sınıfta izlenebilsin diye kısadır; gerçek kavşak süreleri için ölçü değildir. Müfredat bağı: 5. sınıf BTY 6. temasında algoritma, döngü ve akış şeması (BTY.5.6.1); program, algoritma mantığını anlatmak için günlük hayattan örnekler arasında trafik düzenlemeyi de sayar. 6. sınıf BTY 6. temasında döngüler anahtar kavramdır.

Gerçek set için malzemeler

Güvenlik

Sık görülen yanlış düşünceler

Sınıf tartışması

Hızlı bitirenlere

Kullanım

Kavramlar

Algoritma

Teknik
Algoritma, bir işi yapmak için sırayla izlenen adımlardır.

Günlük hayatta
Yemek tarifi, diş fırçalama ya da okula gidiş yolu da sırayla izlenen adımlardır, yani birer algoritmadır.

Teknik
Algoritma, bir problemi çözmek için sırası belli adımların yazılmasıdır; akış şemasıyla da gösterilebilir.

Günlük hayatta
Navigasyon uygulamaları en uygun yolu bulmak için algoritmalar kullanır.

Teknik
Algoritma; açık, sırası belli ve sonlu adımlardan oluşan bir çözüm yoludur. Kod, algoritmanın bir programlama diliyle yazılmış hâlidir.

Günlük hayatta
Trafik düzenleme, yemek tarifi ve bulaşık makinesi yerleştirme gibi günlük işler de algoritmayla planlanabilir; adımları sıralamak işi kolaylaştırır.

Teknik
Algoritma, bir girdiden istenen çıktıyı elde etmek için tanımlanmış, açık ve sonlu adımlar dizisidir. Aynı algoritma farklı programlama dilleriyle yazılabilir; iyi bir algoritma doğru, verimli ve test edilmiş olmalıdır.

Günlük hayatta
Algoritmalar arama sonuçlarından navigasyona kadar hayatımızı etkileyen kararlar verir; bu yüzden algoritmaların adil, doğru ve denetlenebilir olması toplumsal bir konudur.

Döngü (loop)

Teknik
Döngü, aynı adımları tekrar tekrar yapmaktır. Arduino'da loop bölümü durmadan tekrar eder.

Günlük hayatta
Her sabah aynı sırayla yaptığımız işler ve gece ile gündüzün birbirini izlemesi de birer döngüdür.

Teknik
Döngü, bir grup komutun tekrar tekrar çalışmasıdır; Arduino'nun loop bölümü bittiğinde en başa döner.

Günlük hayatta
Trafik ışıklarının sırası, saat ibresinin dönüşü ve okul zili programı tekrar eden döngülere örnektir.

Teknik
Döngü, belli komutları tekrar eden bir programlama yapısıdır. loop() bir sonsuz döngüdür: kart çalıştığı sürece içindeki komutlar sırayla ve yeniden çalışır.

Günlük hayatta
Fabrikalardaki üretim bantları, aynı işlemi her ürün için tekrar ederek çalışır.

Teknik
Döngüler, bir koşul sağlanana kadar ya da sonsuza kadar tekrar eden yapılardır (for, while, loop()). Gömülü sistemlerde ana döngü; girişleri okuma, karar verme ve çıkışları güncelleme adımlarını sürekli tekrarlar.

Günlük hayatta
Doğadaki su döngüsü ile programlardaki döngüler aynı fikre dayanır: belli adımlar sırayla tekrar eder. Bir döngünün ne zaman duracağını doğru tasarlamak, bitmeyen hataları önler.

Kod (program)

Teknik
Kod, karta ne yapacağını adım adım söyleyen komutlar listesidir.

Günlük hayatta
Telefondaki oyunlar ve uygulamalar da kodla yazılır.

Teknik
Program (kod), bilgisayarın ya da kartın anlayacağı bir dille yazılmış komutlar dizisidir; Arduino kodları setup ve loop bölümlerinden oluşur.

Günlük hayatta
Birçok çamaşır makinesinin programı, trafik ışıkları ve oyunlar kodla çalışır; bu kodları insanlar yazar.

Teknik
Kod, bir algoritmanın programlama diliyle yazılmış hâlidir. Arduino kodu bilgisayarda yazılır, derlenir ve USB üzerinden kartın belleğine yüklenir; kart komutları yukarıdan aşağı sırayla çalıştırır.

Günlük hayatta
Kodu yazan kişi cihazın nasıl davranacağına karar verir; bu yüzden kod yazarken güvenliği ve kullanıcıları düşünmek bir sorumluluktur.

Teknik
Arduino programları C++ tabanlı bir dille yazılır. Kod, derleyici tarafından mikrodenetleyicinin anlayacağı makine diline çevrilir ve Flash belleğe yüklenir; setup() bir kez, loop() sürekli çalışır.

Günlük hayatta
Yazılımlar bugün ulaşımdan sağlığa kadar birçok alanda kararları etkiler ve hatalı bir kod gerçek dünyada sorun çıkarabilir. Bu yüzden kod test edilir, hataları ayıklanır.

Değişken

Teknik
Değişken, programda bir bilgiyi saklayan, adı olan bir kutudur.

Günlük hayatta
Bir oyundaki puan ya da kalan can sayısı değişkenlerde saklanır.

Teknik
Değişken, bir değeri adıyla saklayan program parçasıdır. const ile tanımlanırsa değeri değişmez; buna sabit denir.

Günlük hayatta
Termometrenin gösterdiği sıcaklık zamanla değişir; programlar bu tür değerleri değişkenlerde tutar.

Teknik
Değişken, bellekte bir değer için ayrılmış, adı olan bir yerdir. const int led = 13; satırı, değeri 13 olan ve değişmeyen led adlı bir tam sayı tanımlar.

Günlük hayatta
Fen deneylerindeki bağımlı ve bağımsız değişkenler gibi, programlardaki değişkenler de değişebilen bir bilgiyi temsil eder; hangisinden söz edildiğini bağlamdan anlarız.

Teknik
Değişkenin bir türü (int: tam sayı), bir adı ve bir değeri vardır. const değeri sabitler; pin numaralarına ad vermek kodu okunur kılar ve bir pini değiştirmek gerektiğinde tek satırı düzeltmek yeter.

Günlük hayatta
Bilimsel deneylerde değişkenleri kontrol etmek ne kadar önemliyse, programlarda da değişkenlere anlamlı adlar vermek ve değerlerini kontrol etmek hataları önler.

LED

Teknik
LED, elektrik geçince ışık veren küçük bir lambadır. Uzun bacağı artı, kısa bacağı eksi tarafıdır.

Günlük hayatta
Trafik ışıklarında, ekranlarda ve cihazların açık-kapalı ışıklarında LED'leri görürüz.

Teknik
LED (ışık yayan diyot), elektriği yalnız bir yönde, anottan katoda geçirir ve bu sırada ışık verir.

Günlük hayatta
LED ampuller, eski tip ampullere göre aynı ışığı daha az elektrikle verir.

Teknik
LED, akımı tek yönde geçiren bir diyottur; akım anottan katoda geçtiğinde ışık yayar. Ters bağlanırsa akım geçmez ve yanmaz; doğru yönde ise akımı mutlaka bir dirençle sınırlanmalıdır.

Günlük hayatta
Az enerji harcadıkları için sokak lambalarında, araç farlarında ve ekranlarda LED kullanımı yaygınlaşmıştır; bu da enerji tasarrufuna katkı sağlar.

Teknik
LED bir yarı iletken diyottur: doğru yönde bağlandığında üzerinde rengine göre değişen bir gerilim kalır (kırmızı için yaklaşık 1,8-2,2 V) ve ışık yayar. Akımı seri bir dirençle sınırlanır; ters yönde iletmez.

Günlük hayatta
Caddelerdeki ve stadyumlardaki büyük LED ekranlarda görüntü, binlerce küçük LED'in parlaklığı ayarlanarak oluşur. LED aydınlatma, enerji verimliliği sayesinde elektrik tüketimini azaltmaya yardım eder.

Direnç

Teknik
Direnç, elektriğin akışını azaltan küçük bir parçadır. Musluğu biraz kısmak gibi.

Günlük hayatta
Ses düzeyini ayarladığımız bazı çevirmeli düğmelerin içinde ayarlanabilir bir direnç bulunur.

Teknik
Direnç, maddelerin elektriğin geçişine karşı gösterdiği zorluktur; birimi ohm'dur (Ω). Devredeki direnç parçası akımı sınırlayarak diğer parçaları korur.

Günlük hayatta
Saç kurutma makinesi ve elektrikli ısıtıcı gibi cihazlar, direnci olan tellerin ısınmasıyla çalışır.

Teknik
Direnç, bir maddenin akıma karşı gösterdiği zorluktur ve ohm (Ω) ile ölçülür. Aynı gerilimde direnç büyüdükçe akım küçülür; renk bantları direncin değerini gösterir.

Günlük hayatta
Elektrik kabloları genellikle bakırdan yapılır, çünkü bakırın direnci düşüktür; böylece elektrik yolda daha az boşa harcanır.

Teknik
Direnç R = V / I bağıntısıyla tanımlanır ve ohm (Ω) ile ölçülür. 220 Ω'luk direnç (kırmızı-kırmızı-kahverengi-altın) LED akımını yaklaşık 14 mA'de tutar; 10 kΩ'luk direnç (kahverengi-siyah-turuncu-altın) pull-down olarak çok küçük bir akım geçirir.

Günlük hayatta
Uzun ve ince teller daha büyük direnç gösterir; bu yüzden ev tesisatında kablo kalınlığı taşınacak akıma göre seçilir. Yanlış seçilen ince kablo ısınabilir ve yangın riski oluşturur.

Pin

Teknik
Pin, kartın kenarındaki küçük bağlantı ucudur. Kabloları buraya takarız.

Günlük hayatta
Bir evin kapıları gibi düşünebiliriz: kart dışarıyla pinlerinden haberleşir.

Teknik
Pin, kartın dış dünyayla bağlantı kurduğu uçtur; her pinin bir numarası ya da adı vardır (13, A0, GND gibi).

Günlük hayatta
Bilgisayardaki USB girişleri ya da kulaklık girişi gibi, kartın pinleri de başka parçaları bağlamak içindir.

Teknik
Pin, mikrodenetleyiciye giden bir bağlantı noktasıdır; dijital pinler kodla giriş (okuma) ya da çıkış (yazma) olarak ayarlanabilir.

Günlük hayatta
Telefonun şarj girişindeki küçük metal temas noktaları da pin gibidir: bazıları güç, bazıları bilgi taşır.

Teknik
Pin, sinyal ya da besleme bağlantı noktasıdır. Dijital pinler pinMode ile INPUT, OUTPUT ya da INPUT_PULLUP yapılır; 5V, 3,3V ve GND gibi güç pinleri ise sabit gerilim sağlar.

Günlük hayatta
Her elektronik cihazda bağlantı uçları vardır: şarj soketleri, kart okuyucular, çiplerin bacakları. Doğru pine doğru bağlantıyı yapmak, cihazın güvenli çalışmasının ilk şartıdır.

Dijital

Teknik
Dijital, yalnız iki durum demektir: açık ya da kapalı. Bir ışık anahtarı gibi.

Günlük hayatta
Telefon, bilgisayar ve tablet bütün bilgiyi açık ve kapalı gibi iki işaretle saklar.

Teknik
Dijital sinyal yalnız iki değer alır: var (HIGH, 1) ya da yok (LOW, 0).

Günlük hayatta
Fotoğraflar, müzikler ve yazılar bilgisayarda 1 ve 0'lardan oluşan dijital bilgi olarak saklanır.

Teknik
Dijital sinyal iki seviyeli bir sinyaldir: Arduino UNO'da HIGH yaklaşık 5 V, LOW 0 V'tur. Bilgisayarlar bütün bilgiyi bu iki değerle, yani 1 ve 0'larla tutar.

Günlük hayatta
Dijital bilgi bozulmadan kopyalanabilir; bu yüzden fotoğraf, müzik ve kitaplar kolayca paylaşılabilir. Bu kolaylık, başkasının eserini izinsiz kopyalamama sorumluluğunu da getirir.

Teknik
Dijital sinyal, belli bir eşiğin üstünde HIGH (1), altında LOW (0) sayılan iki seviyeli bir sinyaldir. UNO'da çıkış HIGH iken yaklaşık 5 V, LOW iken 0 V'tur; bit, bu iki değerden birini tutan en küçük bilgi birimidir.

Günlük hayatta
Dijitalleşme, bilginin 1 ve 0'lara çevrilip saklanması ve iletilmesidir; okul kayıtlarından kütüphane kataloglarına kadar birçok iş bugün dijital yürür. Bu kolaylık, verinin korunması sorumluluğunu da getirir.

Giriş ve çıkış

Teknik
Giriş, karta bilgi gelen yoldur (buton gibi). Çıkış, kartın bir iş yaptırdığı yoldur (LED gibi).

Günlük hayatta
Bilgisayarda klavye ve fare giriş, ekran ve hoparlör çıkış birimidir.

Teknik
Giriş pini dışarıdan bilgi okur, çıkış pini dışarıya elektrik vererek iş yaptırır; Arduino'da bunu pinMode ile seçeriz.

Günlük hayatta
Otomatik kapıda algılayıcı giriştir, kapıyı açan motor çıkıştır; arada kararı bir program verir.

Teknik
Bir sistem giriş (algılama), işlem (karar) ve çıkış (eylem) adımlarıyla çalışır. Arduino'da pinMode(pin, INPUT) pini okumaya, pinMode(pin, OUTPUT) yazmaya hazırlar.

Günlük hayatta
Dokunmatik ekran hem giriş hem çıkış birimidir: dokunuşumuzu algılar ve görüntü gösterir.

Teknik
INPUT olarak ayarlanan pin dışarıdaki gerilimi okur ve neredeyse akım çekmez; OUTPUT olarak ayarlanan pin HIGH'ta yaklaşık 5 V, LOW'da 0 V vererek bir yükü sürer. Giriş, işlem, çıkış modeli bilgisayar sistemlerinin temel yapısıdır.

Günlük hayatta
Bir sistemi tasarlarken önce girişleri (hangi bilgiyi toplayacağız) ve çıkışları (ne yapacağız) belirleriz; gereğinden fazla bilgi toplamamak da iyi tasarımın bir parçasıdır.

GND (toprak)

Teknik
GND, elektriğin geri döndüğü yerdir. Devre burada tamamlanır.

Günlük hayatta
Su borusu benzetmesinde suyun geri döndüğü boru gibidir: dönüş yolu yoksa su akmaz.

Teknik
GND (toprak), devrenin ortak dönüş noktasıdır; gerilimi 0 volt kabul edilir.

Günlük hayatta
Cihazların kılavuzlarında ve kartların üstünde GND ya da eksi (-) işareti olarak karşımıza çıkar.

Teknik
GND, devredeki bütün gerilimlerin karşılaştırıldığı 0 V noktasıdır. Akım bir besleme noktasından çıkar, parçalardan geçer ve GND'ye dönerek devreyi tamamlar.

Günlük hayatta
Pille çalışan oyuncaklarda pilin eksi ucu, devrenin GND'si gibi görev yapar.

Teknik
GND, devrenin 0 V başvuru noktasıdır; bir noktanın gerilimi denince o nokta ile GND arasındaki potansiyel farkı kastedilir. Birlikte çalışan devrelerin aynı GND'yi paylaşması, sinyallerin doğru okunması için gereklidir.

Günlük hayatta
Pilli cihazlarda pilin eksi ucu, araçlarda ise genellikle aracın metal gövdesi ortak dönüş noktası olarak kullanılır.

Devre (açık ve kapalı)

Teknik
Devre, elektriğin dolaştığı yoldur. Yol tamamsa kapalı devredir ve ışık yanar; bir yerden kopuksa açık devredir ve ışık yanmaz.

Günlük hayatta
Odanın ışığını açtığımızda anahtar devreyi kapatır ve lamba yanar. Işığı kapattığımızda anahtar devreyi açar.

Teknik
Elektrik devresi; güç kaynağı, kablolar ve devre elemanlarından oluşan bir yoldur. Yol kesintisizse kapalı devre, bir yerinden kesikse açık devredir.

Günlük hayatta
Evlerdeki sigortalar, tehlikeli bir durumda devreyi açarak elektriği keser ve yangın riskini azaltır.

Teknik
Kapalı devrede akım kaynaktan çıkar, devre elemanlarından geçer ve GND'ye döner. Yolun herhangi bir yerinde kopukluk varsa devre açıktır ve akım oluşmaz.

Günlük hayatta
Trafik ışıkları, asansörler ve ev aletleri, devreleri doğru anda açıp kapatarak çalışır; birçoğunda bunu bir program yönetir.

Teknik
Devre, akımın kaynaktan çıkıp yüklerden geçerek GND'ye döndüğü kapalı yoldur. Tek yollu bağlamaya seri, birden çok kola ayrılan bağlamaya paralel bağlama denir; açık devrede akım sıfırdır.

Günlük hayatta
Evlerdeki lambalar ve prizler genellikle paralel bağlanır; böylece biri arızalansa da diğerleri çalışmaya devam eder.

PWM

Teknik
PWM, LED'i çok hızlı yakıp söndürerek onu daha sönük göstermektir. ~ işaretli pinler bunu yapabilir.

Günlük hayatta
Bazı lambaların ışığını kısmak bu fikre benzer bir yolla yapılır.

Teknik
PWM, pini çok hızlı açıp kapatma yöntemidir; açık kalma süresi kısalırsa LED daha sönük görünür. UNO'da ~ işaretli 3, 5, 6, 9, 10, 11 pinleri PWM yapabilir.

Günlük hayatta
Bir fanın hızını ya da bir LED lambanın parlaklığını ayarlamak için benzer yöntemler kullanılabilir.

Teknik
PWM (darbe genişlik modülasyonu), dijital bir pini saniyede yüzlerce kez açıp kapatarak ortalama gücü ayarlar. analogWrite ile 0 tamamen kapalı, 255 tamamen açık demektir.

Günlük hayatta
Elektrikli oyuncak arabaların ve fanların motor hızı, LED lambaların parlaklığı PWM benzeri yöntemlerle ayarlanabilir.

Teknik
PWM'de sinyal yalnız HIGH ve LOW'dur; değişen, bir periyot içindeki HIGH süresinin oranıdır (doluluk oranı). UNO'da analogWrite çoğu ~ pinde yaklaşık 490 Hz, 5 ve 6. pinlerde 980 Hz üretir; 127 değeri yaklaşık %50 doluluk demektir.

Günlük hayatta
Enerjiyi açıp kapatarak ayarlamak, fazlasını ısı olarak boşa harcamaktan daha verimlidir; bu yüzden PWM motor sürücülerinde ve LED aydınlatmada sık kullanılır.

Koşul (if ve else)

Teknik
Koşul, bir karar vermektir: eğer butona basılıysa LED'i yak, değilse söndür.

Günlük hayatta
Otomatik kapı da karar verir: biri yaklaşırsa açıl, yoksa kapalı kal.

Teknik
Koşul yapısı, bir durumun doğru ya da yanlış olmasına göre farklı komutları çalıştırır; Arduino'da if (eğer) ve else (değilse) kullanılır.

Günlük hayatta
Akıllı bir sokak lambası hava kararınca yanar, aydınlanınca söner; bu, bir koşula göre karar vermektir.

Teknik
if bloğu, parantez içindeki koşul doğruysa çalışır; yanlışsa else bloğu çalışır. Her turda bu iki bloktan yalnız biri çalışır.

Günlük hayatta
Günlük kararlarımız da koşulludur: yağmur yağıyorsa şemsiye al, yağmıyorsa alma. Programlar bu düşünme biçimini adım adım yazar.

Teknik
Koşul, doğru ya da yanlış sonuç veren bir ifadedir (ör. digitalRead(buton) == HIGH). Karşılaştırmada ==, atamada = kullanılır; mantıksal işleçlerle (ve, veya) birden çok koşul birleştirilebilir.

Günlük hayatta
Bir sistemin hangi koşulda ne yapacağını önceden açıkça yazmak güvenli tasarımın temelidir; örneğin bir asansör, kapısı açıkken hareket etmemelidir.

Buton

Teknik
Buton, basınca iki tarafı birleştiren bir düğmedir. Bırakınca bağlantı kopar.

Günlük hayatta
Kapı zili, asansör düğmesi ve klavye tuşları birer buton gibi çalışır.

Teknik
Buton, basılı tutulduğu sürece devrenin iki noktasını birleştiren bir anahtardır; Arduino butonun durumunu bir giriş pininden okur.

Günlük hayatta
Bazı yaya geçitlerinde yayaların bastığı bir buton bulunur; bu buton, karşıya geçmek isteyen biri olduğunu ışık sistemine bildirir.

Teknik
Anlık buton yalnız basılıyken iletir; Arduino'da durumu digitalRead ile HIGH ya da LOW olarak okunur. Basılı değilken girişin belirsiz kalmaması için pull-down ya da pull-up direnci gerekir.

Günlük hayatta
Asansör çağrı düğmesine bir kez basmak yeter, çünkü isteği içerideki program hatırlar; buton yalnız bilgi verir, kararı program verir.

Teknik
Buton mekanik bir anahtardır: basılıyken kontakları arasındaki direnç neredeyse sıfır, açıkken çok büyüktür. Pull-down direnciyle giriş LOW'a çekilir, basınca 5 V'a bağlanır ve HIGH okunur; Arduino'nun iç pull-up direnci için INPUT_PULLUP da kullanılabilir.

Günlük hayatta
Büyük ve kolay basılan butonlar gibi, bir butonun yeri ve boyutu da tasarımın parçasıdır; iyi tasarım, engelli bireyler dahil herkesin kullanabileceği bir arayüz demektir.

Kaynaklar

Kaçıncı sınıfla çalışıyoruz?

Anlatımlar, tanımlar ve mini sınav seçtiğiniz sınıfa göre hazırlanır. Ders sırasında üst çubuktan değiştirebilirsiniz.