Pentomino Puzzle: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(222 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Projekte]]  
[[Kategorie:Projekte]]  
[[Kategorie:ProjekteET MTR BSE WS2023]]
[[Kategorie:ProjekteET MTR BSE WS2024]]
[[Kategorie:Escape Game]]
[[Kategorie:Escape Game]]
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2024|WS 24/25: Escape Game]]
{| class="wikitable"
{| class="wikitable"
|-
|-
Zeile 11: Zeile 12:
|}
|}
'''Autor:  
'''Autor:  
[[Datei:Pentomino_Spiel.jpg|400px|mini|alternativtext=Beispielbild eines Pentomino Spiels|Beispielbild eines Pentomino Spiels]]
[[Datei:Pentomino_Spiel.jpg|700px|mini|alternativtext=Beispielbild eines Pentomino Spiels|Beispielbild eines Pentomino Spiels]]


== Einleitung ==
== Einleitung ==
Zeile 30: Zeile 31:
* Stellen Sie für jedes Rätsel für die Spielleiter*in Tipps und Musterlösung bereit.
* Stellen Sie für jedes Rätsel für die Spielleiter*in Tipps und Musterlösung bereit.
* Zur Lösung der Haupträtsel darf, sofern der Bedarf bestehen sollte, in den entsprechend bereit gestellten Fachbüchern nachgelesen werden. Eine Internetrecherche (durch Handys, Tablets, Laptops) ist nicht erlaubt, das heißt digidetox = digital detoxification (digitale Entgiftung) spielt daher auch eine Rolle.
* Zur Lösung der Haupträtsel darf, sofern der Bedarf bestehen sollte, in den entsprechend bereit gestellten Fachbüchern nachgelesen werden. Eine Internetrecherche (durch Handys, Tablets, Laptops) ist nicht erlaubt, das heißt digidetox = digital detoxification (digitale Entgiftung) spielt daher auch eine Rolle.
{| class="wikitable"
|+ style = "text-align: left"| Tabelle 1: Anforderungsliste (Lastenheft)
|-
! Nr. !!  Priorisierung  !! Anforderung !! Bemerkung
|-
|1 || Gering || Größe: Das Puzzle muss in einen Schuhkarton passen. ||
|-
|2 || Mittel || Einfaches Rätsel für Escape-Room-Einsteiger || Einsteiger
|-
|3  || Hoch || Lösungszeit: Etwa 5 Minuten. || Hinweise nach 3 und 4 Minuten
|-
|4  || Hoch || Ausgabe: Vierstelliger Zahlencode bei korrekter Lösung. ||
|-
|5  || Mittel || Spielbrett: Integrierte Hall-Sensoren (6 Stück, Typ TLE 4905L), Material: 3D-gedrucktes PLA ||
|-
|6 || Mittel || Pentomino-Teile, Anzahl: 6 Stück, Material: 3D-gedrucktes PLA, Eingelassene Magnete mit einzigartiger Positionierung pro Teil ||
|-
|7 || Hoch || Mikrocontroller, Typ: Arduino Uno R3 ||
|-
|8 || Hoch || Ausgabemechanismus, Servo-Motor: JAMARA 033212 High End Micro Analog ||
|-
|9 || Hoch || Die Klappe öffnet sich nur wenn alle Spielsteine richtig liegen ||
|-
|10 || Hoch || Nach dem händischen schließen muss der Reset Butten zur Verriegelung der Klappe gedrückt werden || Anschließend kann erneut gespeilt werden
|-
|11 || Hoch || Stromversorgung: Steckernetzteil 9V für Arduino ||
|-
|12 || Hoch || An/Aus-Schalter ||
|-
|13 || Hoch || Hauptprogramm: Kontinuierliche Überprüfung der Hall-Sensoren, Steuerung des Servo-Motors zur Codeausgabe ||
|-
|14 || Mittel || Initialisierungsroutine: Systemstart  ||
|-
|15 || Hoch || Das Arduino-System wird über Matlab-Simulink-Funktionen gesteuert gesteuert ||
|-
|16 || Mittel || Das System muss benutzerfreundlich und für Kinder wie Erwachsene geeignet sein. ||
|-
|17 || Hoch || Tipps und Musterlösung für Spielleiter bereitstellen ||
|-
|18 || Hoch || Nur eine Lösungsmöglichkeit des Puzzles || Spezielle Form von Spielbrett und Spielsteinen
|-
|}
<br>
<br>


== Funktionaler Systementwurf/Technischer Systementwurf ==
== Funktionaler Systementwurf/Technischer Systementwurf ==


[[Datei:Skizze_Pentomino.png| 600px | thumb | mini | alternativtext=Projektzeichnung Spielidee|Projektzeichnung Spielidee]]{{Absatz}}
[[Datei:Skizze_Pentomino.png| 800px | thumb | mini | alternativtext=Spielidee | Spielidee]]


Der funktionale Systementwurf sieht ein Spielbrett vor, in das Hall-Sensoren eingebettet sind. Die Pentomino-Teile werden mit Magneten ausgestattet, deren Position für jedes Teil einzigartig ist. Ein Arduino Uno verarbeitet die Signale der Hall-Sensoren und steuert ein Servomotor so an, dass die Ausgabe des vierstelligen Codes erfolgt.
Der funktionale Systementwurf sieht ein Spielbrett vor, in das Hall-Sensoren eingebettet sind. Die Pentomino-Teile werden mit Magneten ausgestattet, deren Position für jedes Teil einzigartig ist. Ein Arduino Uno verarbeitet die Signale der Hall-Sensoren und steuert ein Servomotor so an, dass die Ausgabe des vierstelligen Codes erfolgt.  
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Bei der technischen Konzeption spielt die Gestaltung des Spielbretts und der Spielsteine eine entscheidende Rolle. Die besondere Form dieser Elemente ist darauf ausgerichtet, dass für das Pentomino-Rätsel nur eine einzige korrekte Lösung existiert. Diese Eindeutigkeit ist von besonders wichtig, um zu gewährleisten, dass die Magnete immer genau an den vorgesehenen Positionen platziert werden. Durch diesen Ansatz wird nicht nur die Funktionalität des Spiels sichergestellt, sondern auch die Herausforderung für den Spieler auf ein gut lösbares Niveau gebracht.
<br>
<br>




Zeile 52: Zeile 95:
* Mechanische Ausgabe des vierstelligen Codes  
* Mechanische Ausgabe des vierstelligen Codes  
* Stromversorgung über Stromkabel
* Stromversorgung über Stromkabel
<br>
<br>
<br>
<br>
<br>




'''Technischer Systementwurf:'''
'''Technischer Systementwurf:'''
[[Datei: Pentomino_Puzzle_Technischer_Systementwurf.png | 600px | thumb | mini | alternativtext= Technischer Systementwurf | Technischer Systementwurf ]]


Der in der Abbildung dargestellte technische Systementwurf zeigt die Architektur des Arduino-basierten Pentomino Puzzles.  
Der in der Abbildung dargestellte technische Systementwurf zeigt die Architektur des Arduino-basierten Pentomino Puzzles.  
Zeile 69: Zeile 119:
* Digitaler Eingang: DI für den Reset-Taster
* Digitaler Eingang: DI für den Reset-Taster
* PWM-Ausgang: PWM3 zur Motorsteuerung
* PWM-Ausgang: PWM3 zur Motorsteuerung
* Digital Output 4: NPN-Transistor zur Motorabschaltung
* Stromversorgung: Separate Spannungsquelle zur Systemversorgung
* Stromversorgung: Separate Spannungsquelle zur Systemversorgung


Zeile 97: Zeile 148:
|9 || 1 || An/Aus-Schalter TRU COMPONENTS 700185 Wippschalter R13-112A B/B 0-I 250 V/AC 6 A 1 x Aus/Ein rastend [https://www.conrad.de/de/p/tru-components-700185-wippschalter-r13-112a-b-b-0-i-250-v-ac-6-a-1-x-aus-ein-rastend-1-st-1565955.html]
|9 || 1 || An/Aus-Schalter TRU COMPONENTS 700185 Wippschalter R13-112A B/B 0-I 250 V/AC 6 A 1 x Aus/Ein rastend [https://www.conrad.de/de/p/tru-components-700185-wippschalter-r13-112a-b-b-0-i-250-v-ac-6-a-1-x-aus-ein-rastend-1-st-1565955.html]
|-
|-
 
|10 || 1 || Diotec Transistor (BJT) - diskret BC548C TO-92 Anzahl Kanäle 1 NPN [https://www.conrad.de/de/p/diotec-transistor-bjt-diskret-bc548c-to-92-anzahl-kanaele-1-npn-155039.html?gclsrc=aw.ds&utm_source=google&gad_source=1&utm_medium=cpc&utm_campaign=DE+-+Search+-+Non+Brand+-+Aktive+Bauelemente+-+Halbleiter&utm_id=21561701503&gclid=EAIaIQobChMIls26_LjhigMVMZKDBx1-HCd-EAAYAiAAEgJjj_D_BwE&gclsrc=aw.ds&refresh=true]
|-
|}
|}


== Umsetzung (HW/SW) ==
== Umsetzung (HW/SW) ==
===<big>Hardware:</big>===
===Hardware===


'''Konstruktion'''
'''Konstruktion'''
Zeile 110: Zeile 162:


Die erstellten SCL-Dateien wurden anschließend in den Bambulab-Slicer importiert. Dieser spezielle Slicer ist darauf ausgelegt, 3D-Modelle für den Druck mit Bambulab-Druckern vorzubereiten, indem er sie in dünne Schichten zerlegt und den Druckpfad für den 3D-Drucker generiert.
Die erstellten SCL-Dateien wurden anschließend in den Bambulab-Slicer importiert. Dieser spezielle Slicer ist darauf ausgelegt, 3D-Modelle für den Druck mit Bambulab-Druckern vorzubereiten, indem er sie in dünne Schichten zerlegt und den Druckpfad für den 3D-Drucker generiert.
<br>


'''Druckeinstellungen und Materialwahl'''
'''Druckeinstellungen und Materialwahl'''


Im Bambulab-Slicer wurden die spezifischen Druckeigenschaften sorgfältig eingestellt. Diese Einstellungen umfassen Parameter wie:
Im Bambulab-Slicer wurden die spezifischen Druckeigenschaften sorgfältig eingestellt. Diese Einstellungen umfassen Parameter wie:
* Schichthöhe
* Schichthöhe: 0,1 mm für Spielbrett sonst alle Komponenten 0,2 mm
* Druckgeschwindigkeit
* Druckgeschwindigkeit: Abhängig von Drucker und Material --> Standard für PLA sollte bevorzugt werden
* Füllgrad
* Füllgrad: 15-20 %
* Struktur der Füllung  
* Struktur der Füllung: Einfache Linien (Monotonisch)
* Temperatur für Druckbett und Düse
* Temperatur für Druckbett und Düse: Abhängig von Material (Für PLA ca.: Druckbett 40 Düse 220 Grad)
Als Druckmaterial wurde PLA (Polylactid) gewählt, ein biologisch abbaubarer Kunststoff, der sich durch gute Druckeigenschaften und eine glatte Oberfläche auszeichnet.
Als Druckmaterial wurde PLA (Polylactid) von Bambulab gewählt, ein biologisch abbaubarer Kunststoff, der sich durch gute Druckeigenschaften und eine glatte Oberfläche auszeichnet.
<br>


'''Druckprozess mit Magnetintegration'''
'''Druckprozess mit Magnetintegration'''


Der Druckvorgang selbst war besonders interessant, da er die Integration von Magneten in die Puzzleteile beinhaltete.  
Der Druckvorgang selbst war besonders interessant, da er die Integration von Magneten in die Puzzleteile und der Klappe beinhaltete.  
Dieser Prozess lief wie folgt ab:
Dieser Prozess lief wie folgt ab:
# Start des Druckvorgangs mit den vorbereiteten Einstellungen.
# Start des Druckvorgangs mit den vorbereiteten Einstellungen.
Zeile 130: Zeile 184:
# Fortsetzen des Druckvorgangs, wobei die nachfolgenden Schichten die Magnete fest umschlossen und integrierten.
# Fortsetzen des Druckvorgangs, wobei die nachfolgenden Schichten die Magnete fest umschlossen und integrierten.
Diese Methode ermöglichte eine nahtlose Integration der Magnete in die Puzzleteile, ohne dass nachträgliche Materialbearbeitung erforderlich waren.
Diese Methode ermöglichte eine nahtlose Integration der Magnete in die Puzzleteile, ohne dass nachträgliche Materialbearbeitung erforderlich waren.
<br>
<br>
'''Funktionsweise von Hall-Sensoren'''
<br>
Ein Hall-Sensor besteht aus einem dünnen Halbleiterplättchen, durch das ein elektrischer Strom fließt. Wenn ein Magnetfeld senkrecht auf dieses Plättchen einwirkt, werden die Ladungsträger im Halbleiter durch die Lorentzkraft abgelenkt. Diese Ablenkung führt zur Entstehung einer elektrischen Spannung quer zur Stromrichtung, der sogenannten Hall-Spannung.
Die Hall-Spannung ist proportional zur Stärke des einwirkenden Magnetfeldes. Moderne Hall-Sensoren integrieren zusätzliche Elektronik auf dem Chip, um diese Spannung zu verstärken und in ein verwertbares Ausgangssignal umzuwandeln. Je nach Anwendung kann dieses Signal analog oder digital sein:
Analoge Hall-Sensoren:
*Liefern ein kontinuierliches Spannungssignal, das proportional zur Magnetfeldstärke ist.
Digitale Hall-Sensoren:
*Vergleichen die gemessene Magnetfeldstärke mit einem Schwellwert und schalten ihren Ausgang entsprechend um.
Für den Aufbau wurden Analoge Hall-Sensoren vom Typ 49E verwendet. Diese liefern ein kontinuierliches Spannungssignal, das proportional zur Magnetfeldstärke ist
<br>
<br>
'''Schaltplan'''<br>
Der Schaltplan zeigt eine elektronische Schaltung mit folgenden Hauptkomponenten:
Sensoren und Eingänge
*6 Hall-Effekt-Sensoren, jeweils mit 3 Pins ausgestattet
*Ein Taster als Eingabeelement für den Reset
Zentrale Steuerung
*Arduino Uno Mikrocontroller mit verschiedenen Ein- und Ausgängen
*Stromversorgung der Einzelkomponenten vom Arduino über 3,3V und 5V Anschlüsse
*GND (Ground) vom Arduino, Verbindung für die Masseleitung
Ausgänge
*Digital Output 3 (PWM) zur Steuerung des Servo-Motor mit Pulsteuerung
**Ein BC548C Transistor als Schaltelement, zur Motorabschaltung
Verkabelung
*Die Verkabelung ist farblich kodiert:
**Rote Leitungen für die Stromversorgung
**Grüne und Gelb Leitungen für Signalleitungen
Die Hall-Effekt-Sensoren sind parallel geschaltet und werden zur Positionserkennung der Magnete in den Spielsteinen verwendet. Der Servo-Motor kann über den Mikrocontroller präzise angesteuert werden, während der Transistor BC548C als Schaltverstärker und zum Abschalten dient. Der Taster fungiert als Reset-Knopf.
<br>
<br>
<gallery widths="460px" heights="280px" captionalign="center">
Steckplatine_Pentomino_Steckplatine.jpg| Steckplatine
Schaltplan_Pentomino_Schaltplan.jpg | Schaltplan
</gallery>
'''Verdrahtungsplan'''
===Software===
'''Software-Planung'''
Für die Software-Planung wurden zunächst die grundliegenden Anforderungen durch Brainstorming definiert.
*Erkennung von 6 Magneten durch Hall-Sensoren
*Steuerung einer Geheimklappe (öffnen/schließen)
*Steuerung eines Servomotors (öffnen/verriegeln)
*Implementierung eines Reset-Tasters (zurücksetzten das Spiels)
*Kontinuierliche Überprüfung des Systemzustands
*Motor benötigt Zeit zum auf und zu fahren
Anschließend erfolgte Festlegung möglicher Zustände die das Programm abdecken muss.
#Spiel eingeschaltet                            ⇒  Klappe verriegeln
#Klappe verriegelt und Reset Taster Gedrückt    ⇒  Keine Reaktion des Systems 
#Spielsteine eingelegt                          ⇒  Klappe öffnen
#Spielsteine eingelegt Reset-Taster gedrückt    ⇒  Keine Reaktion des Systems 
#Reset-Taster gedrückt und Spielsteine entfernt  ⇒  Klappe verriegeln
<br>
<br>
<br>


===<big>Software:</big>===




'''Programmablaufplan'''
'''Programmablaufplan'''
[[Datei: Programmablaufplan_Pentomino.png |rechts|200px|mini|alternativtext= Programmablaufplan| Programmablaufplan]]
Der Programmablaufplan für das Pentomino Puzzle läuft wie folgt ab:<br>
Hauptablauf
*Start des Programms
*Initialisierung der Komponenten
*Übergang in die Main Loop
Prüfungsphase
*Geheimklappe wird verriegelt
*kontinuierliche Überprüfung der 6 Magnete durch Hall-Sensoren
*Bei erfolgreicher Erkennung aller Magnete:
**Geheimklappe wird geöffnet
**Nach kurzer Zeit fährt der Motor in die Neutralstellung
Wartephase
*Eintritt in Warte Loop
*Überprüfung ob:
**Spielsteine entfernt wurden
**und Reset Taster gedrückt wurde
*Falls nicht erfüllt: Zurück zum Warte Loop
*Bei Erfüllung: Rückkehr zur Main Loop


[[Datei: Pentomino Puzzle Programmablaufplan.png |rechts|200px|mini|alternativtext=Projektzeichnung Programmablaufplan|Projektzeichnung Programmablaufplan]]


Der Programmablaufplan zeigt die Steuerungslogik für ein Pentomino Puzzle mit folgender Ablaufsequenz:
Hauptablauf
* Nach dem Start erfolgt zunächst eine Initialisierung des Systems. Danach geht das Programm in die Main Loop über.
Sensorprüfung und Klappensteuerung
* In der Hauptschleife wird kontinuierlich überprüft, ob alle 6 Magnete durch die Hall-Sensoren erkannt werden. Wenn dies der Fall ist ("ja"), wird ein Motor aktiviert, um eine Klappe zu öffnen.
Warte-Zustand
* Nach dem Öffnen der Klappe geht das System in einen Warte Loop über. In dieser Warteschleife wird geprüft, ob der Reset-Taster gedrückt wurde:
** Bei "nein" verbleibt das System im Warte-Loop
** Bei "ja" wird der Motor aktiviert, um die Klappe zu verriegeln


<br>
<br>
Zeile 154: Zeile 281:
<br>
<br>
<br>
<br>
'''Modellbasierte Programmierung'''
[[Datei: ProgrammPentomino_Simulink.png |rechts|650px|mini|alternativtext= Simulink Programm| Simulink Modell Pentomino]]
Das Programm für den Arduino wurde mithilfe von MATLAB und Simulink entwickelt. Um einen Arduino mit MATLAB oder Simulink zu programmieren, müssen zunächst die entsprechenden Add-Ons installiert werden. Eine Anleitung hierzu finden Sie hier.
Zu Beginn wurde ein neues Simulink-Modell erstellt und, wie bei allen MATLAB/Simulink-Modellen, die Modellparameter angepasst. Dabei wurde eine feste Schrittweite von 0,001 Sekunden gewählt. Das bedeutet, dass das erzeugte Programm einmal pro Millisekunde ausgeführt wird.
Im nächsten Schritt wurden die Ein- und Ausgänge des Arduino aus der Simulink-Bibliothek als vorgefertigte Blöcke in den Programmierbereich gezogen. Für die sechs Hallsensoren wurden die analogen Eingänge A0 bis A5 hinzugefügt. Für den Taster wurde ein digitaler Eingang eingebaut, bei dem der PinMode auf „Pullup“ eingestellt wurde.
Zur Steuerung des Servomotors kamen zwei Blöcke hinzu: Ein digitaler Ausgang, der über einen Bipolartransistor den Motor mit Spannung versorgt, sowie ein Arduino-Block, der den Drehwinkel über den PWM-Ausgang 3 an den Servomotor überträgt.
Abschließend mussten alle Bausteine so eingestellt werden, dass ihre Sample-Time auf „Inf“ gesetzt wurde. Dadurch können sie mit der definierten Schrittweite von 0,001 Sekunden abgefragt werden.
Für die eigentliche Programmierung wurde auf MATLAB-Funktionen zurückgegriffen. In der ersten Funktion wird durch einen Bit-Schiebealgorithmus das Prellen des Tasters verhindert. Dadurch gelangen keine doppeldeutigen Signale in die Funktion, die die einzelnen Zustände des Pentomino-Puzzles steuert.
In der Funktion „Steuerung_Pentomino“ werden zunächst Variablen initialisiert. Beispielsweise werden die einzelnen Motorpositionen und die dazugehörigen Drehwinkel definiert. Das Programm ist so aufgebaut, dass es für jeden Zustand, den der Motor einnehmen kann, sowie für die dazugehörigen Bewegungen zwischen den Zuständen jeweils eine separate Case-Anweisung gibt. Dadurch wird sichergestellt, dass bei jedem Funktionsaufruf genau eine der Cases erfüllt ist. So wird verhindert, dass das Spiel gleichzeitig in mehreren Zuständen sein könnte.
Das Programm startet mit dem Zustand 5 (Bewegung von Neutral zu Verriegelt). Dies stellt sicher, dass der Motor in die Sperrstellung fährt, unabhängig davon, in welchem Zustand der Arduino beim Ausschalten war. Sobald der Motor die Sperrstellung erreicht hat, wechselt das Programm in den Zustand 0 (Verriegelt).
Der Zustand 0 wird erst verlassen, wenn alle sechs Hallsensoren einen Magneten erkennen und der Taster nicht gedrückt ist. Dann wechselt das Programm in den Zustand 1 (Bewegung von Verriegelt zu Vorne). In diesem Zustand fährt der Motor in die vordere Stellung, um die Geheimklappe zu öffnen. Dort angekommen, wechselt der Zustand in 2 (Vorne). Nach einer Sekunde erfolgt der Wechsel in den Zustand 3 (Bewegung von „Vorne“ zu Neutral), bei dem der Motor in die neutrale Stellung fährt.
Im Zustand 4 (Neutral) wartet das Programm, bis mindestens ein Spielstein vom Spielbrett entfernt wurde und der Reset-Taster gedrückt wurde. Anschließend kehrt das Programm in den Zustand 5 zurück und verriegelt die Geheimklappe erneut. Es wird davon ausgegangen, dass die Klappe in der Zwischenzeit manuell vom Anwender geschlossen wurde. Damit beginnt das Rätsel wieder im ersten Zustand.
<div style="width:1000px; height:500px; overflow:scroll; border: hidden">
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger">
%*************************************************************** *
%                  Hochschule Hamm-Lippstadt                    *
%*************************************************************** *
% Modul         :                                              *
%                                                                *
% Datum          : 07.01.2024                                  *
%                                                                *
% Funktion        : Ansteuerung der Motoren einer Geheimbox      *
%                                                                *
% Implementation  : MATLAB 2024b                                *
%                                                                *
% Req. Toolbox    : -                                            *
%                                                                *
% Author          : Kevin Ernst, Timo Roch                      *
%                                                                *
% Letzte Änderung : 07.01.2024                                  *
%*****************************************************************
function [Drehwinkel,MotorON] = Steuerung_Pentomino(A0,A1,A2,A3,A4,A5,Taster)
    persistent Init            % Initialiesierungs Variable
    persistent MotorNeutral    % Motor in einer Mittigen Stellung
    persistent MotorVorne      % Motor öffnet Klappe
    persistent MotorVerriegelt  % Motor verriegelt Klappe
    persistent Zustand          % Zustand des Programms
   
    persistent SchwelleHall    % Schaltschwelle der Hallsensoren
    persistent ZeitReturn      % Zeit die der Motor vorne bleibt befor er zurück in Neutral fährt => 10 = 1s
    persistent ZeitReturn_C    % Zählvariable für ZeitReturn
    persistent ZeitMotor        % Zeit die der Motor benötigt um zu fahren
    persistent ZeitMotor_C      % Zählvariable für ZeitMotor
    %Initialiesierung
    if isempty(Init)
        SchwelleHall=650;
        ZeitReturn=1000;
        ZeitReturn_C=ZeitReturn;
        MotorNeutral=150;
        MotorVorne=95;
        MotorVerriegelt=160;
        Zustand=5;
        Init = true;
        ZeitMotor=500;
        ZeitMotor_C=ZeitMotor;
    end
    % Setze Standardwerte für die Ausgaben
    Drehwinkel = MotorVerriegelt; % Standardwert, falls keine Bedingung erfüllt wird
    MotorON = 0;                  % Standardwert: Motor ist aus
    if (Init == true)
        % true=Alle 6 Hallsensoren in dem Durchlauf erkannt
        SechsMalHall = ((A0>=SchwelleHall)&&(A1>=SchwelleHall)&&(A2>=SchwelleHall)&&(A3>=SchwelleHall)&&(A4>=SchwelleHall)&&(A5>=SchwelleHall));
        switch Zustand
            case 0 %"Verriegelt"
                MotorON = 0;
                Drehwinkel = MotorVerriegelt;
                if ((SechsMalHall)&&(Taster==1))
                  Zustand=1; %"Bewegung von Verriegelt zu Vorne";
                end
            case 1 %"Bewegung von Verriegelt zu Vorne"
                MotorON = 1;
                Drehwinkel = MotorVorne;
                if(ZeitMotor_C<=0)
                    Zustand=2; %"Vorne";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end
            case 2 %"Vorne"
                MotorON = 0;
                Drehwinkel = MotorVorne;
                if(ZeitReturn_C<=0)
                    Zustand=3; %"Bewegung von Vorne zu Neutral";
                    ZeitReturn_C=ZeitReturn;
                else
                    ZeitReturn_C=ZeitReturn_C-1;
                end
            case 3 %"Bewegung von Vorne zu Neutral"
                MotorON = 1;
                Drehwinkel = MotorNeutral;
                if(ZeitMotor_C<=0)
                    Zustand=4; %"Neutral";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end
            case 4 %"Neutral"
                MotorON = 0;
                Drehwinkel = MotorNeutral;
                if ((~SechsMalHall)&&(Taster==0))
                  Zustand=5; %"Bewegung von neutral zu Verriegelt";
                end
            case 5 %"Bewegung von neutral zu Verriegelt"
                MotorON = 1;
                Drehwinkel = MotorVerriegelt;
                if(ZeitMotor_C<=0)
                    Zustand=0; %"Verriegelt";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end
        end
    end
end
function Taster = Entprellroutine(T)
    % Definition der Variablen
    persistent buttonState;  % Speichert den Zustand des Tasters
    persistent holdState;    % Speichert, ob der Taster gehalten wird
    if isempty(buttonState)
        buttonState = uint8(0);  % Initialisiere mit 0
    end
    if isempty(holdState)
        holdState = false;  % Initialisiere mit false
    end
    Taster=0;
    %Übergabe des Taster Inputs
    currentState = T; 
    % Die vorherigen Zustände in der 8-Bit-Variable speichern
    buttonState = bitshift(buttonState, 1) + uint8(currentState);
    % Steigende Flanke erkennen (Wechsel von 0 auf 1)
    if bitand(buttonState, uint8(3)) == uint8(1)
        Taster=1;
        holdState = true;  % Taster wird als gehalten markiert
    end
    % Fallende Flanke erkennen (Wechsel von 1 auf 0)
    if bitand(buttonState, uint8(3)) == uint8(2)
        Taster=0;
        holdState = false;  % Taster wird nicht mehr gehalten
    end
    % Erkennen, ob der Taster gehalten wird
    if holdState==true
        Taster=1;
    end
end
</syntaxhighlight>
</div>
<br clear=all>
</div>
<br clear=all>
== Komponententest ==
<br>
In den Komponententests werden sämtliche Funktionalitäten des Projekts einzeln geprüft, um sicherzustellen, dass jede Komponente ordnungsgemäß funktioniert. Eine detaillierte Dokumentation der einzelnen Komponententests wird erstellt, die folgende Informationen umfasst:
*Die jeweilige Komponente
*Angewandte Testmethoden
*Erwartete Ergebnisse
*Gemessene Ergebnisse
Diese strukturierte Aufzeichnung ermöglicht eine umfassende Überprüfung der Funktionalität jeder Komponente und bildet die Grundlage für eine gründliche Qualitätssicherung des gesamten Projekts.
<br>
<br>
<br>
<br>
[[Datei:Prototyp-Pentomino.jpg|200px|mini|alternativtext=Test|Erster Prototyp]]
===3D-Druck===
<br>
<br>
Erster Prototyp-Druck:
<br>
<br>
Nach der ersten Konstruktion wurde ein Testdruck der konstruierten Komponenten (Spielbrett und Puzzleteile) durchgeführt. Dabei sind zwei Dinge aufgefallen.
# Das Oben und Unten der Puzzleteile muss klar definiert sein, sonst ergeben sich falsche Magnetpositionen. 
# Die Teile benötigen Griffe um das platzieren und entfernen vom Spielbrett zu erleichtern.
Außerdem wurden die Maßtoleranzen leicht angepasst um den Puzzleteilen auf dem Spielbrett minimal mehr Spiel zu geben.
<br>
<br>
<br>
<br>
<br>
<br>


Zweiter Prototyp-Druck:
<br>
[[Datei:Zweiter_Prototyp.jpg|200px|mini|alternativtext=Test|Zweiter Prototyp]]
# Die beim ersten Prototypen-Druck erkannten Probleme wurden beseitigt, so das sich die Puzzleteile leicht auf das Spielbrett legen und wieder entfernen lassen.
# Zusätzlich wurde der Rand des Spielbretts verbreitert um Platz für Muttern zur Befestigung zu schaffen.
# Erhöhung der unteren und oberen Schichtanzahl auf jeweils 4 Schichten damit die Magnete nicht mehr durch den Spielstein zu sehen sind.
<br>
<br>
<br>
<br>
<br>
<br>
<br>


'''Modellbasierte Programmierung'''
===Hall-Sensoren===
<br>
Zur Erprobung der Hall-Sensoren wird ein Ausschnitt des Spielbretts mittels 3D-Druck gefertigt. Diese Testversion ermöglicht die präzise Installation und Verkabelung eines einzelnen Sensors. Nach der Montage dient der Ausschnitt als Testplattform: Ein regulärer Spielstein mit integriertem Magneten wird auf die Oberfläche platziert, um die Erkennungsfähigkeit des Sensors zu überprüfen. Dabei wird insbesondere getestet, ob der Sensor den Magneten zuverlässig durch zwei Schichten des PLA-Druckmaterials detektieren kann. Diese Methode gewährleistet eine realitätsnahe Simulation der späteren Spielbrettbedingungen und ermöglicht eine genaue Beurteilung der Sensorleistung.


Testergebnis-Schwellwerte:
*Spielstein liegt nicht auf dem Spielbrett :  Sensorwert kleiner 650
*Spielstein liegt auf dem Spielbrett : Sensorwert größer 650


Die gemessenen Werte können aufgrund der Toleranzen des Systems geringfügige Schwankungen aufweisen. Aus diesem Grund wurden keine festen Werte für den Analog-Digital-Wandler definiert. Stattdessen wurden Schwellwerte festgelegt, die in jedem Fall entweder über- oder unterschritten werden.
<br>
Der durchgeführte Test demonstriert die zuverlässige Erkennung eines magnetischen Spielsteins durch den Hall-Sensor. Der korrekt platzierte Spielstein erzeugt stabile Messwerte zwischen 750 und 850 Einheiten. Selbst bei Bewegungen innerhalb der Toleranzgrenzen bleiben die Werte deutlich über dem definierten Schwellwert von 650, wobei nur geringfügige Schwankungen durch die Bewegung des Spielsteins zu beobachten sind. Bei Entfernung des Spielsteins fällt der Messwert abrupt unter den Schwellwert von 650. Nach der Wiederauflage steigt der Wert unmittelbar wieder auf das ursprüngliche Niveau an, was eine klare Unterscheidung zwischen An- und Abwesenheit des Spielsteins ermöglicht.
Die Messung zeigt eindeutig die technische Eignung des Hall-Sensors zur Spielsteinerkennung. Der deutliche Abstand zwischen den Messwerten und dem Schwellwert gewährleistet eine robuste Erkennung auch bei leichten Positionsschwankungen des Spielsteins.


'''Schaltplan'''


<br>
<gallery widths="200" heights="200" >
Anschluss_Funktionstest.jpeg| Anschluss Funktionstest
Spielbrettaufbau Ohne Stein.jpeg | Spielbrettaufbau ohne Stein
Spielbrettaufbau Mit Stein.jpeg | Spielbrettaufbau mit Stein
Schwellwerte_Hallsensor.png| Test Hall-Sensor
</gallery>


'''Verdrahtungsplan'''
<br>


== Komponententest ==
===Reset-Taster===
<br>
Zur Erprobung des Reset-Tasters wird ein Testaufbau mit dem Mikrocontroller erstellt. Diese Testversion ermöglicht die präzise Installation und Verkabelung eines einzelnen Reset-Tasters. Nach der Montage dient der Aufbau als Testplattform: Der Reset-Taster wird an einen Eingang des Mikrocontrollers angeschlossen, während eine LED zur Signalisierung des Reset-Zustands verwendet wird. Zusätzlich muss bei der Implementierung des Tasters der interne Pullup-Widerstand des Arduino aktiviert werden ().
<br>
Der Test umfasst folgende Schritte:
#Betätigung des Reset-Tasters für verschiedene Zeitspannen (kurz, mittel, lang).
#Überprüfung der Reaktion des Mikrocontrollers auf die Tasterbetätigung.
#Beobachtung des Taster-Zustandes zur Verifizierung des Reset-Vorgangs.
<br>
Diese Methode gewährleistet eine realitätsnahe Simulation der späteren Einsatzbedingungen und ermöglicht eine genaue Beurteilung der Reset-Taster-Funktion.
<br>
Testergebnis:
*Kurze Betätigung: Kein Reset
*Mittlere Betätigung: Erfolgreicher Reset des Systems
*Lange Betätigung: Erfolgreicher Reset des Systems
<br>
<br>


[[Datei:Prototyp-Pentomino.jpg|300px|mini|alternativtext=Test|Erster Prototyp]]
<gallery widths="200" heights="200">
Einbau_Taster.jpeg | Einbau Taster
Verkablung_Taster.jpeg | Verkabelung Taster
ErsterVersuch_Taster.png | Test einlesen Taster
</gallery>
<br>
<br>


'''<big>3D-Druck:</big>'''
===Motor und Klappe===
<br>
Zur Erprobung des Servomotors und der Klappe wird der Aufbau mittels 3D-Druck gefertigt. Der Aufbau der Gesamtkonstruktion ermöglicht die präzise Installation und Verkabelung des Servomotors sowie die Montage der Klappe. Nach der Installation dient der Aufbau als Testplattform: Der Servomotor wird an den Mikrocontroller angeschlossen, der die Steuerungssignale sendet.


Erster Prototyp-Druck:
Der Test umfasst folgende Schritte:
*Kalibrierung des Servomotors für die korrekte Öffnungs- und Schließposition der Klappe.
*Durchführung mehrerer Öffnungs- und Schließzyklen zur Überprüfung der Zuverlässigkeit.
*Überprüfung der Stabilität der Klappe in geöffnetem und geschlossenem Zustand.
<br>
Testergebnis:
Klappe hält in beiden Endpositionen zuverlässig.


Nach der ersten Konstruktion wurde ein Testdruck der konstruierten Komponenten (Spielbrett und Puzzleteile) durchgeführt. Dabei sind zwei Dinge aufgefallen.  
Der Test zeigt, dass der Servomotor die Klappe zuverlässig und präzise öffnet und nach dem schließen verriegelt. Anschließend halten die Magnete in der Klappe diese in Position.  
# Das Oben und Unten der Puzzleteile muss klar definiert sein, sonst ergeben sich falsche Magnetpositionen.
<br>
# Die Teile benötigen Griffe um das platzieren und entfernen vom Spielbrett zu erleichtern.  
<br>
Außerdem wurden die Maßtoleranzen leicht angepasst um den Puzzleteilen auf dem Spielbrett minimal mehr Spiel zu geben.
Beim Motor Test ist jedoch aufgefallen, dass der Motor gelegentlich ein unangenehmes Summen von sich gibt. Um dies zu unterbinden wurde dem Aufbau ein NPN-Bipolartransistor hinzugefügt, um den Motor abzuschalten solange er nicht benötigt wird. Der Arduino nutzt Ausgang 2, um den Transistor zu aktivieren, wodurch das PWM-Signal von Ausgang 3 durchgeleitet wird. Diese Schaltung ermöglicht eine Steuerung der Leistungsabgabe, indem der Transistor als Schalter fungiert und das PWM-Signal nur durchlässt wenn es benötigt wird. So wird eine effiziente Kontrolle des angeschlossenen Motors erreicht.
<br>
<br>
<br>
<br>
<gallery widths="170" heights="170">
Anschluss_ServoMotor.jpeg | Anschluss Servomotor
ServoMotorMittig.jpeg | Servomotor Mittig
ServoMotorAusgefahren.jpeg | Servomotor ausgefahren
ServoMotorOffendeKlappe.jpeg | Servomotor öffen der Klappe
ErsterVersuch_ServoMotor.png | Test Servomotor
</gallery>
<br>
<br>
<br>
<br>
===Gesamtaufbau===
<br>
<br>
Nach den Test der Einzelkomponenten wird das Gesamtsystem zusammengesetzt und ein umfassender Systemtest durchgeführt, der sämtliche Funktionen beinhaktet. In diesem Zusammenhang wird die Anforderungsliste erweitert und der die Erfüllung der einzelnen Anforderungen überprüft. Dadurch können sämtliche Funktionalitäten systematisch geprüft und die Ergebnisse objektiv bewertet werden.
Dazu wurde zuerst die Sensoren mit Kabeln für Stromversorgung, Ground und einer Signalleitung verlötet. Anschließend wurden die Sensoren in die unter dem Spielbrett vorgesehenen Vertiefungen geklebt und und mit Heißkleber fixiert. Zusätzlich wurden die Verschiedenen Kabel mit zwei Kabelbindern sortiert anschließend und auf den Arduino gesteckt. Dafür werden die Analogen Eingänge 0-5 des Arduino genutzt. Die Steckreihenfolge ist dabei nicht relevant da lediglich abgefragt wird ob alle Steine (Magnete) im Spielbrett liegen. Für die Spannungsversorgung wird der 5V Output des Arduino verwendet sowie ein Ground Pin. <br>
Im zweiten Schritt erfolgte der Einbau des Servo-Motors in das Gehäuse sowie dessen elektrische Anbindung an den Arduino. Hierbei wurde der Servo-Motor im vorgesehenen Bereich des Gehäuses platziert. Anschließend wurde die elektrische Verbindung hergestellt, wobei Verbindungskabel zum Einsatz kamen, um den Servo-Motor mit dem Arduino zu verbinden. Ein wichtiger Bestandteil dieser Verbindung war der Einsatz eines NPN-Transistors. Dieser Transistor dient als elektronischer Schalter und ermöglicht das Ein- und Ausschalten des Servo-Motors durch den Arduino. <br>
Im nächsten Arbeitsschritt wurde der Reset-Knopf eingebaut und die Stromversorgung installiert. Der Reset-Knopf fand seinen Platz im Gehäuse und wurde zur Sicherung eingeklebt. Eine elektrische Verbindung zwischen dem Knopf und dem digitalen Eingang 4 des Arduino wurde hergestellt. Diese Konfiguration ermöglicht zwei wichtige Funktionen:
#Ein- und Ausschalten des gesamten Spiels
#Neustart des Spiels nach dem Öffnen und Schließen der Klappe
Die Stromversorgung erfolgt über ein 9V Steckernetzteil, das mit einem Ein- und Ausschalter versehen wurde.
<br>
<br>
Zur Abschließenden Montage des Projekts wurden folgende Schritte durchgeführt:
#Einsetzen der Klappe in das Gehäuse
#Montage des Arduino im Gehäuse
#Platzierung des Spielbretts
#Fixierung des Spielbretts mit vier Schrauben
Diese finale Montage vervollständigt den Aufbau des Spiels und macht es einsatzbereit.




Zweiter Prototyp-Druck:
 
<gallery widths="200" heights="200">
Verdrahtung_Spielbrett_HallSensor.jpeg | Verdrahtung Spielbrett Hall-Sensor
Einbau_Taster.jpeg | Einbau Taster
Anschluss_ServoMotor.jpeg | Anschluss Servomotor
</gallery>


== Ergebnis ==
== Ergebnis ==
<big>Umsetzung der Anforderungen</big>
{| class="wikitable"
|+ style = "text-align: left"| Tabelle 1: Umsetzung der Anforderungen
|-
! Nr. !!  Priorisierung  !! Anforderung !! Getestet !! Erfüllt
|-
|1 || Gering || Größe: Das Puzzle muss in einen Schuhkarton passen. || JA || JA
|-
|2 || Mittel || Einfaches Rätsel für Escape-Room-Einsteiger || JA || JA
|-
|3  || Hoch || Lösungszeit: Etwa 5 Minuten. || JA || JA
|-
|4  || Hoch || Ausgabe: Vierstelliger Zahlencode bei korrekter Lösung. || JA || JA
|-
|5  || Mittel || Spielbrett: Integrierte Hall-Sensoren (6 Stück, Typ TLE 4905L), Material: 3D-gedrucktes PLA || JA || JA
|-
|6 || Mittel || Pentomino-Teile, Anzahl: 6 Stück, Material: 3D-gedrucktes PLA, Eingelassene Magnete mit einzigartiger Positionierung pro Teil || JA || JA
|-
|7 || Hoch || Mikrocontroller, Typ: Arduino Uno R3 || JA || JA
|-
|8 || Hoch || Ausgabemechanismus, Servo-Motor: JAMARA 033212 High End Micro Analog || JA || JA
|-
|9 || Hoch || Die Klappe öffnet sich nur wenn alle Spielsteine richtig liegen || JA || JA
|-
|10 || Hoch || Nach dem händischen schließen muss der Reset Butten zur Verriegelung der Klappe gedrückt werden || JA || JA
|-
|11 || Hoch || Stromversorgung: Steckernetzteil 9V für Arduino || JA || JA
|-
|12 || Hoch || An/Aus-Schalter || JA || JA
|-
|13 || Hoch || Hauptprogramm: Kontinuierliche Überprüfung der Hall-Sensoren, Steuerung des Servo-Motors zur Codeausgabe || JA || JA
|-
|14 || Mittel || Initialisierungsroutine: Systemstart  || JA || JA
|-
|15 || Hoch || Das Arduino-System wird über Matlab-Simulink-Funktionen gesteuert || JA || JA
|-
|16 || Mittel || Das System muss benutzerfreundlich und für Kinder wie Erwachsene geeignet sein || JA || JA
|-
|17 || Hoch || Tipps und Musterlösung für Spielleiter bereitstellen || JA || JA
|-
|18 || Hoch || Nur eine Lösungsmöglichkeit des Puzzles || JA || JA
|}
<br>
<br>
<big>Funktionstest des Pentomino-Puzzles</big>
<br>
Spielstart und Puzzlelösung:<br>
#Kippschalter umlegen, um das Pentomino-Puzzle zu aktivieren.
#Alle Spielsteine in das Spielbrett einlegen.
#Puzzle lösen, bis alle Spielsteine korrekt platziert sind.
Automatische Reaktion bei erfolgreicher Lösung:<br>
*Sobald alle Spielsteine korrekt im Spielbrett liegen, aktiviert sich der Servo-Motor.
*Der Motor öffnet die Klappe und fährt anschließend in die mittlere Position zurück.
*Die Klappe öffnet sich.
Zugang zum Code:<br>
*Nach dem Öffnen der Klappe wird eine Karte mit einem vierstelligen Code zugänglich.
*Die Karte kann nun entnommen werden.
Zurücksetzen des Spiels:<br>
#Karte mit dem vierstelligen Code wieder einlegen.
#Klappe manuell schließen.
#Reset-Taster drücken.
*Nach Betätigung des Reset-Tasters fährt der Motor in die Verriegelungsposition.
Vorbereitung für die nächste Runde:<br>
*Spielsteine können nun für eine neue Spielrunde eingelegt werden.


== Zusammenfassung ==
== Zusammenfassung ==
=== Lessons Learned ===
=== Lessons Learned ===
'''Strategische Planung'''
*Gründliche Planung als Basis für Projekterfolg. Frühzeitige Erkennung von Hindernissen.
'''Effizientes Ressourcenmanagement'''
*Klare Aufgabenteilung und realistisches Zeitmanagement fördern Verantwortlichkeit und Qualität der Arbeit.
'''Fertigungstoleranzen berücksichtigen'''
*Frühzeitige Einbeziehung von Toleranzen, besonders beim 3D-Druck, zur Minimierung von Nacharbeiten.
'''Kommunikation und Agilität'''
*Regelmäßiger Austausch im Team und flexible Anpassung an Änderungen.
'''Qualitätssicherung'''
*Tests und kontinuierliche Überprüfungen zur Gewährleistung der Produktqualität.
'''Dokumentation'''
*Sorgfältige Aufzeichnung von Prozessen und Entscheidungen für zukünftige Projekte und kontinuierliche Verbesserung.


== Projektunterlagen ==
== Projektunterlagen ==
=== Projektplan ===
=== Projektplan ===
[[Datei:Projektplan_Pentomino_Puzzle.png|500px|mini|alternativtext=Test| Projektplan Pentomino Puzzle]]
Der Projektplan zeigt den zeitlichen Ablauf des Projekt von Ende September 2024 bis Mitte Januar 2025. Die Abbildung zeigt ein Gantt-Diagramm, dass die Einzelnen Aufgaben als Balken darstellt. Es sind Start- und Endzeit, der Bearbeitung und der Fortschritt der jeweiligen Aufgabe dargestellt.
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
=== Projektdurchführung ===
=== Projektdurchführung ===
Die Projektdurchführung orientiert sich dabei an dem aufgestellten Projektplan. Es wurde darauf geachtet, die terminlichen Vorgaben einzuhalten. Die Durchführung an sich hat, abgesehen von krankheits- und feiertagsbedingten Ausfällen, zwischenzeitlich zu einer Verzögerung von ein Paar 3-4 geführt. Dieser Verzug konnte jedoch durch intensive Arbeitstage ausgeglichen werden.


== YouTube Video ==
== YouTube Video ==


== Weblinks ==
== Weblinks ==
*Dieses ZIP-Archiv enthält alle relevanten CAD- und Programmier-Dateien für das Projekt. Die Dateien können verwendet werden, um die Konstruktionen und Modelle in einer CAD-Software zu öffnen und weiter zu bearbeiten. Bitte stellen Sie sicher, dass Sie über eine geeignete Software verfügen, um die Dateien zu extrahieren und anzuzeigen.


== Literatur ==
== Literatur ==

Aktuelle Version vom 7. Januar 2025, 17:16 Uhr

→ zurück zur Übersicht: WS 24/25: Escape Game

Autor: Kevin Ernst und Timo Roch
Betreuer: Prof. Schneider oder Prof. Göbel oder Marc Ebmeyer

Autor:

Beispielbild eines Pentomino Spiels
Beispielbild eines Pentomino Spiels

Einleitung

Das mechatronische Pentomino Puzzle stellt eine Weiterentwicklung des klassischen geometrischen Rätsels dar. Durch den Einsatz von Magneten, Hall-Sensoren und einem Arduino-Mikrocontroller wird das traditionelle Spiel in ein elektronisches Puzzle für einen Escape Game verwandelt. Diese Zusammenführung von Mechanik und Elektronik schafft eine einzigartige Spielerfahrung, die sowohl die räumliche Vorstellungskraft als auch das logische Denken der Teilnehmer herausfordert. Damit ist das Pentomino Puzzle ideal für die Umsetzung des Projektes im Fachpraktikum Mechatronik im Masterstudiengang Business and Systems Engineering. WS 24/25: Escape Game

Escape Rooms sind teambasierte Spiele, bei denen Spieler Rätsel lösen, Experimente durchführen und Aufgaben erfüllen. Wird das Puzzle richtig gelöst wird ein vierstelliger Zahlencode ausgegeben, um das nächste Escape Game spielen zu können.

Anforderungen

Anforderungen an das Escape Game:

  • Jedes Rätsel muss von der Größe her in einen Schuhkarton passen, damit es zu einem Escape-Mobil kombiniert werden kann.
  • Jedes Rätselfach wird über ein Schloss mit Schlüssel oder Zahlen geöffnet.
  • Ende jedes Rätsels ist ein Schlüssel, 3-4 stellige Zahlenkombination oder Umsetzungstabelle (z. B. Farben/Noten/... in Zahlen).
  • Ausnahme können kombinierte Rätsel bieten. Zwei Teams überlegen sich eine abweichende Schnittstelle.
  • Für dese Rätsel muss ein Schwierigkeitscode angegeben werden (Einsteiger, Fortgeschrittene, Profi). Das Einsteiger Level ist für Rätsel-Freunde, die noch keine oder wenige Erfahrungen mit Escape-SpieleEscape-Spiele haben. Das Level Fortgeschrittene wird für Rätsel-Fans empfohlen, die schon mehrere Escape Spiele gespielt haben und das Level Profis geht an die Rätsel-Meister.
  • Jedes Rätsel sollte in ca. 5 Minuten lösbar sein.
  • Stellen Sie für jedes Rätsel für die Spielleiter*in Tipps und Musterlösung bereit.
  • Zur Lösung der Haupträtsel darf, sofern der Bedarf bestehen sollte, in den entsprechend bereit gestellten Fachbüchern nachgelesen werden. Eine Internetrecherche (durch Handys, Tablets, Laptops) ist nicht erlaubt, das heißt digidetox = digital detoxification (digitale Entgiftung) spielt daher auch eine Rolle.


Tabelle 1: Anforderungsliste (Lastenheft)
Nr. Priorisierung Anforderung Bemerkung
1 Gering Größe: Das Puzzle muss in einen Schuhkarton passen.
2 Mittel Einfaches Rätsel für Escape-Room-Einsteiger Einsteiger
3 Hoch Lösungszeit: Etwa 5 Minuten. Hinweise nach 3 und 4 Minuten
4 Hoch Ausgabe: Vierstelliger Zahlencode bei korrekter Lösung.
5 Mittel Spielbrett: Integrierte Hall-Sensoren (6 Stück, Typ TLE 4905L), Material: 3D-gedrucktes PLA
6 Mittel Pentomino-Teile, Anzahl: 6 Stück, Material: 3D-gedrucktes PLA, Eingelassene Magnete mit einzigartiger Positionierung pro Teil
7 Hoch Mikrocontroller, Typ: Arduino Uno R3
8 Hoch Ausgabemechanismus, Servo-Motor: JAMARA 033212 High End Micro Analog
9 Hoch Die Klappe öffnet sich nur wenn alle Spielsteine richtig liegen
10 Hoch Nach dem händischen schließen muss der Reset Butten zur Verriegelung der Klappe gedrückt werden Anschließend kann erneut gespeilt werden
11 Hoch Stromversorgung: Steckernetzteil 9V für Arduino
12 Hoch An/Aus-Schalter
13 Hoch Hauptprogramm: Kontinuierliche Überprüfung der Hall-Sensoren, Steuerung des Servo-Motors zur Codeausgabe
14 Mittel Initialisierungsroutine: Systemstart
15 Hoch Das Arduino-System wird über Matlab-Simulink-Funktionen gesteuert gesteuert
16 Mittel Das System muss benutzerfreundlich und für Kinder wie Erwachsene geeignet sein.
17 Hoch Tipps und Musterlösung für Spielleiter bereitstellen
18 Hoch Nur eine Lösungsmöglichkeit des Puzzles Spezielle Form von Spielbrett und Spielsteinen



Funktionaler Systementwurf/Technischer Systementwurf

Spielidee
Spielidee

Der funktionale Systementwurf sieht ein Spielbrett vor, in das Hall-Sensoren eingebettet sind. Die Pentomino-Teile werden mit Magneten ausgestattet, deren Position für jedes Teil einzigartig ist. Ein Arduino Uno verarbeitet die Signale der Hall-Sensoren und steuert ein Servomotor so an, dass die Ausgabe des vierstelligen Codes erfolgt.
Bei der technischen Konzeption spielt die Gestaltung des Spielbretts und der Spielsteine eine entscheidende Rolle. Die besondere Form dieser Elemente ist darauf ausgerichtet, dass für das Pentomino-Rätsel nur eine einzige korrekte Lösung existiert. Diese Eindeutigkeit ist von besonders wichtig, um zu gewährleisten, dass die Magnete immer genau an den vorgesehenen Positionen platziert werden. Durch diesen Ansatz wird nicht nur die Funktionalität des Spiels sichergestellt, sondern auch die Herausforderung für den Spieler auf ein gut lösbares Niveau gebracht.


Technischer Aufbau:

  • Spielbrett mit integrierten Hall-Sensoren
  • Pentomino-Teile mit eingebetteten Magneten
  • Arduino Uno R3-Mikrocontroller zur Signalverarbeitung
  • Mechanische Ausgabe des vierstelligen Codes
  • Stromversorgung über Stromkabel







Technischer Systementwurf:

Technischer Systementwurf
Technischer Systementwurf

Der in der Abbildung dargestellte technische Systementwurf zeigt die Architektur des Arduino-basierten Pentomino Puzzles.

Eingabekomponenten

  • Hall-Sensoren: Insgesamt sechs Hall-Sensoren (A0 bis A5), die an verschiedenen Analogeingängen des Arduino angeschlossen sind
  • Reset Taster: Angeschlossen am digitalen Eingang DI des Arduino
  • Spannungsquelle: Verbunden mit dem Arduino zur Stromversorgung

Ausgabekomponenten

  • Elektromotor: Angesteuert über den PWM3-Ausgang des Arduino

Signalwege

  • Analoge Eingänge: A0 bis A5 für die Hall-Sensoren
  • Digitaler Eingang: DI für den Reset-Taster
  • PWM-Ausgang: PWM3 zur Motorsteuerung
  • Digital Output 4: NPN-Transistor zur Motorabschaltung
  • Stromversorgung: Separate Spannungsquelle zur Systemversorgung

Komponentenspezifikation

Tabelle 1: Materialliste (BOM)
Nr. Anz. Beschreibung
1 6 Pentomino-Teile: 3D-gedruckt mit eingelassenen Magneten [1]
2 6 Hall-Sensoren: TLE 4905L Hallsensor, digital, uni-/bipolar, 3,8 - 24 V [2]
3 1 Gehäuse 3D-Druck
4 1 Mikrocontroller: Arduino Uno R3 [3]
5 1 DEBO KABELSET8 Entwicklerboards - Steckbrückenkabel, 20cm, 3x 20 Kabel [4]
6 1 Stromversorgung: Steckernetzteil 9V für ARD Mega [5]
7 1 Taster TRU COMPONENTS 701280 GQ 16F-S Vandalismusgeschützter Drucktaster 48 V/DC 2 A 1 x Aus/(Ein) tastend IP65 [6]
8 1 Servo-Motor: JAMARA 033212 Servo High End Micro Analog [7]
9 1 An/Aus-Schalter TRU COMPONENTS 700185 Wippschalter R13-112A B/B 0-I 250 V/AC 6 A 1 x Aus/Ein rastend [8]
10 1 Diotec Transistor (BJT) - diskret BC548C TO-92 Anzahl Kanäle 1 NPN [9]

Umsetzung (HW/SW)

Hardware

Konstruktion

Das Spielbrett, die Puzzleteile und das Gehäuse wurden in SolidWorks konstruiert. SolidWorks ermöglichte eine einfache Modellierung aller Komponenten unter Berücksichtigung der spezifischen Anforderungen des Spiels. Nach Abschluss der Konstruktion wurden die Modelle im SCL-Dateiformat gespeichert, um für den 3D-Druck nutzbar zu sein.

Vorbereitung für den 3D-Druck

Die erstellten SCL-Dateien wurden anschließend in den Bambulab-Slicer importiert. Dieser spezielle Slicer ist darauf ausgelegt, 3D-Modelle für den Druck mit Bambulab-Druckern vorzubereiten, indem er sie in dünne Schichten zerlegt und den Druckpfad für den 3D-Drucker generiert.

Druckeinstellungen und Materialwahl

Im Bambulab-Slicer wurden die spezifischen Druckeigenschaften sorgfältig eingestellt. Diese Einstellungen umfassen Parameter wie:

  • Schichthöhe: 0,1 mm für Spielbrett sonst alle Komponenten 0,2 mm
  • Druckgeschwindigkeit: Abhängig von Drucker und Material --> Standard für PLA sollte bevorzugt werden
  • Füllgrad: 15-20 %
  • Struktur der Füllung: Einfache Linien (Monotonisch)
  • Temperatur für Druckbett und Düse: Abhängig von Material (Für PLA ca.: Druckbett 40 Düse 220 Grad)

Als Druckmaterial wurde PLA (Polylactid) von Bambulab gewählt, ein biologisch abbaubarer Kunststoff, der sich durch gute Druckeigenschaften und eine glatte Oberfläche auszeichnet.

Druckprozess mit Magnetintegration

Der Druckvorgang selbst war besonders interessant, da er die Integration von Magneten in die Puzzleteile und der Klappe beinhaltete. Dieser Prozess lief wie folgt ab:

  1. Start des Druckvorgangs mit den vorbereiteten Einstellungen.
  2. Pausieren des Drucks in der spezifischen Ebene, in der die Magnete platziert werden sollten.
  3. Manuelles Einsetzen der Magnete in die vorgesehenen Aussparungen.
  4. Fortsetzen des Druckvorgangs, wobei die nachfolgenden Schichten die Magnete fest umschlossen und integrierten.

Diese Methode ermöglichte eine nahtlose Integration der Magnete in die Puzzleteile, ohne dass nachträgliche Materialbearbeitung erforderlich waren.

Funktionsweise von Hall-Sensoren
Ein Hall-Sensor besteht aus einem dünnen Halbleiterplättchen, durch das ein elektrischer Strom fließt. Wenn ein Magnetfeld senkrecht auf dieses Plättchen einwirkt, werden die Ladungsträger im Halbleiter durch die Lorentzkraft abgelenkt. Diese Ablenkung führt zur Entstehung einer elektrischen Spannung quer zur Stromrichtung, der sogenannten Hall-Spannung. Die Hall-Spannung ist proportional zur Stärke des einwirkenden Magnetfeldes. Moderne Hall-Sensoren integrieren zusätzliche Elektronik auf dem Chip, um diese Spannung zu verstärken und in ein verwertbares Ausgangssignal umzuwandeln. Je nach Anwendung kann dieses Signal analog oder digital sein: Analoge Hall-Sensoren:

  • Liefern ein kontinuierliches Spannungssignal, das proportional zur Magnetfeldstärke ist.

Digitale Hall-Sensoren:

  • Vergleichen die gemessene Magnetfeldstärke mit einem Schwellwert und schalten ihren Ausgang entsprechend um.

Für den Aufbau wurden Analoge Hall-Sensoren vom Typ 49E verwendet. Diese liefern ein kontinuierliches Spannungssignal, das proportional zur Magnetfeldstärke ist

Schaltplan

Der Schaltplan zeigt eine elektronische Schaltung mit folgenden Hauptkomponenten: Sensoren und Eingänge

  • 6 Hall-Effekt-Sensoren, jeweils mit 3 Pins ausgestattet
  • Ein Taster als Eingabeelement für den Reset

Zentrale Steuerung

  • Arduino Uno Mikrocontroller mit verschiedenen Ein- und Ausgängen
  • Stromversorgung der Einzelkomponenten vom Arduino über 3,3V und 5V Anschlüsse
  • GND (Ground) vom Arduino, Verbindung für die Masseleitung

Ausgänge

  • Digital Output 3 (PWM) zur Steuerung des Servo-Motor mit Pulsteuerung
    • Ein BC548C Transistor als Schaltelement, zur Motorabschaltung

Verkabelung

  • Die Verkabelung ist farblich kodiert:
    • Rote Leitungen für die Stromversorgung
    • Grüne und Gelb Leitungen für Signalleitungen

Die Hall-Effekt-Sensoren sind parallel geschaltet und werden zur Positionserkennung der Magnete in den Spielsteinen verwendet. Der Servo-Motor kann über den Mikrocontroller präzise angesteuert werden, während der Transistor BC548C als Schaltverstärker und zum Abschalten dient. Der Taster fungiert als Reset-Knopf.


Verdrahtungsplan

Software

Software-Planung Für die Software-Planung wurden zunächst die grundliegenden Anforderungen durch Brainstorming definiert.

  • Erkennung von 6 Magneten durch Hall-Sensoren
  • Steuerung einer Geheimklappe (öffnen/schließen)
  • Steuerung eines Servomotors (öffnen/verriegeln)
  • Implementierung eines Reset-Tasters (zurücksetzten das Spiels)
  • Kontinuierliche Überprüfung des Systemzustands
  • Motor benötigt Zeit zum auf und zu fahren

Anschließend erfolgte Festlegung möglicher Zustände die das Programm abdecken muss.

  1. Spiel eingeschaltet ⇒ Klappe verriegeln
  2. Klappe verriegelt und Reset Taster Gedrückt ⇒ Keine Reaktion des Systems
  3. Spielsteine eingelegt ⇒ Klappe öffnen
  4. Spielsteine eingelegt Reset-Taster gedrückt ⇒ Keine Reaktion des Systems
  5. Reset-Taster gedrückt und Spielsteine entfernt ⇒ Klappe verriegeln






Programmablaufplan

Programmablaufplan
Programmablaufplan

Der Programmablaufplan für das Pentomino Puzzle läuft wie folgt ab:
Hauptablauf

  • Start des Programms
  • Initialisierung der Komponenten
  • Übergang in die Main Loop

Prüfungsphase

  • Geheimklappe wird verriegelt
  • kontinuierliche Überprüfung der 6 Magnete durch Hall-Sensoren
  • Bei erfolgreicher Erkennung aller Magnete:
    • Geheimklappe wird geöffnet
    • Nach kurzer Zeit fährt der Motor in die Neutralstellung

Wartephase

  • Eintritt in Warte Loop
  • Überprüfung ob:
    • Spielsteine entfernt wurden
    • und Reset Taster gedrückt wurde
  • Falls nicht erfüllt: Zurück zum Warte Loop
  • Bei Erfüllung: Rückkehr zur Main Loop









Modellbasierte Programmierung

Simulink Programm
Simulink Modell Pentomino

Das Programm für den Arduino wurde mithilfe von MATLAB und Simulink entwickelt. Um einen Arduino mit MATLAB oder Simulink zu programmieren, müssen zunächst die entsprechenden Add-Ons installiert werden. Eine Anleitung hierzu finden Sie hier.

Zu Beginn wurde ein neues Simulink-Modell erstellt und, wie bei allen MATLAB/Simulink-Modellen, die Modellparameter angepasst. Dabei wurde eine feste Schrittweite von 0,001 Sekunden gewählt. Das bedeutet, dass das erzeugte Programm einmal pro Millisekunde ausgeführt wird.

Im nächsten Schritt wurden die Ein- und Ausgänge des Arduino aus der Simulink-Bibliothek als vorgefertigte Blöcke in den Programmierbereich gezogen. Für die sechs Hallsensoren wurden die analogen Eingänge A0 bis A5 hinzugefügt. Für den Taster wurde ein digitaler Eingang eingebaut, bei dem der PinMode auf „Pullup“ eingestellt wurde.

Zur Steuerung des Servomotors kamen zwei Blöcke hinzu: Ein digitaler Ausgang, der über einen Bipolartransistor den Motor mit Spannung versorgt, sowie ein Arduino-Block, der den Drehwinkel über den PWM-Ausgang 3 an den Servomotor überträgt.

Abschließend mussten alle Bausteine so eingestellt werden, dass ihre Sample-Time auf „Inf“ gesetzt wurde. Dadurch können sie mit der definierten Schrittweite von 0,001 Sekunden abgefragt werden.

Für die eigentliche Programmierung wurde auf MATLAB-Funktionen zurückgegriffen. In der ersten Funktion wird durch einen Bit-Schiebealgorithmus das Prellen des Tasters verhindert. Dadurch gelangen keine doppeldeutigen Signale in die Funktion, die die einzelnen Zustände des Pentomino-Puzzles steuert.

In der Funktion „Steuerung_Pentomino“ werden zunächst Variablen initialisiert. Beispielsweise werden die einzelnen Motorpositionen und die dazugehörigen Drehwinkel definiert. Das Programm ist so aufgebaut, dass es für jeden Zustand, den der Motor einnehmen kann, sowie für die dazugehörigen Bewegungen zwischen den Zuständen jeweils eine separate Case-Anweisung gibt. Dadurch wird sichergestellt, dass bei jedem Funktionsaufruf genau eine der Cases erfüllt ist. So wird verhindert, dass das Spiel gleichzeitig in mehreren Zuständen sein könnte.

Das Programm startet mit dem Zustand 5 (Bewegung von Neutral zu Verriegelt). Dies stellt sicher, dass der Motor in die Sperrstellung fährt, unabhängig davon, in welchem Zustand der Arduino beim Ausschalten war. Sobald der Motor die Sperrstellung erreicht hat, wechselt das Programm in den Zustand 0 (Verriegelt).

Der Zustand 0 wird erst verlassen, wenn alle sechs Hallsensoren einen Magneten erkennen und der Taster nicht gedrückt ist. Dann wechselt das Programm in den Zustand 1 (Bewegung von Verriegelt zu Vorne). In diesem Zustand fährt der Motor in die vordere Stellung, um die Geheimklappe zu öffnen. Dort angekommen, wechselt der Zustand in 2 (Vorne). Nach einer Sekunde erfolgt der Wechsel in den Zustand 3 (Bewegung von „Vorne“ zu Neutral), bei dem der Motor in die neutrale Stellung fährt.

Im Zustand 4 (Neutral) wartet das Programm, bis mindestens ein Spielstein vom Spielbrett entfernt wurde und der Reset-Taster gedrückt wurde. Anschließend kehrt das Programm in den Zustand 5 zurück und verriegelt die Geheimklappe erneut. Es wird davon ausgegangen, dass die Klappe in der Zwischenzeit manuell vom Anwender geschlossen wurde. Damit beginnt das Rätsel wieder im ersten Zustand.

%*************************************************************** *
%                   Hochschule Hamm-Lippstadt                    *
%*************************************************************** *
% Modul	        :                                              *
%                                                                *
% Datum           : 07.01.2024                                   *
%                                                                *
% Funktion        : Ansteuerung der Motoren einer Geheimbox      *
%                                                                *
% Implementation  : MATLAB 2024b                                 *
%                                                                *
% Req. Toolbox    : -                                            *
%                                                                *
% Author          : Kevin Ernst, Timo Roch                       * 
%                                                                *
% Letzte Änderung : 07.01.2024                                   *
%*****************************************************************
function [Drehwinkel,MotorON] = Steuerung_Pentomino(A0,A1,A2,A3,A4,A5,Taster)
    persistent Init             % Initialiesierungs Variable
    persistent MotorNeutral     % Motor in einer Mittigen Stellung
    persistent MotorVorne       % Motor öffnet Klappe
    persistent MotorVerriegelt  % Motor verriegelt Klappe
    persistent Zustand          % Zustand des Programms
    
    persistent SchwelleHall     % Schaltschwelle der Hallsensoren
    persistent ZeitReturn       % Zeit die der Motor vorne bleibt befor er zurück in Neutral fährt => 10 = 1s
    persistent ZeitReturn_C     % Zählvariable für ZeitReturn
    persistent ZeitMotor        % Zeit die der Motor benötigt um zu fahren
    persistent ZeitMotor_C      % Zählvariable für ZeitMotor

    %Initialiesierung
    if isempty(Init)
        SchwelleHall=650;
        ZeitReturn=1000;
        ZeitReturn_C=ZeitReturn;
        MotorNeutral=150;
        MotorVorne=95;
        MotorVerriegelt=160;
        Zustand=5;
        Init = true;
        ZeitMotor=500;
        ZeitMotor_C=ZeitMotor;
    end

    % Setze Standardwerte für die Ausgaben
    Drehwinkel = MotorVerriegelt; % Standardwert, falls keine Bedingung erfüllt wird
    MotorON = 0;                  % Standardwert: Motor ist aus

    if (Init == true)

        % true=Alle 6 Hallsensoren in dem Durchlauf erkannt
        SechsMalHall = ((A0>=SchwelleHall)&&(A1>=SchwelleHall)&&(A2>=SchwelleHall)&&(A3>=SchwelleHall)&&(A4>=SchwelleHall)&&(A5>=SchwelleHall));

        switch Zustand
            case 0 %"Verriegelt"
                MotorON = 0;
                Drehwinkel = MotorVerriegelt;
                if ((SechsMalHall)&&(Taster==1))
                   Zustand=1; %"Bewegung von Verriegelt zu Vorne";
                end

            case 1 %"Bewegung von Verriegelt zu Vorne"
                MotorON = 1;
                Drehwinkel = MotorVorne;
                if(ZeitMotor_C<=0)
                    Zustand=2; %"Vorne";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end

            case 2 %"Vorne"
                MotorON = 0;
                Drehwinkel = MotorVorne;
                if(ZeitReturn_C<=0)
                    Zustand=3; %"Bewegung von Vorne zu Neutral";
                    ZeitReturn_C=ZeitReturn;
                else
                    ZeitReturn_C=ZeitReturn_C-1;
                end

            case 3 %"Bewegung von Vorne zu Neutral"
                MotorON = 1;
                Drehwinkel = MotorNeutral;
                if(ZeitMotor_C<=0)
                    Zustand=4; %"Neutral";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end

            case 4 %"Neutral"
                MotorON = 0;
                Drehwinkel = MotorNeutral;
                if ((~SechsMalHall)&&(Taster==0))
                   Zustand=5; %"Bewegung von neutral zu Verriegelt";
                end

            case 5 %"Bewegung von neutral zu Verriegelt"
                MotorON = 1;
                Drehwinkel = MotorVerriegelt;
                if(ZeitMotor_C<=0)
                    Zustand=0; %"Verriegelt";
                    ZeitMotor_C=ZeitMotor;
                else
                    ZeitMotor_C=ZeitMotor_C-1;
                end
        end
    end
end
function Taster = Entprellroutine(T)
    % Definition der Variablen
    persistent buttonState;  % Speichert den Zustand des Tasters
    persistent holdState;    % Speichert, ob der Taster gehalten wird
    if isempty(buttonState)
        buttonState = uint8(0);  % Initialisiere mit 0
    end
    if isempty(holdState)
        holdState = false;  % Initialisiere mit false
    end
    Taster=0;

    %Übergabe des Taster Inputs
    currentState = T;  

    % Die vorherigen Zustände in der 8-Bit-Variable speichern
    buttonState = bitshift(buttonState, 1) + uint8(currentState);

    % Steigende Flanke erkennen (Wechsel von 0 auf 1)
    if bitand(buttonState, uint8(3)) == uint8(1)
        Taster=1;
        holdState = true;  % Taster wird als gehalten markiert
    end

    % Fallende Flanke erkennen (Wechsel von 1 auf 0)
    if bitand(buttonState, uint8(3)) == uint8(2)
        Taster=0;
        holdState = false;  % Taster wird nicht mehr gehalten
    end

    % Erkennen, ob der Taster gehalten wird
    if holdState==true
        Taster=1;
    end
end



Komponententest


In den Komponententests werden sämtliche Funktionalitäten des Projekts einzeln geprüft, um sicherzustellen, dass jede Komponente ordnungsgemäß funktioniert. Eine detaillierte Dokumentation der einzelnen Komponententests wird erstellt, die folgende Informationen umfasst:

  • Die jeweilige Komponente
  • Angewandte Testmethoden
  • Erwartete Ergebnisse
  • Gemessene Ergebnisse

Diese strukturierte Aufzeichnung ermöglicht eine umfassende Überprüfung der Funktionalität jeder Komponente und bildet die Grundlage für eine gründliche Qualitätssicherung des gesamten Projekts.

Test
Erster Prototyp

3D-Druck


Erster Prototyp-Druck:
Nach der ersten Konstruktion wurde ein Testdruck der konstruierten Komponenten (Spielbrett und Puzzleteile) durchgeführt. Dabei sind zwei Dinge aufgefallen.

  1. Das Oben und Unten der Puzzleteile muss klar definiert sein, sonst ergeben sich falsche Magnetpositionen.
  2. Die Teile benötigen Griffe um das platzieren und entfernen vom Spielbrett zu erleichtern.

Außerdem wurden die Maßtoleranzen leicht angepasst um den Puzzleteilen auf dem Spielbrett minimal mehr Spiel zu geben.


Zweiter Prototyp-Druck:

Test
Zweiter Prototyp
  1. Die beim ersten Prototypen-Druck erkannten Probleme wurden beseitigt, so das sich die Puzzleteile leicht auf das Spielbrett legen und wieder entfernen lassen.
  2. Zusätzlich wurde der Rand des Spielbretts verbreitert um Platz für Muttern zur Befestigung zu schaffen.
  3. Erhöhung der unteren und oberen Schichtanzahl auf jeweils 4 Schichten damit die Magnete nicht mehr durch den Spielstein zu sehen sind.








Hall-Sensoren


Zur Erprobung der Hall-Sensoren wird ein Ausschnitt des Spielbretts mittels 3D-Druck gefertigt. Diese Testversion ermöglicht die präzise Installation und Verkabelung eines einzelnen Sensors. Nach der Montage dient der Ausschnitt als Testplattform: Ein regulärer Spielstein mit integriertem Magneten wird auf die Oberfläche platziert, um die Erkennungsfähigkeit des Sensors zu überprüfen. Dabei wird insbesondere getestet, ob der Sensor den Magneten zuverlässig durch zwei Schichten des PLA-Druckmaterials detektieren kann. Diese Methode gewährleistet eine realitätsnahe Simulation der späteren Spielbrettbedingungen und ermöglicht eine genaue Beurteilung der Sensorleistung.

Testergebnis-Schwellwerte:

  • Spielstein liegt nicht auf dem Spielbrett : Sensorwert kleiner 650
  • Spielstein liegt auf dem Spielbrett : Sensorwert größer 650

Die gemessenen Werte können aufgrund der Toleranzen des Systems geringfügige Schwankungen aufweisen. Aus diesem Grund wurden keine festen Werte für den Analog-Digital-Wandler definiert. Stattdessen wurden Schwellwerte festgelegt, die in jedem Fall entweder über- oder unterschritten werden.
Der durchgeführte Test demonstriert die zuverlässige Erkennung eines magnetischen Spielsteins durch den Hall-Sensor. Der korrekt platzierte Spielstein erzeugt stabile Messwerte zwischen 750 und 850 Einheiten. Selbst bei Bewegungen innerhalb der Toleranzgrenzen bleiben die Werte deutlich über dem definierten Schwellwert von 650, wobei nur geringfügige Schwankungen durch die Bewegung des Spielsteins zu beobachten sind. Bei Entfernung des Spielsteins fällt der Messwert abrupt unter den Schwellwert von 650. Nach der Wiederauflage steigt der Wert unmittelbar wieder auf das ursprüngliche Niveau an, was eine klare Unterscheidung zwischen An- und Abwesenheit des Spielsteins ermöglicht. Die Messung zeigt eindeutig die technische Eignung des Hall-Sensors zur Spielsteinerkennung. Der deutliche Abstand zwischen den Messwerten und dem Schwellwert gewährleistet eine robuste Erkennung auch bei leichten Positionsschwankungen des Spielsteins.




Reset-Taster


Zur Erprobung des Reset-Tasters wird ein Testaufbau mit dem Mikrocontroller erstellt. Diese Testversion ermöglicht die präzise Installation und Verkabelung eines einzelnen Reset-Tasters. Nach der Montage dient der Aufbau als Testplattform: Der Reset-Taster wird an einen Eingang des Mikrocontrollers angeschlossen, während eine LED zur Signalisierung des Reset-Zustands verwendet wird. Zusätzlich muss bei der Implementierung des Tasters der interne Pullup-Widerstand des Arduino aktiviert werden ().
Der Test umfasst folgende Schritte:

  1. Betätigung des Reset-Tasters für verschiedene Zeitspannen (kurz, mittel, lang).
  2. Überprüfung der Reaktion des Mikrocontrollers auf die Tasterbetätigung.
  3. Beobachtung des Taster-Zustandes zur Verifizierung des Reset-Vorgangs.


Diese Methode gewährleistet eine realitätsnahe Simulation der späteren Einsatzbedingungen und ermöglicht eine genaue Beurteilung der Reset-Taster-Funktion.
Testergebnis:

  • Kurze Betätigung: Kein Reset
  • Mittlere Betätigung: Erfolgreicher Reset des Systems
  • Lange Betätigung: Erfolgreicher Reset des Systems





Motor und Klappe


Zur Erprobung des Servomotors und der Klappe wird der Aufbau mittels 3D-Druck gefertigt. Der Aufbau der Gesamtkonstruktion ermöglicht die präzise Installation und Verkabelung des Servomotors sowie die Montage der Klappe. Nach der Installation dient der Aufbau als Testplattform: Der Servomotor wird an den Mikrocontroller angeschlossen, der die Steuerungssignale sendet.

Der Test umfasst folgende Schritte:

  • Kalibrierung des Servomotors für die korrekte Öffnungs- und Schließposition der Klappe.
  • Durchführung mehrerer Öffnungs- und Schließzyklen zur Überprüfung der Zuverlässigkeit.
  • Überprüfung der Stabilität der Klappe in geöffnetem und geschlossenem Zustand.


Testergebnis: Klappe hält in beiden Endpositionen zuverlässig.

Der Test zeigt, dass der Servomotor die Klappe zuverlässig und präzise öffnet und nach dem schließen verriegelt. Anschließend halten die Magnete in der Klappe diese in Position.

Beim Motor Test ist jedoch aufgefallen, dass der Motor gelegentlich ein unangenehmes Summen von sich gibt. Um dies zu unterbinden wurde dem Aufbau ein NPN-Bipolartransistor hinzugefügt, um den Motor abzuschalten solange er nicht benötigt wird. Der Arduino nutzt Ausgang 2, um den Transistor zu aktivieren, wodurch das PWM-Signal von Ausgang 3 durchgeleitet wird. Diese Schaltung ermöglicht eine Steuerung der Leistungsabgabe, indem der Transistor als Schalter fungiert und das PWM-Signal nur durchlässt wenn es benötigt wird. So wird eine effiziente Kontrolle des angeschlossenen Motors erreicht.



Gesamtaufbau


Nach den Test der Einzelkomponenten wird das Gesamtsystem zusammengesetzt und ein umfassender Systemtest durchgeführt, der sämtliche Funktionen beinhaktet. In diesem Zusammenhang wird die Anforderungsliste erweitert und der die Erfüllung der einzelnen Anforderungen überprüft. Dadurch können sämtliche Funktionalitäten systematisch geprüft und die Ergebnisse objektiv bewertet werden.

Dazu wurde zuerst die Sensoren mit Kabeln für Stromversorgung, Ground und einer Signalleitung verlötet. Anschließend wurden die Sensoren in die unter dem Spielbrett vorgesehenen Vertiefungen geklebt und und mit Heißkleber fixiert. Zusätzlich wurden die Verschiedenen Kabel mit zwei Kabelbindern sortiert anschließend und auf den Arduino gesteckt. Dafür werden die Analogen Eingänge 0-5 des Arduino genutzt. Die Steckreihenfolge ist dabei nicht relevant da lediglich abgefragt wird ob alle Steine (Magnete) im Spielbrett liegen. Für die Spannungsversorgung wird der 5V Output des Arduino verwendet sowie ein Ground Pin.
Im zweiten Schritt erfolgte der Einbau des Servo-Motors in das Gehäuse sowie dessen elektrische Anbindung an den Arduino. Hierbei wurde der Servo-Motor im vorgesehenen Bereich des Gehäuses platziert. Anschließend wurde die elektrische Verbindung hergestellt, wobei Verbindungskabel zum Einsatz kamen, um den Servo-Motor mit dem Arduino zu verbinden. Ein wichtiger Bestandteil dieser Verbindung war der Einsatz eines NPN-Transistors. Dieser Transistor dient als elektronischer Schalter und ermöglicht das Ein- und Ausschalten des Servo-Motors durch den Arduino.

Im nächsten Arbeitsschritt wurde der Reset-Knopf eingebaut und die Stromversorgung installiert. Der Reset-Knopf fand seinen Platz im Gehäuse und wurde zur Sicherung eingeklebt. Eine elektrische Verbindung zwischen dem Knopf und dem digitalen Eingang 4 des Arduino wurde hergestellt. Diese Konfiguration ermöglicht zwei wichtige Funktionen:

  1. Ein- und Ausschalten des gesamten Spiels
  2. Neustart des Spiels nach dem Öffnen und Schließen der Klappe

Die Stromversorgung erfolgt über ein 9V Steckernetzteil, das mit einem Ein- und Ausschalter versehen wurde.

Zur Abschließenden Montage des Projekts wurden folgende Schritte durchgeführt:

  1. Einsetzen der Klappe in das Gehäuse
  2. Montage des Arduino im Gehäuse
  3. Platzierung des Spielbretts
  4. Fixierung des Spielbretts mit vier Schrauben

Diese finale Montage vervollständigt den Aufbau des Spiels und macht es einsatzbereit.


Ergebnis

Umsetzung der Anforderungen

Tabelle 1: Umsetzung der Anforderungen
Nr. Priorisierung Anforderung Getestet Erfüllt
1 Gering Größe: Das Puzzle muss in einen Schuhkarton passen. JA JA
2 Mittel Einfaches Rätsel für Escape-Room-Einsteiger JA JA
3 Hoch Lösungszeit: Etwa 5 Minuten. JA JA
4 Hoch Ausgabe: Vierstelliger Zahlencode bei korrekter Lösung. JA JA
5 Mittel Spielbrett: Integrierte Hall-Sensoren (6 Stück, Typ TLE 4905L), Material: 3D-gedrucktes PLA JA JA
6 Mittel Pentomino-Teile, Anzahl: 6 Stück, Material: 3D-gedrucktes PLA, Eingelassene Magnete mit einzigartiger Positionierung pro Teil JA JA
7 Hoch Mikrocontroller, Typ: Arduino Uno R3 JA JA
8 Hoch Ausgabemechanismus, Servo-Motor: JAMARA 033212 High End Micro Analog JA JA
9 Hoch Die Klappe öffnet sich nur wenn alle Spielsteine richtig liegen JA JA
10 Hoch Nach dem händischen schließen muss der Reset Butten zur Verriegelung der Klappe gedrückt werden JA JA
11 Hoch Stromversorgung: Steckernetzteil 9V für Arduino JA JA
12 Hoch An/Aus-Schalter JA JA
13 Hoch Hauptprogramm: Kontinuierliche Überprüfung der Hall-Sensoren, Steuerung des Servo-Motors zur Codeausgabe JA JA
14 Mittel Initialisierungsroutine: Systemstart JA JA
15 Hoch Das Arduino-System wird über Matlab-Simulink-Funktionen gesteuert JA JA
16 Mittel Das System muss benutzerfreundlich und für Kinder wie Erwachsene geeignet sein JA JA
17 Hoch Tipps und Musterlösung für Spielleiter bereitstellen JA JA
18 Hoch Nur eine Lösungsmöglichkeit des Puzzles JA JA



Funktionstest des Pentomino-Puzzles

Spielstart und Puzzlelösung:

  1. Kippschalter umlegen, um das Pentomino-Puzzle zu aktivieren.
  2. Alle Spielsteine in das Spielbrett einlegen.
  3. Puzzle lösen, bis alle Spielsteine korrekt platziert sind.

Automatische Reaktion bei erfolgreicher Lösung:

  • Sobald alle Spielsteine korrekt im Spielbrett liegen, aktiviert sich der Servo-Motor.
  • Der Motor öffnet die Klappe und fährt anschließend in die mittlere Position zurück.
  • Die Klappe öffnet sich.

Zugang zum Code:

  • Nach dem Öffnen der Klappe wird eine Karte mit einem vierstelligen Code zugänglich.
  • Die Karte kann nun entnommen werden.

Zurücksetzen des Spiels:

  1. Karte mit dem vierstelligen Code wieder einlegen.
  2. Klappe manuell schließen.
  3. Reset-Taster drücken.
  • Nach Betätigung des Reset-Tasters fährt der Motor in die Verriegelungsposition.

Vorbereitung für die nächste Runde:

  • Spielsteine können nun für eine neue Spielrunde eingelegt werden.

Zusammenfassung

Lessons Learned

Strategische Planung

  • Gründliche Planung als Basis für Projekterfolg. Frühzeitige Erkennung von Hindernissen.

Effizientes Ressourcenmanagement

  • Klare Aufgabenteilung und realistisches Zeitmanagement fördern Verantwortlichkeit und Qualität der Arbeit.

Fertigungstoleranzen berücksichtigen

  • Frühzeitige Einbeziehung von Toleranzen, besonders beim 3D-Druck, zur Minimierung von Nacharbeiten.

Kommunikation und Agilität

  • Regelmäßiger Austausch im Team und flexible Anpassung an Änderungen.

Qualitätssicherung

  • Tests und kontinuierliche Überprüfungen zur Gewährleistung der Produktqualität.

Dokumentation

  • Sorgfältige Aufzeichnung von Prozessen und Entscheidungen für zukünftige Projekte und kontinuierliche Verbesserung.

Projektunterlagen

Projektplan

Test
Projektplan Pentomino Puzzle

Der Projektplan zeigt den zeitlichen Ablauf des Projekt von Ende September 2024 bis Mitte Januar 2025. Die Abbildung zeigt ein Gantt-Diagramm, dass die Einzelnen Aufgaben als Balken darstellt. Es sind Start- und Endzeit, der Bearbeitung und der Fortschritt der jeweiligen Aufgabe dargestellt.











Projektdurchführung

Die Projektdurchführung orientiert sich dabei an dem aufgestellten Projektplan. Es wurde darauf geachtet, die terminlichen Vorgaben einzuhalten. Die Durchführung an sich hat, abgesehen von krankheits- und feiertagsbedingten Ausfällen, zwischenzeitlich zu einer Verzögerung von ein Paar 3-4 geführt. Dieser Verzug konnte jedoch durch intensive Arbeitstage ausgeglichen werden.

YouTube Video

Weblinks

  • Dieses ZIP-Archiv enthält alle relevanten CAD- und Programmier-Dateien für das Projekt. Die Dateien können verwendet werden, um die Konstruktionen und Modelle in einer CAD-Software zu öffnen und weiter zu bearbeiten. Bitte stellen Sie sicher, dass Sie über eine geeignete Software verfügen, um die Dateien zu extrahieren und anzuzeigen.

Literatur


→ zurück zur Übersicht: WS 24/25: Escape Game