Control de Acceso con RFID-RC522 y KEYPAD MATRIX 4X3

Hola Canguiri,

En este post tienes el código y esquema de montaje del arduino + keypad + relé + rfid. También el código.

Solo te faltaría añadir el lcd y la parte de código correspondiente y sustituir el relé por el servo y su parte de código correspondiente.

En cualquier caso, si tienes de plazo hasta diciembre y no tienes ni idea ni de montaje ni de programación tienes dos opciones: a) ponerte las pilas ya mismo y empezar a trastear con tu arduino ( entiendo que tienes uno, ¿no?) y processing o b) hacer el proyecto con otra plataforma que conozcas algo más.

Si optas por la a) encontrarás en Internet y en este mismo foro multitud de sketch y proyectos con LCD y también con servos que, a poco que aprendas, te será fácil integrar.

Un saludo!

si cuento con un arduino uno
pero apenas soy nuevo en estos temas
por eso pido ayuda

canguiri:
si cuento con un arduino uno
pero apenas soy nuevo en estos temas
por eso pido ayuda

Compila el codigo que te deja Jukar funciona correctamente. Mi consejo esque vayas poco a poco, ir desarrollando cada funcionalidad y aumentando el codigo junto con los diferentes dispositivos. Para el LCD te puedo dejar el esquema de conexion

Hola Jukar dos dudas:

Para tu proyecto, ¿como se le haría para leer mas llaves (tags o token como se llamen en el RFID)?
y segunda, cuales llaves me recomendarías comprar (entendiendo que ya tengo el RFID-RC522) y solo ocupo mas llaves.

Muchas gracias por tu proyecto,

Saludos

ragde:
Hola Jukar dos dudas:

Para tu proyecto, ¿como se le haría para leer mas llaves (tags o token como se llamen en el RFID)?
y segunda, cuales llaves me recomendarías comprar (entendiendo que ya tengo el RFID-RC522) y solo ocupo mas llaves.

Muchas gracias por tu proyecto,

Saludos

Creo que ese lector es NFC de RFID 13.56 MHz cualquier llave de ese tipo te vale, puedes encontrar alquier cosa token, tag, cards, siempre que sea 13.56 MHz

hola señores

estoy usando su código para emular la controladora de una caja fuerte que se quemó y por ahora va bien la cosa, pero tengo un par de dudas...

http://forum.arduino.cc/index.php?topic=204139.msg1503175#msg1503175

la primera es si el lector de tarjetas tiene potencia para ir por dentro de la puerta que es de un centímetro de grosor, porque si llega un ladrón gracioso y arranca el teclado y el lector de tarjetas... adiós caja, aunque bueno yo en principio solo estoy usando la parte de código correspondiente al teclado.

la segunda duda que me surge es que al temporizar el relé para darle chicha al motor que mueve el cerrojo, igual llevará unos sensores para indicar al programa cuando el cerrojo ha llegado al principio y al final de carrera. yo había pensado calcular el tiempo que tarda en cerrar y abrir y temporizarlo lo más exactamente posible, pero siempre habrá algún desajuste que a la larga hará que no cierre ni abra bien

han sido muy ilustrativos en los comentarios, gracias

hola que tal...

como comentaba en el anterior post, he usado vuestro código para emular una controladora de una caja fuerte, y de momento he conseguido integrar a mi UnoR3 el teclado propio de la caja fuerte, y ahora intento integrar los sensores de principio y fin de carrera. lo que trae el sistema es un par integrados UGN3013T, que hace de interruptor cuando se le enfrenta un imán que se mueve a la par que el cerrojo. el integrado probado con el código de ejemplo "Button" funciona perfecto, hace de interruptor NC y al enfrentarle el imán se abre. intento colar la orden de parar el motor en lugar del retardo de digitalWrite. intento averiguar por mí mismo, aunque si alguien que lo sepa me ayuda, paso a la siguiente cuestión que ya es montar físicamente.

gracias por leerme, un saludo

#include <Keypad.h>

const byte ROWS = 5;
const byte COLS = 4;

char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','A'},
{'7','8','9','A'},
{'C','0','X','A'},
{'A','A','A','A'}
};

byte rowPins[ROWS] = { 7, 6, 8, 9, 5 };
byte colPins[COLS] = { 12, 11, 10, 4 };

// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char key;
char *clave="1111";
char *introducida="xxxx";
int indiceTeclado=0;

void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13, LOW);
}

void loop()
{

key=keypad.getKey();

if (key != NO_KEY)

{
if (key == 'A')
{
if (indiceTeclado==4)
{
bool coincide=true;
for (int i=0;i<4;i++)
{
if (clave_!=introducida*)_
_
{_
coincide=false;
break;
_
}}_
if (coincide)
_
{ _
_
digitalWrite(13, HIGH);_
delay(2000);
digitalWrite(13, LOW);
_
}}_
Serial.println(key);
indiceTeclado=0;
_
}_
else
_
{_
if (indiceTeclado < 4)
_
{*_
introducida[indiceTeclado]=key;
indiceTeclado++;
Serial.print(key);}}}}

[/quote]

creo que lo lograré con el código de ejemplo de "State change detection"

jjajajaja!!! joer nadie me ayuda!!! lo logré con un do...while

gracias por nada!!!! jjjejejejeje y feliz navidad

Enhorabuena compañero!!! Tu proyecto es muy interesante. Me alegra que consiguieras llevarlo a buen puerto.
No te preocupes si nadie te responde, puede ser que nadie sepa ayudarte o simplemente que el que sí sepa no te haya leído.

Un saludo!

... O no haya entendido la pregunta :blush:
Ahora que veo lo sencillo de la solución, entiendo lo de "intento colar la orden de parar el motor en lugar del retardo de digitalWrite"; pero en serio que (y tal vez a otros también) me despistó. Disculpas, en todo caso, por no haberte pedido una aclaración.

GRACIAS POR RESPONDER!!!!

aunque estoy en un momento de decepción... empiezo a sospechar que con arduino no voy a obtener la estabilidad y seguridad que requiere mi proyecto, porque va a estar dentro de una caja fuerte, mayormente, y si falla hay que taladrar

ya tuve un susto; compré dos tarjetas y después de un día de pruebas me falla el ATMEGA de una de ellas

y ahora, no me funciona el logro del otro día, bueno funciona una sí, una no.

el sistema original lleva dos sensores y un imán en el cerrojo, pero yo lo voy a cambiar a dos imanes y un sensor, para simplificar el código. el retardo de un segundo lo uso para que le dé tiempo al imán a separarse del sensor, hasta que lo alcanza el otro imán. el otro día funcionaba bien pero ahora me ocurre lo siguiente

el comparador de claves funciona perfecto, cuando se mete la clave correcta la primera vez el cerrojo se desplaza, y se para cuando el sensor le dice que tiene que parar. hasta ahí bien. lo malo viene la segunda vez que se mete la clave correcta, el do...while no funciona y el cerrojo se para cuando pasa un segundo. si se mete la clave mal el siguiente ciclo lo rula bien, pero si se mete la clave siempre bien, funciona una sí, una no.

lo que me preocupa es que el otro día funcionaba a la perfección, y desmonté el cableado de prueba para el montaje final y de repente bam bum crash... lo más seguro es que la haya pifiado, porque estuve metiendo varios códigos, del Button, Debounce, StateChangeDetection, DigitalInputPullup... a lo mejor me he dejado una línea que está rompiendo la armonía... luego mirando un manual descubrí el DO-WHILE y eureka...

empezaré de cero y os iré contando, gracias por leerme, un saludo

digitalWrite(13, HIGH);
delay(1000);
do
{
x = digitalRead(9);
digitalWrite(13, HIGH);
} while (x == HIGH);

digitalWrite(13, LOW);

Hola Jucar.
Enhorabuena por tu trabajo y por dejar que los que sabemos menos podamos aprovecharnos un poco a la vez que aprendemos.
El caso es que iba a utilizarlo y me da un error. Este:

#include <SPI.h>
#include <RFID.h>
RFID rfid(10,9); // Pines de conexión del RFID EN ESTA LINEA
char tecla; // Variable para almacenar la tecla pulsada en el KeyPad
//____________________________________
char clave="1234"; // 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;

Esto es lo que dice:

sketch_dec19b:29: error: 'RFID' does not name a type
sketch_dec19b.ino: In function 'void setup()':
sketch_dec19b:41: error: 'rfid' was not declared in this scope
sketch_dec19b.ino: In function 'void loop()':
sketch_dec19b:52: error: 'rfid' was not declared in this scope
sketch_dec19b:76: error: 'rfid' was not declared in this scope

Gracias de antemano por la ayuda

hola chemamata

o mucho me equivoco o no has descargado la librería para que la instale con el sketch, porque el software arduino no la trae de serie

si no es eso lo siento, mi nivel es muy bajo y es lo único que se me ocurre. suerte

¿Tienes correctamente instalada la librería RFID?
El archivo RFID.h debería aparecer (junto con el resto de los archivos y carpetas de la misma) exactamente en la ruta Arduino\libraries\RFID\RFID.h.
Saludos.

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

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!!!!

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[i]!=introducida[i])
                             {
                                   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
}

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.

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