ArduShop.ro

ArduShop.ro
cod tehnic.go.ro_02 reducere 5%, pentru vizitatorii paginilor mele !

luni, 13 octombrie 2014

Identificare radio (RFID)

   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:
   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:
   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:
#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:
   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 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("                ");

}
    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 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: