En esta ocasion veremos cómo utilizar un modulo RFID con Arduino y cómo funciona. RFID es un sistema de identificación por radiofrecuencia (Radio Frecuency Identification).

Código

int led = 13;
byte data_1 = 0x00;
byte data_2 = 0x00;
byte data_3 = 0x00;
byte data_4 = 0x00;
byte data_5 = 0x00;
int val = 0;
void setup(){
// Start serial port 19200 bps
Serial.begin(19200);
pinMode(led, OUTPUT);
delay(500);
// Setting Auto Read Mode - EM4102 Decoded Mode - No password
// command: FF 01 09 87 01 03 02 00 10 20 30 40 37
Serial.print(0xFF,BYTE);
Serial.print(0x01,BYTE);
Serial.print(0x09,BYTE);
Serial.print(0x87,BYTE);
Serial.print(0x01,BYTE);
Serial.print(0x03,BYTE);
Serial.print(0x02,BYTE);
Serial.print(0x00,BYTE);
Serial.print(0x10,BYTE);
Serial.print(0x20,BYTE);
Serial.print(0x30,BYTE);
Serial.print(0x40,BYTE);
Serial.print(0x37,BYTE);
delay(500);
Serial.flush();
Serial.println();
Serial.println("RFID module started in Auto Read Mode");
}

void loop(){
val = Serial.read();
while (val != 0xff){
Serial.println("Waiting card");
val = Serial.read();
delay(1000); }
// Serial.read();
// we read ff
Serial.read();
// we read 01
Serial.read();
// we read 06
Serial.read();
// we read 10
data_1 = Serial.read();
// we read data 1
data_2 = Serial.read();
// we read data 2
data_3 = Serial.read();
// we read data 3
data_4 = Serial.read();
// we read data 4
data_5 = Serial.read();
// we read data 5
Serial.read();
// we read checksum
// Led blink
if(data_1 == 0x45 & data_2==0x00 & data_3==0x6A & data_4==0x56 & data_5==0x9E){
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(500); }
// Printing the code of the card
Serial.println();
Serial.print("EM4100 card found - Code: ");
writeByte(data_1);
writeByte(data_2);
writeByte(data_3);
writeByte(data_4);
writeByte(data_5);
Serial.println();
Serial.println();
}
//Write a byte (hex) in ASCII
void writeByte(byte data){
int aux_1 = 0;
int aux_2 = 0;
aux_1=data/16;
aux_2=data%16;
if (aux_1<10){
Serial.print(aux_1 + 48,BYTE);
}
else{
Serial.print(aux_1+55,BYTE);
}
if (aux_2<10){
Serial.print(aux_2 + 48,BYTE);
}
else{
Serial.print(aux_2 + 55,BYTE);
}
Serial.print(" ");
}

Vídeo

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en www.enriquegomez.me