Go Down

Topic: Lector RFID RDM630 (Read 2314 times) previous topic - next topic

jeperohe

Hola,
En primer lugar me presento, ya que es mi primer post en el foro.Estoy realizando un proyecto sobre Control de Accesos utilizando el lector RFID RDM630 con un Arduino UNO Rev3. El caso es que no consigo que me muestre por el puerto Serial el ID del tag, lo unico que me aparece son estas siglas,"ÿÿÿÿÿÿÿÿÿÿÿÿÿ", y no consigo saber a qué es debido, ¿os ha sucedido algo de esto?. Gracias!

Heke

No he usado nada de lo que tienes pero ¿Has mirado que la velocidad del serie sea la misma que tienes en la consola de arduino?
Code: [Select]
  // start serial port at 9600 bps:
  Serial.begin(9600);


CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

maxid

aca hay un ejemplo que encontre en una pagina, de paso te pregunto cuanto lo pagaste?

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
unsigned char card[12];
void setup()
{
Serial.begin(9600);
lcd.print("Card ID :");
}

void loop()
{
unsigned char i=0;
for(;;)
{
if (Serial.available()>0)
{
card=Serial.read();
i++;
}
if (i>=11)
{
i=0;
decode();
}
}
}
void decode()
{
lcd.setCursor(0, 1);
unsigned char p;
for(p=3;p<11;p++)
{
lcd.print(card[p]);
}
}

http://blog.iteadstudio.com/play-rdm630-with-arduino/
El que pregunta aprende, el que responde aprende a responder.

jeperohe

Hola,
gracias por las respuestas! La verdad es que he comprobado todo lo que decís, y a la salida del puerto serie me sigue apareciendo lo mismo: "Tag ID:ÿÿÿÿÿÿÿÿÿÿÿÿÿ". La verdad, no tengo ni idea a que puede llegar a ser debido, pero no me reconoce ninguno de las 7 tags que tengo. He buscado varios codigos que hay por el foro y no me funciona con ninguno. Os adjunto el codigo que mas se aproxima al funcionamiento que pretendo, que lea y muestra el ID del tag", en principio  que me lo muestre por el puerto serie, pero la idea es que sea despues por un LCD:

En cuanto al dispositivo RDM630, actualmente creo que esta descatalogado, pero en ebay esta a muy bien precio, os paso el link: http://www.ebay.com.au/itm/321022704800

//Codigo de lectura de tag mediante modulo RFID RDM630
#include <SoftwareSerial.h>

#define SIZESTR 12

SoftwareSerial RFID(2, 3);

String msg = String();

void setup() 
{
   Serial.begin(9600);
   Serial.println("
  • Serial Ready !");
       RFID.begin(9600);
       Serial.println("
  • RFID Ready !");
    }

    char c;

    void loop()
    {
      while(RFID.available()>0)
      {
       c=RFID.read();
       msg.concat(c);
       if(msg.length()==SIZESTR+1){
         Serial.print("
  • Tag ID = ");
         Serial.println(msg);
         msg=""; 
         RFID.flush();
       }
      }
    }

maxid

Primero que nada no hace falta que uses el serialsoftware para probarlo porque el el tag solo transmite y vos usas solo el pin de recepcion, por lo que para mostrar la salida lo haces con el mismo puerto.
Yo probe primero con una terminal como hyperterminal u otro y ver que transmite, en mi caso tengo un conversor usb-rs232 que incluso me sirve para alimentar el modulo id20. ahi pruebo en crudo que larga por el puerto serie.
Despues no me funciono el saber byte por byte si seguian mas datos directamente con un for leeo todos los caracteres que deberian llegar.

  char val = 0;
  int  i;
  int index = 0;
  boolean reading = false;
  char readByte;
// Seccion critica no interrumpir con nada
//  noInterrupts();
  if (Serial.available() > 0 )
  {
    if ( (val = Serial.read()) == 02 )
    {   
       //Esperar caracter de marca de inicio
       Serial.print("[SOT] ");
       //Leer hasta encontrar el caracter de stop
      for ( i = 0; (val = Serial.read()) != 03 ; i++)
      {
        Serial.print(val, HEX);
        Serial.print(" ");
        IDstring = val;
      }
              Serial.println("[EOT]");
              Serial.println();
              Serial.print("  IDString[");
              IDstring[10] = 0x00;        // agregar fin de linea al string CR-LF
              Serial.print(IDstring);
              Serial.println("] ");
              Serial.println();
      lcd.cursorTo(2, 0);
      lcd.printIn(IDstring);
    }
  }


espero te ayude
El que pregunta aprende, el que responde aprende a responder.

jeperohe

la cosa me parece muy extraña, porque con este codigo simple recibo por el puerto serie el mismo mensaje, sea del tag que sea, asi que no tengo ni idea de qué puede estar fallando, percibo que puede que o bien el modulo no tiene interface TTL y lleva otra o que los tags no son validos para este modulo (aunque el tag combo pone que si).


int data1 = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) {
    // read the incoming number on serial RX
    data1 = Serial.read();
    // display incoming number   
    Serial.print(" ");
    Serial.println(data1, DEC);
  }
}


jeperohe

lo que veo por el puerto serie:

255
255
255
255
255
255
255
255
255

maxid

como hicist las conexiones?
es ttl rs232 o wiegand?
aparentemente vienen 2 modelos con las mismas conexiones, si el tuyo no es rs232 tenes que usar otro metodo de lectura. Te aconsejo metas derecho sin usar arduino a una pc con un hyperterminal y vas a tener que envia si es rs232.

Los datos son leidos con el ejemplo que te envie
02 10ASCII Data Characters Checksum 03


aca te dejo una pagina con ejemplo completo
http://maniacbug.wordpress.com/2011/10/09/125khz-rfid-module-rdm630/

otro ejemplo
http://www.practicalarduino.com/projects/rfid-access-control-system

aca hay un hilo donde explica el posible error de la libreria
http://arduino.cc/forum/index.php?topic=113970.0


El que pregunta aprende, el que responde aprende a responder.

jeperohe

Gracias por la info maxid.Como bien dices, el formato que debe apareces es el que has puesto. Las conexiones son muy simples; Pin TX del RDM630 al RX del Arduino UNO, 5V DC del RDM630 a 5V del Arduino y GND del RDM630 a GND del Arduino. Opcionalmente puedes colocar también un led que te indique que hay proceso de lectura al pasar el tag por la antena.

He borrado de mi IDE Arduino la librería SoftwareSerial que tenia y acabo de introducir la ultima version de la lirbería NewSoftSerial, en su version 12.

Todo parece indicar que el RDM630 que tengo no lleva interface TTL-RS232 y viene con Wiegand, por lo que los datos que recibe por el puerto serie son confusos.

Otra posibilidad es la velocidad de transmisión de datos, según este usuario no puede ser igual o mayor a 9600bps, ya que si no imprime basura (a lo mejor lo que me sucede a mi). Probaré con 4800 bps a ver que sucede.
-link: http://arduino.cc/forum/index.php?action=printpage;topic=53717.0http://arduino.cc/forum/index.php?action=printpage;topic=53717.0

maxid

No me parece que sea problemas de velocidad, sino que no es la interfaz correcta, wiegand usa 2 lineas para los datos es un poco mas complicada.
Encontre una pagina que da elemplo de como hacerlo
http://www.pagemac.com/azure/arduino_wiegand.php
Si tenes un osciloscopio o un analizador logico podrias ver las salidas de los pines, sino proba con ese codigo como si fuera wiegand.
El que pregunta aprende, el que responde aprende a responder.

jeperohe

Maxid, estas en lo cierto. Muchas gracias por el código para lectores wiegand. Efectivamente este modulo lleva una interfaz Wiegand 26, al cargarlo en mi Arduino UNO me detecta 26bits y muestra el FC (Facility Code) y el CC (Card Code) en decimal. Este es el resultado que obtengo por el puerto serie al pasar uno de mis tags:

Read 26 bits. FC = 162, CC = 50382

Creo que el asunto esta resuelto, estaba trabajando en una interfaz que no era la que tenía el módulo RDM630.




maxid

Cuanto me alegro. Modifica el hilo como solucionado y contanos mas de tu experiencia con el modulo.
El que pregunta aprende, el que responde aprende a responder.

Go Up