Arduino Projekt: Türsicherheitssystem: Unterschied zwischen den Versionen
Zeile 362: | Zeile 362: | ||
const byte ROWS = 4; //4 Zeilen | const byte ROWS = 4; //4 Zeilen | ||
byte | byte colPins[COLS] = {2,3,4,5}; //Definition der Pins für die 3 Spalten | ||
byte | byte rowPins[ROWS] = {6,7,8,9}; //Definition der Pins für die 4 Zeilen | ||
/* Ziffern und Zeichen des Keypads festlegen */ | /* Ziffern und Zeichen des Keypads festlegen */ | ||
char | char hexaKeys[ROWS][COLS]={ | ||
{'D','#','0','*'}, | {'D','#','0','*'}, | ||
{'C','9','8','7'}, | {'C','9','8','7'}, | ||
Zeile 372: | Zeile 372: | ||
{'A','3','2','1'} | {'A','3','2','1'} | ||
}; | }; | ||
Keypad Tastenfeld = Keypad(makeKeymap( | Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann ab sofort mit "Tastenfeld" angesprochen werden | ||
/* Variablen */ | /* Variablen */ | ||
char | char p1='1';char p2='2';char p3='3';char p4='A'; // Vier Zeichen des Passwortes eingegeben | ||
char | char taste; //Taste ist die Variable für die jeweils gedrückte Taste auf dem Tastenfeld | ||
char | char c1, c2, c3, c4; // Speichern der gedrückten Tasten | ||
byte z1=0, z2, z3, z4; // | byte z1=0, z2, z3, z4; // Falsche Position zuordnen wird verhindert | ||
/* Motor */ | /* Motor */ | ||
Servo | Servo servoBlau; //Servomotor Definition | ||
/* Buzzer */ | /* Buzzer */ | ||
const byte SOUND_BUZZER = 10; // Buzzer ist an Pin 10 angeschlossen | const byte SOUND_BUZZER = 10; // Buzzer ist an Pin 10 angeschlossen | ||
unsigned int | unsigned int sound = 500; // Frequenz von 500 Hertz | ||
byte | byte falscheEingabe; // Für eine falsche Eingabe | ||
/* RGB */ | /* RGB */ | ||
byte ROTE_LED = 12; //Rote LED ist an Pin 12 angeschlossen | const byte ROTE_LED = 12; //Rote LED ist an Pin 12 angeschlossen | ||
byte GRUENE_LED = 13; //Grüne LED wird an Pin 13 angeschlossen | const byte GRUENE_LED = 13; //Grüne LED wird an Pin 13 angeschlossen | ||
void setup() | void setup() | ||
Zeile 400: | Zeile 400: | ||
pinMode(GRUENE_LED, OUTPUT); | pinMode(GRUENE_LED, OUTPUT); | ||
servoBlau.attach(11); //Der Servomotor ist an Pin 11 angeschlossen | |||
} | } | ||
Zeile 413: | Zeile 413: | ||
Serial.println("Tuer verriegelt"); | Serial.println("Tuer verriegelt"); | ||
delay(2000); | delay(2000); | ||
servoBlau.write(90); //Servomotor zum Verriegeln auf 90 Grad ansteuern | |||
digitalWrite(ROTE_LED, HIGH); | digitalWrite(ROTE_LED, HIGH); | ||
digitalWrite(GRUENE_LED, LOW); | digitalWrite(GRUENE_LED, LOW); | ||
Zeile 422: | Zeile 422: | ||
if (Taste=='#') | if (Taste=='#') | ||
{ | { | ||
if ( | if (c1==p1&&C2==p2&&c3==p3&&c4==p4) //wird geprüft, ob die Eingaben Codezeichen übereinstimmen | ||
{ | { | ||
Serial.println ("Code korrekt, Schloss offen"); | Serial.println ("Code korrekt, Schloss offen"); | ||
servoBlau.write(0); //Servomotor zum Öffnen auf 0 Grad ansteuern. | |||
digitalWrite(ROTE_LED, LOW); | digitalWrite(ROTE_LED, LOW); | ||
digitalWrite(GRUENE_LED, HIGH); | digitalWrite(GRUENE_LED, HIGH); | ||
Zeile 432: | Zeile 432: | ||
{ | { | ||
Serial.println ("Code falsch, Schloss gesperrt"); | Serial.println ("Code falsch, Schloss gesperrt"); | ||
falscheEingabe += 1; | |||
if( | if(falscheEingabe == 3) // Wenn der Code 3-mal falsch eingegeben wurde | ||
{ | { | ||
Serial.println("Besitzer wurde benachrichtigt!"); | Serial.println("Besitzer wurde benachrichtigt!"); | ||
tone(SOUND_BUZZER, | tone(SOUND_BUZZER, sound); | ||
delay(8000); | delay(8000); | ||
noTone(SOUND_BUZZER); | noTone(SOUND_BUZZER); | ||
Zeile 452: | Zeile 452: | ||
if (z1==0) // Wenn das erste Zeichen noch nicht gespeichert wurde. | if (z1==0) // Wenn das erste Zeichen noch nicht gespeichert wurde. | ||
{ | { | ||
c1=Taste; //Unter der Variablen "C1" wird nun die aktuell gedrückte Taste gespeichert | |||
Serial.print("Die Taste "); | Serial.print("Die Taste "); | ||
Serial.print( | Serial.print(c1); | ||
Serial.println(" wurde gedrückt"); | Serial.println(" wurde gedrückt"); | ||
z1=1; z2=0; z3=1; z4=1; // Zugang zur zweiten Zeicheneingabe freischalten | z1=1; z2=0; z3=1; z4=1; // Zugang zur zweiten Zeicheneingabe freischalten | ||
Zeile 462: | Zeile 462: | ||
if (z2==0) | if (z2==0) | ||
{ | { | ||
c2=Taste; //Unter der Variablen "C2" wird nun die aktuell gedrückte Taste gespeichert | |||
Serial.print("Die Taste "); | Serial.print("Die Taste "); | ||
Serial.print( | Serial.print(c2); | ||
Serial.println(" wurde gedrückt"); | Serial.println(" wurde gedrückt"); | ||
z1=1; z2=1; z3=0; z4=1; // Zugang zur dritten Zeicheneingabe freischalten | z1=1; z2=1; z3=0; z4=1; // Zugang zur dritten Zeicheneingabe freischalten | ||
Zeile 472: | Zeile 472: | ||
if (z3==0) | if (z3==0) | ||
{ | { | ||
c3=Taste; //Unter der Variablen "C3" wird nun die aktuell gedrückte Taste gespeichert | |||
Serial.print("Die Taste "); | Serial.print("Die Taste "); | ||
Serial.print( | Serial.print(c3); | ||
Serial.println(" wurde gedrückt"); | Serial.println(" wurde gedrückt"); | ||
z1=1; z2=1; z3=1; z4=0; // Zugang zur vierten Zeicheneingabe freischalten | z1=1; z2=1; z3=1; z4=0; // Zugang zur vierten Zeicheneingabe freischalten | ||
Zeile 482: | Zeile 482: | ||
if (z4==0) // Wenn das vierte Zeichen noch nicht gespeichert wurde | if (z4==0) // Wenn das vierte Zeichen noch nicht gespeichert wurde | ||
{ | { | ||
c4=Taste; //Unter der Variablen "C4" wird nun die aktuell gedrückte Taste gespeichert | |||
Serial.print("Die Taste "); | Serial.print("Die Taste "); | ||
Serial.print( | Serial.print(c4); | ||
Serial.println(" wurde gedrückt"); | Serial.println(" wurde gedrückt"); | ||
z1=1; z2=1; z3=1; z4=1; // Zugang zur weiteren Zeicheneingabe sperren | z1=1; z2=1; z3=1; z4=1; // Zugang zur weiteren Zeicheneingabe sperren |
Version vom 7. September 2023, 11:30 Uhr
Autor: Justin Frommberger
Aufgabenstellung
- Ziel des Projektes ist, ein Türsicherheitssystem zu simulieren.
- Die Aufgabe besteht darin, die Tür mit einem vierstelligen Zahlencode zu öffnen (LED leuchtet grün).
- Wird der Code 3-mal falsch eingegeben, ertönt ein Warnsignal und die LED leuchtet rot.
- Alle Eingaben müssen auf dem seriellen Monitor angezeigt werden.
⇒ Für den Fall, dass kein Arduino zur Verfügung steht, kann ein webbasierter Arduino Emulator verwendet werden. [klicken]
[Abb. 2: UML]
Benötigte Materialien
Nr. | Anz. | Beschreibung | Bild |
---|---|---|---|
① | 1 | Funduino Arduino UNO R3 | |
② | 1 | Typ 2 | |
③ | 20+ | Jumperkabel, männlich/männlich | |
④ | 1 | Steckbrett | |
⑤ | 2 | LED Rot/Grün | |
⑥ | 3 | Widerstand 120 Ω |
|
⑦ | 1 | TowerPro SG90 Servomotor | |
⑧ | 1 | Piezo Lautsprecher | |
⑨ | 1 | 4x4 Tastenfeld |
Vorab wichtig zu wissen
Servomotor Kabel
Schwarz oder Braun | Masse (GND) |
Rot | VCC/+ 5 V |
Organe, Gelb oder Weiß | PWM-Signal |
Tastenfeld
Definition Tastenfeld [klicken]
Aufbau Schaltung
In Abb. 4 wird die Schaltung für das Projekt "Tür Sicherheitssystem" dargestellt.
Bevor mit der Programmierung begonnen werden kann, muss die Schaltung des Projekts aufgebaut werden.
Programmierung
Es ist wichtig, die [Programmierrichtlinien] beim Programmieren einzuhalten.
Bibliotheken einfügen
Laden Sie für das Projekt die Bibliothek für das Tastenfeld 4x4 herunter.
Benötigt werden die Bibliotheken Servo.h
und Keypad.h
.
[Quelltext 1: TSS.ino
]
AusklappenLösung |
Initialisierung Arduino
1. Tastenfeld initialisieren
Ziel ist es, alle benötigten Variablen für die Funktion zu definieren: Keypad Tastenfeld = Keypad(makeKeymap(Hexa_Keys), Row_Pins, Col_Pins, ROWS, COLS);
- ROWS sind die Anzahl der Spalten und COLS sind die Anzahl der Zeilen. Diese werden als Variable festgelegt.
- Daraufhin müssen Row_Pins und Col_Pins über eine Array-Zuweisung ihren Ziffern zugeordnet werden.
- Zum Schluss muss die Hexa_Keys Matrix aufgebaut werden. Hier wird jede Ziffer für das Tastenfeld festgelegt.
[Quelltext 2: TSS.ino
]
AusklappenLösung |
2. Tastenfeld Variablen
Benötigte Variablen zum:
- Festlegen des Passwortes, jeder Buchstabe einzeln
- Speichern der aktuell gedrückten Taste
- Speichern der vier gedrückten Tasten
- Verhindern einer falschen Position bei der Eingabe
[Quelltext 3: TSS.ino
]
AusklappenLösung |
3. Motor, Buzzer und RGB initialisieren
LED | 12 und 13 |
Motor | 11 |
Buzzer | 10 |
⇒ pinMode();
⇒ Servo.h
[Quelltext 4: TSS.ino
]
AusklappenLösung |
Richtige Reihenfolge der Eingabe
Wichtig ist, dass die Ziffern richtig eingegeben werden.
- So muss sich eine Funktion überlegt werden, welche dies ermöglicht.
- Zur Verwendung kommen nun die Variablen für die falsche Eingabe.
- Auch muss die Variable Taste ihre Werte erhalten.
- Die gedrückte Taste wird in der C1-4 Variable abgespeichert, um später das Passwort zu überprüfen.
Tipp:
- Nachdem die erste Ziffer gedrückt wurde, öffnet sich die Eingabe für die zweite Ziffer usw.
- Benötigt wird hierfür eine
if-Bedingung
und einegoto
Funktion. - Die Taste bekommt mit der Funktion
Tastenfeld.getKey();
ihre Ziffer.
[Quelltext 5: TSS.ino
]
AusklappenLösung |
Tür öffnen und schließen
- Für das Öffnen der Tür wird die Taste (#) verwendet. Um die Tür zu verriegeln, wird die Taste (*) genutzt.
- Wenn die Tür offen ist, leuchtet die LED Grün, und Rot, wenn die Tür geschlossen ist.
- Der Motor soll sich beim Schließen zu 90 Grad, beim Öffnen wiederum zu 0 Grad drehen.
- Überprüfe vor dem Öffnen, ob das Passwort korrekt eingegeben wurde.
Tipp:
- Benötigt werden if-Else Funktionen, die nach der bestimmten Taste abfragen und die Anweisung dann ausführen.
- Nutzen Sie Vergleichsoperatoren zum Abfragen des Passwortes.
[Quelltext 6: TSS.ino
]
AusklappenLösung |
Einbrecher Warnung!
Die Zusatzaufgabe ist, einen Buzzer ertönen zu lassen, wenn das Passwort 3-mal falsch eingegeben wurde.
Tipp:
- Bei einer falschen Eingabe wird die Variable hochgezählt.
- Wenn die Variable 3 erreicht, ertönt der Buzzer.
⇒ tone();
[Quelltext 7: TSS.ino
]
AusklappenLösung |
Musterlösung
AusklappenLösung Code |
Quelle: Link
→ zurück zum Hauptartikel: BA: Arduino-Projekte für die Lehre