RFID używamy na co dzień np. wchodząc do biura czy domu. Tym razem na szybko była potrzebna, przed wdrożeniem całego systemu kontrola wejścia do pomieszczenia z serwerami. I tu przyszło z pomocą Arduino które poniewiera się po domu oraz czytnik RC-522 i przekaźnik.
Założenie całej konstrukcji, otworzyć drzwi osobą posiadającym odpowiedni znacznik RFID np. kartę lub brelok.
Potrzebne elementy:
– Arduino nano (lub odpowiednik)
– czytnik RFID RC-522
– karta RFID / brelok RFID
– przekaźnik,
– elektro zaczem (niestety to musiałem kupić)
– biblioteka RFID master
Opis połączenia czytnika RFID:
Moduł RC522 | Arduino Nano, Uno | Arduino Mega |
SDA | 10 | 53 |
SCK | 13 | 52 |
MOSI | 11 | 51 |
MISO | 12 | 50 |
IRQ | nie podłączać | nie podłączać |
GND | GND | GND |
RST | 9 | 9 |
3.3V | 3.3V | 3.3V |
Opis połączenia przekaźnika:
Moduł przekaźnika | Arduino Nano, Uno |
VCC | 5V |
GND | GND |
IN | D8 |
Wstępnie zmontowany układ
Jest to robocza wersja która robiona była dla testu docelowo stanęło to na wersji pro ze względu na gabaryty i zostało wmontowane w ramę drzwiową.
Kod dla jednego znacznika RFID
/*
* This sketch uses the MFRC522 library ; see https://github.com/miguelbalboa/rfid
* for further details and other examples.
* pobrano z www.tranzystor.pl
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
String read_rfid;
String ok_rfid_1="d34a61a3"; // ID twojego znacznika
int lock = 8;
void setup() {
Serial.begin(9600);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
pinMode(lock, OUTPUT);
}
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid="";
for (byte i = 0; i < bufferSize; i++) {
read_rfid=read_rfid + String(buffer[i], HEX);
}
}
void open_lock() {
//Use this routine when working with Relays and Solenoids etc.
digitalWrite(lock,HIGH);
delay(500); // czas podtrzymania przekaźnika
digitalWrite(lock,LOW);
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
if ( ! mfrc522.PICC_ReadCardSerial())
return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid==ok_rfid_1) {
open_lock();
}
}
Kod dla 2 znaczników RFID
/*
* This sketch uses the MFRC522 library ; see https://github.com/miguelbalboa/rfid
* for further details and other examples.
* pobrano z www.tranzystor.pl
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
String read_rfid;
String ok_rfid_1="d34a61a3"; // ID twojego znacznika
String ok_rfid_2="2b2dc773"; // ID twojego znacznika
int lock = 8;
int lock2 = 8;
void setup() {
Serial.begin(9600);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
pinMode(lock, OUTPUT);
pinMode(lock2, OUTPUT);
}
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid="";
for (byte i = 0; i < bufferSize; i++) {
read_rfid=read_rfid + String(buffer[i], HEX);
}
}
void open_lock() {
digitalWrite(lock,HIGH);
delay(1000); // czas podtrzymania przekaźnika
digitalWrite(lock,LOW);
}
void close_lock2() {
digitalWrite(lock2, HIGH);
delay(1000); // czas podtrzymania przekaźnika
digitalWrite(lock2,LOW);
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
if ( ! mfrc522.PICC_ReadCardSerial())
return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid==ok_rfid_1) {
open_lock();
}
Serial.println(read_rfid);
if (read_rfid==ok_rfid_2) {
close_lock2();
}
}