Rocket Beans Community

Quiz-Buzzer-System! [Nerdquiz] Raspberry Pi


#1

Hallo Leute,
da ich selber häufig Spieleabende mache und Quizspiele liebe, habe ich mich Hingesetzt und habe mit einem Raspberry Pi 3 B+ ein Buzzer System gebaut welches auswertet wer als erster gebuzzert hat und dies auf ein LCD Display ausgibt. Code und weitere Funktionen findet ihr im folgenden und als Download.

An dieser Stelle möchte ich auch Max Zelass danken, der mir per Mail mit Rat zur Seite stand. Vielen Dank! Super Community Service! :slight_smile:

Ihr dürft alles für eure Projekte verwenden und Bearbeiten, solange ich und ein Link hierher in den Credits erwähnt werde.

Python Code
> #!/usr/bin/env python3
> # coding: utf8
> import RPi.GPIO as GPIO
> import simpleaudio as sa
> import time
> 
> GPIO.setmode(GPIO.BCM)
> 
> GPIO.setup(13, GPIO.IN)
> GPIO.setup(16, GPIO.IN)
> GPIO.setup(19, GPIO.IN)
> GPIO.setup(20, GPIO.IN)
> GPIO.setup(21, GPIO.IN)
> GPIO.setup(26, GPIO.IN)
> GPIO.setup(10, GPIO.OUT)
> GPIO.setup(9, GPIO.OUT)
> GPIO.setup(11, GPIO.OUT)
> 
> from RPLCD import CharLCD
> lcd = CharLCD(numbering_mode=GPIO.BCM,cols=16, rows=2, pin_rs=14, pin_e=17, pins_data=[27, 4, 3, 2])
> lcd.clear()
> 
> #Welcome LED
> GPIO.output(9, GPIO.HIGH)
> time.sleep(1)
> GPIO.output(9, GPIO.LOW)
> GPIO.output(11, GPIO.HIGH)
> time.sleep(1)
> GPIO.output(11, GPIO.LOW)
> GPIO.output(10, GPIO.HIGH)
> time.sleep(1)
> GPIO.output(10, GPIO.LOW)
> #Welcome LCD
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Welcome')
> lcd.cursor_pos = (1, 0)
> lcd.write_string(u'Quizmaster!')
> time.sleep(3)
> lcd.clear()
> 
> #Player Definition
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 1:')
> P1 = input("Eingabe: ")
> lcd.clear()
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 2:')
> P2 = input("Eingabe: ")
> lcd.clear()
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 3:')
> P3 = input("Eingabe: ")
> lcd.clear()
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 4:')
> P4 = input("Eingabe: ")
> lcd.clear()
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 5:')
> P5 = input("Eingabe: ")
> lcd.clear()
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Playername 6:')
> P6 = input("Eingabe: ")
> lcd.clear()
> 
> #Viel Spaß!
> lcd.cursor_pos = (0, 0)
> lcd.write_string(u'Viel')
> lcd.cursor_pos = (1, 0)
> lcd.write_string(u'Spaß! :)')
> time.sleep(3)
> lcd.clear()
> 
> #Buzzer
> try:
>     # Endlosschleife
>     while True:
>         if GPIO.input(21) == 1: #Player 1
>             # LED
>             GPIO.output(10, GPIO.HIGH)
>             # TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P1)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(10, GPIO.LOW)
>         if GPIO.input(26) == 1: #Player 2
>             # LED
>             GPIO.output(9, GPIO.HIGH)
>             #TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P2)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(9, GPIO.LOW)
>         if GPIO.input(20) == 1: #Player 3
>             # LED
>             GPIO.output(11, GPIO.HIGH)
>             # TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P3)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(11, GPIO.LOW)
>         if GPIO.input(19) == 1: #Player 4
>             # LED
>             GPIO.output(10, GPIO.HIGH)
>             GPIO.output(9, GPIO.HIGH)
>             # TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P4)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(10, GPIO.LOW)
>             GPIO.output(9, GPIO.LOW)
>         if GPIO.input(16) == 1: #Player 5
>             # LED
>             GPIO.output(10, GPIO.HIGH)
>             GPIO.output(11, GPIO.HIGH)
>             # TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P5)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(10, GPIO.LOW)
>             GPIO.output(11, GPIO.LOW)
>         if GPIO.input(13) == 1: #Player 6
>             # LED
>             GPIO.output(10, GPIO.HIGH)
>             GPIO.output(9, GPIO.HIGH)
>             GPIO.output(11, GPIO.HIGH)
>             # TON
>             wave_obj = sa.WaveObject.from_wave_file("/home/pi/Dokumente/Jeopardy/Sounds/powerup.wav")
>             play_obj = wave_obj.play()
>             # LCD-Anzeige
>             lcd.cursor_pos = (0, 0)
>             lcd.write_string(u'Who was first?')
>             lcd.cursor_pos = (1, 0)
>             lcd.write_string(P6)
>             # WARTEN
>             time.sleep(5)
>             #Säubern
>             lcd.clear()
>             #LED aus
>             GPIO.output(10, GPIO.LOW)
>             GPIO.output(9, GPIO.LOW)
>             GPIO.output(11, GPIO.LOW)
> 
> finally:  
>     # Sauberes Ende
>     lcd = CharLCD(numbering_mode=GPIO.BCM,cols=16, rows=2, pin_rs=14, pin_e=17, pins_data=[27, 4, 3, 2])
>     lcd.cursor_pos = (0, 0)
>     lcd.write_string(u'Auf wiedersehen!')
>     time.sleep(3)
>     lcd.clear()
> 	  GPIO.cleanup()
Service

Unbenannt

Damit der Autostart funktioniert müsst die grafische Oberfläche deaktivieren. Also in die Konsole booten und zusätzlich den Login deaktivieren.

`sudo systemctl disable getty@tty1.service`
Schaltplan (soon)

Kommt noch!

Fotos

!

!

Video

YouTube

Sobald der Pi mit Strom versorgt wird startet nach kurzer Zeit das Python Programm durch den Service gestartet. Über eine verbaute (mini) Funktastatur und ein LCD display werden die 6 Spielernamen abgefragt. Wenn nach der Startsequenz ein Buzzer gedrückt wird erscheint auf dem 16x2 Display der Spielername welcher als erstes gedrückt wird. Nach 5 sec wird wieder auf Input gewartet. Jeder Spieler hat außerdem seine eigene LED-farbe in der RGB LED die anzeigt das gebuzzert wurde.

Gebt mir gerne Rückmeldung wenn etwas einfacher/sauberer geht. Bin blutiger Anfänger und habe mir im Prozess alles selbst erarbeitet. Freue mich auf eure Rückmeldungen und Ideen.

Einzelteile

Rpi 3 B+
Prototyping Kit
Buzzer
Tastatur
Klinkenbuchse
Kabel