Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon

Mit einem Steckbrett können Sie Schaltkreise erstellen, ohne etwas löten zu müssen. Es ist ein großartiges Werkzeug, um mit Elektronik zu experimentieren, aber es kann einschüchternd sein. Wenn Sie ein Projekt erstellen, können Sie motiviert bleiben, während Sie lernen.

Es gibt mehrere einfache Spiele, die großartige Raspberry Pi-Anfängerprojekte machen. Ein einfacher Einstieg ist das Spiel Simon. Simon ist ein Memory-Spiel, bei dem eine Reihe von Lichtern in zufälliger Reihenfolge blinkt und der Spieler sich an die Reihenfolge erinnern muss. Mit fortschreitendem Fortschritt des Spielers wächst die Länge der Sequenz.

Erforderliche Komponenten

Um loszulegen, benötigen Sie folgende Dinge:

  1. Ein Himbeer-Pi
  2. Eine microSD-Karte blitzte mit Raspbian OS
  3. 4 x LEDs in verschiedenen Farben
  4. 4 x Widerstände (alles von 220 Ohm bis 1 Kilo-Ohm)
  5. 4 x Tasten
  6. 1 x Steckbrett
  7. Überbrückungskabel zum Anschließen von allem

Sie können für dieses Projekt jeden Raspberry Pi verwenden, aber die Pi Zero-Modelle lassen sich ohne Löten nicht so einfach mit Steckbrettern verbinden. Unabhängig davon, welches Modell Sie verwenden, benötigen Sie außerdem eine Stromquelle, einen Monitor, eine Tastatur und eine Maus.

Wenn Sie noch nie einen Raspberry Pi eingerichtet haben, erfahren Sie im Raspberry Pi-Anfängerhandbuch , wie Sie alles für dieses Tutorial vorbereiten.

In diesem Lernprogramm schreiben Sie Python-Code, und Sie können ihn mit einem beliebigen Texteditor schreiben. Möglicherweise finden Sie jedoch einen Code-Editor einfacher. Auf dem Raspberry Pi OS sind bereits mehrere installiert, und Thonny wurde für Anfänger entwickelt. Unabhängig davon, welche Sie verwenden, müssen Sie in der Lage sein, Ihren Code zu speichern und auszuführen, um diesem Tutorial folgen zu können.

Erste Schritte mit einem Steckbrett

Wenn Sie noch nie ein Steckbrett verwendet haben, sollten Sie zunächst ein Lernprogramm für Steckbretter lesen . Wenn Sie wissen, wie ein Steckbrett funktioniert, können Sie besser verstehen, wie Schaltkreise erstellt werden.

Der Raspberry Pi verfügt über zwei Reihen von GPIO-Pins (General Purpose Input / Output). Mit diesen Pins können Sie Komponenten an Ihren Raspberry Pi anschließen. Einige Pins senden Informationen, andere liefern Strom und einige erden Ihre Elektronik.

Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon - GPIO Pinout Diagram 2

Wir beginnen mit dem Hinzufügen eines LED-Lichts zu unserem Steckbrett. Wenn Sie noch nie mit LED-Leuchten auf einem Steckbrett gearbeitet haben, sollten Sie ein Tutorial lesen, in dem die Funktionsweise ausführlicher erläutert wird .

Verbinden Sie zunächst einen GPIO-Pin mit Ihrem Board. Es spielt keine Rolle, welcher Pin verwendet wird, solange es sich um einen GPIO-Pin und nicht um einen Stromversorgungs- oder Erdungsstift handelt. Oben finden Sie eine Tabelle der GPIO-Pins, anhand derer Sie bestimmen können, welcher Pin verwendet werden soll. In diesem Tutorial wird die PIN 18 verwendet, die auch als GPIO 24 bezeichnet wird.

Der Pin versorgt das Steckbrett mit Strom und ermöglicht dem Raspberry Pi die Kommunikation mit den Komponenten auf dem Board. Verbinden Sie dann Pin 6 auf dem Pi mit der Erdungsschiene des Steckbretts. Dadurch wird die Platine geerdet und es können Schaltkreise erstellt werden.

Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon - one led connected to raspberry pi

Die von der Himbeere kommende Leistung ist zu hoch, um die LED direkt anzuschließen. Die Verwendung eines Widerstands senkt den Leistungspegel und verhindert, dass die LED durchbrennt. Schließen Sie eine Seite des Widerstands an dieselbe Leitung an, an die der GPIO-Pin angeschlossen ist, und das Ende an die andere Seite des Steckbretts. Platzieren Sie dann die positive Seite der LED hinter dem Widerstand. Das negative Ende der LED kann direkt mit der negativen Schiene verbunden werden. Das Endergebnis sollte wie im obigen Diagramm aussehen. Überprüfen Sie Ihre Verkabelung gründlich und schalten Sie Ihren Pi ein. Die LED sollte aufleuchten.

Jetzt haben Sie mit Ihrem Raspberry Pi eine Schaltung erstellt, die Sie mithilfe von Code steuern können.

Verwenden von Python-Code zur Steuerung von LEDs

Dieses Tutorial führt Sie schrittweise durch den Code. Wenn Sie jedoch jederzeit auf den fertigen Code verweisen möchten, ist er auf Pastebin verfügbar.

Im Moment wird die LED mit Strom versorgt, aber wir möchten steuern, wann sie ein- und ausgeschaltet wird. Mit dem folgenden Python-Code können wir mit dem Board sprechen.

 
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
GPIO.setup(red, GPIO.OUT)
GPIO.output(red, GPIO.LOW)

Die ersten paar Zeilen richten die Dinge ein. Die Raspberry Pi GPIO-Bibliothek wird importiert. Mit dem als GPIO können wir RPi.GPIO nur als GPIO bezeichnen , um ein bisschen Eingabe zu sparen. Der GPIO-Pin-Modus ist auf BOARD eingestellt . Sie müssen diese Einstellung nicht verwenden, es kann jedoch einfacher sein, die Pins anhand ihrer Reihenfolge in den GPIO-Zeilen zu referenzieren.

Schließlich setzen wir Warnungen auf false. Dadurch werden unnötige Warnungen gestoppt.

Die nächsten drei Zeilen steuern die LED. Die rote LED ist an GPIO-Pin 18 angeschlossen. Anstatt sich daran zu erinnern, speichert die Variable Rot den Ort. Als nächstes sagt GPIO.setup unser Programm , dass es Informationen zu dem roten Stift sendet. Schließlich stellen wir den GPIO ein. Ausgang am roten Pin zu niedrig . Wenn Sie dieses Programm ausführen, erlischt das Licht. Um es wieder einzuschalten, schalten Sie GPIO.LOW auf GPIO.HIGH und führen Sie das Programm erneut aus.

Speichern Sie den Code und klicken Sie auf Ausführen, um ihn in Aktion zu sehen. Wenn Ihr Code-Editor keine Schaltfläche zum Ausführen enthält, speichern Sie diese und führen Sie python myfilename.py im Terminalfenster aus. Sie müssen zuerst in dasselbe Verzeichnis wie Ihre neue Python-Datei navigieren. Überprüfen Sie den Raspberry Pi Spickzettel, wenn Sie nicht sicher sind, wie.

Hinzufügen von mehr als einer LED

Um das Spiel Simon zu erstellen, benötigen wir vier Lichter in verschiedenen Farben. Die gleichen Schritte, mit denen Sie die rote LED eingerichtet haben, können auch für die anderen drei Schritte verwendet werden. Ihre Verkabelung sollte wie in der folgenden Abbildung aussehen:

Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon - four leds connected to raspberry pi

Ihr Code sollte folgendermaßen aussehen:

 
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
yellow = 22
green = 24
blue = 26
GPIO.setup(red, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(blue, GPIO.OUT)
GPIO.output(red, GPIO.HIGH)
GPIO.output(yellow, GPIO.HIGH)
GPIO.output(green, GPIO.HIGH)
GPIO.output(blue, GPIO.HIGH)

Nachdem Sie die LEDs getestet haben, setzen Sie den GPIO.output auf GPIO.LOW , um jeden einzelnen wieder auszuschalten.

Obwohl die Farbe der von Ihnen verwendeten Drähte keine Rolle spielt, versuchen Sie, Farben zu verwenden, die für Sie von Bedeutung sind, damit Sie die Platine leichter lesen können. Beispielsweise werden häufig schwarze Drähte für Erdungsdrähte verwendet. In dieser Schaltung möchten Sie möglicherweise die Farbe des Kabels an die Farbe des LED-Lichts anpassen.

LEDs mit Tasten steuern

Beginnen Sie, indem Sie Ihrem Board eine Schaltfläche hinzufügen. Die Taste muss sowohl mit Masse als auch mit einem GPIO-Pin verbunden sein. Die Schaltung sollte ungefähr so ​​aussehen:

Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon - one button on board

Um die Tastensteuerung zu einer LED zu machen, müssen wir unseren Code ergänzen. Das Einrichten der Taste ähnelt dem Einrichten einer LED, außer dass der GPIO-Pin als Eingang und nicht als Ausgang festgelegt ist. Dieser Code richtet auch den internen Pull-up-Widerstand am Pi ein, der erforderlich ist, damit sich die Taste korrekt verhält.

 GPIO.setup (32, GPIO.IN, pull_up_down = GPIO.PUD_UP)

Jetzt brauchen wir Code, der prüft, ob die Taste gedrückt wurde.

 
game = True
while game:
redButtonState = GPIO.input(32)
if redButtonState == 0:
GPIO.output(red, GPIO.HIGH)
time.sleep(1)
GPIO.output(red, GPIO.LOW)

Wir möchten, dass unser Programm weiterhin prüft, ob eine Taste gedrückt wird, daher verwenden wir eine while-Schleife . Da die Schleife niemals falsch sein wird, läuft sie weiter und überprüft die Taste, bis wir das Programm manuell beenden, indem wir die Stopp-Taste drücken oder die Tastenkombination Strg + c verwenden .

Als nächstes speichern wir diese Informationen in der Variablen redButtonState , um die Referenzierung der Eingabe zu erleichtern, die uns unser GPIO-Pin sendet. Wenn sich unsere Tasteneingabe auf 0 ändert, wissen wir, dass die Taste gedrückt wurde.

Wenn die Taste gedrückt wird, leuchtet die rote LED auf. Nach einer Sekunde erlischt die LED. Um dies zu messen , verwenden wir die Funktion time.sleep (1) . Um diese Arbeit zu machen, müssen Sie die Zeitbibliothek am Anfang des Skripts importieren.

Sobald eine Taste funktioniert, können Sie drei weitere hinzufügen, eine für jede LED. Ihr Code sollte folgendermaßen aussehen:

 
import random
import time
import RPi.GPIO as GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
yellow = 22
green = 24
blue = 26
GPIO.setup(red, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(blue, GPIO.OUT)
GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP)
game = True
while game:
redButtonState = GPIO.input(32)
if redButtonState == 0:
GPIO.output(red, GPIO.HIGH)
time.sleep(1)
GPIO.output(red, GPIO.LOW)

yellowButtonState = GPIO.input(36)
if yellowButtonState == 0:
GPIO.output(yellow, GPIO.HIGH)
time.sleep(1)
GPIO.output(yellow, GPIO.LOW)
greenButtonState = GPIO.input(38)
if greenButtonState == 0:
GPIO.output(green, GPIO.HIGH)
time.sleep(1)
GPIO.output(green, GPIO.LOW)
blueButtonState = GPIO.input(40)
if blueButtonState == 0:
GPIO.output(blue, GPIO.HIGH)
time.sleep(1)
GPIO.output(blue, GPIO.LOW)

Ihr Board sollte ungefähr so ​​aussehen:

Ein Leitfaden für Anfänger zum Himbeer-Pi-Breadboarding mit dem Spiel Simon - simon board complete

Die gesamte Elektronik ist jetzt vorhanden. Wenn Sie Probleme haben, überprüfen Sie Ihren Code auf Fehler. Denken Sie daran, Sie können den vollständigen Code von Pastebin herunterladen, wenn Sie nicht weiterkommen!

Das Spiel erstellen

Dieses Projekt hat bereits alle Grundlagen behandelt, die Sie benötigen, um ein Steckbrett zu verwenden. Aber wenn Sie diese Fähigkeiten in ein Spiel verwandeln, werden Sie wirklich zeigen, was Sie tun können!

In Simon sieht ein Spieler eine Reihe von Lichtern blinken und muss sich an das Muster erinnern. Es beginnt leicht mit nur einem Licht. Jedes Level fügt dem Muster ein zufälliges Licht hinzu, um das Spiel schwieriger zu machen.

Erstellen des Musters

Dieser Schritt ist ziemlich einfach. Ein Array wird unser Lichtmuster halten. Ein zweites Array speichert die GPIO-Pins für unsere Leuchten . Jedes Spiel Schleife, ein neuer Zufall Licht wird an das Ende des Musters Array hinzugefügt werden. Wir verwenden den Zufall. Mit der Funktion randint () können Sie eine Zahl zwischen 0 und 3 auswählen, die die 4 LEDs darstellt.

 
pattern = []
lights = [red, yellow, green, blue]
while game:
pattern.append(random.randint(0,3))

Als nächstes müssen wir die Lichter anzünden, um das Muster zu zeigen.

 while game:
pattern.append(random.randint(0,3))

for x in pattern:
GPIO.output(lights[x], GPIO.HIGH)
time.sleep(1)
GPIO.output(lights[x], GPIO.LOW)
time.sleep(0.5)

Es ist wichtig, zwischen zwei Lichtern zu pausieren. Es macht es einfacher zu sehen, ob das gleiche Licht im Muster hintereinander verwendet wird.

Abrufen von Spielereingaben

Als nächstes muss das Spiel warten, bis der Spieler die Reihenfolge der Lichter erraten hat. Das Programm muss sowohl jedes Licht im Muster überprüfen als auch warten, bis der Player eine Taste drückt. Dies erfordert verschachtelte Schleifen:

 
for x in pattern:

waitingForInput = True

while waitingForInput:
redButtonState = GPIO.input(32)
yellowButtonState = GPIO.input(36)
greenButtonState = GPIO.input(38)
blueButtonState = GPIO.input(40)

if redButtonState == 0:
GPIO.output(red, GPIO.HIGH)
waitingForInput = False
time.sleep(1)
GPIO.output(red, GPIO.LOW)

if yellowButtonState == 0:
GPIO.output(yellow, GPIO.HIGH)
waitingForInput = False
time.sleep(1)
GPIO.output(yellow, GPIO.LOW)

if greenButtonState == 0:
GPIO.output(green, GPIO.HIGH)
waitingForInput = False
time.sleep(1)
GPIO.output(green, GPIO.LOW)

if blueButtonState == 0:
GPIO.output(blue, GPIO.HIGH)
waitingForInput = False
time.sleep(1)
GPIO.output(blue, GPIO.LOW)

Der größte Teil des obigen Codes verwendet den von uns geschriebenen Code zum Testen der Schaltflächen.

Verwandte: 6 Gründe, warum Python die Programmiersprache der Zukunft ist

Überprüfen Sie die Eingabe des Players

Von hier aus ist es ziemlich einfach zu überprüfen, ob der Spieler das richtige Muster eingegeben hat. Jedes Mal, wenn sie einen Knopf drücken, kann das Spiel überprüfen, ob dies der richtige Knopf war. Fügen Sie dazu jeder Tasteneingabe eine weitere if-Anweisung hinzu:

 
if redButtonState == 0:
GPIO.output(red, GPIO.HIGH)
waitingForInput = False
if x != 0:
game = False
time.sleep(1)
GPIO.output(red, GPIO.LOW)

Die Variable x aus unserer for-Schleife hat die Nummer des nächsten Lichts. Das rote LED-Licht befindet sich an der ersten Position oder an der Nummer 0. Wenn der Spieler die rote LED-Taste gedrückt hat, wenn wir eine 0 in unserem Muster haben, sind sie richtig! Wenn nicht, verlieren sie das Spiel. Wenn Sie das variable Spiel auf false setzen, wird unsere Spielschleife gestoppt und das Programm beendet.

Herzliche Glückwünsche! Sie haben ein Spiel von Grund auf neu erstellt!

Durch das Erstellen eines Spiels wurde diesem Projekt viel mehr Code hinzugefügt als nur das Hinzufügen von LEDs und Schaltflächen. Wenn Sie auf ein Abschlussprojekt hinarbeiten, das Sie Ihren Freunden und Ihrer Familie zeigen können, bleiben Sie motiviert.

Dieses Spiel ist ziemlich einfach. Fordern Sie sich heraus, das grundlegende Design zu verbessern. Vielleicht könnten die Lichter blinken, wenn der Spieler verliert. Vielleicht möchten Sie sich selbst herausfordern, dem Spiel Sounds hinzuzufügen. Ihre Fantasie ist die einzige Grenze!

Okay, das und die Hardware, die Sie zur Hand haben müssen.