Está en la página 1de 28

UNIVERSIDAD TECNICA DE AMBATO

DIRECCIÓN DE INVESTIGACIÓN Y DESARROLLO

SISTEMA DE AUTENTICACIÓN DE USUARIOS


DE AULAS Y LABORATORIOS BASADO EN
SOFTWARE Y HARDWARE LIBRE
CONTROLADO DESDE UNA PLATAFORMA
CLOUD COMPUTING

ENERO, 2016
pág. 1
INFORME

1.- TITULO:

SISTEMA DE AUTENTICACIÓN DE USUARIOS DE AULAS Y


LABORATORIOS BASADO EN SOFTWARE Y HARDWARE LIBRE
CONTROLADO DESDE UNA PLATAFORMA CLOUD COMPUTING.

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

En el presente informe, se describe la implementación de un sistema de autenticación


de usuarios de aulas y laboratorios, desarrollado en la Facultad de Ingeniería en
Sistemas, Electrónica e Industrial de la Universidad Técnica de Ambato. La gestión y
registro de los usuarios está supervisado por una plataforma Cloud Computing, en la
que se ha implementado una base de datos que contiene la información asociada a la
autenticación de usuarios. Además, se ha empleado tecnología de código abierto con
grandes funcionalidades que permitirán una rápida y fácil integración de nuevas
tecnologías de autenticación de usuarios.

2. PALABRAS CLAVES:

Autenticación, hardware libre, software libre, servidor LAMP.

pág. 2
3. Descripción del Trabajo

La implementación del sistema de autenticación de usuarios de aulas y laboratorios se


desarrolló en diferentes etapas:
- Implementación de un servidor LAMP.
- Selección de las tecnologías de autenticación de usuarios.
- Implementación de un sistema de registro de usuarios en una base de datos.
- Programación de indicadores asociado a la autenticación de usuarios.

En los siguientes apartados, se describen las actividades desarrolladas en cada etapa.

 Implementación de un servidor LAMP

Un servidor LAMP, es un acrónimo de un conjunto de aplicaciones:


Linux+Apache+Mysql+PHP.

En primera instancia se debe instalar la versión más actual de apache. En la


distribución de Ubuntu se debe emplear el comando:

sudo apt-get install apache2 –y

De esta manera la versión más actual de apache se instalará en la máquina. El proceso


de instalación es sencillo. Para que el servidor sea completo, se debe instalar un motor
de base de datos. Uno de los motores más populares y sencillo de instalar., para ello se
debe digitar el comando:

sudo apt-get install mysql-server mysql-client

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.

Figura 1: Introducción de la contraseña de Mysql [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

sudo apt-get install php5 –y

De esta manera la aversión más actual de PHP se instalará en el servidor. Cuando el


proceso de instalación de los diferentes componentes haya finalizado, se deberá
emplear el comando:

sudo /etc/init.d/apache2 restart.

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:

sudo apt-get install phpmyadmin

Una vez ejecutado el comando anterior, se debe elegir el tipo de servidor con la barra
espaciadora del teclado, figura 2.

Figura 2: Elección del servidor para phpMyadmin [1].

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].

De esa manera, el proceso de instalación de phpmyadmin pedirá que se introduzca una


contraseña. La cotraseña que se debe introducir es la misma que se utilizó para
configurar Mysql.
De esa manera quedará instalado phpmyadmin en el servidor de datos.
Para acceder a phpmyadmin se deberá digitar en la ip del servidor seguido de
phpmyadmin, figura 4.

Figura 4. Acceso a phpmyadmin.


pág. 5
En este sentido, se creará una base de datos que en principio tendrá dos tablas de registro
de información

Figura 5: Creación de la base de datos y tablas.

El proceso de creación de tablas de datos es fácil empleando el gestor phpmyadmin.

 Selección de las tecnologías de autenticación de usuarios.

Existen varias tecnologías y sistemas de autenticación de usuarios, sin embargo, la presente


propuesta de investigación impulsa el empleo de tecnología de código abierto.
De esta manera se ha realizado una comparación entre las principales plataformas de
hardware libre que permitan una rápida integración al servidor y motor de base de datos
empleado. Entre las principales plataformas de hardware libre para adquisición de
información están: Arduino, Raspberry Pi y Galileo de Intel. En los siguientes párrafos se
presenta información más detallada sobre estas plataformas.

Arduino.

Es una plataforma de código abierto que posee un hardware y software flexible. El


hardware permite una rápida escalabilidad a través de sus diferentes módulos, y su entorno
de programación es muy flexible para operar en las diferentes distribuciones de sistemas
operativos como son Windows., MAC, Linux.

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.

Figura 6: Arduino UNO.

Raspberry Pi.

Es una unidad de cómputo, prácticamente es un mini computador de bajo costo con un


tamaño similar al de una tarjeta de crédito. Es un dispositivo muy popular debido al
soporte que recibe por la comunidad de software libre. Además, sus funcionalidades son
muy amplias ya que le permiten conectarse a varios periféricos como teclados, monitores,
mouse, dispositivos de audio. En la actualidad existen varios modelos de esta tecnología,
en la figura 7, se muestra el modelo Raspberry Pi 2, que tiene las capacidades de un
ordenador de escritorio.
Asimismo, en esta placa electrónica se puede instalar un sistema operativo Linux que
permitirá el desarrollo de casi cualquier aplicación. En su interior se encuentra un
procesador ARM de 700Mhz de capacidad y una GPU capaz de decodificar vídeo a
1080p [3,4].

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.

Figura 8: Intel Galileo Gen 2.

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:

Tabla 1: Tecnológias de Hardware Libre

Características Arduino Raspberry Pi Intel Galileo


Logotipo

Precio $ 29.00 $ 40.00 $ 89.00


Procesador Atmega 2560 ARM 11 Quark SoC
X1000
Clock Speed 16 Mhz 700 Mhz 700 Mhz
Memoria RAM 2 kb 256 Mb 256 Mb
Memoria Flash 32 kb-256kb SD Card 4 Gb SD Card
Memoria 1 – 4kb No No
EEPROM
Alimentación 7-12 Vdc 5 Vdc 5 Vdc
Consumo 42 mA (0,3 W) 700 mA (3,5 W) 170 mA (0,85
W)
Puertos Digitales 14-54 14 14
Puertos PWM 6-14 No 6
Entradas 6-16 Ninguna 6
Analógicas
USB 1 Entrada 4, Periféricos 1, Entrada
Programador Arduino IDE Scratch, IDLE Arduino IDE,
Eclipse
SPI 1 1 1
Ethernet Shield 10/100 Mbps 10/100 Mbps
Salida de video No HDMI No
Salida de audio No HDMI, Analog No

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.

 Implementación de un sistema de registro de usuarios en una base de datos.

El sistema de registro de usuarios integra una tarjeta electrónica de la plataforma


Arduino basada en el microcontrolador Atmega 2560. Asimismo, esta tarjeta se debe
comunicar con la base de datos que se implementó en la plataforma Cloud Computing.
La tecnología asociada al registro de usuarios es variada, entre las principales se
encuentran: autenticación de usuarios a través de tarjetas RFID, a través de un lector
de código de barras o con reconocimiento facial.
Las tecnologías de autenticación de usuarios asociadas a los sistemas de lectores de
códigos de barras o sistemas de reconocimiento facial son sistemas que proveen su
propio software que es de uso comercial, impidiendo su acceso para futuras
modificaciones al no ser un software de código abierto.

Los sistemas de autenticación por tecnología RFID alcanzan grandes funcionalidades


en función de su bajo costo de implementación y su operación es muy sencilla. En este
sentido existen varias experiencias que se han desarrollado para el control e
identificación de personas o cosas en diferentes entornos. De esta manera en [7], se
desarrolló un sistema de censado e identificación inalámbrico de equipajes de un
aeropuerto en Pereira. En este novedoso sistema aparte de la tecnología RFID, se
integra el estándar de comunicaciones Zigbee, permitiendo así, que el sistema pueda
adaptarse a las necesidades del entorno de trabajo y a las necesidades del usuario.
Por otra parte, en [8], se presenta un sistema de monitoreo de legumbres
específicamente lechugas. El sistema monitorea principalmente las condiciones de
temperatura y humedad a las que está expuesto este producto en el trayecto
invernadero – nevera supermercado. La implementación de este sistema ha permitido
que las cadenas de supermercados cuenten con un historial de la frescura del producto
que se expende, asimismo, controlar las condiciones del entorno para que el producto
se encuentre en óptimas condiciones.

En el desarrollo de la presente propuesta se empleará la tecnología RFID para el


control de autenticación de usuarios por su gran popularidad y su fácil y rápida
operación. Además, es una tecnología muy flexible, integrando varias tecnologías para
la comunicación con diferentes dispositivos que pueden ser empleaos en varias
aplicaciones.

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.

Figura 9: Dispositivos que integran el sistema de registro de usuarios.

El sistema en implementación permitirá que los usuarios puedan registrarse en forma


directa al pasar la tarjeta por el lector RFID. En párrafos anteriores, se mencionó el
empleo de una tarjeta Arduino Mega 2560 por sus elevadas prestaciones al momento
de realizar la comunicación entre el lector RFID y la base de datos. De esa manera se
realizaron varias pruebas para obtener el registro de las tarjetas RFID en la base de
datos, los mismos que se detallan a continuación.

En primera instancia, se analizó el tipo de comunicación que posee el lector RFID-RC


522. El módulo utiliza 3.3V como tensión de alimentación y es controlado a través del
protocolo SPI por lo que es compatible con casi cualquier microcontrolador Arduino.
Este circuito es utilizado para comunicaciones inalámbricas a 13.56 Mhz para escribir
o leer datos de aplicaciones de bajo consumo de energía, bajo costo y tamaño reducido
[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

Módulo RFID-RC522 Arduino UNO Arduino LEONARDO Arduino MEGA 2560

SDA Digital Pin #10 Digital Pin #10 Digital Pin #53

SCK Digital Pin #13 ICSP Pin # 3 Digital Pin #52

MOSI Digital Pin #11 ICSP Pin # 4 Digital Pin #51

MISO Digital Pin #12 ICSP Pin # 1 Digital Pin #50

IRQ N/A N/A N/A

GND Power GND Power GND Power GND

RST Digital Pin #5 ICSP Pin # 5 Digital Pin#5

3.3 V Power 3.3 V Power 3.3 V Power 3.3 V

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.

Una vez compilado y cargado el código en el microcontrolador, este puede realizar la


lectura de los diferentes tags RFID, comprobando así que la lectura es correcta se puede
proceder al registro de los códigos en la base de datos.

El registro de los códigos RFID se realizará empleando el módulo Ethernet propio de


Arduino, este módulo integra el chip Wiznet 51000 y un conector RJ45 [10]. Este módulo
es apilable, es decir se puede colocar sobre el Arduino sin dificultades, además posee una
ranura para una tarjeta de memoria SD, figura 10.

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.

 Programación de indicadores asociado a la autenticación de usuarios.

Con el registro funcionando con normalidad es necesario programar indicadores que


permitan al usuario identificar el correcto registro. Los indicadores que se han programado
son dos diodos led de colores rojo y verde que le permitirán al usuario conocer si su
registro se realizó correctamente.

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.

Figura 11: Pantalla LCD 16x2 compatible con Arduino.

En la tabla 3, se presenta las conexiones de los diferentes indicadores con los pines del
microcontrolador Arduino MEGA 2560.

Tabla 3: Especificación de los pines de conexión con Arduino MEGA 2560

Arduino MEGA 2560 Lector RFID-RC522 Pantalla LCD 16x2

Power 3.3V Power 3.3V -

Power 5V - Pin 2 Vdd

Power GND Power GND Pin 1 Vss

Digital Pin #53 SDA -

Digital Pin #52 SCK -

Digital Pin #51 MOSI -

pág. 14
Digital Pin #50 MISO -

No conectar IRQ -

Digital Pin #9 RST -

Digital Pin #2 - Pin 4 RS

Digital Pin #3 - Pin 6 Enable

Digital Pin #4 - Pin 11 Db 4

Digital Pin #5 - Pin 12 Db 5

Digital Pin #6 - Pin 13 Db 6

Digital Pin #7 - Pin 14 Db 7

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:

$query2= "SELECT cod_rfid, nombre FROM control WHERE cod_rfid = '$codigo'";

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:

echo"valor=" .$row[1]. ";";

La línea anterior es una respuesta en código php, es decir, muestra la información


contenida en la variable $row. En este sentido, se debe considerar la estructura de la
variable $row al momento de establecer la respuesta con la función echo.
pág. 15
Por otra parte, la programación en Arduino aprovecha la función .lenght que permite crear
una variable que soporta la cadena de caracteres de los nombres registrados en la base de
datos. Esa variable es del tipo vector y que a través de la función lcd.print() propia de
Arduino. Además, con la función lcd.setCursor(), se puede elegir la fila y la columna en la
que aparecen los caracteres de la pantalla lcd.
En la figura 12, se presenta el nombre de un usuario registrado en forma correcta y que se
despliega a través de la programación de Arduino. En el Anexo 5, se presenta el código
final del sistema de registro y autenticación de usuarios, además se indica las líneas
empleadas para el despliegue del código de regreso de la base de datos.

Figura 12: Visualización del código de regreso en pantalla lcd con Arduino.

Conclusiones y Recomendaciones

Conclusiones:

 El registro y autenticación de usuarios integrado en la plataforma Cloud


Computing permite una mayor administración de información con grandes
prestaciones.

 La implementación de un servidor basado en el sistema operativo Linux


incrementa en gran manera las funcionalidades del sistema de autenticación de
usuarios, permitiendo una rápida integración con nuevas tecnologías de
comunicación.

 El empleo de hardware y software libre permite una rápida escalabilidad del


sistema permitiendo un fácil integración con diferentes dispositivos.

 La comunicación entre el sistema de lectura y la base de datos se realiza en


función de la programación en lenguaje php.

pág. 16
Recomendaciones:

 Utilizar las librerías propias de Arduino en la programación de los diferentes


dispositivos.
 Emplear conectores de alta calidad para los dispositivos y módulos de Arduino.
 Revisar adecuadamente los protocolos de comunicación entre los módulos de
Arduino y los diferentes dispositivos que se integran al sistema de
autenticación.

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

Anexo 1: Código de lectura del Módulo RFID-RC522.

#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 led1 =8;

int led2 =13;

RFID rfid(SS_PIN, RST_PIN);

int numero_serie[5]; // aqui guardaremos el número que nuestro sensor RFID detectará

//-----------------------------------------------variables, includes,funciones, etc-------------------------------------------------

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())

Serial.print("Numero usuario: "); // guardamos el numero del usuario

for(int i=0; i<=4 ; i++)

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);

Serial.println(" "); // espacio para el siguiente código

delay(2000); // para que no se imprima constantemente el mismo numero

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

RFID rfid(SS_PIN, RST_PIN);

int numero_serie[5];//aqui se guarda el numero que nuestro sensor RFID Detectara

int led1 =13; //led indicador de color verde

int led2 =8; // led indicador de color rojo

// Configuracion del Ethernet Shield

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAB, 0x04}; // Direccion MAC

byte ip[] = { 172,21,123,210 }; // Direccion IP del Arduino

byte server[] = { 172,21,123,52 }; // Direccion IP del servidor

EthernetClient client;

//float temperatura=22.5;

void setup() {

Serial.begin(9600);

SPI.begin();

rfid.init();

Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield

delay(1000); // Esperamos 1 segundo de cortesia

void loop()

//llamamos la funcion leer usuario

if (rfid.isCard())

if (rfid.readCardSerial())

Serial.print("Numero usuario: "); // guardamos el numero del usuario

for(int i=0; i<=4 ; i++)

numero_serie[i] = rfid.serNum[i];

pág. 20
}

for(int i=0; i<=4 ; i++) // y lo imprimimos

Serial.print(numero_serie[i]);

Serial.print(" ");

Serial.println(" "); // espacio para el siguiente código

digitalWrite(led1, HIGH); //enciende el led verde porque leyo el rfid

digitalWrite(led2, LOW); //apaga el led rojo por la lectura del rfid

delay(500); // para que no se imprima constantemente el mismo numero

Serial.println("Connecting...");

if (client.connect(server, 80)>0) // Conexion con el servidor

client.print("GET /registros/iot.php?codigo="); // Enviamos los datos por GET

for(int i=0; i<=4 ; i++) // y lo imprimimos

client.print(numero_serie[i]);

client.println(" HTTP/1.0");

client.println("User-Agent: Arduino 1.0");

client.println();

Serial.println("Conectado");

else

Serial.println("Fallo en la conexion");

if (!client.connected())

Serial.println("Disconnected!");

client.stop();

client.flush();

delay(2000); // Espero 5 seg antes de tomar otra muestra

Serial.print(" ");

pág. 21
}

rfid.halt();

digitalWrite(led2, HIGH); //enciende el led rojo xq no hay lectura

digitalWrite(led1, LOW); //apaga el led verde xq no hay lectura

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";

$con=mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

?>

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

require("config.php"); //llama al archivo config .php

$codigo=mysqli_real_escape_string($con, $_GET{'codigo'});

$query2= "SELECT cod_rfid, nombre FROM control WHERE cod_rfid = '$codigo'";

$result = mysqli_query($con, $query2);

$row=mysqli_fetch_array($result,MYSQL_BOTH);//guarda los registros de la consulta realizada

if($row){

$query="INSERT INTO registro(codigo) VALUES ('$codigo')";

echo"valor=" .$row[1]. ";";

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);

RFID rfid(SS_PIN, RST_PIN);

int numero_serie[5];//aqui se guarda el numero que nuestro sensor RFID Detectara

int led1 =13; //led indicador de color verde

int led2 =8; // led indicador de color rojo

// Configuracion del Ethernet Shield

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xAB, 0x04}; // Direccion MAC

byte ip[] = { 172,21,123,210 }; // Direccion IP del Arduino

byte server[] = { 172,21,123,52 }; // Direccion IP del servidor

EthernetClient client;

//Variables que neceita para funcionar

String codigo; //Aquí se almacena la respuesta del servidor

String nombre; //Aquí se almacena el nombre que recuperamos de MySQL

boolean fin = false;

boolean pregunta = true;

void setup() {

pinMode(led1, OUTPUT);

pinMode(led2, OUTPUT);

lcd.begin(16,2);

Serial.begin(9600);

SPI.begin();

rfid.init();

Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield

delay(1000); // Esperamos 1 segundo de cortesia

void loop() {

//Comprobamos si tenemos datos en el puerto serie

pág. 25
if (rfid.isCard())

if (rfid.readCardSerial())

Serial.print("Numero usuario: "); // guardamos el numero del usuario

for(int i=0; i<=4 ; i++)

numero_serie[i] = rfid.serNum[i];

for(int i=0; i<=4 ; i++) // y lo imprimimos

Serial.print(numero_serie[i]);

Serial.print(" ");

//lcd.print(numero_serie[i]);

//lcd.print(" ");

Serial.println(" "); // espacio para el siguiente código

digitalWrite(led1, HIGH); //enciende el led verde porque leyo el rfid

digitalWrite(led2, LOW); //apaga el led rojo por la lectura del rfid

delay(500); // para que no se imprima constantemente el mismo numero

Serial.println("Connecting...");

// Comprobar si hay conexión

httpRequest();

// Con esta función hacemos la conecion con el servidor

int httpRequest()

if (client.connect(server, 80))

Serial.println("Conectado");

// Enviar la petición HTTP

//Dirección del archivo php dentro del servidor

client.print("GET /registros/iot.php?codigo=");

for(int i=0; i<=4 ; i++) // y lo imprimimos

pág. 26
client.print(numero_serie[i]);

client.println(" HTTP/1.0");

client.println("User-Agent: Arduino 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);

//Comprobamos si tenemos respuesta del servidor y la

//almacenamos en el string ----> codigo.

//lcd.clear();

rfid.halt();

digitalWrite(led2, LOW); //enciende el led rojo xq no hay lectura

digitalWrite(led1, LOW); //apaga el led verde xq no hay lectura

while (client.available())

char c = client.read();

codigo += c;

//Habilitamos la comprobación del código recibido

fin = true;

//Si está habilitada la comprobación del código entramos en el IF

if (fin)

// Serial.println(codigo);

//Analizamos la longitud del código recibido

int longitud = codigo.length();

//Buscamos en que posición del string se encuentra nuestra variable

int posicion = codigo.indexOf("valor=");

//Borramos lo que haya almacenado en el string nombre

pág. 27
nombre = "";

//Analizamos el código obtenido y almacenamos el nombre en el string nombre

for (int i = posicion + 6; i < longitud; i ++)

if (codigo[i] == ';') i = longitud;

else nombre += codigo[i];

//Deshabilitamos el análisis del código

fin = false;

//Imprimir el nombre obtenido

Serial.println("Bienvenido: " + nombre);

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();

//else nombre += codigo[i];

//Borrar código y salir de la función//Dirección IP del servidor

codigo="";

//return 1;

pág. 28

También podría gustarte