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:
Pentru experimente, am testat doua librarii: intai libraria MRFC522 si, apoi libraria L26_Arduino.
Schema de conectare dintre placa Arduino si receptorul RFID este simpla, iar alimentarea de face de la 3,3V:
Dupa incarcarea diverselor sketch-uri, am obtinut:
Am facut mici modificari ale unuia din sketch-urile incluse in librarie, in sensul de a identifica una din cartele:
Sketch-ul modificat de mine este:
// 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 ;D
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop(){
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:
Sketch-ul scris de mine, combina sketch-ul anterior, cu partea de afisaj LCD1602 cu interfata i2c:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // or 0x27
// 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 ;D
void setup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.init();
lcd.backlight(); //enciende la iluminacion
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by niq_ro");
delay(2000);
}
void loop(){
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(" ");
}
Am realizat si pentru aceasta varianta un filmulet numit RFID-RC522, Arduino si afisaj LCD1602 pe i2c: iar sketch-ul va fi:
17.10.2014 Pentru a putea face un sistem de acces pentru mai multe persoane, am mai cumparat chei de rezerva de pe ebay.#include <Wire.h>//#include <LiquidCrystal_I2C.h>// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal 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 ;D void setup(){ 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); } void loop(){ 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(" "); }
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 pins
LiquidCrystal 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 ;D
int releu = 8; // relay is at D8
void setup(){
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
}
void loop(){
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 ON
delay(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 ON
delay(10000); //
}
}
}
rfid.halt();
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(releu, LOW); // relay is OFF
}
Filmuletul facut de Gzregorz este:
Postare de Grzegorz Ka.












