back to top

#13 Buzz Wire Game

Projeler her zaman sorun çözmek ve işleri kolaylaştırmak için olmak zorunda değil. Eğlenmek ve gelişmek için de projeler hazırlayabilirsin. Dikkat ve konsantrasyon bir çok insanın geliştirmek istediği özellikleridir. Bunu yapabileceği uygulamalar oldukça ilgi çekicidir. Buzz Wire Game’i Picobricks ile yapmaya ne dersin?

Bilgisayarlar 0 ve 1 ler ile çalışır ifadesini mutlaka duymuşsunuzdur. 0 elektriğin yokluğunu 1 ise varlığını temsil eder.  0 ve 1 ler belirli sayıda ve sıralamadaki kombinasyonlarla bir araya gelerek anlamlı verileri oluştururlar. Elektronik sistemlerde 0 ve 1 ler doğrudan bir durumu kontrol etmek için kullanılabilmektedir. Kapı kapalı mı değil mi? Işık açık mı kapalı mı? Sulama sistemi devrede mi değil mi? bunun gibi bilgiler elde etmek için durum kontrolü yapılmaktadır.

Bu projede Picobricks ile buzzer ve LED modülünü kullanarak iletken tel yardımı ile dikkat ve konsantrasyon geliştirici Buzz Wire Game oyununu elektronik olarak hazırlayacağız. Bu projeyi hazırlarken buton olmayan ancak buton gibi kullanılacak bir giriş tekniği de öğrenmiş olacaksın.

Proje Detayları ve Algoritma

Projeyi hazırlamak için 2 adet erkek-erkek jumper kablo ve 15 cm uzunluğunda iletken bükülebilir tele ihtiyacın var. Oyuncu hazır olduğunda oyunu başlatmak için butona basması istenecek. Butona basıldığında oyuncunun elinde jumper kablo iletken tele değerse Picobricks bunu algılayıp sesli ve yazılı uyarı verecek. Oyun başladıktan bitene kadar geçen sürede OLED ekranda gösterilecek.

Kullanıcı butona bastıktan sonra timer’ı resetliyoruz. Daha sonra Picobricks’in GPIO1 nolu pinine bağlı iletken tel’e 3.3V’luk gerilim vereceğiz. Oyuncunun elinde tuttuğu kablonun bir ucu Picobricks üzerinde GND pinine bağlı olacak. Eğer oyuncu elindeki jumper kabloyu iletken tele dokundurursa GPIO1 nolu pin Pasif/Kapalı/0 konumuna düşecektir. Daha sonra Oyunun bittiğini bildirir ışıklı, yazılı ve sesli geri bildirimde bulunulacak ardından OLED ekran üzerinde geçen süre milisaniye cinsinden gösterilecek. 5 saniye sonunda oyuncunun yeniden başlamak için butona basması istenecek.

Bağlantı Şeması

Projenin MicroBlocks ile Kodlanması

PicoBricks başladığında OLED ekranı başladıktan hemen sonra sonsuz bir döngü açıyoruz. Çünkü oyun bittikçe başa dönecek. Sonsuz döngünün içine ilk önce kırmızı ledi kapatıp OLED ekrana başlangıç mesajı ifadelerini yerleştiriyoruz. Ardından Control kategorisinden wait until bloğunu yerleştirerek Picobricks’in butonuna tıklanana kadar döngüyü bekletiyoruz.

Butona basıldıktan sonra kodların devamında OLED ekrana oyunun başladığını bildiren ifade ekliyoruz. Ardından GPIO1 pinini açarak 3.3V gerilim veriyoruz. Zamanlayıcıyı sıfırladıktan sonra wait until bloğu içinde GPIO1 pini 0 yani kapalı olana kadar bekliyoruz. burada Oyuncunun elindeki kabloyu tele dokundurma durumu kontrol ediliyor. Dokunma algılandığında döngüye kaldığı yerden devam edilip gerekli ışıklı yazılı ve sesli bildirimler sunuluyor. Son olarak 5 saniye bekleyip döngünün başına dönülüyor.


Projenin kodlarına erişmek için tıkla.

Projenin Yapım Aşamaları

PicoBricks base kit ile beraber, 

1: 2 adet 20 cm erkek-erkek jumper kablo. GND’ye takılacak kablonun bir ucu 4- 5 cm soyulup halka şekline getir.

2: 0.8 mm kalınlığında  15-20 cm iletken tel malzemelerini hazırla.

Protoboard üzerine iletken teli dilediğin şekilde bükerek deliklerinden geçir bir ucunu geçirmeden önce erkek ucunu PicoBoard üzerindeki GND pinine bağlı olan diğer ucunu halka haline getirdiğin kablonun içinde geçirmelisin.
3: İletken tel
4: Bir ucu GND pinine bağlı ucu halka haline getirilmiş Jumper kablo

5: İki ucu da erkek olan jumper kablonun bir ucunu, protoboard’a yerleştirdiğin iletken telin ucunun hemen yanındaki deliğe tak.

6: Protoboard’ın altından jumper kablonun ucu ile iletken telin ucunu birbirine dola.

7: İletken telin protoboard’a yerleştirilmiş diğer ucunun da çıkmaması için bük.

8: 6. adımda iletken telin ucuna doladığın jumper kablonun diğer erkek ucunu Picoboard üzerindeki GPIO1 nolu pine tak.

Kurulumu tamamladıysan kodlarını yükledikten sonra oyuna başlayabilirsin. İyi eğlenceler.

Proje Önerisi

Projeye fiziksel ve yazılımsal geliştirmeler yapabilirsin. Başlangıç ve bitiş noktalarını yalıtkan bant ile kapatarak oyuncunun oyuna başlarken ve bitirirken sorun yaşamasını engelleyebilirsin. Yazılımsal olarak ise oyuncu elindeki kabloyu tele değdirmeden diğer uca getirip bıraktığında butona basar ve skorunu OLED ekranda görmesini sağlayabilirsin.

Projenin MicroPython Kodları

from machine import Pin, I2C, Timer
from ssd1306 import SSD1306_I2C
from utime import sleep

WIDTH  = 128                                            
HEIGHT = 64

sda=machine.Pin(4)
scl=machine.Pin(5)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=1000000)
oled = SSD1306_I2C(128, 64, i2c)

wire=Pin(1,Pin.OUT)
led = Pin(7,Pin.OUT)
buzzer=Pin(20, Pin.OUT)
button=Pin(10,Pin.IN,Pin.PULL_DOWN)
endtime=0
while True:
    led.low()
    oled.fill(0)
    oled.show()
    oled.text("<BUZZ WIRE GAME>",0,0)
    oled.text("Press the button",0,17)
    oled.text("TO START!",25,35)
    oled.show()
    while button.value()==0:
        print("press the button")
    oled.fill(0)
    oled.show()
    oled.text("GAME",25,35)
    oled.text("STARTED",25,45)
    oled.show()
    wire.high()
    timer_start=utime.ticks_ms()
    while wire.value()==1:
        print("Started")
    endtime=utime.ticks_diff(utime.ticks_ms(), timer_start)
    print(endtime)
    oled.fill(0)
    oled.show()
    oled.text("GAME OVER!",25,35)
    oled.text(endtime + "ms" ,25,45)
    oled.show()
    led.high()
    buzzer.high()
    sleep(5)

Projenin Arduino C Kodları

#include <Wire.h>
#include "ACROBOTIC_SSD1306.h"

int Time=0;
unsigned long Old_Time=0;

void setup() {
  
  pinMode(20,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(10,INPUT);

  Wire.begin();  
  oled.init();                      
  oled.clearDisplay();
   
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif  
}

void loop() {

  digitalWrite(7,LOW);

  oled.setTextXY(2,1);              
  oled.putString("BUZZ WIRE GAME"); 
  oled.setTextXY(4,2);              
  oled.putString("Press Button"); 
  oled.setTextXY(5,3);              
  oled.putString("TO START!");

  while (!(digitalRead(10)==1)){
    
  }

  oled.clearDisplay();
  oled.setTextXY(3,6);              
  oled.putString("GAME"); 
  oled.setTextXY(5,4);              
  oled.putString("STARTED");

  digitalWrite(1,HIGH);
  Old_Time=millis();
  
  while(!(digitalRead(1)==0)){

    Time=millis()-Old_Time;   
  }

  String(String_Time)=String(Time);
  
  oled.clearDisplay();
  oled.setTextXY(3,4);              
  oled.putString("GAME OVER"); 
  oled.setTextXY(5,4);              
  oled.putString(String_Time);
  oled.setTextXY(5,10);              
  oled.putString("ms"); 

  digitalWrite(7,HIGH);
  digitalWrite(20,HIGH);
  delay(500);
  digitalWrite(20,LOW);
  delay(5000);
  
  Time=0;
  Old_Time=0;
  oled.clearDisplay();
}




Önceki İçerik
Sonraki İçerik

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz