Go Down

Topic: Sistema de Control de Acceso electronico con RFID + teclado Matricial + LCD 16x2 (Read 423 times) previous topic - next topic

achristian

Buenos Días, estoy iniciándome en este mundo y tengo muchas dudas.!

Primero que nada,me gustaría saber si es posible crear sistema de Control de Acceso con:
Un Micro-controlador ATMEGA328P (previamente compilado en un Arduino)
Una pantalla LCD 16x2
Un sensor RFID
Un KEYPAD o teclado matricial 4x4
Un Sensor de Movimiento
Una salida para que el sensor de movimiento ordene que se encienda una luz luego de 30 segundos
Una salida para activar un Rele que ordenara la apertura de la cerradura magnetica cuando el RFID o teclado matricial indique un ingreso positivo


Y la segunda pregunta es saber si se pueden guardar múltiples claves basadas en los codigos de Empleado y puedo registrar al menos 68 de RFID.??

Se estaría hablando de 68 códigos matriciales distintos y 68 registros de llaves para RFDI

Les dejo un bosquejo de una imagen que hice para que se tenga una idea.
Agradecere toda su ayuda posible.


surbyte

Todas las respuestas son SI, pero todas involucran mucho trabajo, conocimientos, y paciencia.

Sin ninguna de estos 3 elementos no podras hacerlo.

Hay muchos ejemplos de lo que dices usand RFID, PHP y base de datos en MySQL

Es posible hacerlo de otros modos, incluso con una SD pero será lento.

achristian

Surbyte, amigo, gracias, de verdad...
Requiero mas de conocimientos de Electrónica para el área de ensamblaje soldadura, requiero de paciencia y ps, la verdad dispongo de poco tiempo para la ejecución de este proyecto, lo que si no dispongo es del conocimiento en el área de programacion, cosa que es fundamental para Arduino.

Sin embargo, he visto mucho en la Internet acerca de los códigos para este tipo de proyecto, cosa que me motiva a seguir en este camino.


surbyte

Códigos encontrarás por doquier, pero bueno, con paciencia puedes sacarlo.
No voy a pincharte la idea. Si al final no lo logras igualmente conseguirás un buen conocimiento de muchas cosas.

Solo perservera.
Si sigues moveré el hilo a Proyectos, pero tengo que ver tu vocación en el tema.
Mucha gente inicia cosas en Proyectos pero justamente, éste lo es, pero requiere de constancia a tu tiempo claro... la vida no es solo esto.

Hay varios proyectos insisto del tema.
Busca MCF522 y estan casi todos asociados con PHP y MySQL solo que tmb recuerdo que poca información han dado de esas partes pero se puede conseguir desde otro lado y hay mucha gente capacitada aca que te guiará tmb.
Empieza en Search Arriba derecha

achristian

Códigos encontrarás por doquier, pero bueno, con paciencia puedes sacarlo.
No voy a pincharte la idea. Si al final no lo logras igualmente conseguirás un buen conocimiento de muchas cosas.

Solo perservera.
Si sigues moveré el hilo a Proyectos, pero tengo que ver tu vocación en el tema.
Mucha gente inicia cosas en Proyectos pero justamente, éste lo es, pero requiere de constancia a tu tiempo claro... la vida no es solo esto.

Hay varios proyectos insisto del tema.
Busca MCF522 y estan casi todos asociados con PHP y MySQL solo que tmb recuerdo que poca información han dado de esas partes pero se puede conseguir desde otro lado y hay mucha gente capacitada aca que te guiará tmb.
Empieza en Search Arriba derecha
Seré sincero tanto con el foro como con usted.
Aun no tengo ninguno de los componentes y por lo que primero empezare es por comprar el ATMega328p
del cual ya saque toda la información, Datasheet, etc. porque esto lo estoy ejecutando en una mi tesis de grado pero a la vez aspiro hacer 2 proyectos que tengo en mente desde hace años y siento que Gracias a la tecnologia y a Arduino puedo llevarlos a la realidad (Aunque ya existan).
pero esto lo voy a llevar a la realidad.

En Venezuela estos cada componente de esta marca son super costosos por lo que quiero iniciar creando el Arduino comprando un ATMega328P con su bootloader precargado para ahorrar algo de dinero e invertirlo en otros componentes.

Sin embargo para la tesis de grado tengo muchas dudas referente a este proyecto planteado y quisiera saber si no incumplo con normas de Foros al realizarlas.!

surbyte


achristian

#6
Aug 09, 2017, 10:57 am Last Edit: Aug 10, 2017, 12:39 pm by surbyte Reason: Los códigos y enlaces deben llevar etiquetas.
Para que vayas introduciéndote en el tema: Busque asi MFC522 MySQL en google y dió esta respuesta entre otras

https://github.com/DeligenceTechnologies/Arduino-interface-with-MySQL-for-storing-RFID-access-details
He indagado en los temas y la verdad son bastante complejos.!

Buscando consegui este proyecto que es muy similar a lo que ando tratando de hacer,

https://www.youtube.com/watch?v=1xOJJyD4SWg

Esta es la programacion del proyecto.

Code: [Select]
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); ;  //

#define RST_PIN  9  //Pin  para el reset del RC522
#define SS_PIN  10//Pin  para el SS (SDA) del
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.

const byte ledind=8;    //Rele del Abrepuertas
const int  timetoclean=3000;  //msecs en quitar información display
const int numcards=2;                                 //numero de tarjetas rfids que hay definidas
unsigned long rfid[numcards]={0XB5E17A25,0X95190753}; //definimos los codigos de las tarjetas (4 primeros digitos en formato hexadecimal)
char* individuo[numcards]={"HOLA: MANUEL.S","HOLA:ROSA IRENE"};      //aqui podemos introducir las personas a la que pertenecen los targetas
unsigned long clearlcd;
boolean er;  //Cambia de estado cuando hay información en el display

const byte ROWS = 4; //four
const byte COLS = 3; //three columns

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

byte rowPins[ROWS] = {3,2,1,0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7,6,5}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


const byte ncodigos=3;  //Nº de codigos que queremos usar
//Detallamos los codigos que darán paso
char* Codkeypad[ncodigos]={"555555",
                          "111111",
                         "123456"};
//Detallamos los saludos correspondientes a cada código
char* nombreskeypad[ncodigos]={"Hola Sr.EDUARDO",
                              "Hola Sr.GAMBOA",
                              "Buenas Sr.BRISIO"};
String pass;
byte pos= 0;

void setup() {
 Serial.begin(9600);
 SPI.begin();                // Init SPI bus
 mfrc522.PCD_Init();        // Init MFRC522 card
 lcd.begin(16,2);
 limpialcd();       //Procedimiento borrado display
 pinMode(ledind, OUTPUT);  //Definimos el pin13 de salida
 digitalWrite(ledind, LOW);  
}

void loop() {
 
 if (er==true) if (clearlcd+timetoclean<millis()) limpialcd();
 //limpia la información del display
 //LEE keypad
 char keypadkey = keypad.getKey();
   if (keypadkey != NO_KEY) password(keypadkey);
 MFRC522::MIFARE_Key key;
 for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
  // Look for new cards
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
   
   return;
    }                //MIENTRAS NO LEA UNA NUEVA TARJETA EL PROGRAMA NO PASA DE AQUI
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;
  byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  byte buffer[18];  
  byte block  = 0;
  byte status;
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
          error();
          return;
       }
       // Read block
  byte byteCount = sizeof(buffer);
  status = mfrc522.MIFARE_Read(block, buffer, &byteCount);  
  if (status != MFRC522::STATUS_OK) {
    error();
}
       else  // Dump data
{
       
       
       //transforma los 4 primeros numeros del bloque 0 en una variable de 4 bytes para poderla comparar con las numeraciones registradas
  unsigned long card=0;
  byte b=0;
  for (int a=3;a>-1;a--) {
  switch (a){
       case 3:  card += buffer[b]*16777216; break;
       case 2:  card += buffer[b]*65536; break;
       case 1:  card += buffer[b]*256; break;
       case 0:  card += buffer[b];break;
       }
       b++;}
  boolean encontrada=false;
  for (byte a=0;a<numcards;a++) {                      
         if (rfid[a]==card) {
           lcd.setCursor(0,0);
           lcd.print(individuo[a]);
           encontrada=true;}} //si el num de la tarjeta coincide con alguno de los definidos dice el nombre
  lcd.setCursor(0,1);
  if (encontrada) {
             lcd.print("TARJETA VALIDA:)");
             digitalWrite(ledind, HIGH);
             delay(7000);  //Activamos el led durante 0,5 seg
             digitalWrite(ledind, LOW); }
  else
           {lcd.print("TARJETA INVALIDA");
           lcd.setCursor(0,3);
           lcd.print("TARJETA INVALIDA:(");}
           er=true;
           clearlcd=millis();}
  mfrc522.PICC_HaltA(); // Halt PICC
  mfrc522.PCD_StopCrypto1();  // Stop encryption on PCD      
}
//Procedimiento para cuando ha habido un error en la lectura
//de la numeración de la tarjeta
void error() {
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Error de lectura");
 lcd.setCursor(0,1);
 lcd.print("Vuelva a pasarla");
 clearlcd=millis();
 er=true;}
//Hace un borrado del display y reinicia variables  
void limpialcd(){
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("PASE TARJETA O ");
 lcd.setCursor(0,1);
 lcd.print("TECLEE CODIGO :)");
 er=false;
 pos=0;
 pass="";
 }

//Hace de contador de digitos al introducir codigo y cuando
//ya se han introducido 6 digitos llama al procedimiento para
//su compruebacion

void password(char key) {
 clearlcd=millis();
  pass+= key;
 lcd.setCursor(2+pos,1);
 lcd.print("*");
 if (pos<5)
   pos++;
   else {comprueba_codigos();pos=0;}

}  
//Comprueba si el codigo introducido esta registrado
//si lo está da acceso
void comprueba_codigos() {
 boolean encontrada=false;
 for (byte a=0; a<ncodigos;a++){
         String pwd = String(Codkeypad[a]);
         if (pwd==pass) {
           lcd.setCursor(0,0);
           lcd.print(nombreskeypad[a]);
           encontrada=true;}}
  lcd.setCursor(0,1);
  if (encontrada) {
             lcd.print("CODIGO VALIDO:)");
             digitalWrite(ledind, HIGH);
             delay(7000);  //Activamos el led durante 0,5 seg
             digitalWrite(ledind, LOW); }
  else
           {lcd.print("CODIGO INVALIDO:(");
           lcd.setCursor(0,1);
           lcd.print("CODIGO INVALIDO:)");}
           er=true;
           clearlcd=millis();
}


pero la duda que se me crea es:

Sera que para ingresar un nuevo usuario hay que sacar el Micro y reprogramarlo.?

surbyte

Tal como esta planteado ese código si. Pero es un código ejemplo.
Podrias por ejemplo agregar una SD y cargar los usuarios desde la SD, o tener una opción via Serial para agregar/modificar/borrar usuarios que finalmente queden en la flash del Arduino que es algo que pocos usan y puede servir como almacenamiento ya que es un espacio desaprovechado.

achristian

Tal como esta planteado ese código si. Pero es un código ejemplo.
Podrias por ejemplo agregar una SD y cargar los usuarios desde la SD, o tener una opción via Serial para agregar/modificar/borrar usuarios que finalmente queden en la flash del Arduino que es algo que pocos usan y puede servir como almacenamiento ya que es un espacio desaprovechado.
Sin embargo observando en varios diagramas, no logre conseguir uno que aparte de poseer el teclado matricial, conjuntamente tuviera agregado el sensor RFID ya que practicamente el ATmega328p queda sin puertos disponibles si tiene una pantalla display, practicamente con la pantalla y el teclado matricial deja sin In y Out disponibles al micro. por lo que ahora es que me estoy dando cuenta que basicamente no es posible con un microcontrolador Atmega328P crear el Sistema de control de acceso de acceso que plantie en mi primera pregunta del foro que fue con:
Un Micro-controlador ATMEGA328P
Una pantalla LCD 16x2
Un sensor RFID
Un KEYPAD o teclado matricial 4x4
Un Sensor de Movimiento.
y vaya tarde que me di cuenta cuando estoy a solo 3 dias de presentar el proyecto de Tesis. :(

achristian

 Surbyte...   Acabo de encontrar en un foro aqui mismo un proyecto Control de Acceso con RFID-RC522 y KEYPAD MATRIX 4X3 de hecho vi que comentastes algo, pero ese proyecto habra sido con Arduino UNO.?
NO logro ver bien la placa xq el lector RFID esta montado en la parte de arriba y sinceramente no logro ver que placa es y lei caso las cuatro paginas de ese foro y no vi eso por ningun lado. una luz al final del tunel alumbra al ver eso.. siento que hay esperanzas.... tengo FE en ese micro controlador, xq lo veo como uno de los mas completo.

surbyte

Pero si haces comentario de un link pq no lo pones? Como esperas que yo sepa de lo que hablas, casi respondo en todos los msgs asi que imagina.
Recuerdo haber respondido en varios de RFC522
Si tu proyecto queda corto con el UNO usa un MEGA. Sal corriendo compra un MEGA modica pines y ya lo tienes.


Go Up