İçeriğe Geç

İki Kişilik Termometre Oyunu

05 Dec 2023
Two Player Thermometer Game

İşte bir özeti STEM Kış Etkinliği: Sıcaklık ve nem sensörlerine sahip bir Picobricks Anakartı sizin için ortam sıcaklığını ölçer ancak bunu oyunculardan gizli tutar. Daha sonra oyuncular sırayla sıcaklık tahminlerini girerler. En yakın tahmin oyunu kazanır.

Merhaba geleceğin meteorologları! Sizi sadece eğlenceli değil aynı zamanda eğitici olan harika (kelimenin tam anlamıyla!) bir projeyle tanıştırayım: PicoBricks tarafından desteklenen Termometre Oyunu. Bu oyun teknolojinin, öğrenmenin ve tabii ki dostça rekabetin mükemmel bir karışımıdır. Soğuk kış günleri için mükemmel olan bu oyun, STEM Kış etkinliği bu gerçekten beyin hücrelerini ısıtıyor!

Neden Bu Oyun?

  • eğitici: Sensörler ve bunların çevreyle nasıl etkileşime girdiği hakkında bilgi edinmenin uygulamalı bir yoludur.
  • Sezonluk Eğlence: Özellikle kış ayları için harika olan bu oyun, o uzun, soğuk günlere STEM havası katıyor.
  • Birim Dönüştürme Kolaylaştı: Oyuncular Celsius ve Fahrenheit arasındaki farkı pratik ve ilgi çekici bir şekilde anlayacaklar.

 

Bağlantı şeması

Nasıl yapılır? Adım adım rehber

Aşama 1

İlk göreviniz mi? Gerekli kodu PicoBricks'inize yükleyin. Bu bittiğinde eğlence başlıyor.

Nasıl yapılacağını bilmiyorsanız endişelenmeyin. Picobricks'in BricksIDE, ThonnyPhyton ve Arduino C ile nasıl kullanılacağını öğrenmek için: Picobrick Nasıl Kullanılır?

TuğlalarIDE

İşte Tuğlalar GİTMEK code.PicoBricks'inize indirin ve yükleyin.

BricksIDE Kodunu İndirin

MikroBlok Kodu

ThonyPhyton Kodu


zamandan içe uyku
makine içe aktarma Pininden, PWM, I2C
picobricks'ten WS2812, DHT11,SSD1306_I2C'yi içe aktarın
ithalat makinesi
ithalat zamanı
matematik ithalatı



ws2812 = WS2812(6, parlaklık = 1)
pin_button = makine.Pin(10, makine.Pin.IN)
dht_sensor = DHT11(Pin(11))

dht_read_time = zaman.zaman()

sıcaklık = 0

def getTemp():
   küresel dht_read_time
   küresel sıcaklık
   if time.time() - dht_read_time >= 3:
       dht_read_time = zaman.zaman()
       denemek:
           dht_sensor.measure()
           sıcaklık = dht_sensor.temperature
       e olarak İstisna hariç:
           geçmek
   dönüş sıcaklığı

matematik ithalatı
kap = makine.ADC(26)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), frek=200000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)

def SetTempF():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    tempUnite = round(round( pot.read_u16() - 0 ) * ( 2 - 1 ) / ( 65535 - 0 ) + 1)
    eğer tempUnite == (1):
        oled.text("{}".format("santigrat"), 20, 25)
    elif tempUnite == (2):
        oled.text("{}".format("Fahrenheit"), 20, 25)
    oled.show()
    oled.fill(0)

def başlangıç():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    oled.text("{}".format("Ayarla "), 20, 10)
    oled.text("{}".format("sıcaklık "), 20, 20)
    oled.text("{}".format("POT'a göre birim"), 20, 30)
    oled.show()

def geri sayım():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    aralıktaki sayım için((4)):
        oled.fill(0)
        oled.text("{}".format(counter), 55, 32)
        oled.show()
        sayaç -= 1
        zaman.uyku((1))


    oled.fill(0)
    oled.show()
    sayaç = 0

pin_led = makine.Pin(7, makine.Pin.OUT)
sesli uyarı = PWM(Pin(20))

def butonuFunc():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    pin_led.on()
    buzzer.freq(300)
    buzzer.duty_u16(100)
    uyku(0,25)
    buzzer.duty_u16(0)
    pin_led.off()

def oyuncu1():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    while (pin_button.value()) == (0) ve counter == (0):
        oyuncu1tahmin = round(round( pot.read_u16() - 0 ) * ( 212 - -20 ) / ( 65535 - 0 ) + -20)
        oled.text("{}".format("Oyuncu 1: "), 5, 25)
        oled.text("{}".format(player1guess), 85, 25)
        oled.show()
        oled.fill(0)
        yazdır(sıcaklıkDeğeri)

    düğmeFunc()
    sayaç += 1
    if (sıcaklıkDeğeri > 0) ve (oyuncu1tahmin > 0):
        player1result = sıcaklıkDeğeri - player1guess
    elif (sıcaklıkDeğeri > 0) ve (oyuncu1tahmin < 0):
        oyuncu1sonuç = sıcaklıkDeğeri + (-1) * oyuncu1tahmin
    elif (sıcaklıkDeğeri < 0) ve (oyuncu1tahmin > 0):
        oyuncu1sonuç = (-1) * sıcaklıkDeğeri + oyuncu1tahmin
    elif (sıcaklıkDeğeri < 0) ve (oyuncu1tahmin < 0):
        oyuncu1sonuç = (-1) * sıcaklıkDeğeri - (-1) * oyuncu1tahmin
    eğer oyuncu1sonucu < 0 ise:
        oyuncu1sonuç = oyuncu1sonuç * (-1)
    yazdır(sıcaklıkDeğeri)
    yazdır(oyuncu1sonucu)

def oyuncu2():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    while (pin_button.value()) == (0) ve counter == (1):
        player2guess = round(round( pot.read_u16() - 0 ) * ( 212 - -20 ) / ( 65535 - 0 ) + -20)
        oled.text("{}".format("Oyuncu 2: "), 5, 25)
        oled.text("{}".format(player2guess), 85, 25)
        oled.show()
        oled.fill(0)

    yazdır(sıcaklıkDeğeri)
    düğmeFunc()
    sayaç += 1
    if (sıcaklık Değeri > 0) ve (oyuncu2tahmini > 0):
        player2result = sıcaklıkDeğeri - player2guess
    elif (sıcaklıkDeğeri > 0) ve (oyuncu2tahmin < 0):
        oyuncu2sonucu = sıcaklıkDeğeri + (-1) * oyuncu2tahmin
    elif (temperatureValue < 0) ve (player2guess > 0):
        oyuncu2sonuç = (-1) * sıcaklıkDeğeri + oyuncu2tahmin
    elif (sıcaklıkDeğeri < 0) ve (oyuncu2tahmin < 0):
        oyuncu2sonucu = (-1) * sıcaklıkDeğeri - (-1) * oyuncu2tahmin
    eğer oyuncu2sonucu < 0 ise:
        oyuncu2sonucu = oyuncu2sonucu * (-1)

def kontrolü():
    küresel tempUnite, sıcaklıkValue, player1guess, player2guess, player1result, counter, player2result
    oled.fill(0)
    oled.text("{}".format("KAZANAN"), 40, 0)
    eğer oyuncu1sonuç >= oyuncu2sonuç:
        oled.text("{}".format("Oyuncu 2"), 40, 20)
        ws2812.pixels_fill((51, 204, 0))
        ws2812.pixels_show()
    elif oyuncu1sonuç <= oyuncu2sonuç:
        oled.text("{}".format("Oyuncu1"), 40, 20)
        ws2812.pixels_fill((51, 204, 0))
        ws2812.pixels_show()
    başka:
        oled.fill(0)
        oled.text("{}".format("puansız "), 40, 20)
    oled.text("{}".format("Sıcaklık:"), 10, 40)
    oled.text("{}".format(temperatureValue), 60, 40)
    eğer tempUnite == (1):
        oled.text("{}".format("Santigrat"), 20, 50)
    elif tempUnite == (2):
        oled.text("{}".format("Fahrenheit"), 20, 50)
    oled.show()
    sayaç += 1

ws2812.pixels_fill((0 ,0 ,0 ))
ws2812.pixels_show()
sıcaklıkDeğeri = 0
oyuncu1sonucu = 0
oyuncu2sonucu = 0
sıcaklıkBirlik = 0
sayaç = 3
oyuncu2tahmin = 0
oyuncu1tahmin = 0
while (pin_button.value()) == (0):
    başlangıç()
    yazdır(getTemp())

zaman.uyku((0.3))
düğmeFunc()
while (pin_button.value()) == (0):
    oled.fill(0)
    SetTempF()
    yazdır(getTemp())

düğmeFunc()
eğer tempUnite == (1):
    sıcaklıkDeğeri = getTemp()
elif tempUnite == (2):
    sıcaklıkDeğeri = ((9) * (getTemp())) / (5) + (32)
geri sayım()
yazdır(sıcaklıkDeğeri)
oyuncu1()
time.sleep((0.5))
oyuncu2()
kontrol()

Arduino C Kodu


#katmak
#include "ACROBOTIC_SSD1306.h"
#katmak
#katmak

#PIN 6'yı tanımla
#NUMPIXELS 1'i tanımla

#DHTPIN 11'i tanımlayın
#define DHTTYPE DHT11

#define POTANSİYOMETRE 26
#define BUTTON_PIN 10

#define BUZZER 20

#LED 7'yi tanımlayın

DHT dht(DHTPIN, DHTTYPE);
Adafruit_NeoPixel pikselleri(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


int sıcaklıkDeğeri = 0;
int oyuncu1sonuç = 0;
int oyuncu2sonuç = 0;
int tempUnite = 0;
int sayaç = 3;
int oyuncu1tahmin = 0;
int oyuncu2guess = 0;


geçersiz kurulum() {

  Seri.begin(9600);
  Wire.begin();
  oled.init();
  oled.clearDisplay();
  piksel.begin();
  piksel.clear();
  pinMode(BUTTON_PIN, INPUT);
  pinMode(POTANSİYOMETRE, GİRİŞ);
  pinMode(BUZZER, OUTPUT);
  pinMode(LED, ÇIKIŞ);
}

geçersiz döngü () {
  while (digitalRead(BUTTON_PIN) == 0) {
    oled.setTextXY(1, 2);
    oled.putString("Ayarlayın ");
    oled.setTextXY(2, 2);
    oled.putString("sıcaklık ");
    oled.setTextXY(3, 2);
    oled.putString("POT'a göre birim");
    getTemp();
  }

  gecikme(300);
  düğmeFunc();

  oled.clearDisplay();
  SetTempF();
  getTemp();

  düğmeFunc();

  if (tempUnite > 1023/2) {
    sıcaklıkDeğeri = getTemp();
  }
  if (tempUnite <= 2) {
    sıcaklıkDeğeri = ((9) * (getTemp())) / (5) + (32);
  }

  geri sayım();

  oyuncu1();
  gecikme(500);
  oyuncu2();
  
  kontrol();
}

int getTemp() {
  sıcaklıkDeğeri = dht.readTemperature();
  Serial.println(temperatureValue);
  dönüş sıcaklığıDeğer;
}

void butonuFunc() {
  for (int i = 0 ; i < 4 ; i++) {
    digitalWrite(LED, YÜKSEK);
    ton(BUZZER, 500);
    gecikme(500);
    ton yok(BUZZER);
    digitalWrite(LED, DÜŞÜK);
  }
}

void SetTempF() {
  while (digitalRead(BUTTON_PIN) == 0) {
    tempUnite = harita(analogRead(POTANSİYOMETRE), 0, 1023, 0, 1);
    if (tempUnite == 0) {
      oled.setTextXY(3, 2);
      oled.putString("Santigrat");
    }
    if (tempUnite == 1) {
      oled.setTextXY(3, 2);
      oled.putString("Fahrenhayt");
    }
    gecikme(300);
    oled.clearDisplay();
  }
}

geçersiz geri sayım() {
  for (int i = 0 ; i < 4 ; i++) {
    oled.clearDisplay();
    oled.setTextXY(3, 5);
    oled.putString(String(i));
    sayaç -= 1;
    gecikme(1000);
  }
  oled.clearDisplay();
  sayaç = 0;
}

geçersiz oyuncu1() {
  int sıcaklıkValue = getTemp();
  while (digitalRead(BUTTON_PIN) == 0 && sayaç == 0) {
    oyuncu1tahmin = harita(analogOku(POTANSİYOMETRE), 0, 1023, -20, 212);
    oled.setTextXY(2, 0);
    oled.putString("Oyuncu 1: ");
    oled.setTextXY(2, 8);
    oled.putString(String(oyuncu1tahmin));
    Serial.println(temperatureValue);
  }
  düğmeFunc();
  sayaç += 1;
  if (sıcaklıkDeğeri > 0 && oyuncu1tahmin > 0) {
    oyuncu1sonuç = sıcaklıkDeğeri - oyuncu1tahmin;
  }
  if (sıcaklıkDeğeri > 0 && oyuncu1tahmin < 0) {
    oyuncu1sonuç = sıcaklıkDeğeri + (-1) * oyuncu1tahmin;
  }
  if (sıcaklıkDeğeri < 0 && oyuncu1tahmin > 0) {
    oyuncu1sonuç = (-1) * sıcaklıkDeğeri + oyuncu1tahmin;
  }
  if (temperatureValue < 0 && oyuncu1tahmin < 0) {
    oyuncu1sonuç = (-1) * sıcaklıkDeğeri - (-1) * oyuncu1tahmin;
  }
  if (oyuncu1sonucu < 0) {
    oyuncu1sonucu = oyuncu1sonucu * (-1);
  }
  Serial.println(temperatureValue);
  Serial.println(oyuncu1sonucu);
}

geçersiz oyuncu2() {
  int sıcaklıkValue = getTemp();
  while (digitalRead(BUTTON_PIN) == 0 && sayaç == 0) {
    player2guess = harita( analogRead(POTANSİYOMETRE), 0, 1023, -20, 212);
    oled.setTextXY(2, 0);
    oled.putString("Oyuncu 1: ");
    oled.setTextXY(2, 8);
    oled.putString(String(player2guess));
    Serial.println(temperatureValue);
  }
  düğmeFunc();
  sayaç += 1;
  if (sıcaklıkDeğeri > 0 && oyuncu1tahmin > 0) {
    oyuncu2sonucu = sıcaklıkDeğeri - oyuncu2tahmin;
  }
  if (sıcaklıkDeğeri > 0 && oyuncu1tahmin < 0) {
    oyuncu2sonucu = sıcaklıkDeğeri + (-1) * oyuncu2tahmin;
  }
  if (sıcaklıkDeğeri < 0 && oyuncu1tahmin > 0) {
    oyuncu2sonuç = (-1) * sıcaklıkDeğeri + oyuncu2tahmin;
  }
  if (temperatureValue < 0 && oyuncu1tahmin < 0) {
    oyuncu2sonuç = (-1) * sıcaklıkDeğeri - (-1) * oyuncu2tahmin;
  }
  if (oyuncu1sonucu < 0) {
    oyuncu2sonucu = oyuncu2sonucu * (-1);
  }
  Serial.println(temperatureValue);
  Serial.println(oyuncu1sonucu);
}

geçersiz kontrol() {
  oled.clearDisplay();
  oled.setTextXY(0, 4);
  oled.putString("KAZANAN");

  if (oyuncu1sonuç >= oyuncu2sonuç) {
    oled.setTextXY(2, 4);
    oled.putString("Oyuncu 2");
    piksel.setPixelColor(0, piksel.Color(51, 204, 0));
    piksel.show();
  }
  else if (oyuncu1sonuç <= oyuncu2sonuç) {
    oled.setTextXY(2, 4);
    oled.putString("Oyuncu1");
    piksel.setPixelColor(0, piksel.Color(51, 204, 0));
    piksel.show();
  }
  başka {
    oled.clearDisplay();
    oled.setTextXY(2, 4);
    oled.putString("puansız ");
  }

  oled.setTextXY(4, 1);
  oled.putString("Sıcaklık:");
  oled.setTextXY(4, 6);
  oled.putString(String(temperatureValue));

  if (tempUnite == 0) {
    oled.setTextXY(5, 2);
    oled.putString("Santigrat");
  }
  else if (tempUnite == 1) {
    oled.setTextXY(5, 2);
    oled.putString("Fahrenhayt");
  }
  sayaç += 1;
}

Adım 2: Celsius veya Fahrenheit'i mi seçiyorsunuz?

PicoBricks'i açın ve şunu göreceksiniz: OLED ekran iki seçenekle yanar: Celsius ve Fahrenheit. Artık bu bölüm interaktif ve eğitici! Hangi sıcaklık birimine daha aşina olduğunuza (veya yalnızca merak ettiğinize) bağlı olarak, potansiyometre iki seçenek arasında geçiş yapmak için. Seçimini yaptın mı? Harika! Sadece vur düğme kilitlemek için.

Adım 3: Tahmin Etme Zamanı!

Şimdi oyunun özüne geçelim. Oyuncu Bir, ortam sıcaklığının ne olduğunu tahmin etme sırası sizde. Potansiyometreyi çevirin ve tahmininizi yaparken OLED ekranını izleyin. Kilitleyin ve Oyuncu İki'ye verin, o da aynı şekilde tahminini yapsın.

Adım 4: Ve Kazanan...

Her iki tahmin de gerçekleştiğinde, gerçek anı gelir. PicoBricks, tahminlerinizi daha önce gizlice ölçtüğü gerçek sıcaklıkla karşılaştırır. En yakın tahmin kazanır ve ekranda kazanan için bir kutlama mesajı görüntülenir!

 

Ö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