Tür­öff­ner mit einem RFID-Modul und Servomotor

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Wird die kor­rek­te Kar­te an das RFID-Modul gehal­ten, öff­net der Ser­vo­mo­tor die Schran­ke, ande­ren­falls bleibt die Schran­ke geschlos­sen. Wenn die Kar­te erneut vor das Lese­ge­rät gehal­ten wird, schließt die Schran­ke wieder.

So sieht es aus:

Ein RFID-Modul (radio-fre­quen­cy iden­ti­fi­ca­ti­on) besteht aus soge­nann­ten „Tags“, und einem Lesegerät.

Benö­tig­te Bauteile:

  • Ser­vo­mo­tor
  • RFID-Modul
  • Lei­tungs­dräh­te
  • kodier­te Kar­ten ("Tags")

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Benö­tig­te Bibliothek:

oder: Sketch -> Biblio­thek ein­bin­den -> Biblio­the­ken verwalten

Zunächst musst du die indi­vi­du­el­le Ken­nung der Kar­te her­aus­fin­den, sie wird im Seri­el­len Moni­tor angezeigt.

// RFID-Bibiothek hinzufügen
# include "MFRC522.h"

// Anschlüsse definieren
# define SDA 7
# define RST 9

// RFID-Empfänger benennen
MFRC522 mfrc522(SDA, RST);

void setup()
{
  Serial.begin(9600);
  SPI.begin();

  // Initialisierung des RFID-Empfängers
  mfrc522.PCD_Init();
}

void loop()
{
  String WertDEZ;

  // Wenn keine Karte in Reichweite ist ..
  if (!mfrc522.PICC_IsNewCardPresent())
  {
    // .. wird die Abfrage wiederholt.
    return;
  }

  // Wenn kein RFID-Sender ausgewählt wurde ..
  if (!mfrc522.PICC_ReadCardSerial())
  {
    // .. wird die Abfrage wiederholt.
    return;
  }

  Serial.println(F("Karte entdeckt!"));

  // Dezimal-Werte in String schreiben
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
  }

  // Kennung dezimal anzeigen
  Serial.println("Wert in dezimal: " + WertDEZ);

  delay(1000);
}

Bin­de die Biblio­the­ken ein und defi­nie­re die Variablen:

// eingebaute Bibliothek einbinden
# include "Servo.h"

// RFID-Bibiothek hinzufügen
# include "MFRC522.h"

// Anschlüsse definieren
# define SDA 10
# define RST 9

// Schranke nach Betreten wieder schließen
bool Status = false;

// RFID-Empfänger benennen
MFRC522 mfrc522(SDA, RST);

// Bezeichnung des Motors
Servo Motor;

Der set­up-Teil. Beach­te die Kommentare:

void setup()
{
  // Pin des Motors zuordnen
  Motor.attach(7);
  Serial.begin(9600);

  SPI.begin();

  // Initialisierung des RFID-Empfängers
  mfrc522.PCD_Init();

  // Motor in "geschlossen"-Position fahren
  Motor.write(0);
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  String WertDEZ;

  // Wenn keine Karte in Reichweite ist ..
  if (!mfrc522.PICC_IsNewCardPresent())
  {
    // .. wird die Abfrage wiederholt.
    return;
  }
  // Wenn kein RFID-Sender ausgewählt wurde ..
  if (!mfrc522.PICC_ReadCardSerial())
  {
    // .. wird die Abfrage wiederholt.
    return;
  }

  Serial.println(F("Karte entdeckt!"));

  // Dezimal-Wert in String schreiben
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
  }

  Serial.println();

  // Kennung dezimal anzeigen
  Serial.println("Wert in dezimal: " + WertDEZ);

  // Leerzeichen am Ende entfernen
  WertDEZ.trim();

  // WertDEZ mit korrektem Wert vergleichen -> Schranke öffnen
  if (WertDEZ.compareTo("80 236 29 59") == 0)
  {
    Serial.println("korrekte Karte -> Schranke \u00f6ffnen");
    Motor.write(90);
    Status = !Status;
  }

  if (WertDEZ.compareTo("80 236 29 59") == 0 && !Status)
  {
    Serial.println("  korrekte Karte/Zutritt erfolgt -> Schranke schlie\u00dfen");
    Motor.write(5);
  }
  // wenn die Karte falsch ist
  else if (WertDEZ.compareTo("80 236 29 59") != 0)
  {
    Motor.write(5);
    Serial.println("falsche Karte -> Schranke geschlossen lassen");
    Status = false;
  }

  delay(1000);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:



Letzte Aktualisierung: 26. Nov 2023 @ 13:20