Am folosit primul sketch prezentat in articol sa depistez "codul" cardului meu si l-am introdus in al doilea sketch, exact ca in articol, doar ca eu am folosit un led multicolor (RGB), dupa cum se vede si in filmuletul Arduino acces RFID 125kHz
Sistemul de identificare este folosit de mult timp, el fiind foarte intalnit la sistemele de acces in scara blocurilor.
Pentru a face si eu teste cu placa Arduino, am achizitionat de pe ebay un pachet de identificare radio compus dintr-un receptor RFID-RC522, o cartela dreptunghiulara (tip card bancar) si una tip breloc pentru chei, care lucreaza pe frecventa de 13,56Mhz.
Conectarea receptorului RFID-RC522 cu placa de dezvoltare Arduino se face in modul SPI, de forma:
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dvoidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("NICUUUUU");
Serial.println("---------");
}
}
}
rfid.halt();
delay(500);
}
Am realizat un film cu un sketch putin modificat pentru a identifica cele 2 cartele, ca fiind cartela principala sau secundara; filmuletul se numeste RFID-RC522 si Arduino:
Am conectat un afisaj alfanumeric cu 16 coloane si 2 randuri prin intermediul unui adaptor i2c, dupa schema clasica:
Sketch-ul scris de mine, combina sketch-ul anterior, cu partea de afisaj LCD1602 cu interfata i2c:
Bineinteles, ca se pot aduce imbunatatiri, cum ar fi: electromagnet sau servomotor pentru deblocare yala usa, deblocare alarma apartament, sistem de pontare la servici, etc. Pentru a lega afisajul in modul clasic, schema devine:
iar sketch-ul va fi:
#include <Wire.h>//#include <LiquidCrystal_I2C.h>
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// https://github.com/LeadergDotCom/L26_Arduino - broken now
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dvoidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.begin(16,2);
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by niq_ro");
delay(2000);
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("Salut Nicu!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie principala");
}
if ((rfid.serNum[0]==50) && (rfid.serNum[1]==160)
&& (rfid.serNum[2]==75) && (rfid.serNum[3]==181)
&& (rfid.serNum[4]==108))
{Serial.println("Salut Nicu! Ai cartela de rezerva!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie secundara ");
}
}
}
rfid.halt();
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
}
17.10.2014 Pentru a putea face un sistem de acces pentru mai multe persoane, am mai cumparat chei de rezerva de pe ebay.
25.11.2014 Deoarece am avut o solicitare de la Gzregorz din Polonia pentru a modifica sketch-ul pentru a actiona un releu timp de 10 secunde, mi-am facut timp si a rezultat urmatorul sketch pentru a conecta un modul cu releu pe pinul D8:
// control acces by niq_ro with 10 second time acses
#include <Wire.h>
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// https://github.com/LeadergDotCom/L26_Arduino - broken now
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dint releu = 8; // relay is at D8voidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.begin(16,2);
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by niq_ro");
delay(2000);
pinMode(releu, OUTPUT);
digitalWrite(releu, LOW); // relay is OFF
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("Salut Nicu!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie principala");
digitalWrite(releu, HIGH); // relay is ONdelay(10000); //
}
if ((rfid.serNum[0]==50) && (rfid.serNum[1]==160)
&& (rfid.serNum[2]==75) && (rfid.serNum[3]==181)
&& (rfid.serNum[4]==108))
{Serial.println("Salut Nicu! Ai cartela de rezerva!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie secundara ");
digitalWrite(releu, HIGH); // relay is ONdelay(10000); //
}
}
}
rfid.halt();
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(releu, LOW); // relay is OFF
}