İçeriğe Geç

#15 PicoBricks ile Gece Ve Gündüz Projesi

13 Nov 2023
#15 Night And Day Project With PicoBricks

Okulda oynadığınız Gece Gündüz oyununu elektronik ortamda oynamaya ne dersiniz? Gece-gündüz oyunu, öğretmenimiz gece dediğinde başımızı masaya koyduğumuz, öğretmenimiz gündüz dediğinde başımızı kaldırdığımız bir oyundur. Bu oyun dikkatinizi ve refleksinizi kullanacağınız bir oyun olacak. Bu projemizde 0,96” 128×64 piksel I2C OLED ekran kullanacağız. OLED ekranlar yapay ışık kaynağı olarak kullanılabildiği için ekrandaki karakterleri lensler ve aynalar kullanarak büyütebilir ve istediğiniz düzleme yansıtabilirsiniz. OLED ekranlar kullanılarak yol ve trafik bilgilerini akıllı gözlüklere ve otomobil camlarına yansıtabilen sistemler yapılabilmektedir.

Işık sensörleri, fotodiyot olarak da adlandırılan, bulundukları ortamın ışık seviyelerini ölçebilen sensörlerdir. Işığa maruz kalan sensörün elektriksel iletkenliği değişir. Işık miktarını etkileyen elektronik sistemleri kodlayıp geliştirerek ışık sensörünü kontrol edebiliriz.

Ayrıntılar ve Algoritma

Öncelikle oyuncudan tuşuna basmasını isteyeceğiz. düğme Oyunu başlatmak için. Daha sonra şunları yapacağız: OLED ekran görüntülemek GECE Ve GÜN rastgele için 2 saniye her biri. GECE kelimesi görüntüleniyorsa, oyuncu LDR sensör; ve DAY kelimesi görüntülenirse onu ortaya çıkarın. Oyuncunun harekete geçmek için 2 saniyesi vardır. Oyuncunun her doğru yanıtı 10 puan kazanacaktır. Yanlış cevap verilmesi durumunda oyun sona erecek ve ekrandan farklı bir ses duyulacaktır. zil. Skor OLED ekranında görüntülenecektir. Oyuncunun toplam 10 doğru yanıt vermesi ve 100 puan alması halinde OLED ekranda “Tebrikler” ibaresi görüntülenecek ve zil sesi farklı tonlarda notalar çalacaktır.

Bileşenler

1X PicoBrick

Bağlantı şeması

Picobricks modüllerini kablolama olmadan kodlayabilir ve çalıştırabilirsiniz. Modülleri panodan ayırarak kullanacaksanız modül bağlantılarını grove kablolarla yapmalısınız.

PicoBricks'in MicroBlock Kodları

Mikrobloklar Çalıştır sekmesine görseli sürükleyerek veya butonuna tıklayarak projenin Mikroblok kodlarına ulaşabilirsiniz.

 

Mikroblok Çalıştırma Sekmesi

PicoBricks'in MicroPython Kodları

 

makineden içe aktarma Pin, I2C, Zamanlayıcı, ADC, PWM
picobricks'ten SSD1306_I2C'yi içe aktar
kullanım süresini içe aktar
urandom'u içe aktar

# Kütüphaneleri tanımlayın
GENİŞLİK = 128
YÜKSEKLİK = 64
# OLED Ekran Ayarları
sda = makine.Pin(4)
scl = makine.Pin(5)
# OLED İletişimi için dijital pin 4 ve 5'i ÇIKIŞ olarak başlatın
i2c = makine.I2C(0, sda=sda, scl=scl, frek=1000000)
oled = SSD1306_I2C(GENİŞLİK, YÜKSEKLİK, i2c)
sesli uyarı = PWM(Pin(20))
buzzer.freq(440)
ldr = ADC(Pin(27))
düğmesi = Pin(10, Pin.IN, Pin.PULL_DOWN)
# Giriş ve çıkış pinlerini tanımlayın
oled.text("GECE ve GÜNDÜZ", 10, 0)
oled.text("", 40, 20)
oled.text("Düğmeye Basın", 0, 40)
oled.text("BAŞLAMAK İÇİN!", 40, 55)
oled.show()
# OLED Ekran Metinleri Ayarları

def changeWord():
    küresel gece ya da gündüz
    oled.fill(0)
    oled.show()
    geceorday = yuvarlak(urandom.uniform(0, 1))
    # Veri '0' olduğunda OLED NIGHT mesajı gönderir
    eğer geceveyagün == 0 ise:
        oled.text("---GECE---", 20, 30)
        oled.show()
    başka:
        oled.text("---GÜN---", 20, 30)
        oled.show()
    # Etkinleştirmek için düğmeye basılmasını bekler

while butonu.değer() == 0:
    print("Düğmeye basın")
    utime.sleep(0,01)

oled.fill(0)
oled.show()
başlangıç ​​= 1
küresel puan
puan = 0

başlarken == 1:
    küresel oyuncunun tepkisi
    küresel puan
    Kelimeyi değiştir()
    startTime = utime.ticks_ms()
    # LDR'nin verileri 2000'den büyük olduğunda oyuncunun tepkisi '0'
    while utime.ticks_diff(utime.ticks_ms(), startTime) < 2000:
        ldr.read_u16() > 20000 ise:
            Oyuncu Tepkisi = 0
        # LDR'nin verileri 2000'in altına düştüğünde oyuncunun tepkisi '1'
        başka:
            Oyuncu Tepkisi = 1
        utime.sleep(0,01)
    #Zil çalışıyor
    buzzer.duty_u16(2000)
    utime.sleep(0,05)
    buzzer.duty_u16(0)

    eğer oyuncunun tepkisi == geceorday:
        puan += 10
    # Skor 10 olduğunda OLED 'Oyun Bitti' diyor
    başka:
        oled.fill(0)
        oled.show()
        oled.text("Oyun Bitti", 0, 18, 1)
        oled.text("Puanınız " + str(puan), 0, 35)
        oled.text("RESET'e basın", 0, 45)
        oled.text("TEKRARLANACAK", 0, 55)
        oled.show()
        buzzer.duty_u16(2000)
        utime.sleep(0,05)
        buzzer.duty_u16(0)
        kırmak

    puan == 100 ise:
        # Puan 100 olduğunda OLED 'Kazandın' diyor
        oled.fill(0)
        oled.show()
        oled.text("Tebrikler", 10, 10)
        oled.text("En Yüksek Puan: 100", 5, 35)
        oled.text("Sıfırla'ya basın", 20, 45)
        oled.text("TEKRARLANACAK", 25, 55)
        oled.show()
        buzzer.duty_u16(2000)
        utime.sleep(0.1)
        buzzer.duty_u16(0)
        utime.sleep(0.1)
        buzzer.duty_u16(2000)
        utime.sleep(0.1)
        buzzer.duty_u16(0)
        kırmak

Bağlantı şeması

Picobricks modüllerini kablolama olmadan kodlayabilir ve çalıştırabilirsiniz. Modülleri panodan ayırarak kullanacaksanız modül bağlantılarını grove kablolarla yapmalısınız.

PicoBricks'in MicroBlock Kodları

Mikrobloklar Çalıştır sekmesine görseli sürükleyerek veya butonuna tıklayarak projenin Mikroblok kodlarına ulaşabilirsiniz.

PicoBricks'in MicroPython Kodları

itibaren makine içe aktarmak Toplu iğne,2C, Zamanlayıcı,ADC,PWMitibaren Pikotuğlalar içe aktarmakSSD1306_I2Ciçe aktarmak çalışma zamanı
içe aktarmak rastgelelik
#kütüphaneleri tanımla
GENİŞLİK=128YÜKSEKLİK=64
#SEN Ekran Ayarları
sda=makine.Toplu iğne(4)
scl=makine.Toplu iğne(5)
#dijital pini başlat 4 Ve 5gibi BİR ÇIKTIiçinSEN İletişim
i2c=makine.2C(0,sda=sda, scl=scl, frekans=1000000)
sen =SSD1306_I2C(GENİŞLİK,YÜKSEKLİK, 2c)
zil =PWM(Toplu iğne(20))
zil.frekans(440)
ldr=ADC(Toplu iğne(27))
düğme=Toplu iğne(10,Toplu iğne.İÇİNDE,Toplu iğne.AŞAĞI ÇEK)
#giriş ve çıkış pinlerini tanımlayın
oled.metin("GECE ve GÜNDÜZ",10,0)
sen.metin("",40,20)
sen.metin("Düğmesine basın",0,40)
sen.metin("başlamak!",40,55)
sen.göstermek()
#SEN Ekran Metinleri Ayarları
kesinlikle Kelimeyi değiştir():
    küresel gece ya da gündüz
    oled.doldurmak(0)
    sen.göstermek()
    gece veya gündüz=yuvarlak(rastgelelik.üniforma(0,1))
    #veri ne zaman '0',SEN metinler GECEeğer gece veya gündüz==0:
        sen.metin("---GECE---",20,30)
        sen.göstermek()başka:
        sen.metin("---GÜN---",20,30)
        sen.göstermek()
    #bekler için etkinleştirmek için basılması gereken düğme

sırasında düğme.değer()==0:Yazdır("Düğmesine basın")uyumak(0.01)

sen.doldurmak(0)
sen.göstermek()
başlangıç=1
küresel puan
Gol=0sırasında başlangıç==1:
    küresel oyuncunun tepkisi
    küresel puan
    Kelimeyi değiştir()
    Başlangıç saati=çalışma zamanı.tikler_ms()
    #Ne zaman LDR' verileri 2000'den büyük, oyuncuların tepkisi '0'
    sırasında çalışma zamanı.Ticks_diff(çalışma zamanı.tikler_ms(), Başlangıç saati)20000:
            Oyuncu Tepkisi=0
        #Ne zaman LDR'Verileri 2000'den düşük, oyuncuların tepkisi'1'
        başka:
            Oyuncu Tepkisi=1uyumak(0.01)
    #zil sesi çalışıyor
    zil.görev_u16(2000)uyumak(0.05)
    zil.görev_u16(0)eğer Oyuncu Tepkisi==gece veya gündüz:
        Gol +=10
    #puan ne zaman 10,SEN diyor 'Oyun bitti'başka:
        sen.doldurmak(0)
        sen.göstermek()
        sen.metin("Oyun bitti",0,18,1)
        sen.metin("Puanın "+cadde(Gol),0,35)
        sen.metin("RESET'e basın",0,45)
        sen.metin("Tekrarlamak için",0,55)
        sen.göstermek()
        zil.görev_u16(2000)uyumak(0.05)
        zil.görev_u16(0)kırmak;eğer Gol==100:
        #puan ne zaman 10,SEN diyor 'Kazandın'
        sen.doldurmak(0)
        sen.göstermek()
        sen.metin("Tebrikler",10,10)
        sen.metin("En Yüksek Puan: 100",5,35)
        sen.metin("Sıfırla'ya basın",20,45)
        sen.metin("Tekrarlamak için",25,55)
        sen.göstermek()
        zil.görev_u16(2000)uyumak(0.1)
        zil.görev_u16(0)uyumak(0.1)
        zil.görev_u16(2000)uyumak(0.1)
        zil.görev_u16(0)kırmak;

PicoBricks'in Arduino C Kodları

 


#katmak
#include "ACROBOTIC_SSD1306.h"//kitaplığı tanımla


#define RANDOM_SEED_PIN28
int Oyuncu_Reaksiyonu=0;
int Gece_veya_Day=0;
int Puan=0;
int sayaç=0;

çift ​​akımZaman=0;
double lastTime=0;
double getLastTime(){return currentTime=millis()/1000.0-lastTime;}void_delay(float saniye){
  long endTime=millis()+seconds*1000;while(millis()2)){
      Serial.println(analogRead(27));if(analogRead(27)>200){
        Gamer_Reaction=0;}başka{
        Gamer_Reaction=1;}}//LDR sensörünün değerine göre oyuncunun tepkisini belirleyindigitalWrite(20,HIGH);//buzzerdelay'i açın(250);//waitdigitalWrite(20,LOW);//kapat buzzerif(Night_or_Day==Gamer_Reaction){//kullanıcının tepkisi ve Night_or_Day değişkeni aynıysaCorrect();}else{Wrong();__loop();if(Score==100){
      oled.clearDisplay();
      oled.setTextXY(1,1);
      oled.putString("Tebrikler");
      oled.setTextXY(3,1);
      oled.putString("Puanınız");
      oled.setTextXY(3,13);
      String String_Score=Dize(Puan);
      oled.putString(String_Score);
      oled.setTextXY(5,3);
      oled.putString("Sıfırla'ya basın");
      oled.setTextXY(6,3);
      oled.putString("Tekrarlamak İçin!");//"Tebrikler, Puanınız, Sıfırla'ya Basın, Tekrarlamak İçin!" yazın ve OLED ekranında belirlenen x ve y koordinatlarındaki puan değişkenifor(int i=0;i<3;i++){digitalWrite(20,HIGH);delay(500);digitalWrite(20,LOW);delay(500) ;}//sesli uyarıyı üç kez açıp kapat
    counter=1;}}}voidCorrect(){
  Puan+=10;
  oled.clearDisplay();
  oled.setTextXY(3,4);
  oled.putString("10 Puan");//oyuncu doğru cevap verdiğinde puanı 10 artır}voidChange_Word(){

  oled.clearDisplay();
  Gece_veya_Gün=random(0,2);if(Gece_veya_Gün==0){
    oled.setTextXY(3,6);
    oled.putString("GECE");}else{
    oled.setTextXY(3,7);
    oled.putString("DAY");}}//rastgele OLED ekranına "GECE" veya "GÜNDÜZ" yazınvoidWrong(){
  oled.clearDisplay();
  oled.setTextXY(1,3);
  oled.putString("Oyun Bitti");
  oled.setTextXY(3,1);
  oled.putString("Puanınız");
  oled.setTextXY(1,13);
  String String_Score=Dize(Puan);
  oled.putString(String_Score);
  oled.setTextXY(5,3);
  oled.putString("Sıfırlamaya Basın");
  oled.setTextXY(6,3);
  oled.putString("To Repeat");// OLED ekranında belirlenen koordinatlara puan değişkenini ve ifadeleri tırnak işareti olarak yazın.digitalWrite(20,HIGH);//buzzerdelay(1000);// waitdigitalWrite(20,LOW);//zil sesini kapat
  sayaç=1;}


GitHub Proje Sayfası

Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment