Arduino Zugangskontrolle mit 7 Segment-Display und seriellem Monitor
Material:
- 1x Arduino Mega 2560
- 1x RFID MFRC 522
- 1x 7 Segment - Display 5161AS
- 1x Widerstand 1 Kiloohm (bssbb)
- 12x Kabel kurz
- 7x Kabel lang
- 1x Breadboard
- 1x Schaltrelais
Vorbereitung des RFID Moduls:
1. Anschluss:
Anschlussbezeichung | Nummer |
---|---|
GND | GND |
3.3V | 3.3V |
RST | 5 |
MISO | 50 |
MOSI | 51 |
SCK | 52 |
SDA | 53 |
IRO | - |
2. Einen RFID Chip auslesen (um ihn später verwenden zu können)
- Der ausgewählte RFID Chip muss im ersten Schritt ausgelesen werden; er wird über einen Zahlencode identifiziert.
- RFID Tag auslesen
- Den ausgelesenen Zahlencode muss man in den zweiten Sketch einfügen, damit man eine Aktion mit dem Erkennen dieses EINEN berechtigten Chips verknüpfen kann
-
Dazu benötigt man den seriellen Monitor in Arduino IDE; auf diesem wird der Code ausgegeben.
(Alternativ kann man auch mit einem vom Arduino gesteurerten LCD Display arbeiten)
Die Schaltfläche findet sich oben rechts; siehe Bild...
Zusammenführung mit dem 7 Segment-Display und dem Schaltrelais:
Informationen zur Funktion und zum Anschluss des Relais findet ihr hier:
Relais mit dem Arduino steuern
Informationen zum Anschluss und zur Funktion des 7 Segement-Displays findet ihr hier:
7 Segment-Display anschließen und programmieren
1. Anschluss:
Das Relais findet sich nicht auf der fritzing Grafik, da es dort nicht verfügbar war.
Es hat 3 Steckleisten und wird wie folgt angeschlossen:
+ -> 5V Anschluss am Arduino
- -> GND Anschluss am Arduino
S -> ein digitaler Output am Arduino; in meinem Fall Pin 7
Segment | Nummer |
---|---|
A | 32 |
B | 33 |
C | 36 |
D | 29 |
E | 28 |
F | 26 |
G | 27 |
- (2x) | GND |
DP | 37 |
Sieht in echt dann ungefähr so aus:
(das Bild ist nicht aktuell, ein Bild des fertigen Aufbaus folgt ;))
2. Sketch:
/* Florian Porth; 2019; Arudino Mega 2560
* Arduino Zugangskontrolle mit RFID, Relais, 7-Segment-Display und seriellem Monitor
*
* In dieser Schaltung wird ein Relais mit einem RFID Chip gesteuert. Als Statusanzeige werden der serielle Monitor und ein 7-Segment-Display verwendet.
* Das System soll als vereinfacht dargestellte Zugangskontrolle funktionieren.
* Für das RFID Bauteil muss man aufgrund der hinterlegten library auf folgende Pin-Zuteilung zurückgreifen:
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
* Quelle (Zuordnungstabelle): https://www.makerblog.at/2017/11/rfid-transponder-mit-dem-mfrc-522-card-reader-am-arduino-auslesen/
*
*
* In einem vorrangstellten Schritt muss mit einem gesonderten Sketch die ID des RFID Tags ausgelesen werden, welche dann unten
* in diesem Sketch eingefügt werden muss
*/
#include
#include
#include
#include //libraries eingebunden
#define SS_PIN 53
#define RST_PIN 5 //Definition von "SS" und "RST" Pin
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup()
//Relaisschalter eingebaut; wird über digitalWrite - Signal geschaltet; steht für die Verbidung zu einem Türkontaktschalter
//Das Relais kann zwischen den Schaltzuständen "AB" und "BC" wechseln
//Bei "AB" sind die Ausgänge "A" und "B" aktiv
//Bei "BC" sind die Ausgänge "B" und "C" aktiv
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode (26, OUTPUT); // Der Pin ist als Output für eine LED definiert
pinMode (27, OUTPUT); // "
pinMode (28, OUTPUT); // "
pinMode (29, OUTPUT); // "
pinMode (32, OUTPUT); // "
pinMode (33, OUTPUT); // "
pinMode (36, OUTPUT); // "
pinMode (37, OUTPUT); // "
pinMode (7, OUTPUT); // "
pinMode (7, OUTPUT); //Der Pin ist als Output definiert; mit diesem Pin wird das Relais gesteuert
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(26, HIGH);
digitalWrite(36, HIGH);
digitalWrite(7, LOW); //Die Relaiskarte wird in die Normalstellung gebracht; bei der Alarmanlage also den "scharfen" Zustand - der Türkontakt würde einen Alarm auslösen
//Der Normalzustand ist in meiner Schaltung als "BC" definiert
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
long code = 0;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
code = ((code + mfrc522.uid.uidByte[i]) * 10);
}
// Ab hier erfolgt die erweiterung des Programms.
if (code == 2409430) // Wenn der Zahlencode 2409430 lautet... [hier muss man die ID einfügen]
{ // ...dann führe folgenden Abschnitt aus
digitalWrite(7, HIGH); //Die Relaiskarte schaltet zu "BA"
Serial.println("Karte identifiziert - Zugang 10sec freigeschaltet");//Auf dem seriellen Monitor erscheint der Schriftzug "Zugang 10sec freigeschaltet"
digitalWrite (32, LOW);//das 7-Segement-Display soll die Zahl "1" anzeigen
digitalWrite (28, LOW);//...
digitalWrite (29, LOW);//...
digitalWrite (26, LOW);//...
delay (10000); //
digitalWrite (7, LOW); //Die Relaiskarte schaltet zu "BC"
Serial.println("Zugang gesperrt"); //Auf dem seriellen Monitor erscheint der Schriftzug "Zugang gesperrt"
digitalWrite(32, HIGH);//das 7-segment-Display soll die Zahl "0" anzeigen
digitalWrite(33, HIGH);//...
digitalWrite(28, HIGH);//...
digitalWrite(29, HIGH);//...
digitalWrite(26, HIGH);//...
digitalWrite(36, HIGH);//...
}
else
{
Serial.println("keine Zugangsberechtigung");//Auf dem seriellen Monitor erscheint der Schriftzug "keine Zugangsberechtigung"
Serial.print("");
digitalWrite(32, LOW);//das 7-segment-Display soll die Zahl "0" blinkend anzeigen
digitalWrite(33, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(26, LOW);
digitalWrite(36, LOW);
delay(500);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(26, HIGH);
digitalWrite(36, HIGH);
delay(500);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(26, LOW);
digitalWrite(36, LOW);
delay(500);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(26, HIGH);
digitalWrite(36, HIGH);
delay(500);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(26, LOW);
digitalWrite(36, LOW);
delay(500);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(26, HIGH);
digitalWrite(36, HIGH);
delay(500);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(26, LOW);
digitalWrite(36, LOW);
delay(500);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(26, HIGH);
digitalWrite(36, HIGH);
delay(500);
}
}
erstellt: Schuljahr 2019/20
Florian Porth, 10b