31. RFID access control

Mål: Att läsa RFID kort eller tag för att låsa upp en dörr.

Teori: RFID RC522 är en modul som kan avläsa kompatibel kort eller tag och den lagrade informationen (1kB) som finns i den, bl.a. kortets id.


Frizing layout

31 rfid rc522


Arduino koden

Biblioteket som används i koden heter MRC522 och kan laddas ner på github. Kom ihåg att spara biblioteket i mappen arduino/libraries/.

/* 
 * All the resources for this project: http://randomnerdtutorials.com/
 * Modified by Rui Santos
 * Modified by Wilbur Smith 2017
 * Created by FILIPEFLOP
 * 
 * Börja med att kommentera serial.write för processing och 
 * avkommentera samtliga serial.prints. Kör koden för att se kortets id. 
 * Återställ koden så som den var i början och ladda upp. 
 */
 
#include <Servo.h> 
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Skapa ett MFRC522 objekt.
Servo myservo; 

void setup() 
  {
  Serial.begin(9600);   // Starta serial kommunikationen
  SPI.begin();          // Starta SPI bussen
  mfrc522.PCD_Init();   // Starta MFRC522
  //Serial.println("Sätt kortet nära läsaren...");
  //Serial.println();
  myservo.attach(8);
  }
void loop() 
{
  // Sök efter nya kort
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
    {
    return;
    }
    
  // Välj en av korten eftersom modulen kan avläsa flera åt gången
  if ( ! mfrc522.PICC_ReadCardSerial()) 
    {
    return;
    }
  
  //Serial.print("UID tag :");
  String content= "";
  byte letter;
  
  for (byte i = 0; i < mfrc522.uid.size; i++) 
    {
     //Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     //Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
    }
  
    //Serial.println();
    //Serial.print("Message : ");
    content.toUpperCase();
  
  if (content.substring(1) == "15 A4 HH V5") // card id
    {
    //Serial.println("Access granted");
    //Serial.println();
    delay(500);
    Serial.write(1);    // för processing
    myservo.write(170);
    }
 
 else   
    {
    //Serial.println("Access denied");
    delay(500);
    Serial.write(2);    // för processing
    myservo.write(10);
    }
} 

Processing koden

import processing.serial.*;          // inkludera serial biblioteket 
Serial myPort;                       // Skapa ett serial objekt
PFont font;
 int a;

void setup()
  {
  size(650,150);  // fönsterstorleken samt vilken rendering
  println(Serial.list());
  String portName = Serial.list()[2];
  myPort = new Serial(this, portName, 9600);
  font = loadFont("Monospaced-48.vlw"); // Load the new font 
  textFont(font, 70);                   // Set up the font
  }

void draw()
  {
    if (a == 1)
    {
      background(#000105);
      fill (#0FDB17);
      text ("Access granted", 30,100); 
    }
  else if(a==2)
    {
      background(#000105);
      fill (#0FDB17);
      text ("Access denied", 30,100); 
    }
  else
    {
      background(#000105);
      fill (#000105);
      text ("", 30,100); } 
    }
  
  
void serialEvent(Serial myPort)    // funktionen för serialhändelser
    {  
      a = myPort.read();               // läs porten och spara byten i variabeln a
      println(a);
    }

Leave a comment