Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ENERO, 2016
pg. 1
INFORME
1.- TITULO:
2.- OBJETIVOS:
General:
-Implementar un sistema de autenticacin de usuarios de aulas y laboratorios basado
en software y hardware libre controlado desde una plataforma Cloud Computing
Especficos:
- Instalar un servidor LAMP en la Plataforma Cloud Computing.
- Definir la tecnologa de control de autenticacin para usuarios de aulas y
laboratorios.
-Analizar el tipo de comunicacin entre el hardware y software libre para el control de
autenticacin.
1. RESUMEN
2. PALABRAS CLAVES:
pg. 2
3. Descripcin del Trabajo
En esta parte, el usuario del servicio de base de datos deber elegir una contrasea que
le permita acceder en un futuro al servicio completo de Mysql, figura 1.
pg. 3
Para una mayor seguridad se debe introducir dos veces la misma contrasea.
Asimismo, se debe instalar el lenguaje PHP, para ello se emplear el comando
Una vez que el servidor haya reiniciado las aplicaciones se ejecutarn con normalidad.
Adems, 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 travs 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 opcin
dbconfig_common figura 3.
pg. 4
Figura 3: Configuracin de phpmyadmin [1].
Arduino.
pg. 6
Asimismo, Arduino, est basado en microcontroladores ATMEGA 8 y ATMEGA 168 de
ATMEL. Por otra parte, los diagramas de los diferentes mdulos se encuentran publicados
bajo licencia Creative Commons, en este sentido, varios diseadores con experiencia en
circuitos pueden elaborar su propia versin del mdulo. El entorno de programacin de
Arduino es fcil de usar para principiantes y suficientemente prctica para usuarios
avanzados. El lenguaje se puede expandir a travs de libreras desarrolladas en C++,
basado en lenguaje AVR C [2]. En la figura 6, se muestra el modelo Arduino Uno, el ms
popular de esta plataforma.
Raspberry Pi.
pg. 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 tamao 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 tambin, el conector de alimentacin [5].
El diseo de Intel a travs 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 mdulos a travs
de las diferentes libreras 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.
pg. 8
Las tecnologas asociadas al hardware libre evolucionan constantemente, en funcin de
las aplicaciones a desarrollarse se deber tomar en consideracin algunos aspectos que se
presentan en la siguiente tabla:
pg. 9
En este sentido, el usuario podr elegir el equipo que ms 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 anlogos. Asimismo, un punto
a tener en consideracin es que el control y supervisin estar desarrollado en una
plataforma Cloud Computing. De esa manera en el control de autenticacin no es
necesario tener un mini computador con sistema operativo.
Asimismo, la plataforma Arduino cuenta con varios modelos de tarjetas electrnicas.
En el desarrollo de la propuesta se emplear el modelo Arduino Mega 2560, en
funcin del nmero de puertos disponibles para la comunicacin con los diferentes
dispositivos para el sistema de autenticacin y el registro en una base de datos en la
plataforma Cloud Computing.
pg. 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
travs del mdulo Ethernet, figura 9.
En la tabla 2, se presenta la conexin del mdulo RFID-RC 522 con los pines de la
tarjeta Arduino.
pg. 11
Tabla 2: Conexin del mdulo 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 cdigo 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 cdigo desarrollado para la lectura, es necesario aclarar que el pin
RST est definido en el pin 9 del Arduino. Este cambio en la conexin ser detallado ms
adelante.
pg. 12
Figura 10: Conexin del mdulo Ethernet Shield con Arduino Mega 2560.
Es necesario indicar que el mdulo Ethernet ocupa el pin 4 para la comunicacin 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 ms adelante.
En la programacin del microcontrolador Arduino con el mdulo Ethernet se debe incluir
la librera Ethernet. Asmismo, el usuario deber definir la direccin IP del servidor donde
tiene instalado la base de datos, deber definir adems una direccin IP para que el
Arduino pueda establecer la comunicacin con el servidor.
El mdulo Ethernet de Arduino trae marcada en su parte posterior la direccin MAC propia
del mdulo.
En el anexo 2, se presenta el programa que permite el registro de los cdigos RFID en la
base de datos.
El registro en la base de datos se realiza empleando el mtodo GET que permite el envo de
datos a travs de Internet. El mtodo GET es empleado normalmente en el envo y registro
de formularios.
En el lenguaje de programacin de Arduino, se debe emplear la sentencia:
client.print("GET /registros/iot.php?codigo="). En esta lnea, 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 informacin registrada por parte de los tags RFID.
La sentencia utilizada por Arduino para el registro de los cdigos RFID en la base de datos
permiten identificar la ruta que debe seguir la informacin para su registro. En este sentido,
se puede observar una carpeta llamada registros, esta carpeta est instalada en el servidor
donde adems, se encuentran dos archivos, -config.php, iot.php- necesarios para insertar la
informacin en la base de datos [11].
El archivo config.php, permite establecer la conexin 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
contrasea que fue establecida en phpmyadmin, y el nombre de la base de datos que
contiene a las tablas de registro, Anexo 3.
pg. 13
El archivo iot.php permite subir la informacin al servidor, con la programacin de
Arduino a travs del mtodo GET, Anexo 4.
El microcontrolador Arduino enva la informacin con el mtodo GET, empleando la
programacin PHP que conecta el microcontrolador con la base de datos del servidor a
travs del puerto 80.
Una vez que se ha realizado la correcta programacin de los archivos .php y del
microcontrolador Arduino, el registro debera realizarse con normalidad.
Adems, 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.
pg. 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 ms significativos de la pantalla
LCD.
Asimismo, en la programacin de Arduino se debe incluir la librera LCD propia del
lenguaje de programacin de Arduino.
La librera Ethernet de Arduino permite la escritura y lectura al mismo tiempo de la
informacin que se registra en la base de datos y as poder extraer la respuesta del registro
realizado en forma correcta.
En este sentido, la programacin en el archivo iot.php permite la verificacin de los
usuarios en funcin del registro establecido en la base de datos. Para ello se ha empleado la
sentencia:
La lnea indica una peticin a la base de datos en funcin del campo cod_rfid creado en la
base de datos. En la peticin, tambin se realiza una comparacin con la variable $_codigo
que es el cdigo rfid que ha ledo el microcontrolador Arduino. De esa manera, se realiza la
verificacin 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 lnea de programacin es sencilla, es una respuesta que se realiza en
lenguaje php con la lnea:
Figura 12: Visualizacin del cdigo de regreso en pantalla lcd con Arduino.
Conclusiones y Recomendaciones
Conclusiones:
pg. 16
Recomendaciones:
Referencias bibliogrficas
[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 Enrquez Rafael. Gua de usuario de Arduino. I.T.I Sistemas, Universidad
de Crdoba. 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, Diseo de un sistema para el sensado e identificacin
inlmbrica de equipajes para un aeropuerto. Universidad Tecnolgica de Pereira. 2015
[8] Gmez Arraz M., Diezma B. Correa E. C., Hinojosa A., Barreiro P., y Escalona V.
Registro y anlisis de temperaturas: productos IV gama del campo a la mesa. Universidad
de Chile, Centro de estudios Postcosecha. VIII Congreso Ibrico de Agroingeniera 1-3
Junio 2015.
[9] ELECTRONILAB, Ingeniera y Diseo Electrnico. Mdulo 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] Pres 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/
pg. 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 nmero 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];
pg. 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);
pg. 19
Anexo 2: Cdigo de Arduino para el registro de cdigos 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];
pg. 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(" ");
pg. 21
}
rfid.halt();
pg. 22
Anexo 3: Cdigo del archivo config.php para la conexin de la base de datos.
<?php
$dbhost="localhost";
$dbuser="root";
$dbpass="reward15";
$dbname="Sensores";
?>
pg. 23
Anexo 4: Cdigo del archivo iot.php para el envo de datos con Arduino por el mtodo
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.";";
?>
pg. 24
Anexo 3: Cdigo Arduino de registro y autenticacin 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() {
pg. 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=");
pg. 26
client.print(numero_serie[i]);
client.println(" HTTP/1.0");
client.println();
Serial.println("Coneccion cerrada");
else
// Si no conseguimos conectarnos
Serial.println("Conexin 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);
pg. 27
nombre = "";
fin = false;
lcd.print("BIENVENIDO");
lcd.setCursor(0,1);
lcd.print(nombre);
//Cerrar conexin
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;
pg. 28