Arduino ile Zar Uygulaması

Çoğunlukla küp şeklinde olan, her bir yüzünde 1 ila 6 arasındaki rakamlardan birini temsil eden sayıda nokta bulunan ve rastgele sayı üretmeye yarayan zarlar, genellikle şans oyunlarında kullanılmaktadır. Bu yazımızda  zar işlevi gören bir dijital sistem oluşturacağız.

Arduino ile geliştireceğimiz bu eğlenceli uygulamada yer alan ekipmanların tamamı direnc.net stoklarında yer almaktadır. Arduino ile Zar Uygulaması için gereken ürünlerin listesi şöyle:

1 Adet 1K Direnç

6 Adet 5mm’lik LED

2 Adet Bas-Bırak Buton

1 Adet Buzzer

Dileğiniz adet veya özellikte Breadboard

1 adet Arduino Nano

1 Adet LED Display Saat Modül

Şimdi Arduino ile Zar Uygulaması’nın bağlantı şemasına bakalım:

Arduino İle Zar Uygulaması

Bağlantı şemasında da görüldüğü üzere, Arduino Nano’nun dijital pinlerine; LED’ler, Display ekranın DIO,CLK uçları ve butonlar bağlanıyor. Şimdi Arduino Nano’ya yükleyeceğimiz kodu inceleyelim. Kod satırlarında yer alan açıklamalar, ilgili kodun işlevini belirtmektedir:

#include <TM1637.h>
#define DEBUG 0
int CLK = 9;
int DIO = 10;
TM1637 tm(CLK,DIO);
// 6 adet LED'in bağlı olduğu dijital pinler tanımlanır
int bir = 2;
int iki = 3;
int uc = 4;
int dort = 5;
int bes = 6;
int alti = 7;
// buton için pin tanımlanır
int button = 12;
// butona basılıp basılmadığı kontrol edilir
int pressed = 0;
void setup() {
tm.set(2);
// LED'lerin dijital pinleri OUTPUT olarak ayarlanır
for (int i=bir; i<=alti; i++) {
pinMode(i, OUTPUT);
}
// Butonun bağlı olduğu pin INPUT olarak ayarlanır
pinMode(button, INPUT);
// random fonksiyonundan değer belirlenir
randomSeed(analogRead(0));
#ifdef DEBUG
Serial.begin(9600);
#endif
}
void buildUpTension() {
// Zar atıldığında çıkan değer belli olana kadar,
// LED'lerde kara şimşek uygulaması başlar
// önce soldan sağa
for (int i=bir; i<=alti; i++) {
if (i!=bir) {
digitalWrite(i-1, LOW);
}
digitalWrite(i, HIGH);
delay(100);
}
// sonra sağdan sola
for (int i=alti; i>=bir; i--) {
if (i!=alti) {
digitalWrite(i+1, LOW);
}
digitalWrite(i, HIGH);
delay(100);
}
}
// zar atıldıktan sonra çıkan rakan ekranda gösterilir
void showNumber(int number) {
digitalWrite(bir, HIGH);
if (number >= 1) {
digitalWrite(bir, HIGH);
// 4 haneli display ekranın tamamında rakam gözüksün istiyoruz
tm.display(3, 1);
tm.display(2, 1);
tm.display(1, 1);
tm.display(0, 1);
}
if (number >= 2) {
digitalWrite(iki, HIGH);
tm.display(3, 2);
tm.display(2, 2);
tm.display(1, 2);
tm.display(0, 2);
}
if (number >= 3) {
digitalWrite(uc, HIGH);
tm.point(1);
tm.display(3, 3);
tm.display(2, 3);
tm.display(1, 3);
tm.display(0, 3);
}
if (number >= 4) {
digitalWrite(dort, HIGH);
tm.point(1);
tm.display(3, 4);
tm.display(2, 4);
tm.display(1, 4);
tm.display(0, 4);
}
if (number >= 5) {
digitalWrite(bes, HIGH);
tm.point(1);
tm.display(3, 5);
tm.display(2, 5);
tm.display(1, 5);
tm.display(0, 5);
}
if (number == 6) {
digitalWrite(alti, HIGH);
tm.point(1);
tm.display(3, 6);
tm.display(2, 6);
tm.display(1, 6);
tm.display(0, 6);
}
}
int throwDice() {
// 1 ila 6 arasında random bir rakam verilsin istiyoruz
int randNumber = random(1,7);
#ifdef DEBUG
Serial.println(randNumber);
#endif
return randNumber;
}
void setAllLEDs(int value) {
for (int i=bir; i<=alti; i++) {
digitalWrite(i, value);
}
}
void loop() {
// Butona basıldığında zar atılmaya başlar
pressed = digitalRead(button);
if (pressed == HIGH) {
// önceki rakam kaldırılır
setAllLEDs(LOW);
buildUpTension();
int thrownNumber = throwDice();
showNumber(thrownNumber);
}
}

Arduino ile Zar Uygulaması’na yukarıdaki kod yüklendikten sonra, sistemimiz hazır hale gelecektir. Şimdi her butona basılma durumunda Buzzer ötecek şekilde tasarlanan devre şemasında, rastgele seçilen sayı değeri hem LED adeti kadar yanacak hem de sayı display’de gösterilecek. Rastgele seçilen sayı 6 olursa, buzzer sürekli ses çıkaracak ve LED’lerin tamamı yanacak. Ayrıca LED’ler yandığında Kara Şimşek düzeninde yanacak.

Arduino Zar Uygulaması’nda karşılıklı 2 kişinin oynayacağı bu oyunda 6 rakamını ilk bulan kazanmış olacak. Direnc.net Youtube kanalımızdan da Arduino ile Zar Uygulaması projesini izleyerek inceleyebilirsiniz: