Zum Inhalt springen

#15 Nacht- und Tagprojekt mit PicoBricks

13 Nov 2023
#15 Night And Day Project With PicoBricks

Wie wäre es, wenn Sie das Nacht-und-Tag-Spiel, das Sie in der Schule gespielt haben, elektronisch spielen? Das Spiel von Tag und Nacht ist ein Spiel, bei dem wir unseren Kopf auf den Tisch legen, wenn unser Lehrer „Nacht“ sagt, und unseren Kopf heben, wenn unser Lehrer „Tag“ sagt. Dieses Spiel wird ein Spiel sein, bei dem Sie Ihre Aufmerksamkeit und Reflexe einsetzen werden. In diesem Projekt verwenden wir ein 0,96 Zoll großes I2C-OLED-Display mit 128 x 64 Pixeln. Da OLED-Bildschirme als künstliche Lichtquelle genutzt werden können, können Sie die Zeichen auf dem Bildschirm mithilfe von Linsen und Spiegeln vergrößern und auf der gewünschten Ebene spiegeln. Mithilfe von OLED-Bildschirmen können Systeme erstellt werden, die Straßen- und Verkehrsinformationen auf Datenbrillen und Autofenstern wiedergeben können.

Lichtsensoren sind Sensoren, die die Lichtstärke der Umgebung, in der sie sich befinden, messen können, auch Fotodioden genannt. Die elektrische Leitfähigkeit des dem Licht ausgesetzten Sensors ändert sich. Wir können den Lichtsensor steuern, indem wir elektronische Systeme kodieren und entwickeln, die die Lichtmenge beeinflussen.

Details und Algorithmus

Zuerst bitten wir den Spieler, die Taste zu drücken Taste um das Spiel zu starten. Dann machen wir das OLED-Bildschirm Anzeige NACHT Und TAG nach dem Zufallsprinzip für 2 Sekunden jede. Wenn das Wort NACHT angezeigt wird, sollte der Spieler dies abdecken LDR Sensor; und wenn das Wort TAG angezeigt wird, decken Sie es auf. Der Spieler hat 2 Sekunden Zeit zum Handeln. Für jede richtige Antwort des Spielers werden 10 Punkte vergeben. Im Falle einer falschen Antwort ist das Spiel beendet und ein anderer Ton ertönt Summer. Die Punktzahl wird auf dem OLED-Bildschirm angezeigt. Wenn der Spieler insgesamt 10 richtige Antworten gibt und 100 Punkte erhält, wird der Satz „Herzlichen Glückwunsch“ auf dem OLED-Bildschirm angezeigt und der Summer gibt Töne in verschiedenen Tönen ab.

Komponenten

1X PicoBricks

Schaltplan

Sie können Picobricks-Module ohne Verkabelung programmieren und betreiben. Wenn Sie die Module getrennt von der Platine verwenden möchten, sollten Sie die Modulverbindungen mit Grove-Kabeln herstellen.

MicroBlocks-Codes der PicoBricks

Sie können auf die Microblocks-Codes des Projekts zugreifen, indem Sie das Bild auf die Registerkarte „Microblocks Run“ ziehen oder auf die Schaltfläche klicken.

 

Registerkarte „Mikroblöcke ausführen“.

MicroPython-Codes der PicoBricks

 

vom Maschinenimport Pin, I2C, Timer, ADC, PWM
Von Picobricks importieren Sie SSD1306_I2C
Zeit importieren
Urandom importieren

# Definieren Sie die Bibliotheken
BREITE = 128
HÖHE = 64
# OLED-Bildschirmeinstellungen
sda = machine.Pin(4)
scl = machine.Pin(5)
# Initialisieren Sie die digitalen Pins 4 und 5 als AUSGANG für die OLED-Kommunikation
i2c = machine.I2C(0, sda=sda, scl=scl, freq=1000000)
oled = SSD1306_I2C(BREITE, HÖHE, i2c)
Summer = PWM(Pin(20))
Buzzer.freq(440)
ldr = ADC(Pin(27))
button = Pin(10, Pin.IN, Pin.PULL_DOWN)
# Definieren Sie die Eingangs- und Ausgangspins
oled.text("NACHT und TAG", 10, 0)
oled.text("", 40, 20)
oled.text("Drücken Sie die Taste", 0, 40)
oled.text("to START!", 40, 55)
oled.show()
# Einstellungen für OLED-Bildschirmtexte

def changeWord():
    globaler Nacht-Tag
    oled.fill(0)
    oled.show()
    nightorday = rund(urandom.uniform(0, 1))
    # Wenn die Daten „0“ sind, zeigt das OLED NACHT an
    wenn nightorday == 0:
        oled.text("---NIGHT---", 20, 30)
        oled.show()
    anders:
        oled.text("---DAY---", 20, 30)
        oled.show()
    # Wartet darauf, dass die Taste zur Aktivierung gedrückt wird

while button.value() == 0:
    print("Drücken Sie die Taste")
    utime.sleep(0.01)

oled.fill(0)
oled.show()
Start = 1
globale Punktzahl
Punktzahl = 0

while start == 1:
    globale GamerReaction
    globale Punktzahl
    changeWord()
    startTime = utime.ticks_ms()
    # Wenn die LDR-Daten größer als 2000 sind, reagiert der Spieler auf „0“.
    while utime.ticks_diff(utime.ticks_ms(), startTime) < 2000:
        wenn ldr.read_u16() > 20000:
            GamerReaction = 0
        # Wenn die LDR-Daten unter 2000 liegen, reagiert der Spieler mit „1“.
        anders:
            GamerReaction = 1
        utime.sleep(0.01)
    # Summer funktioniert
    Buzzer.duty_u16(2000)
    utime.sleep(0.05)
    Buzzer.duty_u16(0)

    wenn gamerReaction == nightorday:
        Punktzahl += 10
    # Wenn die Punktzahl 10 beträgt, sagt OLED „Game Over“
    anders:
        oled.fill(0)
        oled.show()
        oled.text("Game Over", 0, 18, 1)
        oled.text("Ihre Punktzahl " + str(score), 0, 35)
        oled.text("Drücken Sie RESET", 0, 45)
        oled.text("Wiederholen", 0, 55)
        oled.show()
        Buzzer.duty_u16(2000)
        utime.sleep(0.05)
        Buzzer.duty_u16(0)
        brechen

    wenn Punktzahl == 100:
        # Wenn die Punktzahl 100 beträgt, sagt OLED „Du hast gewonnen“
        oled.fill(0)
        oled.show()
        oled.text("Herzlichen Glückwunsch", 10, 10)
        oled.text("Top Score: 100", 5, 35)
        oled.text("Drücken Sie Reset", 20, 45)
        oled.text("Zum WIEDERHOLEN", 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)
        brechen

Schaltplan

Sie können Picobricks-Module ohne Verkabelung programmieren und betreiben. Wenn Sie die Module getrennt von der Platine verwenden möchten, sollten Sie die Modulverbindungen mit Grove-Kabeln herstellen.

MicroBlocks-Codes der PicoBricks

Sie können auf die Microblocks-Codes des Projekts zugreifen, indem Sie das Bild auf die Registerkarte „Microblocks Run“ ziehen oder auf die Schaltfläche klicken.

MicroPython-Codes der PicoBricks

aus Maschine importieren Stift,2C, Timer,ADC,PWMaus Picobricks importierenSSD1306_I2Cimportieren Zeit
importieren urandom
#define die Bibliotheken
BREITE=128HÖHE=64
#DU BIST Bildschirmeinstellungen
sda=Maschine.Stift(4)
scl=Maschine.Stift(5)
#digitalen Pin initialisieren 4 Und 5als ein AUSGABEfürDU BIST Kommunikation
i2c=Maschine.2C(0,sda=sda, scl=scl, Frequenz=1000000)
du bist =SSD1306_I2C(BREITE,HÖHE, 2c)
Summer =PWM(Stift(20))
Summer.Frequenz(440)
ldr=ADC(Stift(27))
Taste=Stift(10,Stift.IN,Stift.PULL_DOWN)
#Definieren Sie die Eingangs- und Ausgangspins
alt.Text("Nacht und Tag",10,0)
du bist.Text("",40,20)
du bist.Text("Drücken Sie den Knopf",0,40)
du bist.Text("anfangen!",40,55)
du bist.zeigen()
#DU BIST Einstellungen für Bildschirmtexte
def changeWord():
    globaler Nacht-Tag
    alt.füllen(0)
    du bist.zeigen()
    Nacht oder Tag=runden(urandom.Uniform(0,1))
    #wenn Daten sind '0',DU BIST Texte NACHTWenn Nacht oder Tag==0:
        du bist.Text("---NACHT---",20,30)
        du bist.zeigen()anders:
        du bist.Text("---TAG---",20,30)
        du bist.zeigen()
    #wartet für Zum Aktivieren muss die Taste gedrückt werden

während Taste.Wert()==0:drucken("Drücken Sie den Knopf")schlafen(0.01)

du bist.füllen(0)
du bist.zeigen()
Start=1
globale Punktzahl
Punktzahl=0während Start==1:
    globale GamerReaction
    globale Punktzahl
    changeWord()
    Startzeit=Zeit.ticks_ms()
    #Wann LDR's Daten größer als 2000, Spielerreaktion '0'
    während Zeit.ticks_diff(Zeit.ticks_ms(), Startzeit)20000:
            GamerReaction=0
        #Wann LDR's Daten niedriger als 2000, Spielerreaktion '1'
        anders:
            GamerReaction=1schlafen(0.01)
    #Summer funktioniert
    Summer.Pflicht_u16(2000)schlafen(0.05)
    Summer.Pflicht_u16(0)Wenn GamerReaction==Nacht oder Tag:
        Punktzahl +=10
    #wann der Punktestand ist 10,DU BIST sagt 'Spiel vorbei'anders:
        du bist.füllen(0)
        du bist.zeigen()
        du bist.Text("Spiel vorbei",0,18,1)
        du bist.Text("Ihr Ergebnis "+str(Punktzahl),0,35)
        du bist.Text(„Drücken Sie RESET“,0,45)
        du bist.Text("Wiederholen",0,55)
        du bist.zeigen()
        Summer.Pflicht_u16(2000)schlafen(0.05)
        Summer.Pflicht_u16(0)brechen;Wenn Punktzahl==100:
        #wann der Punktestand ist 10,DU BIST sagt 'Du hast gewonnen'
        du bist.füllen(0)
        du bist.zeigen()
        du bist.Text(„Herzlichen Glückwunsch“,10,10)
        du bist.Text(„Beste Punktzahl: 100“,5,35)
        du bist.Text(„Drücken Sie Reset“,20,45)
        du bist.Text("Wiederholen",25,55)
        du bist.zeigen()
        Summer.Pflicht_u16(2000)schlafen(0.1)
        Summer.Pflicht_u16(0)schlafen(0.1)
        Summer.Pflicht_u16(2000)schlafen(0.1)
        Summer.Pflicht_u16(0)brechen;

Arduino C-Codes der PicoBricks

 


#enthalten
#include „ACROBOTIC_SSD1306.h“//Definieren Sie die Bibliothek


#define RANDOM_SEED_PIN28
int Gamer_Reaction=0;
int Night_or_Day=0;
int Score=0;
int counter=0;

double currentTime=0;
double lastTime=0;
double getLastTime(){return currentTime=millis()/1000.0-lastTime;}void_delay(float seconds){
  long endTime=millis()+seconds*1000;while(millis()2)){
      Serial.println(analogRead(27));if(analogRead(27)>200){
        Gamer_Reaction=0;}else{
        Gamer_Reaction=1;}}//Bestimmen Sie die Spielerreaktion basierend auf dem Wert des LDR-SensorsdigitalWrite(20,HIGH);//schalten Sie die Summerverzögerung ein (250);//waitdigitalWrite(20,LOW);//schalten Sie die aus Buzzerif(Night_or_Day==Gamer_Reaction){//wenn die Reaktion des Benutzers und die Variable Night_or_Day gleich sindCorrect();}else{Wrong();}_loop();if(Score==100){
      oled.clearDisplay();
      oled.setTextXY(1,1);
      oled.putString("Herzlichen Glückwunsch");
      oled.setTextXY(3,1);
      oled.putString("Ihre Punktzahl");
      oled.setTextXY(3,13);
      String String_Score=String(Score);
      oled.putString(String_Score);
      oled.setTextXY(5,3);
      oled.putString("Zurücksetzen drücken");
      oled.setTextXY(6,3);
      oled.putString("Zu wiederholen!");//schreibe das „Herzlichen Glückwunsch, deine Punktzahl, drücke Zurücksetzen, um zu wiederholen!“ und Bewertungsvariable für die auf dem OLED-Bildschirm ermittelten x- und y-Koordinatenfor(int i=0;i<3;i++){digitalWrite(20,HIGH);delay(500);digitalWrite(20,LOW);delay(500) ;}//schalte den Summer dreimal ein und aus
    counter=1;}}}voidCorrect(){
  Punktzahl+=10;
  oled.clearDisplay();
  oled.setTextXY(3,4);
  oled.putString("10 Points");//erhöhe die Punktzahl um 10, wenn der Spieler richtig antwortet}voidChange_Word(){

  oled.clearDisplay();
  Night_or_Day=random(0,2);if(Night_or_Day==0){
    oled.setTextXY(3,6);
    oled.putString("NACHT");}else{
    oled.setTextXY(3,7);
    oled.putString("DAY");}}//schreibe „NACHT“ oder „TAG“ auf einen zufälligen OLED-BildschirmvoidWrong(){
  oled.clearDisplay();
  oled.setTextXY(1,3);
  oled.putString("Game Over");
  oled.setTextXY(3,1);
  oled.putString("Ihre Punktzahl");
  oled.setTextXY(1,13);
  String String_Score=String(Score);
  oled.putString(String_Score);
  oled.setTextXY(5,3);
  oled.putString("Pres Reset");
  oled.setTextXY(6,3);
  oled.putString("To Repeat");// schreibe die Score-Variable und die Ausdrücke in Anführungszeichen an die auf dem OLED-Bildschirm ermittelten Koordinaten.digitalWrite(20,HIGH);//schalte die Summerverzögerung ein (1000);// waitdigitalWrite(20,LOW);//den Summer ausschalten
  Zähler=1;}


GitHub-Projektseite

Vorheriger Beitrag
Nächster Beitrag

Danke fürs Abonnieren!

Diese E-Mail wurde registriert!

Shoppen Sie den Look
Wählen Sie Optionen

Bearbeitungsoption

Benachrichtigung wieder auf Lager

Vergleichen

Produkt ArtikelnummerBewertungBeschreibung Sammlung Verfügbarkeit Produktart Andere Details
this is just a warning
Anmeldung
Einkaufswagen
0 Artikel
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment