Pentomino Puzzle: Unterschied zwischen den Versionen
(209 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
[[Kategorie:ProjekteET MTR BSE | [[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| | [[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| | [[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> | ||
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= | [[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 71: | 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 99: | 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) == | ||
=== | ===Hardware=== | ||
'''Konstruktion''' | '''Konstruktion''' | ||
Zeile 112: | 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 134: | Zeile 186: | ||
<br> | <br> | ||
<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> | <br> | ||
<br> | <br> | ||
<br> | |||
'''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 | |||
<br> | <br> | ||
<br> | <br> | ||
Zeile 168: | Zeile 284: | ||
'''Modellbasierte Programmierung''' | '''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 == | == 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> | |||
[[Datei:Prototyp-Pentomino.jpg| | [[Datei:Prototyp-Pentomino.jpg|200px|mini|alternativtext=Test|Erster Prototyp]] | ||
===3D-Druck=== | |||
<br> | |||
Erster Prototyp-Druck: | Erster Prototyp-Druck: | ||
<br> | |||
Nach der ersten Konstruktion wurde ein Testdruck der konstruierten Komponenten (Spielbrett und Puzzleteile) durchgeführt. Dabei sind zwei Dinge aufgefallen. | 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. | # 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. | # 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. | Außerdem wurden die Maßtoleranzen leicht angepasst um den Puzzleteilen auf dem Spielbrett minimal mehr Spiel zu geben. | ||
<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> | ||
Zeile 193: | Zeile 498: | ||
<br> | <br> | ||
<br> | <br> | ||
===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> | <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. | |||
<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> | |||
<br> | |||
===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> | ||
<br> | <br> | ||
<gallery widths="200" heights="200"> | |||
Einbau_Taster.jpeg | Einbau Taster | |||
Verkablung_Taster.jpeg | Verkabelung Taster | |||
ErsterVersuch_Taster.png | Test einlesen Taster | |||
</gallery> | |||
<br> | <br> | ||
<br> | <br> | ||
===Motor und Klappe=== | |||
<br> | <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. | |||
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> | <br> | ||
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. | |||
<br> | <br> | ||
<br> | <br> | ||
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. | |||
<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: | [[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. | 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. | ||
Zeile 240: | Zeile 717: | ||
=== 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:
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.
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
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:
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
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:
- Start des Druckvorgangs mit den vorbereiteten Einstellungen.
- Pausieren des Drucks in der spezifischen Ebene, in der die Magnete platziert werden sollten.
- Manuelles Einsetzen der Magnete in die vorgesehenen Aussparungen.
- 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.
-
Steckplatine
-
Schaltplan
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
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
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.
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.
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.
- 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.
Zweiter Prototyp-Druck:
- 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.
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.
-
Anschluss Funktionstest
-
Spielbrettaufbau ohne Stein
-
Spielbrettaufbau mit Stein
-
Test Hall-Sensor
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:
- 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.
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
-
Einbau Taster
-
Verkabelung Taster
-
Test einlesen Taster
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.
-
Anschluss Servomotor
-
Servomotor Mittig
-
Servomotor ausgefahren
-
Servomotor öffen der Klappe
-
Test Servomotor
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:
- 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.
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.
-
Verdrahtung Spielbrett Hall-Sensor
-
Einbau Taster
-
Anschluss Servomotor
Ergebnis
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:
- 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:
- 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:
- 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:
- 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
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