Elektronik zar, butona basıldığında Arduino'nun random() komutuyla 1 ile 6 arasında rastgele bir sayı seçip bunu gerçek zardaki gibi dizilmiş 7 LED ya da 7 segment göstergeyle gösterdiği bir projedir. Butonun mekanik zıplaması yüzünden yanlış okumayı önlemek için debounce, yani kısa bekleyip yeniden okuma kullanılır.
Elektronik zar, olasılık konusunu elektronikle birleştiren kolay ve eğlenceli bir okul projesidir. Bu yazıda Arduino, bir buton ve 7 LED ile gerçek zar deseni gösteren bir zar yapıyoruz. LED yerleşimini, bağlantıyı, rastgele sayı üretmeyi ve buton zıplamasını önlemeyi anlatıyoruz. Sonda zarın adil olup olmadığını test eden bir ödev deneyi var.
Elektronik zar nedir?
Elektronik zar, butona basıldığında 1 ile 6 arasında rastgele bir sayı seçip bunu LED'lerle ya da bir göstergeyle gösteren bir devredir. Gerçek zarda sonucu atışın hızı ve masaya çarpma belirler; elektronik zarda ise sonucu bir program seçer. Bizim zarımızda Arduino Uno, bir buton ve 7 LED kullanılır.
Zar yüzlerindeki noktalar en fazla 7 farklı yerde bulunur: dört köşe, iki yan orta ve tam orta. Bu yüzden 7 LED, 1'den 6'ya kadar bütün desenleri göstermeye yeter.
Zar deseni için LED'ler nasıl yerleştirilir?
LED'ler üç sütun ve üç satırlık bir düzende yerleştirilir: sol sütunda 3, sağ sütunda 3 ve ortada 1 LED olur. Her LED ayrı bir pine bağlanır ve her sayı için belirli LED'ler yanar.
| Sayı | Yanan LED'ler | Pinler |
|---|---|---|
| 1 | Orta | D5 |
| 2 | Sol üst, sağ alt | D2, D8 |
| 3 | Sol üst, orta, sağ alt | D2, D5, D8 |
| 4 | Dört köşe | D2, D3, D7, D8 |
| 5 | Dört köşe ve orta | D2, D3, D5, D7, D8 |
| 6 | Dört köşe ve iki yan orta | D2, D3, D4, D6, D7, D8 |
Pin yerleşimi şöyledir: D2 sol üst, D3 sağ üst, D4 sol orta, D5 orta, D6 sağ orta, D7 sol alt, D8 sağ alt. Bu sırayı kodda da aynen kullanacağız.
Hangi malzemeler gerekir?
Elektronik zar için bir Arduino Uno, 7 LED, 7 adet 220 Ω direnç, bir buton, breadboard ve jumper kablolar yeterlidir. Rakamla göstermek isterseniz bir 7 segment gösterge de ekleyebilirsiniz.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino UNO R3 klon kart | 1 | Rastgele sayı üretir, LED'leri yakar |
| 5 mm kırmızı LED paketi | 7 | Zar noktalarını gösterir |
| 220 Ω direnç | 7 | Her LED'in akımını sınırlar |
| 6x6 mm tach buton | 1 | Zarı atma komutu verir |
| 830 pin breadboard | 1 | Lehimsiz bağlantı yapılır |
| Erkek-erkek jumper kablo | 10-12 | Pinleri breadboard'a bağlar |
Her LED'den yaklaşık (5 − 2) / 220 ≈ 13,6 mA akım geçer. En fazla 6 LED aynı anda yandığı için toplam akım yaklaşık 6 × 13,6 ≈ 82 mA olur; bu, Arduino Uno için güvenli bir değerdir.
Elektronik zar adım adım nasıl yapılır?
Elektronik zar, 7 LED'i D2-D8 pinlerine, butonu D10'a bağlayıp kodu yükleyerek yapılır. Bağlantıyı yaparken USB kablosu takılı olmasın.
- 7 LED'i breadboard'a zar deseninde yerleştirin: solda 3, sağda 3, ortada 1.
- Her LED'in uzun bacağını (anot) tablodaki pine bağlayın: D2 sol üst, D3 sağ üst, D4 sol orta, D5 orta, D6 sağ orta, D7 sol alt, D8 sağ alt.
- Her LED'in kısa bacağını ayrı bir 220 Ω direnç üzerinden GND hattına bağlayın.
- Butonun bir bacağını D10'a, çapraz karşısındaki bacağını GND'ye bağlayın.
- Kodu yükleyin ve butona basın. LED'ler kısa bir süre karışık yanıp sonuçta durmalıdır.
const int ledler[7] = {2, 3, 4, 5, 6, 7, 8};
// sol ust, sag ust, sol orta, orta, sag orta, sol alt, sag alt
const byte desen[6] = {
0b0001000, 0b1000001, 0b1001001, // 1, 2, 3
0b1100011, 0b1101011, 0b1110111 // 4, 5, 6
};
const int BUTON = 10;
void goster(int sayi) {
for (int i = 0; i < 7; i++)
digitalWrite(ledler[i], bitRead(desen[sayi - 1], 6 - i));
}
void setup() {
for (int i = 0; i < 7; i++) pinMode(ledler[i], OUTPUT);
pinMode(BUTON, INPUT_PULLUP);
randomSeed(analogRead(A0)); // bos A0 pinindeki gurultu
Serial.begin(9600);
}
void loop() {
if (digitalRead(BUTON) == LOW) {
delay(50); // debounce
if (digitalRead(BUTON) == LOW) {
for (int i = 0; i < 10; i++) { // zar yuvarlaniyor
goster(random(1, 7));
delay(40 + i * 15);
}
int sonuc = random(1, 7);
goster(sonuc);
Serial.println(sonuc);
while (digitalRead(BUTON) == LOW) {} // birakilmasini bekle
delay(50);
}
}
}
random() ve debounce nasıl çalışır?
random(1, 7) komutu 1 dahil, 7 hariç bir tam sayı üretir; yani sonuç 1, 2, 3, 4, 5 ya da 6 olur. Arduino'nun sayıları sözde rastgeledir: bir formülle üretilir ve aynı başlangıçtan hep aynı sıra çıkar. randomSeed(analogRead(A0)) satırı, boştaki A0 pinindeki elektriksel gürültüyü başlangıç olarak kullanır; böylece her açılışta farklı bir sıra gelir.
Debounce, butonun zıplamasını yok saymak demektir. Buton mekanik bir parçadır; basıldığında kontakları birkaç milisaniye titreşir ve Arduino tek basışı birkaç basış gibi görebilir. Kod 50 ms bekleyip butonu yeniden okur ve yalnızca hâlâ basılıysa zarı atar. INPUT_PULLUP ise Arduino'nun iç direncini açar; buton basılı değilken pin HIGH, basılıyken LOW okunur. Buton türleri için buton çeşitleri yazısına bakabilirsiniz.
7 segment gösterge ile zar nasıl yapılır?
7 segment gösterge ile zar yapmak için LED'lerin yerine göstergenin a-g segmentleri pinlere bağlanır ve sonuç rakam olarak gösterilir. Desen mantığı aynıdır; yalnızca her rakam için hangi segmentlerin yanacağı değişir.
| Yöntem | Kullanılan pin | Görünüm | Not |
|---|---|---|---|
| 7 LED | 7 | Gerçek zar deseni | En kolay ve en görsel seçenek |
| 7 segment gösterge (ortak anot) | 7 | Rakam (1-6) | Ortak uç 5V'a; segment LOW olunca yanar |
Ortak anotlu göstergede her segment yine kendi 220 Ω direnciyle bağlanır. Bağlantı ayrıntıları 7 segment display bağlantısı yazısında.
Hangi güvenlik kurallarına dikkat edilmeli?
Elektronik zar USB'nin 5 V'u ile çalışır ve güvenlidir; yine de şu kurallara uyun:
- Devreyi yalnızca USB ya da USB powerbank ile besleyin; 220V ile hiçbir bağlantı yapmayın.
- Her LED'i kendi direnciyle bağlayın; dirençsiz LED ve Arduino pini zarar görebilir.
- Kabloları değiştirmeden önce USB'yi çıkarın; ısınan bir parça görürseniz devreyi hemen kapatın.
- 9 V pille çalıştıracaksanız pili kısa devre etmeyin, metal eşyalarla aynı cepte taşımayın.
- Ortaokul öğrencileri lehim yapacaksa bir yetişkin gözetiminde çalışmalıdır.
Ödevinizi nasıl sunarsınız?
Ödevinizi, elektronik zarın her yüzü eşit sıklıkta getirip getirmediğini test eden bir olasılık deneyiyle sunabilirsiniz. Adil bir zarda her yüzün gelme olasılığı 1/6, yani yaklaşık %16,7'dir.
- Atış sayısı: Elektronik zarı 600 kez atın; her yüz için beklenen sayı 600 / 6 = 100'dür.
- Hızlı test:
setup()içinefor (int i = 0; i < 600; i++) Serial.println(random(1, 7));yazarak 600 sonucu bir anda alın. - Karşılaştırma: Gerçek bir zarı 60 kez elle atıp sonuçları aynı tabloya ekleyin.
Örnek hipotez: "Elektronik zarda her yüz yaklaşık eşit sıklıkta gelir." Sapmayı (gelen − beklenen) / beklenen × 100 ile hesaplayın; 1 sayısı 92 kez geldiyse sapma (92 − 100) / 100 × 100 = −%8'dir. Diğer buton seçenekleri push buton kategorisinde.
Sık sorulan sorular
Arduino'nun random() fonksiyonu gerçekten rastgele mi?
Hayır, tam anlamıyla rastgele değildir; sözde rastgeledir. Sayılar bir formülle üretilir ve aynı başlangıç değeriyle hep aynı sıra çıkar. randomSeed() ile boştaki A0 pininin gürültüsünü başlangıç olarak kullanmak her açılışta farklı bir sıra sağlar. Zar oyunu ve okul deneyi için bu yeterlidir; şifreleme gibi güvenlik işlerinde kullanılmaz.
Butona bir kez basınca zar iki kez atıyorsa ne yapmalıyım?
Bu, butonun zıplamasından kaynaklanır. Koddaki debounce beklemesini 50 ms'den 80-100 ms'ye çıkarın. Kodun sonundaki "bırakılmasını bekle" satırının yerinde olduğunu kontrol edin; bu satır, buton bırakılmadan yeni atışı engeller. Ucuz butonlarda zıplama daha uzun sürebilir. Butonun bacaklarının breadboard'a tam oturduğundan da emin olun.
Bir LED hiç yanmıyorsa ne yapmalıyım?
Önce LED'in yönünü kontrol edin: uzun bacak pine, kısa bacak direnç üzerinden GND'ye gitmelidir. Sonra kablonun tablodaki doğru pine takılı olduğunu doğrulayın. 6 sayısını gösterip hangi LED'in yanmadığına bakın; o LED'i başka bir LED'le değiştirerek sorunun LED'de mi kabloda mı olduğunu bulun. Direncin GND hattına gerçekten bağlı olduğunu da kontrol edin.
Zarı pille çalıştırabilir miyim?
Evet, en kolay yol bir USB powerbank kullanmaktır. 9 V pili jaklı bir pil yuvasıyla Arduino'nun güç girişine de takabilirsiniz; kart bunu kendi regülatörüyle 5 V'a düşürür. 9 V pilin kapasitesi düşük olduğu için zar birkaç saat çalışır. Pili kısa devre etmeyin ve kullanmadığınızda çıkarın.
İki zarlı bir oyun yapabilir miyim?
Evet, ama 14 LED için Arduino Uno'nun pinleri zorlanır. Çözüm, aynı anda yanan LED'leri gruplamaktır: orta LED, iki çapraz çift ve yan orta çift. Böylece her zar için 4 pin yeter ve iki zar 8 pinle çalışır. Her çiftteki iki LED'in kendi direnci olmalıdır. Bu gruplamayı raporda anlatmak, tasarım becerinizi gösterir.
Özet
- Elektronik zar, butona basınca 1-6 arası rastgele sayıyı 7 LED ya da 7 segmentle gösterir.
- LED'ler D2-D8'e 220 Ω dirençle, buton D10 ile GND arasına bağlanır.
- random(1, 7) 1-6 arası sayı üretir; randomSeed() her açılışta farklı sıra sağlar.
- Debounce, 50 ms bekleyip yeniden okuyarak buton zıplamasını önler.
- 600 atışta her yüz için beklenen sayı 100'dür; sapmayı yüzde olarak hesaplayın.
