Praktisches Projekt aus meiner Umschulung zum Fachinformatiker Systemintegration
Arduino ist eine quelloffene Elektronikplattform, die aus einfach zu bedienender Hardware und Software besteht. Arduino-Boards können Eingaben wie Licht von einem Sensor, Finger auf einem Knopf oder Nachrichten lesen und in Ausgaben wie Motoraktivierung, LED-Ansteuerung oder Online-Veröffentlichungen umwandeln.
Die Plattform wurde am Ivrea Interaction Design Institute entwickelt, um schnelles Prototyping für Studenten ohne Elektronik- und Programmierkenntnisse zu ermöglichen. Heute gibt es Arduino-Boards für IoT-Anwendungen, Wearables, 3D-Druck und eingebettete Systeme.
Dieses Projekt demonstriert ein sicheres Türöffnungssystem mit RFID-Technologie. Ein autorisierter RFID-Tag entriegelt eine Tür (Servomotor), während nicht autorisierte Tags abgewiesen werden. Die LED-Anzeige zeigt Erfolg oder Fehlschlag an.
Das System kombiniert Hardware-Kenntnisse (Verkabelung, Breadboard) mit Software-Programmierung und simuliert reale Anwendungen wie Gebäudesicherheit oder Zutrittskontrolle.
In Tinkercad wird das System virtuell aufgebaut und getestet. Der RFID-Reader erkennt Tags, vergleicht IDs und steuert Servo/LED. Simulation erlaubt fehlerfreies Testen vor Realbau.
Verkabelung: MFRC522 an Arduino-Pins (SS=10, RST=9, SPI), LED an Pin 8, Servo an Pin 6. Breadboard für sichere Verbindungen. USB-Stromversorgung.
Schritt-für-Schritt: Bibliotheken installieren (MFRC522), Code hochladen, Tags scannen und autorisieren.
#include <SPI.h> #include <MFRC522.h> /* * Author: MIUZEI * IDE V1.6.9 * Email:support@miuzeipro.com * Function:Write and read card for RC522 * Tips:Open serial port monitor. * LED1 blinking and LED2 off -> Detecting card * LED1 blinking and LED2 on -> Waiting for write card * LED1 and LED2 blinking -> Reading card is finished */ #include#include const int LED1 = 3; const int LED2 = 4; boolean flag = false; //Write card flag RFID rfid(10,9); //D10-Card Reader pin MOSI ,D9 Card Reader pin RST //The fourth byte is card's serial number and the five byte is card's Check byte unsigned char serNum[5]; // Write data unsigned char writeDate[16] ={'W', 'e', 'l', 'c', 'o', 'm', 'e', 'T', 'o', 'S', 'm', 'r', 'a', 'z', 'a', 0}; //A password original sector, 16 sectors, each sector password 6Byte unsigned char sectorKeyA[16][16] = { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},}; //A password new sector, 16 sectors, each sector password 6Byte unsigned char sectorNewKeyA[16][16] = { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},}; void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); attachInterrupt(0, WriteCardInterrupt, RISING); //Open external interrupt 0 } void loop() { unsigned char i,tmp; unsigned char status; unsigned char str[MAX_LEN]; unsigned char RC_size; unsigned char blockAddr; //Selecting operation block`s address 0~63 //Detecting card rfid.isCard(); //Reading the card serial number if (rfid.readCardSerial()) { Serial.print("The card's number is : "); Serial.print(rfid.serNum[0],HEX); Serial.print(rfid.serNum[1],HEX); Serial.print(rfid.serNum[2],HEX); Serial.print(rfid.serNum[3],HEX); Serial.print(rfid.serNum[4],HEX); Serial.println(" "); } //Select card and return memory size(note:Card is locked to prevent multiple read and write rfid.selectTag(rfid.serNum); // write data to card blockAddr = 7; //data block 7 if(flag==true) { if (rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], rfid.serNum) == MI_OK) //authenticate { //Write data status = rfid.write(blockAddr, sectorNewKeyA[blockAddr/4]); Serial.print("Set the new card password, and can modify the data of the Sector: "); Serial.println(blockAddr/4,DEC); //Write data blockAddr = blockAddr - 3 ; //data block 4 status = rfid.write(blockAddr, writeDate); if(status == MI_OK) { Serial.println("Write card OK!"); digitalWrite(LED2,LOW); //LED lamp for writing card delay(1000); flag=false; //Reset interrupt status }else{ Serial.println("Write card Error!"); } } } //Read card blockAddr = 7; //data block 7 status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum); if (status == MI_OK) //authenticate { //Read Data blockAddr = blockAddr - 3 ; //data block 4 if( rfid.read(blockAddr, str) == MI_OK) { Serial.print("Read from the card ,the data is : "); Serial.println((char *)str); for(int j=0;j<2;j++) // LED status for reading card { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); delay(500); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); delay(500); } } } rfid.halt(); flashled(); // LED status for detecting card } void WriteCardInterrupt() //Interrupt function { digitalWrite(LED2,HIGH); flag = true; } void flashled() { digitalWrite(LED1,LOW); delay(200); digitalWrite(LED1,HIGH); delay(200); Serial.println("Detecting card........"); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); }
Code liest RFID-UID, vergleicht mit autorisierter ID, aktiviert LED bei Erfolg.
Erfolgreiche Tag-Erkennung blinkt LED grün (2s), Fehlschlag rot. Serial Monitor zeigt UID und Status. 100% Funktionsrate bei korrekter Verkabelung.
Video-Demo: Arduino erkennt autorisierten Tag → LED ON → Zugang freigegeben.