Conéctate para seguir esto  
chujalt

Control de acceso, Arduino + php + mysql

1 post en este tema

Saludos....

    Os voy a mostrar como hacer un control de acceso utilizando la placa arduino, mas un poco de código php y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc.


Materiales utilizados:

  • Una Placa Arduino (yo he utilizado la nano)
  • 8 cables dupont
  • Una pantalla lcd I2C 16X2
  • Un módulo led rgb

 

lcd_i2c.jpg

 

 

 

 

led_rgb.jpg

 

 

 

Conexiones:

  • Pin SCL del lcd --> Pin A5 de Arduino
  • Pin SDA del lcd --> Pin A4 de Arduino
  • Pin VCC del lcd --> Pin 5 voltios de Arduino
  • Pin GND del lcd --> Pin GND de Arduino
  • Pin V-G del led -->Pin GND de Arduino
  • Pin R del led --> Pin 11 de Arduino
  • Pin G del led --> Pin 10 de arduino
  • Pin B del led --> Pin 9 de Arduino 


Software necesario:

  • El código para Arduino (se mostrará mas abajo).
  • Una página php para introducir el código y verificarlo (se mostrará mas abajo).
  • Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo).
  • Una archivo php que conecta nuestro ordenador con arduino. Para descargar AQUI
  • Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo).


    El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante.

    Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo.

    Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra.

 

 

 

Código para la placa arduino:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
void setup()  
{
 Serial.begin(9600);  
pinMode(redPin, OUTPUT);
 pinMode(greenPin, OUTPUT);
 pinMode(bluePin, OUTPUT); 
 lcd.begin(16,2);   

 lcd.backlight(); 
 lcd.setCursor(4,0);
 lcd.print("ESPERANDO");
 lcd.setCursor(6,1);
 lcd.print("DATOS");  
while(!Serial.available()) {
 digitalWrite(bluePin, HIGH);
 delay(500);
 digitalWrite(bluePin, LOW);
 delay(500); 
}
}

void loop() 
 {
   if (Serial.available()) {
     delay(100);  
     lcd.clear(); 
     lcd.setCursor(4,0);
    lcd.print("SALUDOS"); 
    lcd.setCursor(1,1); 
     while (Serial.available() > 0) {
       char pepe = Serial.read();
       char juan[] = "^";
       if (pepe == juan[0]) 
       {
         lcd.clear();
          lcd.setCursor(3,0);
    lcd.print("SIN ACCESO"); 
    lcd.setCursor(1,1); 
       lcd.write("CODIGO ERRONEO");
       digitalWrite(bluePin, LOW);
 digitalWrite(greenPin, LOW); 
 digitalWrite(redPin, HIGH);

       }
       else
       {
       lcd.write(pepe);
       digitalWrite(bluePin, LOW);
 digitalWrite(greenPin, HIGH); 
 digitalWrite(redPin, LOW); 
       }
          
     }
     delay(5000);
   digitalWrite(greenPin, LOW); 
 digitalWrite(redPin, LOW);  
 software_Reset() ; 
   }
 }
void software_Reset() 
{
asm volatile ("  jmp 0");  
}  

Comentario del código:

  • Incluimos las librerías necesarias para que todo funcione correctamente.
  • Indicamos todos los pines necesarios.
  • Iniciamos la comunicación a 9600 baudios.
  • Apagamos todos los colores del led y encendemos el lcd.
  • Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo.
  • Si se inicia la comunicación serial y ésta envía el carácter "^" (previamente enviada por la página php) el lcd imprime  "Sin acceso. Código erroneo" y el led se pone en rojo fijo.
  • Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo.
  • Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla  "ESPERANDO DATOS" y el led de color azul parpadeante.



Código pagina principal php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>CONTROL DE ACCESO</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" >
<META name="robots" content="NOINDEX,NOFOLLOW"> 
</head>

<body>


<form action="" method="post"><p align="center">
<font size="5" color="#A04848">Introducir código de acceso:</font> <input type="text" name="action" size="15" maxlength="25" />
  <input type="submit" value="Validar"></p>
</form>
<?
$password = $_POST['action'];
if(!isset($password)) {
echo "";
   }
else
{
  include("conex.php");
 $cons = "select * from usuarios where contraseña='$password'";
$datos = mysql_query($cons,$link);
if ($row = mysql_fetch_array($datos,1))
{
echo "<p align='center'><font color='#00CC00' size='4' face='Arial'>Enhorabuena ".$row["usuario"].". Tu código es correcto</font></p>";    
include "php_serial.class.php";
 
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyUSB0");
$serial->confBaudRate(9600);
//$serial->confParity("none");
//$serial->confCharacterLength(8);
//$serial->confStopBits(1);
$serial->deviceOpen();
// $serial->sendMessage('1');
 
        $serial->sendMessage($row["usuario"]);
 
$serial->deviceClose();
}
else
{
echo "<p align='center'><font color='#FF0000' size='4' face='Arial'>El código de acceso no es correcto.</font></p>";
include "php_serial.class.php";
 
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyUSB0");
$serial->confBaudRate(9600);
//$serial->confParity("none");
//$serial->confCharacterLength(8);
//$serial->confStopBits(1);
$serial->deviceOpen();

// $serial->sendMessage('1');
 
        $serial->sendMessage('^');
 
$serial->deviceClose();
}
}
?>
</body>
</html> 

Comentario del código:

  • Se crea un formulario para introducir el código de acceso.
  • Compara ese código en la base de datos.
  • Incluye la clase antes bajada php_serial.class.php
  • Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en pantalla "Enhorabuena (usuario) tu código es correcto"
  • Si no existe ese código envía a la placa Arduino el símbolo ^ , mostrando en pantalla "El código de acceso no es correcto".



Código pagina conex.php:

<?
 $link = mysql_connect("localhost" ,"usuario","contraseña") or die("no se da conectado");
mysql_select_db("acceso",$link) or die("no se da seleccionado");
?>

    Este código no necesita comentario.


    En relación a la base de datos... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña".


    Por último, y para que todo funcione correctamente, al conectar la placa al pc, debemos darle permisos al usb, abrimos un terminal y escribimos

sudo chmod 666 /dev/ttyUSB0

    Y tenemos que abrir la ventana de la comunicación serial de Arduino IDE o abrir un Serial Port Terminal (en linux, en win Putty) y abrir la comunicación con el USB (ttyUSB0).


    Bueno ya está... espero que le sirva a alguien.... Saludos

 

 

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión
Conéctate para seguir esto