CONTROL DE ACCESO ELECTRÓNICO CON ARDUINO

de: bennyes2505

Dificultad:

Intermedio

Plataforma:

Arduino

Categoria:

Hardware

Favoritos:

favorite4

reportReportar

Descripción:

Manual para realizar la conexión y configuración de un sistema de acceso electrónico controlado con arduino. Ingresando un NIP de cuatro dígitos.

Licencia: Sin Licencia


Tags:

Componentes:

  • arduino mega(opcional) x 1
  • pantalla LCD 16X2 x 1
  • servo motor(opcional relevador solenoide, etc.) x 1
  • cables dupont x 40
  • botones normalmente abiertos( push buttom, otros) x 3
  • led RGB (opcional 2 leds individuales) x 1
  • potenciometro 10k ohms ( x 1
  • buzer x 1
  • cable usb para arduino x 1
  • proto board x 1
  • ide arduino
  • computadora x 1

Paso 0:

Un sistema de control de acceso es un sistema electrónico que restringe o permite el acceso de un usuario a un área específica validando la identificación por medio de diferentes tipos de lectura (clave por teclado, tags de próximidad o biometría) y a su vez controlando el recurso (puerta, torniquete o talanquera) por medio de un dispositivo eléctrico como un electroimán, cantonera, pestillo o motor.

Paso 1:

Una vez que que tengas todos tus componentes listos, comienza por armar el circuito en este caso comenzaremos por la parte de la LCD como se muestra en la siguiente figura.

el potenciometro es para manejar el brillo de la pantalla

nota: de preferencia cablear con la pantalla en el protoboard para evitar falsos contactos.

Paso 2:

Ahora conectaremos los botones, en esta ocasión los botones mandaran pulsos negativos cuando sean presionados,la conexión es como se muestra a continuación.

Después agregaremos el servo motor, el buzer y el led RGB de ánodo común.

Después agregaremos el servo motor, el buzer y el led RGB de ánodo común.


Ahora que todo esta conectado verificamos que todo este bien conectado para empezar a programar.

DIAGRAMA COMPLETO:

NOTA: NO OLVIDAR PUENTEAR LA ALIMENTACIÓN DEL PROTOBOARD SI ES QUE SE USARA MAS DE UNA SECCIÓN, SI ES POSIBLE USAR UNA FUENTE EXTERNA PARA EL SERVO PARA EVITAR CAÍDAS DE VOLTAJE SIEMPRE CON TIERRA COMÚN.

Paso 3:

En la parte de la programación usaremos el IDE de arduino que se puede descargar desde el siguiente link: https://goo.gl/yPNVju

A CONTINUACIÓN ANEXO EL CÓDIGO COMPLETO LO MEJOR EXPLICADO POSIBLE :

Código:

                                    
                                            //NOMBRE: CHAPA ELÉCTRICA CON PASSWORD
// CPMX7
//HACKATON MAKERS
//ceado por alumnos de la Universidad Tecnológica Del Estado De Zacatecas
//programadrores: Benito Espinoza Salazar ING. EN MECATRÓNICA
//                Esau Alejandro Reyes Montaño ING. EN MECATRÓNICA 
// preguntas y comentarios al correo: [email protected]
[email protected]////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
# include <LiquidCrystal.h> // incluye la Biblioteca LiquidCrystal 
# include <Servo.h> //incluye libreria de servomotores
//estos son los pines donde se conecta la lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//se declaran nombres a los botones así como sus puertos
int btn1=22; //boton 1
int btn2=24; //boton 2
int btn3=26;// boton 3 *se pueden agregar mas botones*
int led=8; //el led(azul) indica cuando se esta abierta la puerta
int led2=9; //el led 2(verde) indica cuando se presiona un botón 
//-----------------------------------------------------------------
//se declaran los estados y se les asigna un valor de cero como referencia
int estado1=0; 
int estado2=0;
int estado3=0;
//se declara el servo 
Servo myservo;
//-----------------------------------------------------------------------
//
void  setup ( )  { 
lcd.begin( 16 , 2 ) ; // Inicializa la interfaz de la pantalla LCD
myservo.attach(7); //se le asigna una salida al servo 
digitalWrite(led2,HIGH); //se pone en alto el led dos (en este caso se uso un led RGB con ánodo común)
digitalWrite(led,HIGH); //se apaga el led (con ánodo común) 
//con pinMode se asigna si es salida o entrada con OUTPUT(salida) o INPUT(entrada) 
pinMode(btn1,INPUT); //entrada botón 1
pinMode(btn2,INPUT);// entrada botón 2
pinMode(btn3,INPUT);// entrada botón 3
pinMode(led,OUTPUT);// salida led 1
pinMode(led2,OUTPUT); //salida led 2
}//fin de void setup 

/////////////////////////////////////////////////////////////////////////////////////////////
// SE ESPERA EL PRIMER NUMERO 
void loop(){
  lcd.setCursor(0,0); //se posiciona el cursor de la LCD en las coordenadas 0,0 
  lcd.print("INTRODUCIR"); //se imprime el primer mensaje
  lcd.setCursor(0,1);//se posiciona el cursor de la LCD en las coordenadas 0,1 (renglón de abajo)
  lcd.print("PASSWORD");//se imprime el mensaje 
  //se apagan los leds
  digitalWrite(led2,HIGH); 
  digitalWrite(led,HIGH);
  //a los estados de les asigna el valor introducido en los botones 
estado1=digitalRead(btn1);
estado2=digitalRead(btn2);
estado3=digitalRead(btn3);
delay(250);// se usa un delay para evitar el rebote en los botones 
 if(estado1==LOW){ // se presiona el botón 1 
  lcd.clear();
    digitalWrite(led2,LOW);// enciende el led indicando que se presiono el botón 
    delay(100); //100ms para que sea visible
    num2();// el programa ahora ejecuta la función con num2 para esperar el siguiente numero
 }//fin del if
 //------------------------------------------
 //enciende el led aunque se presionen los botones incorrectos 
   if(estado2==LOW){
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  } 
  if(estado3==LOW) {
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  
  if(estado1== HIGH)// si el botón no esta presionado se regresa a la función
  {
    loop();
  }
   
  
  }//fin de loop 
  ////////////////////////////////////////////////////////////////////////////////////////////
//   FUNCION PARA ESPERAR EL SEGUNDO NUMERO 
void num2(){
  lcd.setCursor(0,0); //se posiciona el cursor de la LCD en las coordenadas 0,0 
  lcd.print("INTRODUCIR"); //se imprime el primer mensaje
  lcd.setCursor(0,1);//se posiciona el cursor de la LCD en las coordenadas 0,1 (renglón de abajo)
  lcd.print("PASSWORD");//se imprime el mensaje 
  //se apagan los leds
  digitalWrite(led2,HIGH); 
  digitalWrite(led,HIGH);
  //a los estados de les asigna el valor introducido en los botones 
estado1=digitalRead(btn1);
estado2=digitalRead(btn2);
estado3=digitalRead(btn3);
delay(250);// se usa un delay para evitar el rebote en los botones 
  //----------------------------------------
   if(estado2==LOW) {
    lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    num3(); // se va a num 4
  }//findel if
  //-----------------------------------------
  //enciende el led aunque se presionen los botones incorrectos 
  if(estado1==LOW) {                                        //
  lcd.clear();
    digitalWrite(led2,LOW);                                 //  
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  if(estado3==LOW) {                                       //
  lcd.clear();
    digitalWrite(led2,LOW);                                 //
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  
  if(estado2== HIGH){
    
    num2();
  }
 
  
  }
   ////////////////////////////////////////////////////////////////////////////////////////////
//   FUNCION PARA ESPERAR EL TERCER NUMERO 
  void num3(){
   lcd.setCursor(0,0); //se posiciona el cursor de la LCD en las coordenadas 0,0 
   lcd.print("INTRODUCIR"); //se imprime el primer mensaje
   lcd.setCursor(0,1);//se posiciona el cursor de la LCD en las coordenadas 0,1 (renglón de abajo)
   lcd.print("PASSWORD");//se imprime el mensaje 
  //se apagan los leds
  digitalWrite(led2,HIGH); 
  digitalWrite(led,HIGH);
  //a los estados de les asigna el valor introducido en los botones 
estado1=digitalRead(btn1);
estado2=digitalRead(btn2);
estado3=digitalRead(btn3);
delay(250);// se usa un delay para evitar el rebote en los botones 
  //se presiona el boton 3 
  //---------------------------------
   if(estado3==LOW) {
     lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    num4();
  }
  //----------------------------------
  if(estado2==LOW) {
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  if(estado1==LOW) {
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  
  if(estado3== HIGH){
    
    num3();
  }
 
  
  }
   ////////////////////////////////////////////////////////////////////////////////////////////
//   FUNCION PARA ESPERAR EL CUARTO NUMERO 
  void num4(){
    lcd.setCursor(0,0); //se posiciona el cursor de la LCD en las coordenadas 0,0 
    lcd.print("INTRODUCIR"); //se imprime el primer mensaje
    lcd.setCursor(0,1);//se posiciona el cursor de la LCD en las coordenadas 0,1 (renglón de abajo)
    lcd.print("PASSWORD");//se imprime el mensaje 
  //se apagan los leds
  digitalWrite(led2,HIGH); 
  digitalWrite(led,HIGH);
  //a los estados de les asigna el valor introducido en los botones 
estado1=digitalRead(btn1);
estado2=digitalRead(btn2);
estado3=digitalRead(btn3);
delay(250);// se usa un delay para evitar el rebote en los botones 
  //--------------------------------
 if(estado2==LOW) {
    digitalWrite(led2,LOW);
    delay(100);
    lcd.clear();
    abrir();
  }//fin del if
  //---------------------------------
 if(estado1==LOW) {
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  if(estado3==LOW) {
  lcd.clear();
    digitalWrite(led2,LOW);
    delay(100);
    loop();// se regresa a loop si no se presiona el botón correcto
  }
  
  if(estado2== HIGH){
    
    num4();
  }
 
  
  }


   ////////////////////////////////////////////////////////////////////////////////////////////
  //En esta función  se abre la cerradura por 5 segundos ( 
  void abrir(){
  lcd.setCursor(0,0);
  lcd.print("PUERTA ABIERTA");
  lcd.setCursor(0,1);
  lcd.print("POR 5 SEG.");
  myservo.write(150);//gira el servo 150º
  digitalWrite(led2,HIGH);
  digitalWrite(led,LOW);
  delay(5000); // enciende el led y abre la cerradura  por 5 segundos 

  myservo.write(100);// el servo gira 100º para regresar a su lugar 
  lcd.clear();// limpia la pantalla
  loop();// se regresa el inicio del programa 
  }// fin del programa
                                    
                                

Paso 4:

VÍDEO DE DEMOSTRACIÓN

Se puede observar que cuando se ingresa la contraseña el servo ( en esta caso simulador de la chapa) gira y después vuelve a su posición.


Paso 5:

Esto fue todo de nuestra parte espero este tutorial sea de su agrado

comenten sus dudas y comentarios, hasta la proxima!!

los saludan Benito Espinoza Salazar, Esau Alejandro Reyes Montaño

Comentarios:

  • ViriCruz ViriCruz

    hola, está muy bien estructurado su tuto :D, que bueno que pusieron imagenes por cada paso que describen y que chido que comentaron el código, ustedes muy bien!. Y lo del video también está super.

    01/07/2016

mode_edit