Sieben-Lampen-Rätsel: Unterschied zwischen den Versionen
(37 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 52: | Zeile 52: | ||
|4 || 7 || Lampen/LED mit integriertem Vorwiderstand | |4 || 7 || Lampen/LED mit integriertem Vorwiderstand | ||
|- | |- | ||
|} | |} | ||
=== Funktionaler Systementwurf === | === Funktionaler Systementwurf === | ||
Zeile 73: | Zeile 72: | ||
<br> | <br> | ||
<br><br><br><br><br> | <br><br><br><br><br> | ||
== Komponentenspezifikation == | == Komponentenspezifikation == | ||
===Stückliste (BOM)=== | ===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€. | |||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 125: | Zeile 123: | ||
|- | |- | ||
|} | |} | ||
== Umsetzung HW (mechanisch)== | == Umsetzung HW (mechanisch)== | ||
Zeile 139: | Zeile 138: | ||
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. | 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. | ||
=== Anbindung | === Verdrahtungsplan === | ||
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. | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Verdrahtungsplan_7_Lampen_Raetsel.pdf|mini|338px|Abb. 7: 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 der Taster und der LEDs === | |||
Im Schaltplan ist die Anbindung des Tasters und der LED (Bauteil in Abbildung 8) dargestellt. Der Taster kann als Öffner und als Schließer angeschlossen werden. Für unser Projekt wird der Taster als Schließer angeschlossen. Dadurch werden die Anschlüsse C und NO (steht für Normally Open), die auch in Abbildung 8 zu sehen sind, benutzt. Wenn der Taster als Öffner angeschlossen werden sollte, müsste statt NO, NC (Normally Closed) angeschlossen werden. <br> | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Taster_LED_Anschlüsse_7_Lampen_Raetsel.jpg|mini|338px|Abb. 8: Taster und LED Anschlüsse]] | |||
|} | |||
Über die Anschlüsse des Tasters in Abbildung 8 kann der mitgelieferten Aufsatz (zu sehen in hellblau) gesetzt werden, wo die Anschlüsse direkt mit Kabeln verbunden werden. Die Kabel sind in Abbildung 9 zu erkennen. Das rote und schwarze Kabel gehören zur LED, wobei Pin 1 das rote und Pin 2 das schwarze Kabel ist. Das grüne, gelbe und weiße Kabel gehören zu den drei Anschlüssen des Tasters, dabei ist Pin C an das grüne, Pin NO an das gelbe und NC an das weiße Kabel angeschlossen. | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Taster_LED_Kabel_7_Lampen_Raetsel.jpg|mini|338px|Abb. 9: Verkabelung des Projekts]] | |||
|} | |||
=== Pullup-Widerstand des Tasters === | |||
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 === | === Vorwiderstände der LEDs === | ||
Die LED ist über die Anschlüsse 1 und 2 am Bauteil in Abbildung 8 anzuschließen. <br> | |||
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. | 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. | ||
=== Verdrahtung des Projekts === | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Projekt_Verkabelung_7_Lampen_Raetsel.jpg|mini|338px|Abb. 10: Verdrahtung des Projekts]] | |||
|} | |||
In Abbildung 10 ist die Verdrahtung des Arduinos mit dem Display und den acht Tastern/LEDs dargestellt. Die Verdrahtung ist nach Vorgabe des Verdrahtungsplans in Abbildung 7 durchgeführt worden. Nachfolgend ein paar Hinweise zur Verdrahtung der Taster und der LEDs.<br> | |||
Auf den Aufsetzungen der Taster/LEDs ist die Nummer der Taster und der LED geschrieben. Ein Beispiel ist T/L 1 für Taster 1 und LED 1. | |||
Die Kabel, die an die Anschlüsse des Bauteils (Taster/LED) angeschlossen sind (Erklärung im Abschnitt [[#anbindung_der_taster_und_der_leds|Anbindung der Taster und der LEDs]]) und direkt an den Arduino angeschlossen werden müssen (rotes und gelbes Kabel), wurden an ein Jumper Kabel mit männlichem Stecker gelötet. Die grünen und schwarzen Kabel, die an Ground angeschlossen werden müssen, wurden auf eine Lochrasterplatte, die in Abbildung 10 in der Mitte zu erkennen ist, gelötet. Die Kabel auf der Platte sind alle miteinander verbunden. Auf dieser Platte wurde zusätzlich ein Jumper Kabel mit männlichem Stecker gelötet, welcher an einem Ground Stecker des Arduinos angeschlossen wird. | |||
== Umsetzung SW== | == Umsetzung SW== | ||
'''Verwendete Toolbox:''' | '''Verwendete Toolbox:''' Simulink Support Package für Arduino Hardware, LiquidCrystal_I2C aus der Arduino IDE | ||
=== Programmablaufplan === | === Programmablaufplan === | ||
Zeile 155: | Zeile 201: | ||
|+ style = "text-align: left"| | |+ style = "text-align: left"| | ||
|- | |- | ||
|[[Datei:Programmablaufplan_7_Lampen_Raetsel.PNG|mini| | |[[Datei:Programmablaufplan_7_Lampen_Raetsel.PNG|mini|500px|Abb. 11: Programmablaufplan]] | ||
|} | |||
In Abbildung 11 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 12 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|1010px|Abb. 12: 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}} | |||
<br> | |||
Das Display ist der Block LCD_I2C_DDAppGeneratedBlock mit einem Eingang "Input". Davor ist ein Convert Block, um den Datentyp "int8" festzulegen (zu sehen in Abbildung 12). In den Convert Block geht der Ausgang Out8 aus dem Stateflow Diagramm. Dort liegt die Anzahl der aktiven LEDs an.<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. In der zweiten Zeile wird der Code ausgegeben, wenn alle sieben Lampen leuchten.<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> | |||
==== Taster ==== | |||
Die Taster sind durch die acht Digital Input Blöcke umgesetzt. Diese Blöcke benötigen den jeweiligen Pin, an dem der Taster am Arduino angeschlossen ist. Darüber hinaus wird der Modus des Pins, wie im Abschnitt Umsetzung HW (elektrisch) beschrieben, auf "Input Pullup" gesetzt. Um das Signal eines gedrückten Tasters zu bekommen, wird an den Digital Input Block ein Detect Decrease Block angeschlossen. Dieser bekommt den Initialen Zustand von eins. Durch den Input Pullup liegt am Eingang des Detect Decrease Block eins an, wenn der Taster nicht gedrückt ist. Wenn der Taster gedrückt wird, erkennt der Block den Tastendruck indem am Eingang eine null anliegt. Wenn eine null anliegt, sendet der Detect Decrease Block eine eins weiter, was für die nachfolgende Logik bedeutet, dass der Taster gedrückt wurde. Die Signale aus den Detect Decrease Blöcken werden an das Stateflow Diagramm weiter geleitet. | |||
==== Stateflow Diagramm ==== | |||
Das Stateflow Diagramm ist dafür da, dass aus den Eingaben, hier das Drücken der Taster, die dazugehörigen Ausgaben ausgeben werden, hier die LEDs und das Display. | |||
Die acht Eingänge des Stateflow Diagramms sind die acht Taster die unter dem Bereich "Taster" beschrieben sind und eine eins angelegt haben, wenn der Taster gedrückt wurde. Die acht Ausgänge sind für die LEDs da. Wenn eine eins an den ersten sieben Ausgängen anliegt, heißt das, dass diese LED an sein soll. Am achten Ausgang liegt an, wie viele LEDs der anderen sieben an sind. Das bedeutet, dass wenn von den sieben LEDs, die im Kreis montiert sind, fünf an sind, wird an Ausgang acht eine fünf angegeben. Wie die LEDs funktionieren wird im nächsten Kapitel "LEDs" beschrieben. | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" | | |||
! style="font-weight: bold;" | | |||
|+ style = "text-align: left"| | |||
|- | |||
|[[Datei:Stateflow_Diagramm_7_Lampen_Raetsel.PNG|mini|1000px|Abb. 13: Stateflow Diagramm]] | |||
|} | |} | ||
In Abbildung | |||
In Abbildung 13 sind die Zustände des Stateflow Diagramms zu sehen. Der Zustand "Start" ist der erste Zustand. Der setzt alle Ausgänge erstmal auf null. Somit sind alle LEDs inaktiv. Von dort wird direkt in den Zustand "Wait_for_Button_Press". In diesem Zustand wird jedes Mal berechnet wie viele LEDs aktiv sind. Dies wird in Out8 gespeichert. In diesem Zustand wird gewartet bis einer der Taster gedrückt wird.We nn einer der sieben Taster gedrückt wird und über die Eingänge "In1" bis "In7" eine eins im Diagramm ankommt wird in den jeweiligen Zustand "Toggle_Button_1" bis "Toggle_Button_7" gewechselt. In diesem Zustand wird der Zustand der dazugehörigen LED sowie der beiden Nachbarn gewechselt. Dafür wird von eins der jeweilige aktuelle Wert am Ausgang abgezogen und wieder dem Ausgang zugewiesen. Wenn am Ausgang eine eins anliegt und die LED aktiv ist liegt danach eine null an und die LED ist inaktiv. Bei einer anliegenden null am Ausgang, liegt danach eine eins an. Nachdem der Zustand aller drei LEDs gewechselt wurde, wird wieder in den Zustand "Wait_for_Button_Press" gewechselt. | |||
Wenn der Reset-Taster betätigt wird (IN8 wird 1), wird in den Zustand "Start" gewechselt und alle LEDs wieder inaktiv. | |||
==== LEDs ==== | |||
Für die LEDs sind in Simulink Digital Output Blöcke. Diese Blöcke bekommen den Pin, an dem die LED angeschlossen ist zugeordnet. Dieser Digital Output Block hat einen Eingang. Wenn an diesem Eingang eine null anliegt, ist die LED inaktiv. Wenn eine eins anliegt, ist die LED aktiv. <br> | |||
Aus dem beschriebenen Stateflow Diagramm, werden Nullen oder Einsen für die sieben im Kreis angeordneten LEDs ausgegeben. Diese Werte sollen an den Digital Output Block weitergegeben werden, solange nicht alle sieben LEDs aktiv sind. Wenn alle sieben LEDs aktiv sind und somit der Ausgang OUT8 des Stateflow Diagramms sieben ist, sollen alle sieben LEDs, sowie die LED des Reset Tasters, gleichmäßig Blinken. Das signalisiert, dass das Rätsel gelöst wurde. Umgesetzt wird das Blinken, indem ein Puls Generator ein Signal erstellt das gleichmäßig den Wert zwischen null und eins verändert. Wenn alle sieben LEDs leuchten, schaltet ein Switch das Signal von jedem Digital Output Block vom Ausgang des Stateflow Diagramms auf das Signal vom Puls Generator um. Wenn, während die LEDs blinken, einer der sieben im Kreis angeordneten Taster betätigt wird, hören die LEDs aufzublinken. Alle LEDs, bis auf die LED und die beiden Nachbarn des betätigten Tasters, leuchten wieder durchgehend. | |||
== Komponententest == | == Komponententest == | ||
Um sicher zu stellen, dass die Bauteile auch funktionieren bevor sie eingebaut werden, werden Tests gemacht. Diese werden von 2 Prüfern durchgeführt. Die Tests sind in Tabelle 4 zusammen mit den Ergebnissen aufgeführt. | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ style = "text-align: left"|Tabelle 4: Komponententest | |+ style = "text-align: left"|Tabelle 4: Komponententest | ||
Zeile 165: | Zeile 320: | ||
! ID !! Komponente !! Prio!! Durchgeführter Test !! erwartetes Ergebnis !! 1.Prüfer !! Datum !! Ergebnis 1.Prüfung!! 2.Prüfer !! Datum !! Ergebnis 2.Prüfung | ! 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 || || Jan van Pels || || | | 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 || || Jan van Pels || || | | 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 || || Jan van Pels || || | | 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 | ||
|} | |} | ||
Aktuelle Version vom 30. Dezember 2024, 21:07 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 der Taster und der LEDs
Im Schaltplan ist die Anbindung des Tasters und der LED (Bauteil in Abbildung 8) dargestellt. Der Taster kann als Öffner und als Schließer angeschlossen werden. Für unser Projekt wird der Taster als Schließer angeschlossen. Dadurch werden die Anschlüsse C und NO (steht für Normally Open), die auch in Abbildung 8 zu sehen sind, benutzt. Wenn der Taster als Öffner angeschlossen werden sollte, müsste statt NO, NC (Normally Closed) angeschlossen werden.
Über die Anschlüsse des Tasters in Abbildung 8 kann der mitgelieferten Aufsatz (zu sehen in hellblau) gesetzt werden, wo die Anschlüsse direkt mit Kabeln verbunden werden. Die Kabel sind in Abbildung 9 zu erkennen. Das rote und schwarze Kabel gehören zur LED, wobei Pin 1 das rote und Pin 2 das schwarze Kabel ist. Das grüne, gelbe und weiße Kabel gehören zu den drei Anschlüssen des Tasters, dabei ist Pin C an das grüne, Pin NO an das gelbe und NC an das weiße Kabel angeschlossen.
Pullup-Widerstand des Tasters
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
Die LED ist über die Anschlüsse 1 und 2 am Bauteil in Abbildung 8 anzuschließen.
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.
Verdrahtung des Projekts
In Abbildung 10 ist die Verdrahtung des Arduinos mit dem Display und den acht Tastern/LEDs dargestellt. Die Verdrahtung ist nach Vorgabe des Verdrahtungsplans in Abbildung 7 durchgeführt worden. Nachfolgend ein paar Hinweise zur Verdrahtung der Taster und der LEDs.
Auf den Aufsetzungen der Taster/LEDs ist die Nummer der Taster und der LED geschrieben. Ein Beispiel ist T/L 1 für Taster 1 und LED 1.
Die Kabel, die an die Anschlüsse des Bauteils (Taster/LED) angeschlossen sind (Erklärung im Abschnitt Anbindung der Taster und der LEDs) und direkt an den Arduino angeschlossen werden müssen (rotes und gelbes Kabel), wurden an ein Jumper Kabel mit männlichem Stecker gelötet. Die grünen und schwarzen Kabel, die an Ground angeschlossen werden müssen, wurden auf eine Lochrasterplatte, die in Abbildung 10 in der Mitte zu erkennen ist, gelötet. Die Kabel auf der Platte sind alle miteinander verbunden. Auf dieser Platte wurde zusätzlich ein Jumper Kabel mit männlichem Stecker gelötet, welcher an einem Ground Stecker des Arduinos angeschlossen wird.
Umsetzung SW
Verwendete Toolbox: Simulink Support Package für Arduino Hardware, LiquidCrystal_I2C aus der Arduino IDE
Programmablaufplan
In Abbildung 11 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 12 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 (zu sehen in Abbildung 12). In den Convert Block geht der Ausgang Out8 aus dem Stateflow Diagramm. Dort liegt die Anzahl der aktiven LEDs an.
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. In der zweiten Zeile wird der Code ausgegeben, wenn alle sieben Lampen leuchten.
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
Die Taster sind durch die acht Digital Input Blöcke umgesetzt. Diese Blöcke benötigen den jeweiligen Pin, an dem der Taster am Arduino angeschlossen ist. Darüber hinaus wird der Modus des Pins, wie im Abschnitt Umsetzung HW (elektrisch) beschrieben, auf "Input Pullup" gesetzt. Um das Signal eines gedrückten Tasters zu bekommen, wird an den Digital Input Block ein Detect Decrease Block angeschlossen. Dieser bekommt den Initialen Zustand von eins. Durch den Input Pullup liegt am Eingang des Detect Decrease Block eins an, wenn der Taster nicht gedrückt ist. Wenn der Taster gedrückt wird, erkennt der Block den Tastendruck indem am Eingang eine null anliegt. Wenn eine null anliegt, sendet der Detect Decrease Block eine eins weiter, was für die nachfolgende Logik bedeutet, dass der Taster gedrückt wurde. Die Signale aus den Detect Decrease Blöcken werden an das Stateflow Diagramm weiter geleitet.
Stateflow Diagramm
Das Stateflow Diagramm ist dafür da, dass aus den Eingaben, hier das Drücken der Taster, die dazugehörigen Ausgaben ausgeben werden, hier die LEDs und das Display. Die acht Eingänge des Stateflow Diagramms sind die acht Taster die unter dem Bereich "Taster" beschrieben sind und eine eins angelegt haben, wenn der Taster gedrückt wurde. Die acht Ausgänge sind für die LEDs da. Wenn eine eins an den ersten sieben Ausgängen anliegt, heißt das, dass diese LED an sein soll. Am achten Ausgang liegt an, wie viele LEDs der anderen sieben an sind. Das bedeutet, dass wenn von den sieben LEDs, die im Kreis montiert sind, fünf an sind, wird an Ausgang acht eine fünf angegeben. Wie die LEDs funktionieren wird im nächsten Kapitel "LEDs" beschrieben.
In Abbildung 13 sind die Zustände des Stateflow Diagramms zu sehen. Der Zustand "Start" ist der erste Zustand. Der setzt alle Ausgänge erstmal auf null. Somit sind alle LEDs inaktiv. Von dort wird direkt in den Zustand "Wait_for_Button_Press". In diesem Zustand wird jedes Mal berechnet wie viele LEDs aktiv sind. Dies wird in Out8 gespeichert. In diesem Zustand wird gewartet bis einer der Taster gedrückt wird.We nn einer der sieben Taster gedrückt wird und über die Eingänge "In1" bis "In7" eine eins im Diagramm ankommt wird in den jeweiligen Zustand "Toggle_Button_1" bis "Toggle_Button_7" gewechselt. In diesem Zustand wird der Zustand der dazugehörigen LED sowie der beiden Nachbarn gewechselt. Dafür wird von eins der jeweilige aktuelle Wert am Ausgang abgezogen und wieder dem Ausgang zugewiesen. Wenn am Ausgang eine eins anliegt und die LED aktiv ist liegt danach eine null an und die LED ist inaktiv. Bei einer anliegenden null am Ausgang, liegt danach eine eins an. Nachdem der Zustand aller drei LEDs gewechselt wurde, wird wieder in den Zustand "Wait_for_Button_Press" gewechselt. Wenn der Reset-Taster betätigt wird (IN8 wird 1), wird in den Zustand "Start" gewechselt und alle LEDs wieder inaktiv.
LEDs
Für die LEDs sind in Simulink Digital Output Blöcke. Diese Blöcke bekommen den Pin, an dem die LED angeschlossen ist zugeordnet. Dieser Digital Output Block hat einen Eingang. Wenn an diesem Eingang eine null anliegt, ist die LED inaktiv. Wenn eine eins anliegt, ist die LED aktiv.
Aus dem beschriebenen Stateflow Diagramm, werden Nullen oder Einsen für die sieben im Kreis angeordneten LEDs ausgegeben. Diese Werte sollen an den Digital Output Block weitergegeben werden, solange nicht alle sieben LEDs aktiv sind. Wenn alle sieben LEDs aktiv sind und somit der Ausgang OUT8 des Stateflow Diagramms sieben ist, sollen alle sieben LEDs, sowie die LED des Reset Tasters, gleichmäßig Blinken. Das signalisiert, dass das Rätsel gelöst wurde. Umgesetzt wird das Blinken, indem ein Puls Generator ein Signal erstellt das gleichmäßig den Wert zwischen null und eins verändert. Wenn alle sieben LEDs leuchten, schaltet ein Switch das Signal von jedem Digital Output Block vom Ausgang des Stateflow Diagramms auf das Signal vom Puls Generator um. Wenn, während die LEDs blinken, einer der sieben im Kreis angeordneten Taster betätigt wird, hören die LEDs aufzublinken. Alle LEDs, bis auf die LED und die beiden Nachbarn des betätigten Tasters, leuchten wieder durchgehend.
Komponententest
Um sicher zu stellen, dass die Bauteile auch funktionieren bevor sie eingebaut werden, werden Tests gemacht. Diese werden von 2 Prüfern durchgeführt. Die Tests sind in Tabelle 4 zusammen mit den Ergebnissen aufgeführt.
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)