back to top

PicoBricks ile Buzz Wire Oyunu

Buzz Wire Oyunu

Raspberry Pi veya Arduino ile bir oyun yapmaya ne dersiniz? Bu yazımızda Buzz Wire oyununun nasıl yapıldığını, gerekli bileşenleri ve adım adım yapım aşamasını göreceksiniz.

Bir proje her zaman bir problemi çözmek veya bazı şeyleri kolaylaştırmak için yapılmaz. Siz de hem kendinizi geliştirmek ve eğlenmek için projeler hazırlayabilirsiniz. Peki PicoBricks ile Buzz Wire oyunu yapmaya ne dersiniz?

Bilgisayarların 0 ve 1’lerle çalıştığını duymuşsunuzdur. 0, elektriğin olmadığını, 1 ise elektriğin varlığını temsil eder. Bu 0 ve 1’ler birleşerek anlamlı verileri oluşturur. Elektronik sistemlerde 0 ve 1’ler doğrudan sistemi kontrol etmek için kullanılabilirler. “Örneğin kapı açık mı kapalı mı?” veya “Işık açık mı kapalı mı?” gibi. Bu tür bilgileri elde etmek için bir durum kontrolü gerçekleştirirler.

Bu projemizde bir iletken tel, buzzer ve LED modülü bulunan bir PicoBricks ile elektronik bir ortamda dikkat ve konstrasyon geliştirmek için bir Buzz Wire oyunu yapacağız.

Detaylar ve Algoritma

Yapacağımız oyunun amacı, bir kablonun etrafına dolanmış başka bir kabloyu ona dokunmadan hareket ettirmektir.

Kabloların iletkenliği sebebiyle birbirlerine değdiklerinde devre tamamlanacak ve ses çıkmasına neden olacak.

Oyuncudan oyunu başlatması için bir butona basması istenecek. Oyuncu butona bastığında zamanlayıcı sıfırlanacak.

Sonrasında GPIO1 pinine bağlı olan bir iletken teli HIGH durumuna ayarlayacağız. Oyuncunun tuttuğu kablonun bir ucu PicoBricks üzerindeki GND pinine bağlanmalıdır. Eğer oyuncu elindeki kabloyu iletken tele dokundurursa GPIO1 pini topraklanmış olacak ve LOW durumunda olacaktır. PicoBricks bunu tespit edecek ve sesli uyarı verecek.

Oyunun bittiğini belirtmek için sesli, ışıklı ve yazılı bir geri bildirim yapılacak. Oyun oynanırken geçen süre ekranda gösterilecek. Ekranda,  5 saniye sonunda oyuncudan oyunu tekrar başlatması için butona basmasını isteyecek bir geri bildirim yapılacak.

Bileşenler

1x PicoBricks

1x 15-20 cm 0,8 mm kalınlığında iletken tel

2x E-E- Jumper Kablo

Devre Şeması

Devre Şeması

Yapım Aşaması

1: 2 adet E-E- jumper kablo. GND’ye bağlanması gereken kablonun bir ucu 4-5 cm kadar soyulup halka haline getirilecek.

2: 15-20 cm kalınlığında bir iletken teli hazırlayın.

İletken teli protoboard üzerinde istediğiniz gibi bükerek deliklerden geçirin. Deliklerden geçirmeden önce halka haline getirdiğiniz kablonun diğer ucunu PicoBoard üzerindeki GND pinine bağlanan erkek ucunu geçirmelisiniz.

3: İletken tel

4: Bir ucu GND pinine bağlı döngü uçlu bir jumper kablosu

5:  E-E Jumper kablonun bir ucunu protoboard üzerine yerleştirdiğiniz ilteken telin ucunun hemen yanındaki deliğe sokun.

6: Jumper kablonun ucunu ve iletken telin ucunu protoboard’un altında birbirine bağlayın.

7: Protoboard üzerine yerleştirdiğiniz iletken telin diğer ucunu dışarı çıkmayacak şekilde bağlayın.

8: Adım 6’da iletken telin ucuna sardığınız Jumper kablonun diğer ucunu 1 numaralı pine bağlayın(PicoBricks’teki GPIO1).

Devre Kurulumunu yaptıktan sonra kodu yükleyebilirsiniz.

MicroBlocks Kodları

MicroPython Kodları

from machine import Pin,I2C, Timer #to access the hardware on the pico
from picobricks importSSD1306_I2C #OLED Screen Library
from utime import sleep # time library

#OLED Screen Settings
WIDTH=128HEIGHT=64

sda=machine.Pin(4)#initialize digital pin 4 and 5as an OUTPUTforOLED Communication
scl=machine.Pin(5)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=1000000)
oled =SSD1306_I2C(WIDTH,HEIGHT, i2c)

wire=Pin(1,Pin.OUT)#initialize digital pin 1as an OUTPUT
led =Pin(7,Pin.OUT)#initialize digital pin 7 and 5as an OUTPUTforLED
buzzer=Pin(20, Pin.OUT)#initialize digital pin 20as an OUTPUTfor Buzzer
button=Pin(10,Pin.IN,Pin.PULL_DOWN)#initialize digital pin 10as an INPUTfor button
endtime=0while True:
    led.low()
    oled.fill(0)
    oled.show()
    oled.text("",0,0)
    oled.text("Press the button",0,17)
    oled.text("TO START!",25,35)
    oled.show()
    #When button is '0',OLED says 'GAME STARTED'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()
     #When wire is '1',OLED says 'GAME OVER'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()#LED On
    buzzer.high()#Buzzer On
    sleep(5)#Delay

Arduino C Kodları

#include
#include "ACROBOTIC_SSD1306.h"

int Time=0;
unsigned long Old_Time=0;voidsetup(){// put your setup code here, to run once:pinMode(20,OUTPUT);pinMode(7,OUTPUT);pinMode(1,OUTPUT);pinMode(10,INPUT);

  Wire.begin();
  oled.init();
  oled.clearDisplay();

#ifdefined(__AVR_ATtiny85__)&&(F_CPU==16000000)clock_prescale_set(clock_div_1);
#endif


}voidloop(){// put your main code here, to run repeatedly: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