Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Anexo 4 Sistema de Autenticación PDF
Anexo 4 Sistema de Autenticación PDF
ENERO, 2016
pág. 1
INFORME
1.- TITULO:
2.- OBJETIVOS:
General:
-Implementar un sistema de autenticación de usuarios de aulas y laboratorios basado
en software y hardware libre controlado desde una plataforma Cloud Computing
Específicos:
- Instalar un servidor LAMP en la Plataforma Cloud Computing.
- Definir la tecnología de control de autenticación para usuarios de aulas y
laboratorios.
-Analizar el tipo de comunicación entre el hardware y software libre para el control de
autenticación.
1. RESUMEN
2. PALABRAS CLAVES:
pág. 2
3. Descripción del Trabajo
En esta parte, el usuario del servicio de base de datos deberá elegir una contraseña que
le permita acceder en un futuro al servicio completo de Mysql, figura 1.
pág. 3
Para una mayor seguridad se debe introducir dos veces la misma contraseña.
Asimismo, se debe instalar el lenguaje PHP, para ello se empleará el comando
Una vez que el servidor haya reiniciado las aplicaciones se ejecutarán con normalidad.
Además, de haber instalado un motor de base de datos es necesario tener un
administrador de base de datos. Para este caso se empleará phpMyadmin a través del
comando:
Una vez ejecutado el comando anterior, se debe elegir el tipo de servidor con la barra
espaciadora del teclado, figura 2.
Una vez aceptado el servidor correcto, se debe dejar por defecto la opción
“dbconfig_common” figura 3.
pág. 4
Figura 3: Configuración de phpmyadmin [1].
Arduino.
pág. 6
Asimismo, Arduino, está basado en microcontroladores ATMEGA 8 y ATMEGA 168 de
ATMEL. Por otra parte, los diagramas de los diferentes módulos se encuentran publicados
bajo licencia Creative Commons, en este sentido, varios diseñadores con experiencia en
circuitos pueden elaborar su propia versión del módulo. El entorno de programación de
Arduino es fácil de usar para principiantes y suficientemente práctica para usuarios
avanzados. El lenguaje se puede expandir a través de librerías desarrolladas en C++,
basado en lenguaje AVR C [2]. En la figura 6, se muestra el modelo Arduino Uno, el más
popular de esta plataforma.
Raspberry Pi.
pág. 7
Figura 7: Raspberry Pi 2.
Intel Galileo
Es una placa desarrollada por Intel con una arquitectura compatible con Arduino,
integrado con un procesador propio de Intel el SoC X1000. El tamaño de la placa es de
10 cm de longitud por 7 cm de ancho, en su interior se encuentran integrados conectores
USB, jumpers UART, un conector Ethernet, así también, el conector de alimentación [5].
El diseño de Intel a través de esta innovadora tarjeta llamada Galileo es optimizar el uso
de Arduino con un sistema operativo Linux. Lo que permitirá expandir en gran manera
sus funcionalidades, normalmente Arduino puede conectarse con varios módulos a través
de las diferentes librerías como Ethernet, Wifi, EEPROM, SPI, Wire. Por otra parte, el
sistema operativo Linux le permite una compatibilidad muy elevada con aplicaciones que
pueden ser desarrolladas en Phyton, Node.js, SSH, Telnet [6]. En la figura 8, se muestra la
tarjeta Intel Galileo.
pág. 8
Las tecnologías asociadas al hardware libre evolucionan constantemente, en función de
las aplicaciones a desarrollarse se deberá tomar en consideración algunos aspectos que se
presentan en la siguiente tabla:
pág. 9
En este sentido, el usuario podrá elegir el equipo que más se adapte a sus necesidades.
Para la presente propuesta se ha elegido emplear la plataforma Arduino, debido a sus
grandes prestaciones en el manejo de puertos digitales y análogos. Asimismo, un punto
a tener en consideración es que el control y supervisión estará desarrollado en una
plataforma Cloud Computing. De esa manera en el control de autenticación no es
necesario tener un mini computador con sistema operativo.
Asimismo, la plataforma Arduino cuenta con varios modelos de tarjetas electrónicas.
En el desarrollo de la propuesta se empleará el modelo Arduino Mega 2560, en
función del número de puertos disponibles para la comunicación con los diferentes
dispositivos para el sistema de autenticación y el registro en una base de datos en la
plataforma Cloud Computing.
pág. 10
El sistema de registro de usuarios se realizará integrando un lector de tarjetas RFID,
controlado desde una tarjeta de la plataforma Arduino conectado a la base de datos a
través del módulo Ethernet, figura 9.
En la tabla 2, se presenta la conexión del módulo RFID-RC 522 con los pines de la
tarjeta Arduino.
pág. 11
Tabla 2: Conexión del módulo RFID-RC522 con Arduino
SDA Digital Pin #10 Digital Pin #10 Digital Pin #53
De la tabla 2, se puede apreciar que existen varias formas de conectar el lector RFID-
RC522 con las diferentes versiones de Arduino, esto es por los diferentes
microprocesadores que integran estas tarjetas.
La correcta lectura de los código RFID se realiza empleando las conexiones antes
mencionadas. En este caso se emplean las conexiones del Arduino MEGA 2560, en el
anexo 1, se presenta el código desarrollado para la lectura, es necesario aclarar que el pin
RST está definido en el pin 9 del Arduino. Este cambio en la conexión será detallado más
adelante.
pág. 12
Figura 10: Conexión del módulo Ethernet Shield con Arduino Mega 2560.
Es necesario indicar que el módulo Ethernet ocupa el pin 4 para la comunicación con la
tarjeta SD. En este proyecto no se utilizará una tarjeta de memoria, permitiendo que el pin
4 se puede utilizar para conectar otro dispositivo que se mencionará más adelante.
En la programación del microcontrolador Arduino con el módulo Ethernet se debe incluir
la librería Ethernet. Asímismo, el usuario deberá definir la dirección IP del servidor donde
tiene instalado la base de datos, deberá definir además una dirección IP para que el
Arduino pueda establecer la comunicación con el servidor.
El módulo Ethernet de Arduino trae marcada en su parte posterior la dirección MAC propia
del módulo.
En el anexo 2, se presenta el programa que permite el registro de los códigos RFID en la
base de datos.
El registro en la base de datos se realiza empleando el método GET que permite el envío de
datos a través de Internet. El método GET es empleado normalmente en el envío y registro
de formularios.
En el lenguaje de programación de Arduino, se debe emplear la sentencia:
client.print("GET /registros/iot.php?codigo="). En esta línea, se debe especificar la ruta
de un archivo.php guardado en el servidor que permite el registro en la base de datos.
En la base de datos se debe configurar una tabla con campos que permitan identificar de
manera clara la información registrada por parte de los tags RFID.
La sentencia utilizada por Arduino para el registro de los códigos RFID en la base de datos
permiten identificar la ruta que debe seguir la información para su registro. En este sentido,
se puede observar una carpeta llamada registros, esta carpeta está instalada en el servidor
donde además, se encuentran dos archivos, -config.php, iot.php- necesarios para insertar la
información en la base de datos [11].
El archivo config.php, permite establecer la conexión con la base de datos. Es decir en este
archivo, se deberá insertar la ruta del host en caso de tratarse de una base de datos externa,
el nombre del usuario que se configuró al momento de instalar phpmyadmin, asimismo, la
contraseña que fue establecida en phpmyadmin, y el nombre de la base de datos que
contiene a las tablas de registro, Anexo 3.
pág. 13
El archivo iot.php permite subir la información al servidor, con la programación de
Arduino a través del método GET, Anexo 4.
El microcontrolador Arduino envía la información con el método GET, empleando la
programación PHP que conecta el microcontrolador con la base de datos del servidor a
través del puerto 80.
Una vez que se ha realizado la correcta programación de los archivos .php y del
microcontrolador Arduino, el registro debería realizarse con normalidad.
Además, para una mayor referencia se ha configurado una pantalla Lcd de 16x2 en la que
se desplegará el nombre del usuario en caso de estar registrado en la base de datos, figura
11.
En la tabla 3, se presenta las conexiones de los diferentes indicadores con los pines del
microcontrolador Arduino MEGA 2560.
pág. 14
Digital Pin #50 MISO -
No conectar IRQ -
Los LED's indicadores de color verde y rojo se conectan a los pines 8 y 13 del
microcontrolador Arduino respectivamente.
De la tabla 3, se puede notar que se ha utilizado los pines 1-7 del microcontrolador
Arduino MEGA 2560 para conectar los pines de los bits más significativos de la pantalla
LCD.
Asimismo, en la programación de Arduino se debe incluir la librería LCD propia del
lenguaje de programación de Arduino.
La librería Ethernet de Arduino permite la escritura y lectura al mismo tiempo de la
información que se registra en la base de datos y así poder extraer la respuesta del registro
realizado en forma correcta.
En este sentido, la programación en el archivo iot.php permite la verificación de los
usuarios en función del registro establecido en la base de datos. Para ello se ha empleado la
sentencia:
La línea indica una petición a la base de datos en función del campo cod_rfid creado en la
base de datos. En la petición, también se realiza una comparación con la variable $_codigo
que es el código rfid que ha leído el microcontrolador Arduino. De esa manera, se realiza la
verificación y el correcto registro de los usuarios.
Asimismo, el archivo iot.php, está programado para enviar una respuesta al
microcontrolador Arduino en forma directa que permitirá desplegar el nombre del usuario
en la pantalla LCD. La línea de programación es sencilla, es una respuesta que se realiza en
lenguaje php con la línea:
Figura 12: Visualización del código de regreso en pantalla lcd con Arduino.
Conclusiones y Recomendaciones
Conclusiones:
pág. 16
Recomendaciones:
Referencias bibliográficas
[1] Drupal al Sur, “Como instalar un servidor LAMP en Ubuntu 14.04” Disponible en
http://drupalalsur.org/apuntes/como-instalar-un-servidor-lamp-en-ubuntu-1404.
[2] Herrador Enríquez Rafael. “Guía de usuario de Arduino”. I.T.I Sistemas, Universidad
de Córdoba. Creative Commons Attribution-Noncommercial-Share Alike 3.0, 13 de
noviembre 2009.
[3] What us a Raspberry Pi? (2012, Octubre) IEEE Online. Disponible en:
http://ewh.ieee.org/reg/8/news/articles/sep06/literacy_test.html
[4] Raspberry Pi. (2012) Online. Disponible en: http://www.raspberryshop.es/[5] Intel
Corporation. Intel Galileo Board User Guide. Order Number 330 237 – 001 US. March
2014
[6] Intel Corporation. Intel Galileo Datasheet. Intel Corporation 2014.
[7] Vega Villafuerte Jaime, Diseño de un sistema para el sensado e identificación
inlámbrica de equipajes para un aeropuerto. Universidad Tecnológica de Pereira. 2015
[8] Gómez Arraz M., Diezma B. Correa E. C., Hinojosa A., Barreiro P., y Escalona V.
Registro y análisis de temperaturas: productos IV gama del campo a la mesa. Universidad
de Chile, Centro de estudios Postcosecha. VIII Congreso Ibérico de Agroingeniería 1-3
Junio 2015.
[9] ELECTRONILAB, Ingeniería y Diseño Electrónico. MḾódulo RFID RC522-13.56Mhz.
Online, disponible en: http://electronilab.co/tienda/modulo-rfid-rc522-13-56mhz-rc522-
s50-mifare-one/
[10] Arduino, Arduino Ethernet Shield, Overview. Online, disponible en :
https://www.arduino.cc/en/Main/ArduinoEthernetShiel
[11] Péres Mario. Geeky Theory, Internet de las Cosas [parte 2] – Subir los datos a una
base de datos. Online disponible en: https://geekytheory.com/internet-de-las-cosas-parte-2-
subir-los-datos-a-una-base-de-datos/
pág. 17
ANEXOS
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 53 //cambiamos el pin del 10 al 7 para tener la comunicacion con el ethernet shield (ethernet shield ocupa el pin 10 y
4) En el Mega se cambia al pin 53
#define RST_PIN 9
int numero_serie[5]; // aqui guardaremos el número que nuestro sensor RFID detectará
void setup()
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
void loop()
leer_usuario();
void leer_usuario()
if (rfid.isCard())
if (rfid.readCardSerial())
numero_serie[i] = rfid.serNum[i];
pág. 18
for(int i=0; i<=4 ; i++) // y lo imprimimos
Serial.print(numero_serie[i]);
Serial.print(" ");
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
rfid.halt();
digitalWrite(led2, LOW);
digitalWrite(led1, HIGH);
pág. 19
Anexo 2: Código de Arduino para el registro de códigos RFID en la base de datos.
#include <Ethernet.h>
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 9 //cambiamos el pin del 10 al 7 para tener la comunicacion con el ethernet shiel (ethernet shield ocupa los pines 10 y
4)
#define RST_PIN 6
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAB, 0x04}; // Direccion MAC
EthernetClient client;
//float temperatura=22.5;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
void loop()
if (rfid.isCard())
if (rfid.readCardSerial())
numero_serie[i] = rfid.serNum[i];
pág. 20
}
Serial.print(numero_serie[i]);
Serial.print(" ");
Serial.println("Connecting...");
client.print(numero_serie[i]);
client.println(" HTTP/1.0");
client.println();
Serial.println("Conectado");
else
Serial.println("Fallo en la conexion");
if (!client.connected())
Serial.println("Disconnected!");
client.stop();
client.flush();
Serial.print(" ");
pág. 21
}
rfid.halt();
pág. 22
Anexo 3: Código del archivo config.php para la conexión de la base de datos.
<?php
$dbhost="localhost";
$dbuser="root";
$dbpass="reward15";
$dbname="Sensores";
?>
pág. 23
Anexo 4: Código del archivo iot.php para el envío de datos con Arduino por el método
GET.
<?php
$codigo=mysqli_real_escape_string($con, $_GET{'codigo'});
if($row){
mysqli_query($con, $query);
mysqli_close($con);
}else{
$error="error";
echo "valor=".$error.";";
?>
pág. 24
Anexo 3: Código Arduino de registro y autenticación de usuarios con indicador LCD
16x2.
#include <LiquidCrystal.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <RFID.h>
#define SS_PIN 53 //cambiamos el pin del 10 al 7 para tener la comunicacion con el ethernet shiel (ethernet shield ocupa los pines 10
y 4)
#define RST_PIN 9
LiquidCrystal lcd(2,3,4,5,6,7);
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAB, 0x04}; // Direccion MAC
EthernetClient client;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
lcd.begin(16,2);
Serial.begin(9600);
SPI.begin();
rfid.init();
void loop() {
pág. 25
if (rfid.isCard())
if (rfid.readCardSerial())
numero_serie[i] = rfid.serNum[i];
Serial.print(numero_serie[i]);
Serial.print(" ");
//lcd.print(numero_serie[i]);
//lcd.print(" ");
Serial.println("Connecting...");
httpRequest();
int httpRequest()
if (client.connect(server, 80))
Serial.println("Conectado");
client.print("GET /registros/iot.php?codigo=");
pág. 26
client.print(numero_serie[i]);
client.println(" HTTP/1.0");
client.println();
Serial.println("Coneccion cerrada");
else
// Si no conseguimos conectarnos
Serial.println("Conexión fallida");
Serial.println("Desconectando");
client.stop();
delay(500);
//lcd.clear();
rfid.halt();
while (client.available())
char c = client.read();
codigo += c;
fin = true;
if (fin)
// Serial.println(codigo);
pág. 27
nombre = "";
fin = false;
lcd.print("BIENVENIDO");
lcd.setCursor(0,1);
lcd.print(nombre);
//Cerrar conexión
Serial.println("Desconectarn");
client.stop();
if (nombre.length()> 5 )
delay(200);
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
delay(2000);
lcd.clear();
codigo="";
//return 1;
pág. 28