ChuJALT
Aporte: Control de acceso, Arduino + php + mysql - Versión para impresión

+- ChuJALT (https://chujalt.com)
+-- Foro: PLACAS DE PROTOTIPOS Y MINI PC'S (https://chujalt.com/forum-22.html)
+--- Foro: Anduino, Nodemcu, Wemos (https://chujalt.com/forum-23.html)
+--- Tema: Aporte: Control de acceso, Arduino + php + mysql (/thread-11.html)



Control de acceso, Arduino + php + mysql - chujalt - 05-03-2021

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:

[Imagen: lcd_i2c.jpg]



[Imagen: led_rgb.jpg]



Conexiones:


Software necesario:


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:

Código:
#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:



Código pagina principal php:

Código 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:



Código pagina conex.php:

Código 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

Código:
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