Machbarkeitsanfrage - Bau einer Dominationbox

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

Hallo Gemeinde,
kurz etwas zu mir. Ich bin 31 Jahre jung, gelernter Elektriker, meine Programmierfähigkeiten begrenzen sich auf 4 Jahre Turbo Pascal (Ja richtig Turbo Pascal) und ich bin leidenschaftlicher Paintballspieler.

Die Saison ist um und ich beschäftige mich derzeit mit der Idee eine Domination Box zu bauen, eine Domination Box ist zum starten von Spielen bzw zum spielen diverser Modis da.

Gedacht habe ich das über einen Arduino zu realsieren und wurde aber durch meinen zweiten Teamchef auf den Raspberry Pi aufmerksam gemacht.
In gewisser weise hoffe ich auch auf eure Hilfe damit das Ding wirklich bis zur nächsten Saison steht, es soll auch nicht umsonst sein ein gewissen Budget zur Umsetzung ist vorhanden.

Etwas eingelesen in das Thema zum programmieren eines Raspberry PI habe ich mich schon nur vieles sind für mich noch böhmische Dörfer... letztendlich habe ich mich für Python als Programmiersprache entschieden, da sie schnell erlernbar sein soll.

Im wesentlichen soll das ganze zum Schluss so laufen:

1 Modus:

Zwei Buzzer über Funk (jedes Team hat einen), hier haben wir überlegt ob man dafür Funkklingeln nehmen kann, die dann am Pi nen Kontakt schalten welcher dann über eine UND-Verknüpfung eine mp3-Datei mit der Ansage "Ready for 10 seconds" ausgibt.
Danach soll die mp3 Ansage "10 seconds" kommen.
Nach 10 Sekunden das "Startsignal" (12V Hupe vom Auto?)

Das Programm geht automatisch wieder in den Start-Modus und wartet das Signal der Funkklingeln ab, also quasi eine Schleife.
Die Frage die sich mir halt stellt ist, gibt es eine Art Merkbefehl, da der Kontakt ja nur solange von der Klingel eschaltet wird wie sie klingelt...

2 Modus:

Zwei Buzzer an einer Box und zwei Buzzer über Funk.
Der Start erfolgt wie bei Modus 1
Danach muss jedes Team seinen Buzzer an der Box erreichen und drücken (Box leuchtet darauf in der Farbe Rot oder Blau, wird über LED realisiert), ein Counter fängt an zu Zählen, Punkte und ablaufende Zeit soll über einen 7-Segment LCD dargestellt werden.
Nach einer Festgelegten Zeit (10 min? vlt auch einstellbar?) endet das Spiel über ein Signal (Hupe).
Das Team mit dem höchsten Score gewinnt.

Jetzt hatten wir im Team uns schon darüber unterhalten ob man beide Modis in einem Programm verfasst und das über einen Anwahlschalter wählbar macht. Ergo 10kOhm Befehl startet Modus 1 und 20kOhm Befehl startet Modus 2.

Das Ding muss so einfach wie nur irgend möglich sein, so dass jeder sie aufstellen und starten kann.

Was meint ihr machbar oder hab ich da zuviel vor???

Viele Grüße David
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

In erster Linie ist das ja eine Frage der Hardware. Wenn ich das richtig sehe, solle es kein richtiges Display geben. Relais für Hupe (12V-Spannung liefert keines der Boards), I2C für LCD, noch diverse Schalter. Hast Du schon Erfahrung mit solcher Bastelei?
Die Modi-Auswahl würde ich über einen Kippschalter realisieren. Für Funk-Buzzer gibt es als billige Alternative den Amazon-Dashbutton. Als "Hauptrechner" eignet sich irgendein ESP32-Board, mit dem sich alle Buttons per WLAN verbinden können. Die Programmierung könnte mit Micro-Python erfolgen. Da wäre man für die Hardware ein paar Duzend Euros billiger als ein RasPI.

Geht natürlich alles auch mit einem Rapsberry, die Programmlogik würde ich mal als sehr simpel bezeichnen: Zustand von ein paar Knöpfen merken und Zeitmessung.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hallo David,

als jemand, der für sein Hobby auch den Lötkolben & die Programmierzange schwingt, kann ich deinenProjektwunsch gut verstehen.

Zu deinem Vorhaben ein paar Anmerkungen:

Ich würde dir nachdrücklich NICHT zum PI raten. Ich benutze den beruflich und privat, und im weitesten Sinne geeignet ist er für sowas. Das Problem ist: Es ist ein komplettes Linux System, das du dir da mit einfängst. Mit vielen Seiteneffekten, die du dann beachten musst. Lange Bootzeit, Empfindlichkeit gegenüber Stromausfall, Notwendigkeit dein Programm irgendwie Auto zu starten etc. Am Ende wirst du da sehr viel mehr gegen Windmühlen kämpfen als auf dem arduino.

Der Arduino hingegen ist robuster, und simpler zu programmieren. MP3 Player shields und Beispielcode für die gibt es zuhauf.

Dein Modus 2 ist mir klar - so etwas habe ich auch schon mit Lasertag gespielt. Modus eins fehlt mir irgendwie noch die Einsicht, was genau da wie funktionieren soll.

Ganz generell klingt es so, als ob ihr zusätzlich zu den funktasten und dem LC-Display, und den Team-Buttons noch diverse Auswahlschalter braucht. Für Modi, Zeitwahl etc. Aber dazu muss man erstmal richtig die Anforderungen kennen.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sirius3: ESP und Dashbuttons sind eine gute Idee. Werde ich mir merken.

Hier würde ich allerdings eher die 433mhz Funktaster, die David schon eingeplant hat, bevorzugen. Aus Gründen der Reichweite. Beim Paintball muss man schonmal ein paar 100m überbrücken in etwas unübersichtlichem Gelände.
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

Moin Jungs,
Danke für die schnele Antwort.
@Sirius3

Hast Du schon Erfahrung mit solcher Bastelei?
Ja durch mein Berufsleben und Studium habe ich schon einiges an Erfahrung sammeln können, ist aber das erste mal das ich sowas nicht über ne einfach Relais Steuerung sondern mittels Mini-PC und programmierung lösen will.
@__deets__

Das Problem ist: Es ist ein komplettes Linux System, das du dir da mit einfängst. Mit vielen Seiteneffekten, die du dann beachten musst. Lange Bootzeit, Empfindlichkeit gegenüber Stromausfall, Notwendigkeit dein Programm irgendwie Auto zu starten etc. Am Ende wirst du da sehr viel mehr gegen Windmühlen kämpfen als auf dem arduino.

Der Arduino hingegen ist robuster, und simpler zu programmieren. MP3 Player shields und Beispielcode für die gibt es zuhauf.
Ich habe mir den Arduino schon angesehen sehe aber das Problem das man viele komponenten extra brauch. Ein Pi wäre im Team schon vorhanden.
Stromversorgung wollte ich über Akkus realisieren, bzw über den 12V Akku und einen Spannungswandler. Alles kommt dann in eine schöne Box.

Linux ist mir seit meinem Studium sehr bekannt, bzw hab es sehr zu schätzen gelernt. Die Überlegung steht im Raum die Box über die Spiele hinaus, also in den Pausen, noch zu nutzen.
Auswertung von Bildern oder Musik wiedergabe.
@__deets__

Modus eins fehlt mir irgendwie noch die Einsicht, was genau da wie funktionieren soll.
Modus 1 soll mir einfach das lästige über Spielfeld schreien und nachfragen ob alle bereit sind ersparen. Jedes Team hat halt ein Buttom nach der Absprach wird der betätigt und wenn der Pi von beiden Teams das "Bereit" (High)-Signal bekommt startet er die mp3-Dateien welche dann das Spielstarten.

Im Paintball, grade im Turnier-Bereich, gibt es ein festes Start-Prozedere bestehend aus dem Signal "Ready-For-10-Seconds" , "10 Seconds" und dem Startsignal über ein "GO" oder einer Hupe.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Komponente die du extra brauchst sind in ihrer Nutzung dafür einfacher. Und bist dir auf die 30€ für den Pi kommst, kannst du dafür ja ein paar kaufen. Das Ding dann auch noch zur eierlegenden Wollmilchsau aufzubohren, die dann Medien wiedergibt etc - halte ich nicht viel von. Es ist schon so eine Herausforderung, die Bedienung schlüssig und robust zu gestalten. Da noch extra schleifen dran zu dekorieren macht das nicht besser. Und ist am Ende niemals so simpel wie ein Bluetooth Lautsprecher & ein Android Pad. Da würde ich mich echt auf den Mehrwert der Box fokussieren.

Zusätzlich ist das Programmiermodell des arduino simpler (gleiches gilt für den ESP32 den Sirius3 vorschlug). Wenn das Programmieren deine Herausforderung ist, dann solltest du das nicht unterschätzen.

Der arduino hat ein simples Setup, und danach eine Dauerschleife in der du ausreichend schnell den Zustand zb von Tasten etc abfragen kannst.

Auf dem PI bist du sofort in der Wunderwelt der nebenläufigen Programmierung, weil simples polling üblicherweise zu langsam ist. Dazu finden sich dann viele Beispiele, die grauenvoll schlecht sind, und die dich auf den falschen Pfad bringen. Das Ergebnis diskutieren wir dann hier regelmäßig. Und es ist für alle Beteiligten frustrierend, weil die Anfänger denken Sie haben was erreicht, und wir nehmen es dann auseinander.

Und beim Modus 1 gibt es dann keinen timeout?
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

Hallo __deets__
beim Modus eins gibt es keine ablaufende Zeit oder sonst was. Er ist rein zum Start des Spieles vorgesehen, ergo müsste er nach durchlaufen des Programms wieder auf Start setzen und die Signale der beiden Funktaster abwarten um dann erneut das Programm zu durchlaufen.

Beim Modus zwei gibt es so keine automatische Schleife, da man sich den Score erstmal ansehen soll, okay dann bräuchte man nen Reset Button der das Programm wieder startet und auf das Signal der Funktaster wartet...

Also meinst lieber zwei Arduino holen einen für Modus eins und einen für Modus zwei?

Eine Grundidee wie ich an die Programmierung ran gehe hab ich schon, ich weiss nur nicht ob das auch so hinbekomme wie ich mir das Vorstelle.
Turbo Pascal hat mir bis zur 11ten schon ordentlich Einblicke in Programmierung gegeben ich hab es nur versäumt dann auf was neues Umzusteigen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AloisHanse: Also wenn Du es in Python umsetzen möchtest, könntest Du einfach mal das Tutorial in der Python-Dokumentation durcharbeiten, um zu schauen wie leicht/schwer Du wieder in die Programmierung rein kommst und wie unterschiedlich sich Python im Gegensatz zu Pascal ”anfühlt”.

Turbo/Borland-Pascal war damals in der Schule mein erster Kontakt zu objektorientierter Programmierung (OOP), aber das hat wohl nicht jeder mit dieser Programmiersprache gemacht. Viele Lehrer sind bei prozeduraler, strukturierter Programmierung geblieben. Ist also die Frage ob OOP was neues für Dich ist.

Und wie __deets__ ja schon schrieb: Beim Raspi ist man mit einem Mehrbenutzerbetriebssystem mit vielen laufenden Prozessen konfrontiert und bei solchen Aufgaben dann auch gleich mit nebenläufiger Programmierung.

Ich denke das müsste auch mit einem Arduino gehen. Das ist dann letztlich eine Frage der Benutzerinteraktion, also wie man mit möglichst wenig Ein- und Ausgabemöglichkeiten eine bedienbare Benutzeroberfläche hinbekommt. Also wie wählt man nach einem Reset den Modus aus, wie kommuniziert man mit dem Nutzer (7-Segment-Anzeige(n), LEDs, kleines OLED-Display, …).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe keinen Grund 2 Arduinos zu verwenden. Einer reicht völlig. Ich bin allerdings nicht so sicher, dass du auch bei Modus 1 um den reset herumkommst. Nach dem aktivieren von Modus 1 wartet er auf einen Tastendruck von jedem Team. (Immer nur 2? Oder auch mal mehr?). Dann startet das Stadt-Protokoll wie von dir beschrieben. Danach wird aber alles ignorier, bis der reset Knopf gedrückt wurde. Oder du riskierst halt, das die beiden Knopfträger beim sich-in-den-graben-werfen jeweils wieder den Start auslösen.

Eine gute Art sich das vor Augen zu führen, und auch zu programmieren, sind zustandsaustomaten. Dazu schreibe ich später was.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

https://youtu.be/m1miwCJtxeM - grade zufällig gesehen. Mag auch interessant sein.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe mal ein bisschen gemalt. Das Bild ist etwas groß, aber auf dem iPad krank im Bett habe ich da nur beschränkt Bock gehabt dran zu schrauben.

Bild

Das stellt den zustandsautomaten nur für Modus 1 dar. Jeder Kreis ist ein Zustand. Jeder Pfeil ein Übergang. Jede Beschriftung am Pfeil ein Ereignis, das einen Übergang auslöst. Ich benutze Reset hier für verschiedene Dinge:

- nach einschalten erstmal warten, um dann wirklich scharf zu schalten.
- dann um in jedem Schritt den Prozess abbrechen zu können. Das ist wichtig wenn man zb mal zu Spielstart die Funktion kurz prüfen will.

Der Automat für Modus 2 ist natürlich nochmal genauso komplex. Sogar etwas komplexer.

Die Umsetzung in Code kann man nun natürlich verschieden handhaben. Aber sich an einer so klaren Vorlage entlang zu hangeln ist in jedem Fall hilfreich. Eine Python Implementierung eines ähnlichen Automaten habe ich hier mal gebaut:

https://github.com/deets/brombeerquark/ ... mulator.py

Falls es doch micropython wird.
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

Hey __deets__,
Das ist schon alles mehr als ich je erhofft habe.
Für mich mit meinem alten Kenntnissen ist es gedanklich eine IF-THAN-Problematik.

Deine Zeichnung spiegelt genau das wieder was ich anstreben. Einzig die Resets ab Signal Eingang sind überflüssig einen Start-Abbruch gibt es nicht. Es gilt wie im Turnierbereich ob fertig oder nicht es wird gestartet.

Das Video war sehr interessant. Ich habe mich mal schlau gemacht was es für Möglichkeiten gibt Arduino mit Python zu betreiben.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AloisHanse: Zustandsautomaten sind ja unabhängig von konkreten Programmiersprachen und da hätte ich bei Pascal eher an CASE … OF und einem Aufzählungstyp für die Zustände, statt an IF … THEN gedacht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

@ __blackjack__

Ja da hast durecht eine CASE-OF-Lösung wäre auch machbar. Da denk ich noch zu sehr als Elektriker, die meisten Probleme die ich zu lösen habe sind IF-THEN-Probleme ;) .
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

Moin Leute,
ich hab mal ne Nacht drüber geschlafen und jetzt stehen folgende Sachen auf meiner Wunschliste:

1x Arduino UNO Rev 3
1x Quimat IIC I2C 20x4 LCD Screen
1x WTV 020 SD Sound AUdio Modul

dazu halt Buttons und LED´s .
Ich bin mal gespannt wie einfach sich der Arduino überzeugen lässt Python zu akzeptieren.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der arduino nicht unbedingt. Micropython läuft da nicht drauf. Zumindest nicht den kleinen. Hast du für mein Video angeschaut?
AloisHanse
User
Beiträge: 7
Registriert: Donnerstag 29. November 2018, 09:06

ABend __deets__,
ja dein Video hatte ich mir angesehen und es gibt Möglichkeiten den Arduino Nano mit Python zu betreiben. Zugegeben etwas umständlich aber es geht, ich hab dank dem Projekt vom PB-Hub jetzt einen Arduino Nano samt Display da, ich werde es mal ausprobieren wie leicht oder schwer er sich zu Python überreden lässt und dann gegebenfalls nochmal die Wahl des Controllers anpassen.
Antworten