Pages: 1 2 3 [4]   Go Down
Author Topic: Control de Acceso con RFID-RC522 y KEYPAD MATRIX 4X3  (Read 8538 times)
0 Members and 2 Guests are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola
¿Aguien sabe si con este lector RFID se puede leer el codigo de las tarjetas de metro de valencia o de algun pais? lo digo para usarlas como identificador porque son mas chulas de las blancas.

Gracias
Logged

Murcia
Offline Offline
Full Member
***
Karma: 2
Posts: 109
Aprendiz de novato
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Postéo aquí las conexiones de los pines por si a alguien le hiciesen falta:

Las conexiones del RC-522 son:
MOSI: Pin 11
MISO: Pin 12
SCK : Pin 13
SAD : Pin 10
RST : Pin 9
3.3:  Power 3.3
GND: GND

Las del relé son las que puse en otro mensaje de este mismo post en este esquema:


Y el teclado en mi caso es de 12 teclas y 7 conexiones. Las conexiones son de izquierda a derecha:
conexión 1 : pin 8
conexión 2 : pin 6
conexión 3: pin 5
conexión 4: pin 4
conexión 5: pin 3
conexión 6: pin 2
conexión 7: pin A0

Un saludo!!!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

holaaaa, señores tengo un problemón!!!

creo que se me ha cascado la placa, arduino uno r3, pero me lo podrían confirmar??

este es el código que uso, la mayoría calcado de este post, omitiendo la parte del RFID y añadiendo como dije anteriormente el do...while para esperar al sensor. una vez funcionó, pero al día siguiente ya no funcionaba y ocasionalmente ha vuelto a funcionar pero por poco rato, una o dos veces.

el caso es que en el codigo de ejemplo Button la placa me hace una cosa rara. en reposo, con el interruptor abierto el led 13 está encendido, aunque poco, y cuando pulso el interruptor se ilumina más fuerte

tambien usando el codigo de ejemplo DigitalReadSerial me hace una cosa rara, pues abriendo la ventana del monitor serial, hay veces que muestra un 1 sin tocar el interruptor, aunque cuando está mostrando 0 sí reacciona al pulsar el interruptor, mostrando un 1

sacadme de dudas por favor... es arduino uno r3 un pelín malo?? de hecho compré dos tarjetas y el atmega de una ya cascó,

gracias por vuestra atención










// ARDUINO UNO + RFID-RC522 + KEYPAD MATRIX 4X3
//Sketch que, por medio de un relé, activa la apertura de una cerradura eléctrica
//Funciona indistintamente por RFID mediante una tarjeta (o llave tipo moneda)
//Y tambien introduciendo una secuencia de caracteres determinada en el teclado
// en este ejemplo la clave será "1234" y el caracter # al final.
//La ultima parte del código referente a la apertura con el KeyPad corresponde
//al usuario "Noter" del Foro Arduino.cc. ¡¡Gracias!!


//INICIO CONFIGURACION TECLADO
#include <Keypad.h>
const byte filas=4;
const byte columnas=3;
byte pinsfilas[filas]={5,6,4,3}; //en orden F1,F2,F3,F4
byte pinscolumnas[columnas]={0,1,2};//en orden C1,C2,C3
char teclas[filas][columnas]=
  {
    {'1','2','3'},
    {'4','5','6'},
    {'7','8','9'},
    {'*','0','#'},
  };
Keypad teclado = Keypad(makeKeymap(teclas),pinsfilas,pinscolumnas,filas,columnas);
//FIN CONFIGURACION TECLADO



char tecla; // Variable para almacenar la tecla pulsada en el KeyPad
//____________________________________
char *clave="3366"; // *****1234 ES LA CLAVE DE 4 D�GITOS PARA QUE ABRA CON EL TECLADO. MODIFICAR*********
char *introducida="xxxx"; // Para guardar espacio en memoria para la clave que introducimos
int indiceTeclado=0;
int x = 0;
//____________________________________

void setup()
{
  Serial.begin(9600);
 
  pinMode(13,OUTPUT);//Pin que activa el relé de apertura de la puerta
  digitalWrite(13,LOW);
 
}

void loop()
{

     
     
     //INICIO CODIGO APERTURA CON TECLADO
      tecla=teclado.getKey();
      if (tecla != NO_KEY)//si se presionó una tecla
      {
            if (tecla == '9')//si tecleamos el caracter "#" del KeyPad comprobaremos si abrir la puerta, y reiniciaremos clave introducida
            {
                  if (indiceTeclado==4) // Si no hemos introducido cuatro caracteres, ni comprobamos
                  {
                        bool coincide=true;
                        for (int i=0;i<4;i++){
                              if (clave!=introducida)
                              {
                                    coincide=false;
                                    Serial.println(" ");
                                    Serial.println("Clave INCORRECTA");
                                    Serial.println(" ");
                                    break; //si uno de los caracteres no coincide, salimos del bucle
                              }     
                        }
                        if (coincide)
                        {
                              Serial.println(" ");
                              Serial.println("Usuario Autorizado. Bienvenido");
                              Serial.println(" ");                         
                              //Activa el Relé mientras el pin 8 es "0"
                     
                     
                     
                     
                             
digitalWrite(13, HIGH);
delay(1500);
do{
x = digitalRead(9);
digitalWrite(13, HIGH);
delay(50);
} while (x == LOW);
digitalWrite(13, LOW);
                             



                        }
                  }
                  Serial.println();
                  indiceTeclado=0; // Siempre que se pulse 9 "borramos" la clave
            }
            else      // Si la tecla no es 9
            {
                  if (indiceTeclado < 4) // Cuando existan ya cuatro caracteres "pasamos de recibir más"
                  {
                        introducida[indiceTeclado]=tecla;
                        indiceTeclado++;
                        Serial.print(tecla);
                  }
            }
      }
      //FIN CODIGO APERTURA CON TECLADO
}

Logged

Cordoba
Offline Offline
God Member
*****
Karma: 29
Posts: 529
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si le agregas un display, puedes hacer un menu administrativo, y usar la eeprom para almacenar las claves, y una tarjeta o codigo maestro que es el unico autorizado a cambiar datos.
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esa idea mola, pero principalmente estoy atascado en que me falla la detección de fin de carrera del cerrojo, para que pare y se quede cerrado o abierto respectivamente

también había pensado en ponerle un módulo bluetooth y que no hubiera teclado ni display por fuera, todo interno, pero eso es el cuarto o quinto paso y estoy atascado en el primero

gracias por tu aporte
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

RESUELTO!!!!

no os lo vais a creer pero el problema era del ordenador. el ordenador del trabajo tiene alguna diferencia el la alimentación que suministra por USB, porque en el de casa funciona perfectamente. entre eso y el do while, estaba bloqueadísimo

Quote
                                                 digitalWrite(13, HIGH);
                                                  delay(2000);
                                                  
                                                  do{
                                                    digitalRead(2);
                                                    delay(10);
                                                    digitalWrite(13, HIGH);
                                                    }
                                                  while (digitalRead(2) == HIGH); //aquí no sirve un LOW haciendo la función inversa con el pulsador
                                                  
                                                  digitalWrite(13, LOW);


estando el código así tal cual, todo va bien. como tengo puesto un pulsador en lugar del senson HALL, si aprieto el pulsador durante los 2 segundos que tardaría el sensor en separarse del imán de final de carrera, el código funciona y el relé está alimentado hasta que el sensor llega al imán de principio de carrera.

creo que ese es el funcionamiento del HALL; hace de interruptor abierto cuando el imán está pegado, y cerrado al separarse. si es al revés, chungo porque en el digitalRead (2) == HIGH no sirve un LOW

bueno a lo mejor no comunico bien jjjeejejee, pero lo sigo intentando


« Last Edit: January 14, 2014, 06:04:57 am by pedroarduino » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perdonen que moleste pero alguien podría ayudarme a entender como guardan la clave introducida para compararla con la clave almacenada en el programa
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Holaaa soy nuevo en esto y me parece muy interesante tu proyecto pero tengo alguna duda.
El problema lo tengo a nivel de hardware. Yo tambien tengo un keypad, un arduino uno y un rfid rc522. El problema es que mirando el datasheet del lector rfid pone que trabaja a 3.3V. Si arduino trabaja con niveles logicos de 5V. Como has conectado el arduino al lector?? Si lo conectas directamente no podria freir la tarjeta o el arduino?? Muchas gracias de antemano y saludos
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

amigo en el Arduino hay una salida de 3.3v en la cual puedes conectar tu módulo RFID sin ningún problema.

Y para la coincidencia de la clave:
----------------------------------------------
bool coincide=true;
                        for (int i=0;i<4;i++){
                              if (clave!=introducida)
                              {
                                    coincide=false;
                                    Serial.println(" ");
                                    Serial.println("Clave INCORRECTA");
                                    Serial.println(" ");
                                    break; //si uno de los caracteres no coincide, salimos del bucle
                              }     
                        }
                        if (coincide)
                        {
                              Serial.println(" ");
                              Serial.println("Usuario Autorizado. Bienvenido");
                              Serial.println(" ");                         
                              //Activa el Relé durante X segundos
                              digitalWrite(7, LOW);
                              delay(x);
                              digitalWrite(7, HIGH);
                        }
----------------------------------------------

Primero declara un "bool coincide" que inicializa con "true" que se mantiene, salvo si se cumple esta condición clave!=introducida, si esto es así el bool cambia a "false" e indica que la clave es incorrecta, si es que no es así el acceso es correcto y autoriza el ingreso... espero haber podido aportar en algo amigos smiley
Logged

Pages: 1 2 3 [4]   Go Up
Jump to: