Escape Game: Memory-Safe: Das Farbcode-Rätsel: Unterschied zwischen den Versionen
| (55 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 102: | Zeile 102: | ||
|- | |- | ||
| 7 | | 7 | ||
| Danach wir der Tür der Tresor | | Danach wir der Tür der Tresor von dem Infrarotesensor entsichert und das Türverriegelungsmechanismus entriegelt | ||
| Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | ||
| 08.11.2025 | | 08.11.2025 | ||
| Zeile 139: | Zeile 139: | ||
== Funktionaler Systementwurf == | == Funktionaler Systementwurf == | ||
[[Datei: | Der in der '''Abb.1''' dargestellten Verlauf zeigt schrittweise wie das Memory-Safe: Das Farbcode-Rätsel systematisch funktioniert. | ||
Zuerst: das ganzes System befindet sich Außerbetrieb. | |||
Zweiten: Klappt der Spieler/in der Tresortür zu, dann wird das System sofort in Betrieb und der Arm der Servomotor rotiert um 90° um die Tresortür zu riegeln .Gleichzeitig nach dem Türverriegelungsmechanismus aktiviert sich das Sicherheitssystem durch den Infrarotsensor. | |||
Drittens: Dann fängt an (Startpunk) mit einer gleichzeitig blinkenden LED und seiner Tonausgabe :das ist die erste Aufgabe ,um der Weg zur Lösung des Rätsel zu finden . | |||
4.:Betätigt der Spieler/in auf dem richtigen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig den selben vorherigen Ton aus. Hingegen betätigt der Spieler/in auf dem falschen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig einen kurzfristigen (3s) Niederlageton aus und signalisiert somit das Ende des Spiels. | |||
5.:Die Betätigungen auf den richtigen Farbknöpfe in der Reihenfolge eines Spielzyklus wird gleichzeitige mit dem Blinken von allen LEDs und einem Sieg-Ton signalisiert. | |||
6.:Dieser Signal bezeichnet somit das Ende des Spiels bzw. des Schwierigkeitslevel. | |||
7.: Zum Schluss wird der Tür der Tresor von dem Infrarotesensor entsichert und das Türverriegelungsmechanismus entriegelt . | |||
[[Datei:Fonktionaler Systementwurf einer Farbcode Memory-Safe.png|gerahmt|zentriert|'''Abb.1 :''' Funktionaler Systementwurf einer Farbcode Memory-Safe ]] | |||
== Technischer Systementwurf == | == Technischer Systementwurf == | ||
[[Datei:Technischer Systementwurf einer Farbcode Memory-Safe.png|gerahmt|zentriert| '''Abb. | |||
Die folgende '''Abb.2''' darstellt den Aussicht den Verbindungen zwischen Bauteilen und den MiKrocontroller mit der Hilfe des Breadboards (Steckbrett) als Test-Platine.Aber Für die Form des fertigen Rätsels,wird Lochrasterplatine für eine stabile und dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile wie auf den '''Abb.9 ''' zu sehen ist. | |||
[[Datei:Technischer Systementwurf einer Farbcode Memory-Safe.png|gerahmt|zentriert| '''Abb.2 :''' Technischer Systementwurf eines Farbcode Memory-Safe mit Hilfe des Programms fritzing]] | |||
= Materialliste = | = Materialliste = | ||
- Das Mikrocontroller-Board Arduino Uno R3 als zentrale Steuereinheit | - Das Mikrocontroller-Board Arduino Uno R3 als zentrale Steuereinheit | ||
- Der Servomotor als | |||
- Der Servomotor als Tresorverriegelung. | |||
- Der Infrarotsensor als Sicherheit des Systems | - Der Infrarotsensor als Sicherheit des Systems | ||
- Der Buzzer als Meldungsalarm | - Der Buzzer als Meldungsalarm | ||
- Die 5 LEDs(rot, grün, blau, gelb, weiß) als Leuchtmeldung | - Die 5 LEDs(rot, grün, blau, gelb, weiß) als Leuchtmeldung | ||
- Die 5 Taster(rot, grün, blau, gelb, weiß) als Steuerungsmittel | - Die 5 Taster(rot, grün, blau, gelb, weiß) als Steuerungsmittel | ||
- Lochrasterplatine für dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile | |||
- Breadboard Jumper / Überbrückungskabel für Verbindungselemente zwischen Komponenten | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"| Tabelle 2: Materialliste | |+ style = "text-align: left"| '''Tabelle 2: Materialliste''' | ||
|- | |||
!''' Nr.''' !!''' Stückzahl''' !!''' Beschreibung '''!! '''Abbildung ''' | |||
|- | |||
|1 || 1 || Mikrocontroller-Board Arduino Uno R3 ||[[Datei:Mikrocontroller-Board Arduino Uno R3.png|mini|rechts|Abb.3: Mikrocontroller-Board Arduino Uno R3]] | |||
|- | |- | ||
|2 || 1 || Servomotor MS18 180° ||[[Datei:Servomotor MS18 180°.png|mini|rechts|Abb.:4 Servomotor MS18 180°]] | |||
|- | |- | ||
|1 || 1 || | |3 || 1 || INFRAROT Sharp GP2Y0A21YK0F, 10-80cm, Distanzsensor/Abstandsmesser mit Anschlussleitung ||[[Datei:Infrarotsensor.png.png|mini|rechts|Abb.5:Infrarotsensor Sharp GP2Y0A21YK0F ]] | ||
|- | |||
|4 || 1 ||TC-10475816 Piezo-Signalgeber ||[[Datei:TC-10475816 Piezo-Signalgeber.jpg|mini|rechts|Abb. 6: TC-10475816 Piezo-Signalgeber]] | |||
|- | |||
|5 || 5 ||Emittierenden 5mm Leuchtdioden mit der Farben:(rot, grün, blau, gelb, weiß) ||[[Datei:5 Emittierenden 5mm Leuchtdioden.webp|mini|rechts|Abb. 7: 5 Emittierenden 5mm Leuchtdioden]] | |||
|- | |||
|6 || 5 || Taster mit Farbkappen rot, grün, blau, gelb, weiß || | |||
[[Datei:Taster mit Farbkappen rot, grün, blau, gelb, weiß.jpg|mini|rechts|Abb. 8: 5 Taster mit Farbkappen rot, grün, blau, gelb, weiß]] | |||
|- | |||
|7 || 1 || PCB Board Lochplatine bzw. Lochrasterplatte Doppelseitige Leiterplatte 60x80MM||[[Datei:PCB Board Lochrasterplatine bzw. Lochrasterplatte Doppelseitige Leiterplatte 60x80MM.png|mini|rechts|Abb. 9:PCB Board Lochplatine]] | |||
|- | |||
|8 || 20 || Breadboard Jumper und Überbrückungskabel || [[Datei:Breadboard Jumper & Überbrückungskabel.png|mini|rechts|Abb. 10:Breadboard Jumper und Überbrückungskabel]] | |||
|- | |- | ||
|} | |} | ||
| Zeile 164: | Zeile 207: | ||
Für eine weitere Durchführung dieses Projekts ist es wichtig die Spezifikation von Hauptkomponenten zu erwähnen. | Für eine weitere Durchführung dieses Projekts ist es wichtig die Spezifikation von Hauptkomponenten zu erwähnen. | ||
Die sich in der Tabelle 3 befundeten Komponentenspezifikation: | Die sich in der '''Tabelle 3''' befundeten Komponentenspezifikation: | ||
{| class="wikitable" | |||
|+ style = "text-align: left"| '''Tabelle 3: Komponentenspezifikation''' | |||
|- | |||
! '''Komponenten '''!! '''Spezifikationen ''' | |||
|- | |||
| Mikrocontroller Arduino Uno (Rev3) ||dient zur Steuerung aller elektronischen Komponenten (Taster, LEDs, Servo, Sensor etc.).Spannung: 5 V | |||
Eingangsspannung: 7–12 V (empfohlen) Digitale Pins: 14 (davon 6 PWM) Analoge Eingänge: 6 Taktfrequenz: 16 MHz Schnittstellen: USB, UART, SPI, I²C | |||
|- | |||
| Servomotor || Tresorverriegelung (Verriegelung der Safe-Tür) mit der Betriebsspannung: 5 V, dem Drehmoment: ca. 2–3 kg·cm, dem Stellwinkel: 0–180°, der Steuerung: PWM | |||
|- | |||
| IR-Sensor || Entfernung 0–10 cm, 5 V, Türüberwachung (Tresorverriegelung-Status-Erkennung: offen/geschlossen).Versorgung: 5 V, Reichweite: 2–10 cm, Ausgang: Digital (HIGH/LOW) | |||
|- | |||
| Buzzer (aktiv) ||Akustisches Signal (z. B. Warnung oder Alarm).Spannung: 5 V, Stromaufnahme: 30 mA, Frequenz: ~2 kHz und Geräusch-Entwicklung: 85 dB | |||
|- | |||
| LED(rot, grün, blau, gelb, weiß) || Leuchtmeldung bzw. Anzeigeelemente zur Signalisierung von Zuständen (z. B. Status, Fehler, Freigabe etc.).Typ: 5 mm, Betriebsspannung: ca. 2 V (rot, gelb), 3 V (grün, blau, weiß), Strom: 20 mA | |||
|- | |||
| Taster || 12 mm Drucktaster, Schließer, 5 V, Bedienereingabe oder Steuerungsmittel | |||
|- | |||
| Lochrasterplatine||Dient als stabile Trägerplatine für dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile. Material: FR4 Epoxidharz ;Rastermaß: 2,54 mm ;Größe: z. B. 7 × 9 cm oder 10 × 15 cm ;Bohrungsdurchmesser: 1 mm | |||
|- | |||
| Breadboard Jumper / Überbrückungskabel ||Verbindungselemente zwischen Komponenten und Steckpunkten auf der Lochrasterplatine bzw. dem Breadboard oder zum Arduino. Typen: Male–Male, Male–Female, Female–Female ;Längen: 10 – 30 cm ;Leiterquerschnitt: AWG 22–24 | |||
|- | |||
|} | |||
== Umsetzung (SW/HW) == | |||
== Umsetzung der Software == | |||
=== Programmierugsplan: === | |||
Erlärungstext... | |||
- | |||
- | |||
- | |||
[[Datei:Papdesign.png.png|gerahmt|rechts| '''Abb.11 :'''Programmablauf]] | |||
=== Simulink Modell: === | |||
Erläuterungstext... | |||
- | |||
- | |||
- | |||
[[Datei:Gesamtsystem Simulink Modell.png.png|gerahmt|zentriert| '''Abb.12 :'''Gesamtsystem Simulink Modell]] | |||
====Programm_Code==== | |||
Erläuterungstext... | |||
- | |||
- | |||
[[Datei:MATLAB Function.png.png|mini|rechts|'''Abb.13 :''' MATLAB Function]] | |||
<div style="width:1200px; height:400px; overflow:auto; border: 2px solid #088"> | |||
<syntaxhighlight lang="matlab" style="border: none; background-color: #EFF1C1; font-size:small"> | |||
%**************************************************************************************** | |||
% Hochschule Hamm-Lippstadt - Studiengang Mechatronik - WS25-26 * | |||
%**************************************************************************************** | |||
% Modul : Fachpraktikum Mechatronik * | |||
% Datum : 25. September 2025 - 16. Januar 2026 * | |||
% Funktion : Escape Game: Memory-Safe: Das Farbcode-Rätsel * | |||
% Hardware : Matlab Simulink * | |||
% Implementation : Arduino Micro-controller UNO_R3 * | |||
% Device : LEDs,Schalter,Infrarotsensor,Servo_Motor,Buzzer * | |||
% Prüfer : Prof. Dr.-Ing. Krome * | |||
% Authoren : Delmas Ngoumtsa,Christian Teyou & Raoul Yemtsa * | |||
%**************************************************************************************** | |||
function [T,Servo_Motor,IR_Buzzer,Buzzer,rote_LED, gruene_LED,blaue_LED,gelbe_LED,weisse_LED,roter_Taster,gruener_Taster,blauer_Taster,gelber_Taster,weisser_Taster]= fcn(Time, U_Buzzer, U_LED,U_roter_Taster,U_gruener_Taster,U_blauer_Taster,U_gelber_Taster,U_weisser_Taster,U_Infra_Rot_Sensor) | |||
persistent lastTrigger phase_1 phase_2 phase_3 phase_4 phase_5 | |||
if isempty(lastTrigger) | |||
lastTrigger = 0; % Startwert: außerhalb des Intervalls | |||
phase_1 = 0; | |||
phase_2 = 0; | |||
phase_3 = 0; | |||
phase_4 = 0; | |||
phase_5 = 0; | |||
end | |||
% --- Konstante Parameter --- | |||
lockTime = 5; % Sperrzeit: 10 s und abhängig mit zeile 37 | |||
dt = 5; % Zeitschritt für Simulation (1 ms)und abhängig mit zeile 37 | |||
N = round(lockTime / dt); % Anzahl Schritte pro 10 s | |||
rote_LED = 0 ; | |||
gruene_LED= 0; | |||
blaue_LED = 0; | |||
gelbe_LED = 0; | |||
weisse_LED =0; | |||
Buzzer = 0 ; | |||
roter_Taster = U_roter_Taster ; | |||
gruener_Taster = U_gruener_Taster ; | |||
blauer_Taster = U_blauer_Taster; | |||
gelber_Taster = U_gelber_Taster; | |||
weisser_Taster = U_weisser_Taster; | |||
T=Time; | |||
Servo_Motor = U_LED*90; % Tür Schliessen | |||
while U_Infra_Rot_Sensor ~= 2 % Infrarotsensor aktualisieren | |||
if Time >= 9 && Time <= 10 | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
phase_1 = 1; | |||
end | |||
switch phase_1 | |||
case 1 | |||
% if U_gruener_Taster == 1 || U_blauer_Taster == 1 || U_gelber_Taster == 1 || U_weisser_Taster == 1 && Time > 20 && Time <= 28 | |||
%rote_LED = U_LED; | |||
%Buzzer= U_Buzzer; % auf dem Bildschirm " bitte der richtige Taster Drücken" zeigen lassen | |||
%end | |||
for i1 = 1:N | |||
t = Time + (i1-1)*dt; | |||
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei | |||
% von 10 bis 10 hat ma N=round 1 also jede 10 s kann ein round gespiel und abhängig mit Zeile 11 und 12 | |||
if U_roter_Taster == 1 && Time >= 10 && Time <= 20 && (t - lastTrigger) >= lockTime | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
lastTrigger = t; | |||
phase_1 = 2; | |||
else | |||
if (Time >= 21 && Time <= 21.5) | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 23 && Time <= 23.5) | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 25 && Time <= 25.5) | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 27 && Time <= 27.5) | |||
rote_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
end | |||
end | |||
case 2 | |||
if Time > 20 && Time <= 21 | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
phase_2 = 1; | |||
end | |||
end | |||
switch phase_2 | |||
case 1 | |||
for i2 = 1:N | |||
t = Time + (i2-1)*dt; | |||
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei | |||
if U_gruener_Taster == 1 && Time >= 22 && Time <= 32 && (t - lastTrigger) >= lockTime | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
lastTrigger = t; | |||
phase_2 = 2; | |||
else | |||
if (Time >= 33 && Time <= 33.5) | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 35 && Time <= 35.5) | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 37 && Time <= 37.5) | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 39 && Time <= 39.5) | |||
gruene_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
end | |||
end | |||
case 2 | |||
if Time > 32 && Time <= 33 | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
phase_3 = 1; | |||
end | |||
switch phase_3 | |||
case 1 | |||
for i3 = 1:N | |||
t = Time + (i3-1)*dt; | |||
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei | |||
if U_blauer_Taster == 1 && Time >= 34 && Time <= 44 && (t - lastTrigger) >= lockTime | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
lastTrigger = t; | |||
phase_3 = 2; | |||
else | |||
if (Time >= 45 && Time <= 45.5) | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 47 && Time <= 47.5) | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 49 && Time <= 49.5) | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 51 && Time <= 51.5) | |||
blaue_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
end | |||
end | |||
case 2 | |||
if Time > 45 && Time <= 46 | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
phase_4 = 1; | |||
end | |||
end | |||
switch phase_4 | |||
case 1 | |||
for i4 = 1:N | |||
t = Time + (i4-1)*dt; | |||
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei | |||
if U_gelber_Taster == 1 && Time >= 46 && Time <= 56 && (t - lastTrigger) >= lockTime | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
lastTrigger = t; | |||
phase_4 = 2; | |||
else | |||
if (Time >= 57 && Time <= 57.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 59 && Time <= 59.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 61 && Time <= 61.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 63 && Time <= 63.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
end | |||
end | |||
case 2 | |||
if Time > 57 && Time <= 58 | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
phase_5 = 1; | |||
end | |||
end | |||
switch phase_5 | |||
case 1 | |||
for i5 = 1:N | |||
t = Time + (i5-1)*dt; | |||
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei | |||
if U_weisser_Taster == 1 && Time >= 59 && Time <= 69 && (t - lastTrigger) >= lockTime | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
lastTrigger = t; | |||
phase_5 = 2; | |||
else | |||
if (Time >= 70 && Time <= 70.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 72 && Time <= 72.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 74 && Time <= 74.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 76 && Time <= 76.5) | |||
gelbe_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
end | |||
end | |||
case 2 | |||
if (Time >= 70 && Time <= 70.5) | |||
rote_LED = U_LED; | |||
gruene_LED = U_LED; | |||
blaue_LED = U_LED; | |||
gelbe_LED = U_LED; | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 72 && Time <= 72.5) | |||
rote_LED = U_LED; | |||
gruene_LED = U_LED; | |||
blaue_LED = U_LED; | |||
gelbe_LED = U_LED; | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 74 && Time <= 74.5) | |||
rote_LED = U_LED; | |||
gruene_LED = U_LED; | |||
blaue_LED = U_LED; | |||
gelbe_LED = U_LED; | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time >= 76 && Time <= 76.5) | |||
rote_LED = U_LED; | |||
gruene_LED = U_LED; | |||
blaue_LED = U_LED; | |||
gelbe_LED = U_LED; | |||
weisse_LED = U_LED; | |||
Buzzer= U_Buzzer; | |||
end | |||
if (Time > 76.5) | |||
Servo_Motor = U_LED-1; % Tür öffnen | |||
end | |||
end | |||
end | |||
IR_Buzzer = 1; | |||
end | |||
end | |||
</syntaxhighlight> | |||
</pre> | |||
</div> | |||
<br clear = all> | |||
== Umsetzung der Hardware == | |||
Die Abb.14 darstellt die technische Zeichnung ,die schon in Abb.1 erläutert wurde. Dies ist eine CAD-Baugruppe mit einer Gehäusedicke von 5 mm und den folgenden Abmaßen : | |||
- Hauptbaugruppe (20 X 12 X 7 cm) | |||
- Tür (14 X 60 X 0,2 cm) | |||
[[Datei:CAD Baugruppe Zeichnung.png.png|gerahmt|zentriert|'''Abb.14 :''' Zeichnung der CAD-Baugruppe mit goldenen Scharniere]] | |||
== Komponententest == | == Komponententest == | ||
Bild mit breadboard | |||
== Montage == | |||
Bild mit der PCB Board Lochplatine | |||
== Ergebnis == | == Ergebnis == | ||
Aktuelle Version vom 2. Dezember 2025, 15:26 Uhr
| Autoren: | Delmas Ngoumtsa , Christian Teyou, Raoul Yemtsa |
| Betreuer: | Prof. Krome |
Einleitung
Im Rahmen des Fachpraktikums an der Hochschule Hamm-Lippstadt im Studiengang Mechatronik soll jede Gruppe ein mechatronisches Rätsel entwickeln, das innerhalb von ca. fünf Minuten lösbar ist. Die entwickelten Rätsel verbleiben an der HSHL und werden zu einem Escape-Game kombiniert, das von Schülern und Studierenden gespielt werden kann.
Das vorliegende Rätsel trägt den Titel „Memory-Safe: Das Farbcode-Rätsel“. Ziel des Spiels ist es, einen Safe zu öffnen, indem sich der Spieler eine zufällig generierte Farbreihenfolge merkt und diese anschließend in der richtigen Reihenfolge über entsprechende Taster eingibt. Der Safe öffnet sich nur, wenn die eingegebene Farbfolge vollständig korrekt ist. Für dieses Spiel werden fünf verschiedene Farben (rot, grün, blau, gelb und weiß) verwendet, die jeweils einem eigenen Taster zugeordnet sind. Sobald eine LED einer bestimmten Farbe aufleuchtet, gibt ein Buzzer einen kurzen Ton aus. Der Spieler muss daraufhin den passenden Taster betätigen, um die Sequenz korrekt nachzubilden. Der Safe wird mithilfe eines Servomotors verriegelt und durch einen Infrarotsensor überwacht. Sollte ein Spieler versuchen, die Tür des Safes gewaltsam oder ohne die richtige Farbreihenfolge zu öffnen, reagiert das System sofort: die rote LED beginnt zu blinken, und der Buzzer ertönt als Alarm.
• Wird die richtige Reihenfolge eingegeben, leuchten alle fünf LEDs, gibt der Buzzer einen Ton aus, um den Erfolg zu signalisieren. Gleichzeitig desaktiviert sich die Sicherung der Infrarotsensor und der Servo entriegelt den Safe.
• Wird eine falsche Reihenfolge eingegeben, leuchtet die rote LED, gibt der Buzzer einen Ton aus und der Spieler muss einen neuen Versuch starten. Das Spiel kann in verschiedenen Schwierigkeitsstufen gespielt werden, abhängig von der Geschwindigkeit der fünf Farbreihenfolge. Man kann folgenden Farbreihenfolge Situationen haben:
• Leicht: [rot]; [rot, grün]; [rot, grün, blau]; [rot, grün, blau, gelb]; [rot, grün, blau, gelb, weiß] „hier blinkt eine Farbe je Zyklus nur einmal“
• Mittel: [grün]; [rot, rot]; [rot, grün, blau]; [rot, weiß, weiß, gelb]; [rot, grün, grün, gelb, weiß] „hier können Farben je Zyklus zweimal blinken oder gar nicht“
• Schwer: [grün]; [rot, rot-gelb]; [rot-weiß, grün, blau-weiß]; [rot-blau, weiß, weiß, gelb-grün]; [rot-grün, grün, grün-weiß, gelb-rot-weiß, weiß-grün-blau] „hier können zwei bis drei verschiedenen Farben gleichzeitig je Zyklus mehrfach blinken oder gar nicht „
Der Spieler hat pro Runde maximal fünf Minuten Zeit, um die korrekte Kombination zu finden und den Safe zu öffnen. Nach einer Minute, ohne zu tasten, leuchtet die rote LED, gibt der Buzzer einen Ton aus und der Spieler muss einen neuen Versuch starten.
Das Ziel dieses Rätsels ist es, das Kurzzeitgedächtnis, die Reaktionsfähigkeit und die Aufmerksamkeit des Spielers zu trainieren.
• Schwierigkeitslevel: Im leichten Level erscheint pro Zyklus nur eine Farbe, wodurch die Spieler ihre Merkfähigkeit und Aufmerksamkeit trainieren. Das mittlere Level erfordert durch wiederholte oder ausgelassene Farben ein präzises Beobachten und fördert die Mustererkennung sowie die Reaktionsgeschwindigkeit. Im schweren Level treten zwei bis drei Farben gleichzeitig auf, was Multitasking, Gedächtnisleistung und Entscheidungsfähigkeit unter Zeitdruck stärkt. Durch diese abgestuften Anforderungen wird die Konzentrationsfähigkeit der Spieler systematisch gefördert. Gleichzeitig vermittelt das Spiel ein praxisnahes Verständnis für Wahrnehmung, Reaktion und Informationsverarbeitung in mechatronischen Systemen.
• Lernziele: Die Studierenden lernen, Sensoren und Aktoren wie LEDs, Taster, Servomotor und Infrarotsensor gezielt einzusetzen. Durch die Programmierung eines Mikrocontrollers wird das Verständnis für logische Steuerungen und Zustandsmaschinen vertieft. Gleichzeitig trainiert das Spiel das Kurzzeitgedächtnis, die Reaktionsgeschwindigkeit und die Konzentrationsfähigkeit der Spieler. Die Signalauswertung und Fehlersignalisierung vermitteln praxisnah den Aufbau sicherer und robuster Systemarchitekturen.
• Bezug zum MTR Studium: Das Projekt „Memory-Safe“ verknüpft praxisnah die drei Kernbereiche der Mechatronik: Mechanik, Elektronik und Informatik. Im mechanischen Teil wird der Safe konstruiert und über einen Servoantrieb verriegelt und entriegelt. Die elektronische Ebene umfasst die Signalverarbeitung durch Taster, LEDs, Sensoren und Aktoren. Im Bereich der Informatik wird die Steuerungs- und Sicherheitslogik mithilfe eines Mikrocontrollers programmiert. Dadurch lernen die Studierenden, mechanische, elektrische und softwaretechnische Komponenten zu einem funktionalen System zu integrieren. Das Projekt fördert somit systemorientiertes Denken und vermittelt zentrale Kompetenzen der mechatronischen Systementwicklung.
• Woraus besteht das Rätsel?
Das Rätsel besteht aus mehreren mechatronischen Komponenten, die gemeinsam das Spielsystem bilden. Die Eingabeeinheit umfasst fünf Farbtaster, über die der Spieler die Farbreihenfolge eingibt. Zur Anzeige dienen fünf LEDs, die die Sequenz und den Systemstatus visualisieren. Ein Servomotor übernimmt die Verriegelung und Entriegelung des Safes, während ein Infrarotsensor die Türbewegung überwacht. Ein Buzzer gibt akustisches Feedback bei Erfolg, Fehler oder unzulässiger Aktion. Die gesamte Steuerung und Signalverarbeitung erfolgen über einen Arduino-Mikrocontroller, der alle Komponenten koordiniert.
Anforderungen
| Nr. | Inhalt | Ersteller | Erstellungsdatum | Geprüft von | Prüfungsdatum |
|---|---|---|---|---|---|
| 1 | Das Farbcode-Rätsel wird gebaut, sodass man es in 5 min lösen kann . | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.10.2025 | ||
| 2 | Das Rätsel beginnt am Startpunkt mit dem Verschluss des Tresors und die Aktivierung der Sicherheit durch den Infrarotsensor. | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.10.2025 | ||
| 3 | Dann fängt an mit einer gleichzeitig blinkenden LED und seiner Tonausgabe :das ist die erste Aufgabe ,um der Weg zur Lösung des Rätsel zu finden . | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.10.2025 | ||
| 4 | Betätigt der Spieler/in auf dem richtigen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig den selben vorherigen Ton aus. Hingegen betätigt der Spieler/in auf dem falschen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig einen kurzfristigen (3s) Niederlageton aus und signalisiert somit das Ende des Spiels. | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 5 | Die Betätigungen auf den richtigen Farbknöpfe in der Reihenfolge eines Spielzyklus wird gleichzeitige mit dem Blinken von allen LEDs und einem Sieg-Ton signalisiert. | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 6 | und bezeichnet somit das Ende des Spiels bzw. des Schwierigkeitslevel. | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 7 | Danach wir der Tür der Tresor von dem Infrarotesensor entsichert und das Türverriegelungsmechanismus entriegelt | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 8 | Man muss das Rätsel konzipiert ,dass das in einer Schulkarton reinpasst | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 9 | Das Rätselprinzip und Lösungsprinzip muss sowohl für Kinder als auch Erwachsene geeignet sein | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 10 | Die Musterlösung und Tipps müssen von der Herstellergruppe zur Verfügung gestellt werden | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 | ||
| 11 | Die Herstellergruppe muss aufpassen, dass die Lösung des Rätsel sich nicht im Internet befindet sondern in Fachbücher | Delmas Ngoumtsa ; Christian Teyou & Raoul Yemtsa | 08.11.2025 |
Funktionaler Systementwurf
Der in der Abb.1 dargestellten Verlauf zeigt schrittweise wie das Memory-Safe: Das Farbcode-Rätsel systematisch funktioniert.
Zuerst: das ganzes System befindet sich Außerbetrieb.
Zweiten: Klappt der Spieler/in der Tresortür zu, dann wird das System sofort in Betrieb und der Arm der Servomotor rotiert um 90° um die Tresortür zu riegeln .Gleichzeitig nach dem Türverriegelungsmechanismus aktiviert sich das Sicherheitssystem durch den Infrarotsensor.
Drittens: Dann fängt an (Startpunk) mit einer gleichzeitig blinkenden LED und seiner Tonausgabe :das ist die erste Aufgabe ,um der Weg zur Lösung des Rätsel zu finden .
4.:Betätigt der Spieler/in auf dem richtigen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig den selben vorherigen Ton aus. Hingegen betätigt der Spieler/in auf dem falschen Farbknopf der vorherigen geblinkten LED, gibt der Buzzer gleichzeitig einen kurzfristigen (3s) Niederlageton aus und signalisiert somit das Ende des Spiels.
5.:Die Betätigungen auf den richtigen Farbknöpfe in der Reihenfolge eines Spielzyklus wird gleichzeitige mit dem Blinken von allen LEDs und einem Sieg-Ton signalisiert.
6.:Dieser Signal bezeichnet somit das Ende des Spiels bzw. des Schwierigkeitslevel.
7.: Zum Schluss wird der Tür der Tresor von dem Infrarotesensor entsichert und das Türverriegelungsmechanismus entriegelt .

Technischer Systementwurf
Die folgende Abb.2 darstellt den Aussicht den Verbindungen zwischen Bauteilen und den MiKrocontroller mit der Hilfe des Breadboards (Steckbrett) als Test-Platine.Aber Für die Form des fertigen Rätsels,wird Lochrasterplatine für eine stabile und dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile wie auf den Abb.9 zu sehen ist.

Materialliste
- Das Mikrocontroller-Board Arduino Uno R3 als zentrale Steuereinheit
- Der Servomotor als Tresorverriegelung.
- Der Infrarotsensor als Sicherheit des Systems
- Der Buzzer als Meldungsalarm
- Die 5 LEDs(rot, grün, blau, gelb, weiß) als Leuchtmeldung
- Die 5 Taster(rot, grün, blau, gelb, weiß) als Steuerungsmittel
- Lochrasterplatine für dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile
- Breadboard Jumper / Überbrückungskabel für Verbindungselemente zwischen Komponenten
Komponentenspezifikation
Für eine weitere Durchführung dieses Projekts ist es wichtig die Spezifikation von Hauptkomponenten zu erwähnen.
Die sich in der Tabelle 3 befundeten Komponentenspezifikation:
| Komponenten | Spezifikationen |
|---|---|
| Mikrocontroller Arduino Uno (Rev3) | dient zur Steuerung aller elektronischen Komponenten (Taster, LEDs, Servo, Sensor etc.).Spannung: 5 V
Eingangsspannung: 7–12 V (empfohlen) Digitale Pins: 14 (davon 6 PWM) Analoge Eingänge: 6 Taktfrequenz: 16 MHz Schnittstellen: USB, UART, SPI, I²C |
| Servomotor | Tresorverriegelung (Verriegelung der Safe-Tür) mit der Betriebsspannung: 5 V, dem Drehmoment: ca. 2–3 kg·cm, dem Stellwinkel: 0–180°, der Steuerung: PWM |
| IR-Sensor | Entfernung 0–10 cm, 5 V, Türüberwachung (Tresorverriegelung-Status-Erkennung: offen/geschlossen).Versorgung: 5 V, Reichweite: 2–10 cm, Ausgang: Digital (HIGH/LOW) |
| Buzzer (aktiv) | Akustisches Signal (z. B. Warnung oder Alarm).Spannung: 5 V, Stromaufnahme: 30 mA, Frequenz: ~2 kHz und Geräusch-Entwicklung: 85 dB |
| LED(rot, grün, blau, gelb, weiß) | Leuchtmeldung bzw. Anzeigeelemente zur Signalisierung von Zuständen (z. B. Status, Fehler, Freigabe etc.).Typ: 5 mm, Betriebsspannung: ca. 2 V (rot, gelb), 3 V (grün, blau, weiß), Strom: 20 mA |
| Taster | 12 mm Drucktaster, Schließer, 5 V, Bedienereingabe oder Steuerungsmittel |
| Lochrasterplatine | Dient als stabile Trägerplatine für dauerhafte Lötverbindungen und zur mechanischen Befestigung der Bauteile. Material: FR4 Epoxidharz ;Rastermaß: 2,54 mm ;Größe: z. B. 7 × 9 cm oder 10 × 15 cm ;Bohrungsdurchmesser: 1 mm |
| Breadboard Jumper / Überbrückungskabel | Verbindungselemente zwischen Komponenten und Steckpunkten auf der Lochrasterplatine bzw. dem Breadboard oder zum Arduino. Typen: Male–Male, Male–Female, Female–Female ;Längen: 10 – 30 cm ;Leiterquerschnitt: AWG 22–24 |
Umsetzung (SW/HW)
Umsetzung der Software
Programmierugsplan:
Erlärungstext... - - -

Simulink Modell:
Erläuterungstext... - - -

Programm_Code
Erläuterungstext... - -

%****************************************************************************************
% Hochschule Hamm-Lippstadt - Studiengang Mechatronik - WS25-26 *
%****************************************************************************************
% Modul : Fachpraktikum Mechatronik *
% Datum : 25. September 2025 - 16. Januar 2026 *
% Funktion : Escape Game: Memory-Safe: Das Farbcode-Rätsel *
% Hardware : Matlab Simulink *
% Implementation : Arduino Micro-controller UNO_R3 *
% Device : LEDs,Schalter,Infrarotsensor,Servo_Motor,Buzzer *
% Prüfer : Prof. Dr.-Ing. Krome *
% Authoren : Delmas Ngoumtsa,Christian Teyou & Raoul Yemtsa *
%****************************************************************************************
function [T,Servo_Motor,IR_Buzzer,Buzzer,rote_LED, gruene_LED,blaue_LED,gelbe_LED,weisse_LED,roter_Taster,gruener_Taster,blauer_Taster,gelber_Taster,weisser_Taster]= fcn(Time, U_Buzzer, U_LED,U_roter_Taster,U_gruener_Taster,U_blauer_Taster,U_gelber_Taster,U_weisser_Taster,U_Infra_Rot_Sensor)
persistent lastTrigger phase_1 phase_2 phase_3 phase_4 phase_5
if isempty(lastTrigger)
lastTrigger = 0; % Startwert: außerhalb des Intervalls
phase_1 = 0;
phase_2 = 0;
phase_3 = 0;
phase_4 = 0;
phase_5 = 0;
end
% --- Konstante Parameter ---
lockTime = 5; % Sperrzeit: 10 s und abhängig mit zeile 37
dt = 5; % Zeitschritt für Simulation (1 ms)und abhängig mit zeile 37
N = round(lockTime / dt); % Anzahl Schritte pro 10 s
rote_LED = 0 ;
gruene_LED= 0;
blaue_LED = 0;
gelbe_LED = 0;
weisse_LED =0;
Buzzer = 0 ;
roter_Taster = U_roter_Taster ;
gruener_Taster = U_gruener_Taster ;
blauer_Taster = U_blauer_Taster;
gelber_Taster = U_gelber_Taster;
weisser_Taster = U_weisser_Taster;
T=Time;
Servo_Motor = U_LED*90; % Tür Schliessen
while U_Infra_Rot_Sensor ~= 2 % Infrarotsensor aktualisieren
if Time >= 9 && Time <= 10
rote_LED = U_LED;
Buzzer= U_Buzzer;
phase_1 = 1;
end
switch phase_1
case 1
% if U_gruener_Taster == 1 || U_blauer_Taster == 1 || U_gelber_Taster == 1 || U_weisser_Taster == 1 && Time > 20 && Time <= 28
%rote_LED = U_LED;
%Buzzer= U_Buzzer; % auf dem Bildschirm " bitte der richtige Taster Drücken" zeigen lassen
%end
for i1 = 1:N
t = Time + (i1-1)*dt;
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei
% von 10 bis 10 hat ma N=round 1 also jede 10 s kann ein round gespiel und abhängig mit Zeile 11 und 12
if U_roter_Taster == 1 && Time >= 10 && Time <= 20 && (t - lastTrigger) >= lockTime
rote_LED = U_LED;
Buzzer= U_Buzzer;
lastTrigger = t;
phase_1 = 2;
else
if (Time >= 21 && Time <= 21.5)
rote_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 23 && Time <= 23.5)
rote_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 25 && Time <= 25.5)
rote_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 27 && Time <= 27.5)
rote_LED = U_LED;
Buzzer= U_Buzzer;
end
end
end
case 2
if Time > 20 && Time <= 21
gruene_LED = U_LED;
Buzzer= U_Buzzer;
phase_2 = 1;
end
end
switch phase_2
case 1
for i2 = 1:N
t = Time + (i2-1)*dt;
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei
if U_gruener_Taster == 1 && Time >= 22 && Time <= 32 && (t - lastTrigger) >= lockTime
gruene_LED = U_LED;
Buzzer= U_Buzzer;
lastTrigger = t;
phase_2 = 2;
else
if (Time >= 33 && Time <= 33.5)
gruene_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 35 && Time <= 35.5)
gruene_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 37 && Time <= 37.5)
gruene_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 39 && Time <= 39.5)
gruene_LED = U_LED;
Buzzer= U_Buzzer;
end
end
end
case 2
if Time > 32 && Time <= 33
blaue_LED = U_LED;
Buzzer= U_Buzzer;
phase_3 = 1;
end
switch phase_3
case 1
for i3 = 1:N
t = Time + (i3-1)*dt;
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei
if U_blauer_Taster == 1 && Time >= 34 && Time <= 44 && (t - lastTrigger) >= lockTime
blaue_LED = U_LED;
Buzzer= U_Buzzer;
lastTrigger = t;
phase_3 = 2;
else
if (Time >= 45 && Time <= 45.5)
blaue_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 47 && Time <= 47.5)
blaue_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 49 && Time <= 49.5)
blaue_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 51 && Time <= 51.5)
blaue_LED = U_LED;
Buzzer= U_Buzzer;
end
end
end
case 2
if Time > 45 && Time <= 46
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
phase_4 = 1;
end
end
switch phase_4
case 1
for i4 = 1:N
t = Time + (i4-1)*dt;
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei
if U_gelber_Taster == 1 && Time >= 46 && Time <= 56 && (t - lastTrigger) >= lockTime
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
lastTrigger = t;
phase_4 = 2;
else
if (Time >= 57 && Time <= 57.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 59 && Time <= 59.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 61 && Time <= 61.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 63 && Time <= 63.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
end
end
case 2
if Time > 57 && Time <= 58
weisse_LED = U_LED;
Buzzer= U_Buzzer;
phase_5 = 1;
end
end
switch phase_5
case 1
for i5 = 1:N
t = Time + (i5-1)*dt;
% Bedingung: Taster gedrückt + 10s seit letztem Trigger vorbei
if U_weisser_Taster == 1 && Time >= 59 && Time <= 69 && (t - lastTrigger) >= lockTime
weisse_LED = U_LED;
Buzzer= U_Buzzer;
lastTrigger = t;
phase_5 = 2;
else
if (Time >= 70 && Time <= 70.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 72 && Time <= 72.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 74 && Time <= 74.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 76 && Time <= 76.5)
gelbe_LED = U_LED;
Buzzer= U_Buzzer;
end
end
end
case 2
if (Time >= 70 && Time <= 70.5)
rote_LED = U_LED;
gruene_LED = U_LED;
blaue_LED = U_LED;
gelbe_LED = U_LED;
weisse_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 72 && Time <= 72.5)
rote_LED = U_LED;
gruene_LED = U_LED;
blaue_LED = U_LED;
gelbe_LED = U_LED;
weisse_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 74 && Time <= 74.5)
rote_LED = U_LED;
gruene_LED = U_LED;
blaue_LED = U_LED;
gelbe_LED = U_LED;
weisse_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time >= 76 && Time <= 76.5)
rote_LED = U_LED;
gruene_LED = U_LED;
blaue_LED = U_LED;
gelbe_LED = U_LED;
weisse_LED = U_LED;
Buzzer= U_Buzzer;
end
if (Time > 76.5)
Servo_Motor = U_LED-1; % Tür öffnen
end
end
end
IR_Buzzer = 1;
end
end
Umsetzung der Hardware
Die Abb.14 darstellt die technische Zeichnung ,die schon in Abb.1 erläutert wurde. Dies ist eine CAD-Baugruppe mit einer Gehäusedicke von 5 mm und den folgenden Abmaßen :
- Hauptbaugruppe (20 X 12 X 7 cm)
- Tür (14 X 60 X 0,2 cm)

Komponententest
Bild mit breadboard
Montage
Bild mit der PCB Board Lochplatine







