Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Sensorik Schaltungen an- und ausstellen : RFID-Kit

Schaltungen an- und ausstellen : RFID-Kit

Ziel :

 

Eine Schaltung mit einem RFID-Kit an- und auszuschalten und mit mehreren Tabs zu arbeiten.

 

Material :

 

   Arduino :

      - RFID-Empfänger (RC522)

      - RFID-Sender

      - LED (grün)

      - 100 Ohm Widerstand

     - Kabel

 

Aufbau :

 

Steckplatine.png

 

Code :

 

Wie funktioniert ein RFID-Kit?

 

Der RFID-Empfänger erzeugt ein magnetisches Feld um ihn herum, das je nach Empfänger stärker(weiter) reicht oder eine kürzere Reichweite hat. Das "Gegenstück", der RFID-Sender, erzeugt mithilfe dieses Magnetfeldes eine Spannung, aus welcher der Empfänger den Code des Senders ausliest. Außerdem muss die Library des RFID-Kits, welches benutzt wird, hier heruntergeladen werden: https://github.com/miguelbalboa/rfid. Diese wird später benötigt und hilft uns dabei, unseren RFID-Empfänger zum Laufen zu bringen. Der enthaltende Ordner muss in den Library-Ordner des Arduinos verschoben werden.

 

RFID-Kit programmieren und Code desSenders für spätere Programmierung auslesen

#include        // Standard-SPI Library hinzufügen
#include    // RFID-Kit Library, welche vorhin installiert wurde, hinzufügen
#define SS_PIN 53      // Empfänger SS Pin an Pin 53 festlegen
#define RST_PIN 5      // Empfänger RST Pin an Pin 5 festlegen

MFRC522 mfrc522(SS_PIN, RST_PIN);  // RFID-Empfänger benennen

void RFID_Setup(){

Serial.begin(9600);    // Seriellen Monitor verbinden
SPI.begin();           // Verbindung mit SPI herstellen (arduino.cc/en/Reference/SPI)
mfrc522.PCD_Init();    // RFID-Empfänger initialisieren
}
void RFID_Loop(){

 
if ( ! mfrc522.PICC_IsNewCardPresent()){    // Falls ein RFID-Sender in Reichweite ist

return;

}
if ( ! mfrc522.PICC_ReadCardSerial()){      // Falls ein RFID-Sender sendet
 

return;

}
 
 
 
long code=0;      // variable "code" erstellen, um später den Code des Senders abzuspeichern
 
 
for (byte i = 0; i < mfrc522.uid.size; i++){

code=((code+mfrc522.uid.uidByte[i])*10);      // Der empfangene Code wird ausgelesen und in eine hexadezimale Zahl umgewandelt. In Variable code abgespeichert.
}
Serial.print(code);      //Der Code des RFID-Senders wird im seriellen Monitor angezeigt.

}
 

}
 

// Code Ende

 

Der Code des RFID-Senders wird im seriellen Monitor ausgegeben. Am besten merkt man sich ihn oder schreibt ihn auf.

 

 

Mit mehreren Tabs arbeiten

 

Mit mehreren Tabs zu arbeiten macht den Code übersichtlicher, vereinfacht Fehlersuche und macht den Code anschaulicher. Einen Tab(neue Datei für Code) erstellt man so :

NeuerTab.png

 

Hier ein Beispiel :

Die Datei Ultraschallsensor.h erhält den Code, den der Ultraschallsensor benötigt, um z.B. Abstände zu messen.

In der Hauptdatei Sketch(oder auch Sketch.ino) wird die Datei Ultraschallsensor.h hinzügefügt und auf deren Funktionen hingewiesen.

Dazu erstellt man sich einfach mit

void name() {

}

das bekannte void setup und void loop

 

Beispielsweise sieht das dann etwa so aus( vom Aufbau her ).

Ultraschallsensor.h :

int echo = 6;

//

//

void UltraschallSetup() {

pinMode(echo, INPUT);

}

void UltraschallLoop() {

digitalWrite(echo, HIGH);

delay(1);

}

//Code Ende

In der Hauptdatei fügen wir dann mit #include "Ultraschallsensor.h" diese Datei unserem Sketch hinzu, um die Funktionen aufrufen zu können. (Es werden auch Variablen und alles andere übernommen). In der Haupdatei rufen wir dann unser "2. Setup" und unsere "2. Loop" auf.

Sketch.ino

#include "Ultraschallsensor.h"   


void setup() {

UltraschallSetup();

}

 

void loop() {

UltraschallLoop():

}

 

//Code Ende

 

Sketch.ino.png

 

Schaltungen an- und ausstellen

 

Da mit mehreren Tabs gearbeitet wird, ist es sehr einfach eine komplette Schaltung , z.B anhand einer If-Abfrage einer Variable zu deaktivieren.

In unserer Hauptdatei sollte man zunächst eine Variable noch vor den #include Befehlen erstellen, damit auch jede Datei darauf zugreifen kann. Man kann sie z.B. int Status = 1, für an und Status = 0 für aus nennen oder mit char Status = 'x' auch Buchstaben verwenden.

Sketch.ino

int Status = 1;                //Status soll standardmäßig auf an sein

#include RFID-Kit.h       // Datei mit dem RFID Code von oben hinzufügen

 

void setup() {

RFID_Setup()

}

void loop() {

If (Status==1) {        // Wenn die Variable Status 1 (an) ist, dann..

   UltraschallLoop();  // Hier kommen dann die Loops bzw. der Code rein, der nur laufen                        soll, wenn der Status = 1 ist

}else{                // sonst..

                                               // das passiert NUR, wenn der Status = 0 (aus) ist

}

RFID_Loop()           // Die Schleife des RFID-Kits wird nicht in die If-Klammer oben gesetzt, da sie immer laufen soll

}

 

//Code Ende

 

RFID-Kit.h

 

#include       
#include   
#define SS_PIN 53     
#define RST_PIN 5     
MFRC522 mfrc522(SS_PIN, RST_PIN); 

void RFID_Setup(){

Serial.begin(9600);   
SPI.begin();          
mfrc522.PCD_Init();   
}
 
void RFID_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);     
}
   
if (code == 12345678) {    // Wenn der RFID-Code 12345678 ist, dann...
   Status = 0                       // Setzte den Status auf 0 (aus)
}
 

//Code Ende
 
Da der Status jetzt gleich 0 ist, wird die if-Abfrage im Loop der Hauptdatei falsch antworten und der Ultraschallsensor oder sonstige Befehle, Loops,.. würden nicht mehr laufen.
Jetzt könnte man z.B. den Status auf Knopfdruck wieder auf 1 ändern und der Code in der if-Klammer würde wieder laufen.

Wenn man jetzt noch eine LED hinzufügen möchte, die den Status der Schaltung anzeigt, die leuchtet, wenn die Schaltung aktiv ist, setzt man den digitalWrite Befehl  in die  If Status == 1 Klammer in der Hauptdatei und schaltet die LED im folgenden else aus.

 

 

Erstellt: Jan-Niklas Schrimpf (15.11.2016) Letzte Änderung: Jan-Niklas Schrimpf (29.06.2017)