Raspberry Pi-Projekt: Magic 8-Ball

Anfänger
35 Min
200,35 €

In diesem Raspberry Pi -Projekt verwenden wir einen Raspberry Pi und einen Sense HAT, um einen Magic 8-Ball zu erstellen!

Dieses Handbuch behandelt:  

  • Lieferungen
  • Schaltungsherstellung
  • Upgrade und Update
  • Neue Datei erstellen
  • Programmierung (Textversion)
  • Programmierung (SenseHat)
  • Shake

Einen Schaltkreis erstellen

Zuerst schließen wir den Sense HAT an den Raspberry Pi an. Dazu installieren Sie die Schrauben von der Unterseite des Raspberry Pi und ziehen die Abstandshalter fest. Anschließend verbinden wir den 40-poligen GPIO-Header mit dem Raspberry Pi . Sie können jetzt den 40-poligen GPIO-Header des Sense HAT anschließen. Befestigen Sie anschließend den Sense HAT von oben, indem Sie die Schrauben von oben durch den Sense HAT in die Abstandshalter drehen. Es sollte so aussehen:

Update und Upgrade

Aktualisieren und upgraden Sie zunächst Ihr System, indem Sie die folgenden Befehle in ein Terminalfenster eingeben (während Sie mit dem Internet verbunden sind):

sudo apt-get update
sudo apt-get upgrade

Installieren Sie nun die Sense HAT-Softwarepakete:

sudo apt-get install sense-hat
sudo pip-3.2 install pillow

Starten Sie abschließend Ihren Raspberry Pi neu, um die Installation abzuschließen:

sudo reboot

Neue Datei erstellen

In diesem Projekt bauen Sie mit Ihrem Raspberry Pi , einem Sense HAT und etwas Python-Code Ihren eigenen Magic 8 Ball. Bei Magic 8 Ball handelt es sich um ein Spiel, bei dem Sie eine geschlossene Frage stellen, den Ball schütteln und eine Vorhersage erhalten.

Wenn Sie keinen Raspberry Pi und Sense HAT haben, können Sie hier den Sense HAT-Emulator verwenden oder den integrierten Sense HAT-Emulator für Windows unter jedem Schritt in diesem Projekt verwenden.

Eine großartige Möglichkeit, Ihren Code in Schüben zu schreiben und zu testen, ist die Verwendung von IDLE 3, einer Entwicklungsanwendung für Python. Sie schreiben Ihren Code in Python 3.

Klik op Menu > Programmeren > Python 3 (IDLE)Zodra het Python-shellvenster is geladen,
klik je op Bestand en Nieuw bestand. Dit opent een teksteditorvenster waarin je je code kunt schrijven,
opslaan en testen. Sla het lege bestand op als magic8ball.py door te klikken op Bestand en Opslaan als.

Programmierung (Textversion)

Eine gute Möglichkeit, Ihr Magic 8 Ball-Programm zu starten, besteht darin, zunächst eine Textversion eines Magic 8 Ball-Programms zu erstellen. Überlegen wir, was ein Magic 8 Ball macht. Zuerst stellt man eine Frage, schüttelt den Ball, dreht ihn um und liest eine zufällig ausgewählte Antwort vor. Sie benötigen also eine Liste mit Antworten und eine Möglichkeit, eine Antwort nach dem Zufallsprinzip auszuwählen und auf dem Bildschirm anzuzeigen.

Zuerst müssen Sie die Auswahlfunktion aus der Zufallsbibliothek und die Schlaffunktion aus der Zeitbibliothek importieren. Geben Sie Folgendes in Ihre Textdatei magic8ball.py ein:

from random import choice
from time import sleep

Mit der Druckfunktion können Sie Text für die Person, die Ihr Programm verwendet, auf dem Bildschirm ausdrucken. Typ:

print("Stel een vraag")

Anschließend sollte eine Pause eingelegt werden, bevor das Programm mit einer Antwort reagiert, damit der Benutzer eine Frage stellen kann. Sie können die Zeitbibliothek verwenden, um das Programm anzuweisen, eine bestimmte Zeit zu warten, beispielsweise so:

sleep(3)

Das Programm wird für drei Sekunden angehalten. Sie können diesen Wert anpassen, um die Zeit zu verlängern oder zu verkürzen. Erstellen Sie nun eine Liste mit Antworten, die das Programm auf die Frage geben kann. Listen können auf die gleiche Weise wie Variablen benannt werden. beispielsweise Zahl = [1, 2, 3, 4]. Diese Liste mit dem Namen „Nummer“ enthält vier Elemente. Ihre Liste enthält Textzeichenfolgen, die auf dem Bildschirm angezeigt werden. Diese Texte werden ziemlich lang sein. Geben Sie zum Erstellen Ihrer Liste Folgendes ein:

replies = ['Tekenen wijzen op ja',      
'Zonder twijfel',      
'Je kunt erop vertrouwen',      
'Reken er niet op',      
'Het ziet er goed uit',      
'Kan het nu niet voorspellen',      
'Het is beslist zo',      
'Outlook is niet zo goed'      
]

Schließlich wird eine Anweisung benötigt, um ein Element zufällig aus der Liste auszuwählen und es dann auf dem Bildschirm anzuzeigen. Sie können hierfür die Zufallsbibliothek verwenden, indem Sie Folgendes eingeben:

print(choice(replies))

Speichern Sie Ihren Code, indem Sie auf „Datei“ und „Speichern“ klicken. Führen Sie als Nächstes Ihr Programm aus, um zu testen, ob es funktioniert, indem Sie auf „Ausführen und Modul ausführen“ klicken. Sie sollten die Ausgabe „Frage stellen“ im IDLE 3-Shell-Fenster sehen.

Programmiersinn HAT

Nachdem Sie nun Text im Python 3-Shell-Fenster auf Ihrem Bildschirm gedruckt haben, ändern wir den Code so, dass der Text über die LED-Matrix auf Ihrem Sense HAT rollt. Dazu müssen Sie die Sense HAT-Bibliothek verwenden und die Druckfunktionen durch die Sense HAT-Funktion show_message ersetzen.

Fügen Sie im Abschnitt „Importierte Module“ die folgenden Zeilen hinzu:

from sense_hat import SenseHatsense = SenseHat()

Ersetzen Sie dann in Ihrem Code „print“ durch „sense.show_message“. Dies müssen Sie an zwei Stellen tun. Speichern Sie Ihr Programm, indem Sie Strg + S auf Ihrer Tastatur drücken. Drücken Sie F5, um Ihr Programm auszuführen und zu testen. Möglicherweise bemerken Sie, dass der Text langsam über die LED-Matrix auf Ihrem Raspberry Pi läuft. Um den Text schneller scrollen zu lassen, können Sie Ihren Textzeichenfolgen „scroll_speed=(0.06)“ hinzufügen, etwa so:

from sense_hat import SenseHat
from random import choice
from time import sleep

sense = SenseHat()
sense.show_message("Stel een vraag", scroll_speed=0.06)
sleep(3)


antwoorden = ['Tekenen wijzen op ja',
'Zonder twijfel',
'Je kunt erop rekenen',
'Reken er niet op',
'Het ziet er goed uit',
'Kan het nu niet voorspellen',
'Het is beslist zo',
'Vooruitzicht is niet zo goed'
]

sense.show_message(choice(antwoorden), scroll_speed=0.06)

Shake

Bei herkömmlichen Magic 8 Balls muss die Person, die eine Frage stellt, diese schütteln, bevor sie eine Antwort gibt. Dies kann mit einem Sense HAT simuliert werden, indem der Beschleunigungsmesser verwendet wird, der Vibrationen und Bewegungen misst. Die meisten Smartphones verfügen über Beschleunigungsmesser, die die Ausrichtung des Bildschirms ändern, je nachdem, wie Sie das Gerät halten.

Lassen Sie uns den Beschleunigungsmesser auf dem Sense HAT verwenden, um alle Änderungen der G-Kraft auf jeder Achse (x, y und z) zu erkennen, bevor wir den Teil Ihres Programms ausführen, der dem Benutzer eine beliebige Antwort zurückgibt.

while True:    
x, y, z = sense.get_accelerometer_raw().values()
x = abs(x)

y = abs(y)

z = abs(z)

Beachten Sie, dass Groß- und Kleinschreibung sowie Einrückungen in Python sehr wichtig sind. Achten Sie darauf, nach einer Zeile mit einem Doppelpunkt 4 Leerzeichen zum Einrücken zu verwenden. Durch die Verwendung von abs wird jede Zahl in eine positive Zahl umgewandelt, d. h. die Schwingungsrichtung wird ignoriert und die Schwingungsstärke berücksichtigt! Jetzt ist es an der Zeit, in unserem Code eine Bedingung festzulegen, die prüft, ob sich die x-, y- und z-Achsen geändert (d. h. verschoben) haben, bevor eine zufällige Antwort ausgewählt wird. Wenn keine Bewegung erkannt wird, erfolgt keine Reaktion.

if x > 2 or y > 2 or z > 2 :

sense.show_message(choice(replies))

else:

sense.clear()

Das Programm prüft, ob die x-, y- und z-Achse größer als der Wert 2 ist. Durch Ändern dieses Wertes können Sie die Bewegungsempfindlichkeit des Programms anpassen. Wenn Sie möchten, dass jemand den Raspberry Pi und den Sense HAT wirklich kräftig schüttelt, verwenden Sie einen höheren Wert. Speichern Sie Ihr Programm, indem Sie Strg + S auf Ihrer Tastatur drücken. Drücken Sie F5, um Ihr Programm auszuführen und zu testen. Ihr Code sollte folgendermaßen aussehen:

from sense_hat import SenseHat
from random import choice
from time import sleep

sense = SenseHat()
sense.show_message("stel een vraag", scroll_speed=0.08)
sleep(3)

replies = ["JA!",
"Nee",
"Misschien",
"Zeker Weten!",
"Tuurlijk Niet!",
]

while True:
    x, y, z = sense.get_accelerometer_raw().values()

    x = abs(x)
    y = abs(y)
    z = abs(z)

    if x > 2 or y > 2 or z > 2 :
        sense.show_message(choice(replies))
    else:
        sense.clear()

Und das war es! Hat es nicht funktioniert? Bitte schauen Sie sich die vorherigen Schritte noch einmal an, um zu sehen, was schief gelaufen ist. War es erfolgreich? Dann schauen Sie sich unsere Projekte an!

Benötigte Produkte