Sieben-Lampen-Rätsel: Unterschied zwischen den Versionen
Markierung: Manuelle Zurücksetzung |
|||
Zeile 157: | Zeile 157: | ||
== Umsetzung SW== | == Umsetzung SW== | ||
'''Verwendete Toolbox:''' | '''Verwendete Toolbox:''' Simulink Support Package für Arduino Hardware, LiquidCrystal_I2C aus der Arduino IDE | ||
=== Programmablaufplan === | === Programmablaufplan === | ||
Zeile 165: | Zeile 165: | ||
|+ style = "text-align: left"| | |+ style = "text-align: left"| | ||
|- | |- | ||
|[[Datei:Programmablaufplan_7_Lampen_Raetsel.PNG|mini| | |[[Datei:Programmablaufplan_7_Lampen_Raetsel.PNG|mini|500px|Abb. 7: Programmablaufplan]] | ||
|} | |} | ||
In Abbildung 7 ist der Ablauf dargestellt, der für das Projekt implementiert bzw. erstellt werden muss. | In Abbildung 7 ist der Ablauf dargestellt, der für das Projekt implementiert bzw. erstellt werden muss. | ||
=== Simulink === | |||
Das Projekt wird mit der Simulationsfunktion von Matlab: Simulink durchgeführt. Dafür wird die Toolbox "Support Package für Arduino Hardware" benötigt. In der folgenden Abbildung 8 ist das gesamte Modell einmal zusehen. | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Simulink_Modell_7_Lampen_Raetsel.PNG|mini|1000px|Abb. 8: Simulink Modell]] | |||
|} | |||
Dieses Modell mit den Verschiedenen In- und Outputs ist das entwickelte Modell für dieses Projekt. Die einzelnen Bestandteile dieses Modells werden nachfolgend einzeln beschrieben. | |||
==== LCD Display mit I2C-Anschluss ==== | |||
Das LCD Display wurde in Simulink integriert, indem das [https://wiki.hshl.de/wiki/index.php/Erstellen_eigener_Code-Bl%C3%B6cke_f%C3%BCr_den_Hardware-Zugriff_mittels_IO_Device_Builder Tutorial von Professor Göbel] durchgeführt wurde (siehe Video 1). | |||
'''URL:''' https://youtu.be/BXF9x-Tmzhg | |||
{{#ev:youtube|https://youtu.be/BXF9x-Tmzhg | 500| | Video 1: Tutorial Video von Professor Göbel |frame}} | |||
Das Display ist der Block LCD_I2C_DDAppGeneratedBlock mit einem Eingang "Input". Davor ist ein Convert-Block, um den Datentyp "int8" festzulegen.<br> | |||
Damit auf dem Display das richtige Angezeigt wird, bekommt der erstellte Block die Anzahl der im Kreis leuchtenden LEDs übergeben. In der ersten Zeile wird immer ausgegeben wie viele LEDs leuchten (siehe Abbildung 9). In der zweiten Zeile wird der Code ausgegeben, wenn alle sieben Lampen leuchten (siehe Abbildung 10).<br> | |||
Im folgenden wird der C++ Code gezeigt, mit dem der Display Block in Simulink die Logik bekommt, was angezeigt wird. Wie diese Datei erstellt werden kann, wird ebenfalls in Video 1 gezeigt. | |||
<div style="width:1200px; height:1000px; overflow:scroll; border: hidden"> | |||
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | |||
//%*************************************************************** * | |||
//% Hochschule Hamm-Lippstadt * | |||
//%*************************************************************** * | |||
//% Modul : Simulink model of LCD Display with I2C * | |||
//% * | |||
//% Datum : 18.12.2024 * | |||
//% * | |||
//% Funktion : Code for the display block in Simulink with * | |||
//% the rules for when to display what. * | |||
//% * | |||
//% Implementation : MATLAB 2024b * | |||
//% * | |||
//% Req. Toolbox : LiquidCrystal_I2C from Arduino IDE * | |||
//% * | |||
//% Author : Jan van Pels * | |||
//% * | |||
//% Letzte Änderung : 29.12.2024 * | |||
//%**************************************************************** | |||
#include "LCD_I2C.h" | |||
#include <Wire.h> | |||
#include <LiquidCrystal_I2C.h> | |||
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adress 0x27, 16 columns, 2 rows | |||
bool show_code = false; // True if all 7 LEDs are on and the COde is shown | |||
// on Display | |||
// Setup Function for LCD | |||
void setupFunctionLCD_I2C(){ | |||
lcd.init(); | |||
lcd.backlight(); | |||
// Insert initial state | |||
lcd.setCursor(0, 0); // Cursor on row 0, column 0 | |||
lcd.print("LEDs on: /7"); | |||
} | |||
// Function to check what needs to be displayed with the currently | |||
// active number of LEDs. | |||
void stepFunctionLCD_I2C(int8_T Input,int size_vector_a){ | |||
// Insert the number of LEDs that are currently on | |||
lcd.setCursor(9, 0); | |||
lcd.print(Input); | |||
// Are all 7 LEDs on? | |||
if (Input == 7){ | |||
lcd.setCursor(0, 1); // Cursor on row 1, column 0 | |||
lcd.print("Code: 1768"); // Show the Code | |||
show_code = true; | |||
}else if (show_code){ // Only if the Code was shown before | |||
lcd.setCursor(0, 1); // Cursor on row 1, column 0 | |||
lcd.print(" "); // Hide the Code | |||
show_code = false; | |||
} | |||
} | |||
</syntaxhighlight> | |||
</div> | |||
<br clear=all> | |||
</div> | |||
<br clear=all> | |||
==== Taster ==== | |||
== Komponententest == | == Komponententest == |
Version vom 29. Dezember 2024, 18:34 Uhr
Autor: | Jan van Pels, Joe Schröder |
Betreuer: | Prof. Göbel |
Autor: Jan van Pels, Joe Schröder
Einleitung
Das Knobelspiel „Sieben-Lampen-Rätsel“ ist ein einfaches Knobelspiel, in dem das Ziel ist, alle 7 Lampen zum Leuchten zu bringen. In Abbildung 1 ist der Aufbau der Lampen im Kreis zu erkennen. Die Lampen haben außerdem einen zugeordneten Taster. Zusätzlich gibt es einen Taster zum Zurücksetzen des Spiels (alle Lampen ausschalten). Wenn alle 7 Lampen leuchten wird auf dem Display ein Zahlencode angezeigt, um das nächste Escape Game spielen zu können.
Wenn ein Taster einer Lampe gedrückt wird, geht diese Lampe an. Es gehen ebenfalls die Lampen rechts und links neben der gedrückten Lampe an. Wenn eine dieser Lampen leuchten sollte, geht diese Lampe wieder aus.
Anforderungen
ID | Inhalt | Prio | Ersteller | Datum | Geprüft von | Datum |
---|---|---|---|---|---|---|
1 | Die entsprechenden Lampen müssen angehen, wenn ein Taster gedrückt wurde. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
1 | Die Lampen müssen ausgehen, wenn diese leuchtet und ein entsprechender Taster gedrückt wird. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
1 | Die Zahlenkombination muss angezeigt werden, wenn alle Lampen an sind. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
1 | Das Betätigen des Zurücksetzen-Buttons muss alle Lampen ausschalten. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
1 | Das Rätsel soll nach Erklärung innerhalb von 5 Minuten lösbar sein. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
1 | Das System muss zur Aufbewahrung in einen Schuhkarton passen. | 1 | Jan van Pels | 28.09.2024 | Joe Schröder | 30.09.2024 |
Funktionaler Systementwurf/Technischer Systementwurf
Das System ist in Abbildung 1 zu sehen und besteht aus den Komponenten in Tabelle 2. Die sieben Taster und Lampen können alternativ auch in ein Bauteil zusammengeführt werden. Die Taster und Lampen werden über den Arduino ausgelesen und angesteuert. Eine Zahlenkombination, die vorher festgelegt wurde, wird auf dem Display angezeigt, wenn der Arduino erkennt das alle Lampen leuchten. Dafür wird das Signal mit der Zahlenkombination vom Arduino an das Display versendet.
Nr. | Anz. | Beschreibung |
---|---|---|
1 | 1 | Funduino Arduino UNO R3 |
2 | 8 | Taster |
3 | 1 | 16x2 LCD-Display mit I2C-Modul |
4 | 7 | Lampen/LED mit integriertem Vorwiderstand |
Funktionaler Systementwurf
Der funktionale Systementwurf ist in Abbildung 1 dargestellt. Dazu kommt das Display zum Anzeigen der Zahlenkombination. Außerdem ist es möglich das die Lampen und Taster nicht in einem Bauteil wie in Abbildung 1 zusammengefasst sind.
Technischer Systementwurf
Möglicher Schaltplan für einzelne Taster und Lampen:
- Taster 1 bis 8 an den Pins D2 bis D9 angeschlossen und Pull-Down Widerstand mit GND verbunden oder Pull-Up Widerstand des Arduinos aktiviert.
- Lampen 1 bis 7 an den Pins D10 bis D13 sowie A0 bis A2.
- Anoden mit Widerstand und Arduino Pins verbunden (möglicherweise 220 Ohm) oder LEDs mit integriertem Vorwiderstand genutzt.
- Kathoden mit GND verbunden.
- LCD-Display mit I2C an SDA (Pin A4) und SCL (Pin A5) angeschlossen, zusätzlich mit 5V und GND.
Komponentenspezifikation
Stückliste (BOM)
In der folgenden Tabelle befinden sich die benötigten Komponenten, mit beigefügtem Datenblatt, für das 7-Lampen-Rätsel. Der Arduino wurde bei Conrad, das Display bei Reichelt und die Taster mit LED bei Funduino bestellt. Der Gesamteinkaufspreis liegt bei 77,53€.
ID | Anzahl | Kosten pro Stück € | Summe | Bezeichnung / Komponente | Einkaufsseite | Beschreibung | Datenblatt | Abbildung |
---|---|---|---|---|---|---|---|---|
1 | 1x | 22,08€ | 22,08€ + 4,16€ Versand | Arduino Uno Rev 3 smd Breadboard + Kabel | Arduino Uno Rev 3 Einkaufsseite | Der Arduino Uno Rev 3 verfügt über 14 digitale I/O - Schnittstellen. Des weiteren sind 6 analoge Eingänge für die Verarbeitung analoger Signale vorhanden. | Arduino Uno Rev 3 | |
2 | 1x | 5,80€ | 5,80€ + 5,95€ Versand | LCD 16x2 Display | LCD 16x2 Display Einkaufsseite | Das Display hat eine I2c Schnittstelle, mit der das Display am Arduino angeschlossen wird. | Datenblatt LCD 16x2 Display | |
3 | 8x | 4,33€ | 34,64€ + 4,90€ Versand | Drucktaster, Chrom - 5V, LED beleuchtet | Taster mit LED Einkaufsseite | Der Drucktaster mit LED wird mit 5V betrieben und die Farbe der LED ist Blau. |
Umsetzung HW (mechanisch)
Umsetzung HW (elektrisch)
Schaltplan
In dem gezeigten Schaltplan in Abbildung 6 ist die Schaltung der acht Taster und acht LEDs mit dem Arduino dargestellt. Das LCD Display ist über die I2c Schnittstelle angeschlossen.
Verdrahtungsplan
In dem gezeigten Verdrahtungsplan in Abbildung 7 ist die Verdrahtung der acht Taster, acht LEDs und dem Display mit dem Arduino dargestellt. Die Ground Anschlüsse der Taster und LEDs werden auf einer Lochrasterplatte zusammengelötet. Von dieser Platte, die alle Ground-Anschlüsse der Taster und LEDs verbindet, wird über ein Kabel eine Verbindung zum Arduino hergestellt, sodass Ground an allen Tastern und LEDs anliegt.
Anbindung des Tasters
Im Schaltplan ist die Anbindung des Tasters dargestellt. Um im nicht-geschaltetem Zustand ein definiertes Potential zu gewährleisten, muss ein Pullup-Widerstand oder Pulldown-Widerstand verwendet werden. Für unsern Projekt wird der interne Pullup-Widerstand des Arduinos benutzt. Somit muss kein Pullup- oder Pulldown-Widerstand verdrahtet werden.
Vorwiderstände der LEDs
Um den Strom, der durch die LED fließt, zu begrenzen, wird ein Vorwiderstand benötigt. Dieser Vorwiderstand schützt die LED vor Beschädigung durch Überstrom und sorgt dafür, dass der Strom innerhalb der zulässigen Grenzen bleibt. Die verwendete LED, hat nach Anfrage beim Verkäufer, einen bereits integrierten Vorwiderstand. Es muss damit kein weitere Vorwiderstand verdrahtet werden.
Umsetzung SW
Verwendete Toolbox: Simulink Support Package für Arduino Hardware, LiquidCrystal_I2C aus der Arduino IDE
Programmablaufplan
In Abbildung 7 ist der Ablauf dargestellt, der für das Projekt implementiert bzw. erstellt werden muss.
Simulink
Das Projekt wird mit der Simulationsfunktion von Matlab: Simulink durchgeführt. Dafür wird die Toolbox "Support Package für Arduino Hardware" benötigt. In der folgenden Abbildung 8 ist das gesamte Modell einmal zusehen.
Dieses Modell mit den Verschiedenen In- und Outputs ist das entwickelte Modell für dieses Projekt. Die einzelnen Bestandteile dieses Modells werden nachfolgend einzeln beschrieben.
LCD Display mit I2C-Anschluss
Das LCD Display wurde in Simulink integriert, indem das Tutorial von Professor Göbel durchgeführt wurde (siehe Video 1).
URL: https://youtu.be/BXF9x-Tmzhg
Das Display ist der Block LCD_I2C_DDAppGeneratedBlock mit einem Eingang "Input". Davor ist ein Convert-Block, um den Datentyp "int8" festzulegen.
Damit auf dem Display das richtige Angezeigt wird, bekommt der erstellte Block die Anzahl der im Kreis leuchtenden LEDs übergeben. In der ersten Zeile wird immer ausgegeben wie viele LEDs leuchten (siehe Abbildung 9). In der zweiten Zeile wird der Code ausgegeben, wenn alle sieben Lampen leuchten (siehe Abbildung 10).
Im folgenden wird der C++ Code gezeigt, mit dem der Display Block in Simulink die Logik bekommt, was angezeigt wird. Wie diese Datei erstellt werden kann, wird ebenfalls in Video 1 gezeigt.
Taster
Komponententest
ID | Komponente | Prio | Durchgeführter Test | erwartetes Ergebnis | 1.Prüfer | Datum | Ergebnis 1.Prüfung | 2.Prüfer | Datum | Ergebnis 2.Prüfung |
---|---|---|---|---|---|---|---|---|---|---|
1 | Taster | 1 | Taster 2x betätigen | LEDs gehen an und aus | Joe Schröder | 27.11.2024 | Erfolgreich | Jan van Pels | 16.12.2024 | Erfolgreich |
2 | Arduino | 1 | Angeschlossen, hochgefahren, Pins überprüft | Arduino fährt hoch, Pins senden und empfangen gewünschte Signale | Joe Schröder | 27.11.2024 | Erfolgreich | Jan van Pels | 16.12.2024 | Erfolgreich |
3 | Display | 1 | Angeschlossen und diverse Werte/Zeichen ausgeben lassen | Alles wird angezeigt | Joe Schröder | 27.11.2024 | Erfolgreich | Jan van Pels | 16.12.2024 | Erfolgreich |
Ergebnis
Zusammenfassung
Lessons Learned
Projektunterlagen
Projektplan
Der Projektplan zeigt den zeitlichen Ablauf des Projekt von Ende September 2024 bis Januar 2025. In der Ganttproject ist ein Gantt-Diagramm aufgebaut, dass die Einzelnen Aufgaben als Balken darstellt. Es ist Start- und Endzeit, der Bearbeiter und der Fortschritt der jeweiligen Aufgabe dargestellt.
Projektdurchführung
YouTube Video
Weblinks
[1] Beschreibung des Rätsels: Sieben-Lampen
Literatur
→ zurück zur Übersicht: WS 23/24: Angewandte Elektrotechnik (BSE)