Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-27
Tecnología Electrónica
IEo, MSc.
2
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
RESUMEN
Se trabaja la orientación hacia el IoT con base a varios proyectos de investigación
propuestos en el semillero MMCC y el grupo de investigación C3, las actividades a
desarrollar sobre este trabajo se harán con la Rasberry pi 3b+ con lenguajes Python y
Node JS. Los proyectos de investigación manejados por el grupo requieren él envió de
datos de un sensor DHT11 a la nube por medio de una conexión con la plataforma IoT y
visualizarla en una plataforma web llamada asksensors, también con el módulo GSM
SIM800L enviar y recibir llamadas y mensajes de texto con comandos AT. Por otro lado, se
implementa la Rasberry Pi como un IDS para apoyar la ciberseguridad, detectando el
tráfico de una red. Y por último se implementa un robot seguidor de línea velocista
desarrollado para competencia de la Semana de Ingeniería del ITM (SII) para representar
el semillero y el grupo. Los proyectos servirán de base para que otros integrantes del
grupo puedan trabajar las plataformas de IoT.
Palabras clave: IoT, Python, Node JS, GSM, sim800l, IDS, AT, DHT, Robot.
3
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
RECONOCIMIENTOS
El amor recibido, la dedicación y la paciencia con la que cada día se preocupaban mis
padres por mi avance y desarrollo académico, es simplemente único y se refleja en mi día
a día.
Gracias a mis padres por ser los principales promotores de mis sueños, gracias a ellos
por cada día confiar y creer en mí y en mis expectativas, por despertar en mí el interés por
leer, la curiosidad por investigar, la pasión por descubrir el mundo, y sobre todo gracias
por desear y anhelar siempre lo mejor para mi vida, gracias por cada consejo y por cada
una de sus palabras alentadoras.
Gracias a Dios por la vida de mis padres, y gracias a mis padres por permitirme
conocer de Dios y de su infinito amor.
Gracias a la vida por este nuevo triunfo, gracias a todas las personas que me apoyaron
y que compartieron junto a mí sus enseñanzas y mis logros en estos años, así como
quienes han estado para darme una voz de aliento en los momentos difíciles.
A mis profesores, gracias, por su disposición para trabajar con nosotros y formar un
gran equipo de aprendizaje, sin su amable y valiosa colaboración el presente trabajo de
grado no se habría podido llevar a cabo.
Todos hicieron posible llegar a este punto, fin de una etapa más, pero comienzo de
una nueva que viviré con mayor intensidad.
4
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ACRÓNIMOS
5
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
TABLA DE CONTENIDO
1. INTRODUCCIÓN......................................................................................................15
Objetivo General............................................................................................................16
Objetivos Específicos......................................................................................................16
2. MARCO TEÓRICO....................................................................................................17
2.1. Boards de desarrollo MiniPC..............................................................................17
2.2. Características de la Raspberry Pi (RPi)..............................................................19
2.3. Raspbian.............................................................................................................20
2.4. Python.................................................................................................................22
2.5. Sensor DHT11.....................................................................................................22
2.6. Node JS...............................................................................................................24
2.7. Módulo GSM SIM800L........................................................................................25
2.8. Sistemas Detectores de Intrusos........................................................................27
2.9. Robot Seguidores de línea..................................................................................28
EVENTOS DE ROBÓTICA EN COLOMBIA.....................................................................28
RUNIBOT.................................................................................................................28
ROBOTEX.................................................................................................................30
3. METODOLOGÍA.......................................................................................................32
3.1. Instalación de Raspbian en la RPi.......................................................................32
PASOS PARA LA INSTALACIÓN DE RASPBIAN.............................................................33
Paso 1. Instalación de Raspbian:............................................................................33
Paso 2. Formatear SD Card:....................................................................................34
Paso 3. Flasheo con Balena Etcher:........................................................................34
Paso 4. Configuración de Rasbian:.........................................................................35
Paso 5. Actualización de software Rasbian:...........................................................36
3.2. Manejo de la GPIO con Rpi y Python..................................................................36
3.3. Montaje DHT11 Python..........................................................................................40
3.3.1. Pasos para montar el DHT11 en la RPi con Python..........................................40
Paso 1. Montaje Rpi y DHT:....................................................................................40
Paso 2. Instalación de librería DHT desde Git:.......................................................41
Paso 2. Comprobación del sensor DHT desde la consola:......................................41
Paso 3. Codificación en Python para leer el sensor desde el Idle..........................42
3.3.2. Alarmas con el DHT11 en la RPi y Python........................................................44
3.4. Montaje IoT con Rpi y Plataforma AskSensor por medio de NodeJS.....................45
Paso 1. Creación de cuenta en AskSensors:...........................................................46
Paso 2. Creación de un nuevo sensor en AskSensors:...........................................46
Paso 3. Datos necesarios para conexión (APiKey)..................................................47
6
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
7
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXOS 10...................................................................................................................106
ANEXO 11.................................................................................................................118
8
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Tabla de Ilustraciones
Ilustración 1. Top 10 mejores MiniPc............................................................................19
Ilustración 2. VNC...........................................................................................................21
9
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
10
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Ilustración 45. Código 1 enviar msm para encender leds, Código ANEXO 9.................64
Ilustración 46. Código 2 enviar msm para encender leds, Código ANEXO 9.................65
11
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
12
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
1. INTRODUCCIÓN
Se toma como base proyectos de maestría dirigidos a seguridad informática con IOT
apoyados dentro del semillero acompañado con la tarjeta Rasberry pi 3b+. Se
implementará con lenguajes de programación Python, JavaScript con node.js. Los
proyectos de investigación manejados por el grupo requieren envió de datos de un sensor
DHT11 a la nube por medio de una conexión con la plataforma IOT, implementación de la
conexión con módulo GSM y Rasberry para enviar y recibir mensajes y llamadas con
comandos AT. Creación desde Python de archivos logs para manejo de alarmas y hacer
entrega de esto para proyecto de seguridad informática.
13
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Objetivo General
Objetivos Específicos
Montar un sistema operativo Raspbian funcional con manejo de GPIO con Python
en una RaspBerry Pi 3B+.
Implementar un sistema IoT con sensor DHT11 en Python y en Node JS en una
Raspberry Pi 3B+ (Rpi).
Realizar un sistema de alerta con GSM con el módulo SIM800L y comunicación con
la Rpi.
Desarrollar un sistema IDS para detección de tráfico en una red de computadores
con la RPi.
Diseñar un Robot seguidor de línea con un DsPic.
14
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
2. MARCO TEÓRICO
En este capítulo se abordan los aspectos más relevantes de cada objetivo específico
Raspbian. Los lenguajes en que se realizaron los diseños de los programas son Python y
de trabajo. En las conexiones GSM se utilizó la tarjeta SIM800L y se habla un poco de ella.
Para la Ciberseguridad se trabaja con los IDS y se presentan las definiciones básicas y por
último se habla de las competencias que se realizan en el medio y algunas reglas para
participar.
En la Tabla 1 están las diferencias entre tres MiniPc o microcontroladores, cada uno
tiene sus ventajas y desventajas; donde se observa que la mejor placa de desarrollo
15
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
“Comparando la Rpi con la Orange pi prime se ve que son muy parecidos, la Orange pi
es un claro rival para la Rasberry pi, con varias características a su favor, tales como; es
más económica, hablando en nivel de hardware, esta tarjeta supera la Rpi, porque tiene
una mejor GPU y supera por 1GB de memoria RAM, por otro lado la Orange Pi ofrece
mejor conectividad por cable gracias a su tarjeta de red Gigabit Ethernet, pero tiene una
entrada USB 2.0 menos que su rival, también la Orange aunque no se le pueda instalar
Raspbian (uno de los mejores sistemas operativos para miniordenadores); está si es
compatible con Ubuntu y Android”[ CITATION Rub17 \l 3082 ].
a ella, es una de las tarjetas más reconocidas en el mercado y ha cumplido todas las
expectativas que se necesitan. También se vio en la ilustración 1 como la Rpi fue elegida
de primera en el top 10 de las mejores placas, compitiendo con otras muy buenas
16
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
mundo, con esta tarjeta se hace posible adaptarse fácilmente a las necesidades de los
usuarios, ya sea para jugar, programar, hace de función de un servidor casero, entre otras.
Esta tarjeta fue lanzada en el año 2012 y la versión 3b+ en el 2018 con una actualización
4.2, BLE
17
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
GPIO de 40 pines
HDMI
Puerto CSI y DSI para conectar una cámara y una pantalla táctil
Micro-SD
Power-over-Ethernet (PoE)
La RPi tiene dos novedades que pueden resultar útiles para los desarrolladores:
Gigabit Ethernet controlado por el chip USB 2.0 que, aunque no alcanza los
1000Mbps, sí ofrece sin problema 300 Mbps.” [ CITATION Hardzone \l 9226 ]
2.3. Raspbian
18
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Ilustración 2. VNC
compartida con comunicación VNC y verla en cualquier otro dispositivo electrónico, por
Acepta conexiones SSH y este nos sirve para conexiones remotas desde consola o
Shell de comandos y entrar a la raíz de la Rpi.
19
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
2.4. Python
dinámico y elegante, hace que sea perfecto e ideal para la creación se scripts y el
Por otra parte, nos ofrece la instalación de paquetes y librerías fáciles de descargar por
20
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
La ilustración 3 muestra las conexiones de del DHT; VDD alimentación, DATA cable de
datos, GND tierra.
Las características más relevantes del sensor DHT11 son:
Alimentación de 3V a 5V
Precisión de temperatura de ±2 °C
Las características más detalladas del sensor se muestran en la Tabla 2 [ CITATION Ato19 \l
22538 ].
21
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
2.6. Node JS
NodeJS es un entorno de ejecución JavaScript del lado del servidor. Recordemos que
JavaScript nace inicialmente en la década de los noventas por los desarrolladores de
Netscape, este fue creado para resolver problemas simples como validación de
formularios, alertas y pequeños problemas de lógica de programación. Sin embargo,
JavaScript ha venido evolucionando hasta convertirse en un lenguaje de programación
completo. NodeJS es creado por Ryan Lienhart Dahl, quien tuvo la gran idea de tomar el
motor de JavaScript de Google Chrome llamado V8, y montarlo como el Core de NodeJS
[ CITATION Bla17 \l 22538 ].
22
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
“Este módulo de telefonía nos posibilita enviar y recibir llamadas y mensajes de texto,
usando la Rasberry pi 3b+ para su control de 3-5V con una interfaz serial UART que pueda
mandar información bidireccional con los pines Rx/Tx.
Solo trabaja con tecnología 2G a una velocidad en baudios dependiendo de tu país,
controlado con comandos AT desde distintas aplicaciones tales como picocom y
minicom[ CITATION Fra18 \l 9226 ]. LA tarjeta SIM800L se muestra en la Ilustración 4.
23
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
El módulo SIM800L puede conectarse a redes 2G para hacer y recibir llamadas, al igual
que conectarse a datos a una velocidad de 2G. Las características del módulo SIM800L
son:
micrófono electret.
Receptor FM.
24
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
En la ilustración 5 se aprecia el montaje general del IDS con suricata, un switche, Rpi,
Access point, y dispositivos conectados a la red.
25
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
“Un robot seguidor de línea solo tiene un objetivo, seguir la línea negra marcada
sobre un tablero blanco.
Lo que debe tener un robot básico [ CITATION Wik12 \l 9226 ]:
Sensores que detectan la línea.
Motores que dependen del peso, tamaño, fuerza, entre otros factores para
Algunos de los eventos que investigamos en Colombia son RUNIBOT y ROBOTEX Estos
se describirán a continuación.
RUNIBOT
RUNIBOT – Asociación Red Universitaria Bogotá – Robot. Es una red que agrupa a seis
La competencia es un reto que prueba las habilidades de dos robots para recorrer la
26
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
4 minutos. A continuación, se muestra en la ilustración 6 la pista con cada uno de los ping-
27
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ROBOTEX
robótica más grande del mundo, que por segunda ocasión se llevará a cabo en Colombia,
una pista trazada que contará con algunos obstáculos. Esta competencia se llevará a cabo
el 29 de noviembre en la UPB.
3082 ].
Señalización: La Pista contendrá una marca donde indicará el inicio y final del
camino.
29
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
3. METODOLOGÍA
planteados dentro del semillero, y dan solución a los objetivos específicos planteados. Se
detallan los pasos seguidos para la solución de cada proyecto y de esta manera se puedan
replicar dentro de los proyectos del semillero. Los proyectos tratados en este capítulo son
Instalación de Raspbian en la RPi, Manejo de la GPIO con Rpi y Python, Montaje DHT11
Python, Montaje IoT con Rpi y Plataforma AskSensor, Montaje GSM y Rpi, IDS con Suricata
x1 Adaptador de corriente
x1 Mouse y teclado
30
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ISO de Raspbian
Los pasos de Instalación del sistema se describen del ítem 3.1.1. a 3.1.6.
Ahora se formatea la tarjeta micro SD, para el ejemplo se usara una SD clase 10 de
Una vez el proceso ha terminado saldrá una alerta de que debemos formatear la SD
32
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ranura SD de nuestra Raspberry pi encendiendo la tarjeta y si todo sale bien debería iniciar
el sistema:
configuración del idioma, país y zona, luego cambiamos la contraseña del sistema,
33
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
obligación hacerlo, pero sí se hace el proceso puede tardar hasta 1 hora esto no afecta
Si no se quiere realizar actualización alguna sólo se omite en "Skip" y esto sería todo,
la Raspberry pi está lista para ser trabajada desde el escritorio de la RPi como se muestra
en la ilustración 11.
programará para hacer una secuencia con leds y un pulsador[ CITATION ID19 \l 3082 ]. Lo
Luego descargamos con el siguiente comando las librerías para trabajar de forma
GPIO
34
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
siempre se debe de guardar con la extensión “. py” para poderlo abrir en Python(idle), y
conectamos los leds con los pines GPIO 14, 15, 18, 23, 24, 25, 8, 7; conectando estos pines
a cada led para hacer la secuencia y en el GPIO 12 se pondrá el pulsador para salir del
ciclo.
librerías, luego se nombran los pines con los que vamos a trabajar y configuramos los leds
y pulsador como entradas y salidas, se puede visualizar las librerías que se necesitan. En la
ilustración 15 se hace la configuración de los pines GPIO como entradas y salidas y el lazo
infinito hasta presionar el pulsador y saldrá del bucle automáticamente con el break.
Haremos un break para salirnos del bucle cuando detecte que se presionó el pulsador.
35
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
36
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ilustración 16.
37
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Para el manejo de las plataformas IoT se hace un diseño por medio de la lectura de un
ID191 \l 3082 ].
Para este proyecto será necesario tener las siguientes herramientas a la mano:
será el diagrama de conexión para el sensor DHT11 a la Raspberry pi, Este sensor se
Ahora será necesario instalar la librería del sensor para que sea compatible con
anterior.
39
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
cd Adafruit_python_DHT
Ahora vamos a comprobar que el sensor esté funcionando ejecutando los ejemplos de
cd examples
ejecutarse con sudo y “./”, se le adicionan un 11, el cual indica que es el sensor DHT11 y el
Temp y Humidity.
sudo ./AdafruitDHT.py 11 4
40
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
import Adafruit_DHT
import time
while True:
sensor = Adafruit_DHT.DHT11 #Cambia por DHT22 y si usas dicho sensor
pin = 4 #Pin en la raspberry donde conectamos el sensor
humedad, temperatura = Adafruit_DHT.read_retry(sensor, pin)
lectura del sensor DHT11; a medida que se le aplique calor al sensor, la humedad y la
temperatura aumentan.
41
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
las alarmas por medio de 8 leds, y se define una función Alarma() que prende y apaga los
42
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
43
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
NodeJS
Hardware requerido:
Raspberry Pi 3 Modelo B
Los pasos a seguir para la implementación de la IoT con askSensors y NodeJS son los
siguientes:
Una vez dentro de la aplicación, en el botón naranja “+new sensor” se usa para crear
44
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
lectura, al finalizar se presiona guardar (save). Como es un sensor que lee temperatura y
humedad se tiene que crear dos módulos y se crea en el botón “+ add Module”.
Luego, aparecerá los datos de la creación del sensor, tales como el API KEY, fecha de
45
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
que se desea, se escoge el grafico lineal porque es el más óptimo para nuestra lectura,
24.
comando node -v y npm -v. Este comando debería devolver la versión actual del nodo y
npm instalado. Se asegura de que no dé ningún error. Cabe anotar que el Raspbian
46
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
node -v
npm -v
Paso 6. Creación del archivo iot.js para ejecución en la Rpi y Asksensors por
medio de NodeJS:
Si después de los comandos node y npm devuelve la versión, se crea un nuevo archivo
llamado iot.js
“Software: dentro del archivo creado se debe añadir el siguiente código .js de github”
https://asksensors.com/doc/connect-raspberry-pi-https.html
plataforma asksensors:
Nota: Para no tener ningún problema es mejor tener el archivo en la carpeta pi.
47
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
node iot.js
48
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Se crea otro archivo .js para la lectura de sensor DHT combinado con el código iot.js.
el código está en el ANEXO 4, en las ilustraciones 27 y 28 siguientes, se muestra cómo
debe de quedar el código completo.
49
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Por último, con el comando node DHT.js corremos el programa y leemos el sensor, en
la ilustración 29 se observa los datos del sensor y la conexión con la plataforma
AskSensors.
50
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
En este proyecto se envían y reciben mensajes de texto por medio del módulo GSM
comunicación en serie para Raspberry pi. El Hardware requerido para hacer el montaje de
la SIM800L es:
51
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
1 X Raspberry Pi 3 B+
1 X SIM800L con TARJETA SIM
3 X LED
Resistencia 3 X 1 k
1 X placa sin soldadura
7 X cables de conexión macho a hembra
1 X cables de conexión macho a macho
52
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Actualiza el firmware:
sudo rpi-update
Sudo reboot
Habilitar UART
diferente con respecto a la interfaz UART en el encabezado GPIO, por eso se necesita
habilitarlo primero.
core_freq=250
# Habilitar UART
enable_uart = 1
53
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
deshabilitar la consola.
la ilustración 33.
Sudo reboot
54
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Por último, se hace una configuración para el puerto serie para Python:
sudo raspi-config
55
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
56
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
se hizo correctamente el cambio mientras inicia la tarjeta no volverá a enviar datos por la
UART.
57
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
58
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
guardar en un log:
En este espacio mostrare los códigos para enviar y recibir llamadas y mensajes de
texto con códigos Python.
59
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
60
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
61
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
62
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Ilustración 45. Código 1 enviar msm para encender leds, Código ANEXO 9
63
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Ilustración 46. Código 2 enviar msm para encender leds, Código ANEXO 9
64
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
detección de intrusos conocido como IDS, en una red de área local u hogar, esto con el
extra se podrá filtrar y ver el tráfico que pasa por la red, en la ilustración 46 se verá el
plano de conectividad.
- X1 Raspberry Pi 3B+
- X1 Cable de alimentación para raspberry
- X1 Switch Cisco (O cualquier otro que acepte Port Mirroring)
- X1 Router Tp-link o el de uso casero en el hogar es válido
- X1 Access Point
- Cables UTP para realizar conexiones
- Celulares o PCs que servirán como clientes en la red.
- Software Putty para configuración del Switch Cisco
- Software Suricata
- Sistema Operativo Raspbian en tarjeta micro SD de 32Gb clase 10
65
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Como primer paso se hará el montaje físico de la red, tal y como se aprecia en la
por facilidad en el uso de distintos equipos, pero muchos de ellos fáciles de adquirir en el
mercado a nivel global: Veremos los componentes que usaremos para montar el IDS.
Existen varias maneras para instalar Suricata, en este caso se ejecutará desde el
66
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Se borrará el usuario PI, se debe salir de la sesión y entrar con el nuevo usuario
creado:
comparta el tráfico que reciba por las diferentes interfaces en el switch (Que tendrá
67
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
el arranque automático:
ejecutando lo siguiente:
Ahora será necesario habilitar Port mirroring, esto es una función que tiene el switch
para capturar todo el tráfico de una interfaz específica a otra interfaz es decir replicar
68
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
todo lo que por allí se transmite, trabajo que termina Suricata al mostrar este tráfico al
analista.
Lo primero por tener en cuenta es el puerto origen. Debe ser el puerto al cual se le
analizará el tráfico en este caso el cable UTP/Ethernet del cual estará conectados todos los
equipos y router:
interface GigabitEthernet1/10
switchport
switchport nonegotiate
spanning-tree portfast
end
interface GigabitEthernet2/10
69
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
switchport
switchport nonegotiate
spanning-tree portfast
end
Switch 1 # enable
Switch 1 #config t
Switch 1 (config)#
raspberry pi:
70
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Switch 1 (config)#
comando:
Switch 1 #
Session 1
———
Description :–
RX Only : None
TX Only : None
Both : Gi1/10
Source VLANs :
RX Only : None
TX Only : None
Both : None
71
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
IP QOS PREC :0
IP TTL : 255
Switch 1 #
tráfico en la red local instalada, esto significa configurar el IDS en Raspberry como
72
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Se configurará otra tarjeta de Red USB en Raspbian para tener dos en total, ambas
acordes a la VLAN establecida en la configuración del switch en este caso siendo la VLAN
address 172.16.0.2
netmask 255.255.255.0
network 172.16.0.0
gateway 172.16.0.1
IP_FORWARDING para que los paquetes pasen de la Raspberry hacia el o los equipos a
73
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
para ambas tarjetas de red en la Raspberry Pi para establecer comunicación del tráfico
Por lo cual la máquina atacante podrá hacer ping hacia el IPS (192.168.1.100) como se
verificar que esté activo los servicios de “AF_PACKET support” y “NFQueue support”:
HOME_NET: “[192.168.0.0/24]”
EXTERNAL_NET: “[172.16.0.0/24]”
Finalmente se reinicia Suricata para predeterminar todos los cambios que se han
75
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
todo el tráfico proveniente de cualquier red al tener como origen y destino 0.0.0.0/0:
Configurado el setup y sus reglas, y las reglas del Firewall para analizar información se
procede a ejecutar pings o peticiones entre máquinas para que desde la Raspberry PI y en
su consola se pueda ver que comportamiento hay, es decir se verificarán las reglas
personalizadas para efectos de prueba “pass icmp $EXTERNAL_NET any -> any any (msg:
76
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
catalogada como una posible petición de ataque desde un aplicativo web, es posible
obtener otros resultados en el log según las reglas impuestas en el custom.rules como SSH
y HTTPS pero esto varía según las peticiones que hagan las máquinas conectadas en red
local, sin embargo Suricata siempre estará activa vigilando esta información.
77
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Costos y presupuestos
cada componente el costo por unidad, obteniendo una inversión total ideal de $914.000
pesos colombianos, sin tener en cuenta el tiempo establecido y algunos errores que se
relación peso/potencia para ganar velocidad y mejoras en otras variables físicas, es por
ello que como incentivo para la SII (Semana de la Ingeniería) se desea mostrar un seguidor
de línea de alto rendimiento capaz de recorrer la pista estándar del ITM en menos de 6
segundos, todo esto llevando una línea de desarrollo desde el montaje superficial hasta el
Escogiendo el microcontrolador
menos en Colombia los más usados actualmente son Arduino en sus versiones Nano y
mini y la tarjeta de Pololu Baby Orangutan, sin embargo, al no cumplir con los requisitos
entre sus principales características y ventajas se tiene señales de 16 bits, memoria flash
de 48kB, memoria RAM de 2048 Bytes, EEPROM de datos de 1024 Bytes, velocidad de CPU
hasta 30MIPS y 30 fuentes de interrupciones siendo este uno de sus mejores aspectos,
además su precio oscilo entre los $9.000 a $16.000 frente a $30.000 o más del precio de
otros micros.
79
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
este, sin embargo, existen opciones que demandan cierta dificultad, pero óptimas para el
peso del robot, así que se escogió diseñar un circuito con tecnología de montaje
superficial siendo este a la vez el chasis del robot en su diseño final su peso total es de 164
80
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
software Proteus y Proteus PCB se puede ver en la siguiente imagen de forma general el
Chasis creado
81
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Regleta de 16 sensores
El seguidor de línea usa una regleta de 16 sensores en línea con referencia exacta
QTR-8A, cuya labor es detectar la cantidad de luz reflejada en una superficie, midiendo la
longitud del pulso de luz se sabe cuánto está reflejando el sensor, en la ilustración 66 se ve
En el caso de que la salida sea analógica como para este caso, será necesario usar un
conversor A/D (analógica a digital). Dichas señales obtenidas pasarán por un multiplexor
que comunicará por el cable tipo bus de datos al microcontrolador que comportamiento
motores
Se han usado dos motores de la marca Pololu, cuya relación de engranajes es 10:1, con un
voltaje nominal de 6 voltios, alcanzando puestas en marcha de 3000 revoluciones por
minuto, 120mA sin carga y 0.3Kg*cm total de torque, catalogados y avalados para
competencias de alto nivel en Colombia.
Se debe entender que si ambos motores funcionan a las mismas RPM a la vez el robot
debe ir en línea recta y variando las RPM de uno y otro se conseguirá que gire ya sea a la
izquierda o la derecha, a esto se le llama configuración diferencial y es el mecanismo
utilizado en muchas máquinas industriales en la actualidad. Respecto al controlador
82
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
proporcional el robot posee una regleta de 16 sensores en línea con una separación de 0.4
centímetros, así se detecta la posición de la línea con una precisión de 0.4cm, si la línea se
mueve habrá un error positivo o negativo según hacia donde sea el desplazamiento.
El código para el robot seguidor de línea ha sido desarrollado en lenguaje C entre sus
partes más importantes se resaltan el movimiento de los motores con solo agregar algún
valor numérico entre 0 y 10000 para el PWM:
/----------- Motores---------/
int16 UL=000; // Velocidad de motor Izquierdo [0 1]
int16 UR=000; // Velocidad de motor Derecho [0 1]
int16 PWM_max=10000; // Máximo valor posible de PWM
int16 PWM_min=-10000; // Mínimo valor posible de PWM
La función a cargo de calibrar los sensores y establecer los valores leídos para
reescribirlos en el momento de correr:
void Calibrar_sensores() {
int8 Columna,fila;
float SetP=400.0;
float valor=0.0;
float valor2=0.0;
int16 i=0;
int8 x=0;
int8 y=0;
float vsensor = 0.0;
while(1){
valor=Sensores(0);
valor2=Sensores(15);
if(valor>Setp && valor2>Setp){
for(y=0;y<25;y++){
for(x=0;x<16;x++){
// delay_ms(10);
for(i=0;i<100;i++){
vsensor = Sensores(x);
if(vsensor>Max[x]){
Max[x] = vsensor;
}
if(vsensor<Min[x] && vsensor!=1023.0){
Min[x] = vsensor;
83
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
}
}
Dichos valores son almacenas en un vector que ya está definido dentro de la función.
Proteus
Usando lenguaje C con algunas rutinas, investigando se determinó que el robot usaría
puede responder a un error de control inminente y por lo tanto, lograr una acción
84
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
de los sensores para que el robot siga la línea y obtenga la estabilidad deseada para
85
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
4. RESULTADOS Y DISCUSIÓN
86
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
En este trabajo se logró resolver cada uno de los retos y problemas que habían
en trabajos similares que hay en internet todos son muy antiguos, ya que cada día la
investigación del MiniPc Rasberry pi, porque hay demasiada información de este para
lograr mis objetivos; uno de ellas fue una página llamada innovadomotics donde me
explicando gran parte del producto enseñando lo básico de GPIO y lectura de sensor
DHT11 en Python.
que innovar; se probó cosas nuevas saliéndose de lo que hay en internet, porque no
87
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
funciona muy bien, al final se pudo resolver el problema enviando y recibiendo llamadas y
mensajes de texto como se ve en la ilustración 70, Otra dificultad fue que el módulo
datos UART ttyS0, por esto en la ilustración 71 se visualiza los puertos que hay que
habilitar y deshabilitar.
actualización de las reglas para comunicar los dispositivos y la rasberry pi como IDS, pero
al final se resolvió haciendo el forward para que los paquetes pasen de la Raspberry hacia
89
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
5. CONCLUSIONES, RECOMENDACIONES Y
TRABAJO FUTURO
Teniendo en cuenta el auge que está tomando hoy en día el mundo digital, el internet
de las cosas, blockchain, entre otras temáticas que tienen que ver con el manejo de datos
desde una nube, este proyecto es un mediador entre las personas y el internet de las
cosas implementando esta nueva tecnología en sus vidas cotidianas, haciendo de éstas
foco importante, que nos permite igualmente proteger nuestros dispositivos con sistemas
reto.
que lo utilizan, que tanto avance proporcionan a la actualidad, y que tanto estamos
90
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Una de las conclusiones más detallada, es la descripción del ras Berry PI, ya que es un
gracias a esto se logró llevar a cabo este proyecto de medición y temperatura del aire.
Esta implementación fue posible gracias a los aportes de conceptos informáticos que
91
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
REFERENCIAS
https://raspberryparatorpes.net/rivales/raspberry-pi-vuelve-a-ser-la-mejor-placa-
de-2018/
API/blob/master/https_get.js
https.html
raspberry-pi-https.html
formatter.uptodown.com/windows
https://www.ato.com/temperature-and-humidity-sensor-dht11
https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/
db, b. (s.f.). Raspberry Pi 3 Model B vs. Orange Pi Mini 2 vs. Orange Pi Plus 2E vs.
https://www.hackerboards.com/compare/103,50,113,7/
92
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
https://www.sothis.tech/detectando-intrusos-casa-parte-i/
v=naC0lIuHWAc&list=PLZHVfZzF2DYIa1Orv3gro4rW9jFedPR96&index=8
sim900-y-raspberry-pi/
http://fpaez.com/llamadas-y-sms-usando-un-modulo-sim900-y-raspberry-pi/
https://www.youtube.com/watch?v=W-
NzzjQD80k&list=PLZHVfZzF2DYIa1Orv3gro4rW9jFedPR96&index=5
temperatura-humedad-DHT11-DHT22.html
SOFTWARE/CD-DVD-Tools/Etcher-Portable.shtml
https://docs.python.org/3/tutorial/index.html
https://www.raspberrypi.org/downloads/raspbian/
93
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
http://www.redmas.com.co/tecnologia/robotex-festival-robotica-llega-colombia/
content/uploads/2012/09/seguidor.pdf
4-0/item/4revolucion-internet-de-las-cosas
https://www.programoergosum.com/cursos-online/raspberry-pi/232-curso-de-
introduccion-a-raspberry-pi/instalar-raspbian
vs-orange-pi-prime/
https://hardzone.es/2018/07/02/review-raspberry-pi-3-modelo-b/
https://es.wikipedia.org/wiki/Robot_seguidor_de_l%C3%ADnea
94
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXOS
ANEXO 1
#importamos la libreria y cambiamos su nombre por "GPIO"
import RPi.GPIO as GPIO
#necesario para los delays
import time
#establecemos el sistema de numeracion que queramos, en mi caso BCM
GPIO.setmode(GPIO.BCM)
#definimos los pines gpio
Led_1 = 14
Led_2 = 15
Led_3 = 18
Led_4 = 23
Led_5 = 24
Led_6 = 25
Led_7 = 8
Led_8 = 7
Pulsador = 12
GPIO.output(Led_1, GPIO.LOW)
GPIO.output(Led_2, GPIO.LOW)
GPIO.output(Led_3, GPIO.LOW)
GPIO.output(Led_4, GPIO.LOW)
GPIO.output(Led_5, GPIO.LOW)
GPIO.output(Led_6, GPIO.LOW)
GPIO.output(Led_7, GPIO.LOW)
GPIO.output(Led_8, GPIO.LOW)
time.sleep(0.5)
95
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
i = GPIO.input(Pulsador)
#----------------------------------------
if i==0:
#--------------------------------------
for c in range(2):
#------------------------------------
for c in range(8):
#----------------------------------
GPIO.output(Led_1, GPIO.LOW)
GPIO.output(Led_2, GPIO.LOW)
GPIO.output(Led_3, GPIO.LOW)
GPIO.output(Led_4, GPIO.LOW)
GPIO.output(Led_5, GPIO.LOW)
GPIO.output(Led_6, GPIO.LOW)
GPIO.output(Led_7, GPIO.LOW)
GPIO.output(Led_8, GPIO.LOW)
ANEXO2
import Adafruit_DHT
import time
GPIO.setmode(GPIO.BCM)
Led_1 = 14
Led_2 = 15
96
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Led_3 = 18
Led_4 = 23
Led_5 = 24
Led_6 = 25
Led_7 = 8
Led_8 = 7
Pulsador = 12
GPIO.setup(Led_1, GPIO.OUT)
GPIO.setup(Led_2, GPIO.OUT)
GPIO.setup(Led_3, GPIO.OUT)
GPIO.setup(Led_4, GPIO.OUT)
GPIO.setup(Led_5, GPIO.OUT)
GPIO.setup(Led_6, GPIO.OUT)
GPIO.setup(Led_7, GPIO.OUT)
GPIO.setup(Led_8, GPIO.OUT)
GPIO.setup(Pulsador, GPIO.IN)
def Alarma():
GPIO.output(Led_1, GPIO.HIGH)
GPIO.output(Led_2, GPIO.HIGH)
GPIO.output(Led_3, GPIO.HIGH)
GPIO.output(Led_4, GPIO.HIGH)
GPIO.output(Led_5, GPIO.LOW)
GPIO.output(Led_6, GPIO.LOW)
GPIO.output(Led_7, GPIO.LOW)
GPIO.output(Led_8, GPIO.LOW)
time.sleep(0.1)
97
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
GPIO.output(Led_1, GPIO.LOW)
GPIO.output(Led_2, GPIO.LOW)
GPIO.output(Led_3, GPIO.LOW)
GPIO.output(Led_4, GPIO.LOW)
GPIO.output(Led_5, GPIO.HIGH)
GPIO.output(Led_6, GPIO.HIGH)
GPIO.output(Led_7, GPIO.HIGH)
GPIO.output(Led_8, GPIO.HIGH)
time.sleep(0.1)
sensor = Adafruit_DHT.DHT11
pin = 4
Alarma()
i = GPIO.input(Pulsador)
if i==0:
break
time.sleep(1)
98
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXO 3
var ApiKeyIn = '...................'; // TODO: fill your sensor Api Key In given by https://asksensors.com
var writeInterval = 5000; // TODO: adjust timerInterval (in ms)
// API host name
var host = 'https://api.asksensors.com';
});
}
send_data();// send first data
// Send data every timerInterval
setInterval(send_data, writeInterval); // setInterval
99
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXO 4
var https = require('https');
var sensorLib = require("node-dht-sensor"); //Librería Sensor
const request = require('request');
var sensorResult = sensorLib.read(11, 4); //Pin sensor
// Configuración de API
var ApiKeyIn = 'd7VSc7Ukq9bxXu0o2lu3JpUsZtOGSblx'; // Clave de mi API
var writeInterval = 5000; // Tiempo de actualización cada 5 segundos
// host name de mi API
var host = 'https://api.asksensors.com';
function send_data(){
100
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
});
}
send_data();// Envío dato
// Envío dato cada 5 segundo
setInterval(send_data, writeInterval);
ANEXO 5
SERIAL_PORT = "/dev/ttyS0"
ser=serial.Serial(SERIAL_PORT,baudrate = 115200,timeout=5)
ser.write("AT+CMGF=1\r")
print("Text mode enabled...")
time.sleep(3)
ser.write('AT+CMGS="312234201"\r')
msg="MENSAJE LEONEL...." #aqui editamos el mensaje que queremos enviar
print("sending message....")
time.sleep(3)
ser.write(msg+chr(26))
time.sleep(3)
print("message sent...")
ANEXO 6
#print(archivo.readline()[-1])
#archivo.close()
f=open("mensajes.log","r")
mensaje=f.readlines()[-1]
print(mensaje)
f.close()
101
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXO 7
import serial
import time,sys
SERIAL_PORT = "/dev/ttyS0"
ser=serial.Serial(SERIAL_PORT,baudrate = 115200,timeout=5)
ser.write("AT+CMGF=1\r")
time.sleep(3)
ser.write('AT+CMGS="3502456797"\r')
f=open("mensajes.log","r")
msg=f.readlines()[-1]
print(msg)
f.close()
#msg="MENSAJE LEONEL...."
print("sending message....")
time.sleep(3)
ser.write(msg+chr(26))
time.sleep(3)
print("message sent...")
ANEXO 8
import RPi.GPIO as GPIO
import serial
import time,sys
102
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
SERIAL_PORT = "/dev/ttyS0"
ser=serial.Serial(SERIAL_PORT,baudrate = 115200,timeout=5)
ser.write("ATD3103988056;\r")
print("Dialing....")
#time.sleep(10)
ser.write("ATH\r")
print("Hanging up...")
ANEXO 9
import datetime
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
setup()
time.sleep(1)
#time.sleep(1)
103
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
while True:
reply = ser.read(ser.inWaiting())
if reply != "":
ser.write("AT+CMGR=1\r")
time.sleep(1)
reply = ser.read(ser.inWaiting())
print reply
if "ON" in reply.upper():
if "LED1" in reply.upper():
GPIO.output(23,GPIO.HIGH)
if "LED2" in reply.upper():
GPIO.output(24,GPIO.HIGH)
if "LED3" in reply.upper():
GPIO.output(25,GPIO.HIGH)
if "ALL" in reply.upper():
GPIO.output(23,GPIO.HIGH)
GPIO.output(24,GPIO.HIGH)
GPIO.output(25,GPIO.HIGH)
if "OFF" in reply.upper():
if "LED1" in reply.upper():
GPIO.output(23,GPIO.LOW)
if "LED2" in reply.upper():
GPIO.output(24,GPIO.LOW)
if "LED3" in reply.upper():
104
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
GPIO.output(25,GPIO.LOW)
if "ALL" in reply.upper():
GPIO.output(23,GPIO.LOW)
GPIO.output(24,GPIO.LOW)
GPIO.output(25,GPIO.LOW)
time.sleep(.500)
time.sleep(.500)
time.sleep(.500)
ANEXOS 10
#include <30f4011.h>
#fuses FRC_PLL16,NOPROTECT,NOWDT,NOPUT
#device adc=10
#use delay(clock=120000000)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#use fast_io(F)
105
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
#define RX PIN_F4
#define AD pin_E5
#define BD pin_E4
#define AI pin_E2
#define BI pin_E3
/----------- Motores---------/
/----------------------------/
float Smin=400.0;
float Smax=1023.0;
float SenVal[16];
float sensors_average=0.0;
float sensors_sum=0.0;
int x=0;
int on_line=0;
float line_1=0.0;
float line=0.0;
{0,0,0,1},
{0,0,1,0},
{0,0,1,1},
{1,0,0,0},
{1,0,0,1},
106
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
{1,0,1,0},
{1,0,1,1},
{0,1,0,0},
{0,1,0,1},
{0,1,1,0},
{0,1,1,1},
{1,1,0,0},
{1,1,0,1},
{1,1,1,0},
{1,1,1,1}};
/* pines
PIN_RB0 ------ S0
PIN_RB1 ------ S1
PIN_RB2 ------ DP
PIN_RB3 ------ S3
PIN_RB4 ------ S2
*/
output_bit(PIN_B3,N[Num_Sensor][0]);
output_bit(PIN_B2,N[Num_Sensor][1]);
output_bit(PIN_B1,N[Num_Sensor][2]);
output_bit(PIN_B0,N[Num_Sensor][3]);
delay_us(100);
int8 ValSensor=0;
107
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
//if (medicion>800){
//Valsensor=0;
//}else{
//Valsensor=1;}
return medicion;
const int Numer_Samples=1; // Muestras por sensor, más muestras para mejor sensado.
float map(float value, float minSen, float maxSen, float y_min, float y_max)//funcion de normalizacion
if( Vcal>y_max){Vcal=y_max;}
if( Vcal<y_min){Vcal=y_min;}
return Vcal;
float Minimos,Maximos;
1023.0,1023.0,1023.0,1023.0,1023.0,1023.0};
void Calibrar_sensores() {
float SetP=400.0;
float valor=0.0;
float valor2=0.0;
int16 i=0;
108
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
int8 x=0;
int8 y=0;
while(1){
valor=Sensores(0);
valor2=Sensores(15);
for(y=0;y<25;y++){
for(x=0;x<16;x++){
// delay_ms(10);
for(i=0;i<100;i++){
vsensor = Sensores(x);
if(vsensor>Max[x]){
Max[x] = vsensor;
Min[x] = vsensor;
for(x=0;x<16;x++){
fprintf (PC,"||%f\r",Max[x]);
fprintf (PC,"||%f\r\n",0.0);
for(x=0;x<16;x++){
fprintf (PC,"||%f\r",Min[x]);
109
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
fprintf (PC,"||%f\r\n",0.0);
break;
output_HIGH(Led_Derecho);
output_HIGH(Led_Izquierdo);
delay_ms(100);
output_LOW(Led_Derecho);
output_LOW(Led_Izquierdo);
delay_ms(100);
output_HIGH(Led_Derecho);
output_HIGH(Led_Izquierdo);
on_line=0;
float Vr=0;
for(x=0;x<16;x++)
//if(x==8){Vr=0.0;}
//Vr=SenVal[x];
110
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
if(sensors_average==0 || sensors_sum==0){
sensors_average=1,sensors_sum=1;
//fprintf (PC,"%i\n",Vr);
if (sensors_sum>1){
on_line=1;
line_1=line;
}else{
on_line=0;
if (on_line==0){
line = line_1;
sensors_sum=0;
Vr=0;
111
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
int8 Color_linea=0;
int8 IR=0;
float32 V_pot=0;
int8 pulsador=0;
int8 i=0;
if (ur>PWM_max){UR=PWM_max;}
if (ul>PWM_max){UL=PWM_max;}
if (ur<PWM_min){UR=PWM_min;}
if (ul<PWM_min){UL=PWM_min;}
if(ur>=0){ //OC4
output_high(AD);
output_low(BD);
}else{
output_low(AD);
output_high(BD);
if(UL>=0){
output_high(AI);
output_low(BI);
112
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
}else{
output_low(AI);
output_high(BI);
void init_Motors(){
setup_compare(1,COMPARE_PWM | COMPARE_TIMER3 );
delay_ms(1500);
setup_compare(3,COMPARE_PWM | COMPARE_TIMER2 );
setup_compare(4,COMPARE_PWM | COMPARE_TIMER2 );
set_pwm_duty(3,0000);
set_pwm_duty(4,0000);
//ENABLE_INTERRUPTS(INTR_GLOBAL);
float U,Up,Ud,Ud_1,error,error_1,linea;
int16 Kp,Kd;
int16 Tur;
void Tunning(){
Tur=5000;
Kp=3.5*1000.0;
float Td=4.6;
113
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
Kd=Kp*Td;
U_Max=PWM_max;
U_Min=PWM_min;
void OptimalSpeed(){
int16 delta;
if(UR>U_MAX){
if(UL>U_MAX){
void PID(){
// Accion proporcional
Up= Kp*error;
// Accion Derivativa
Ud = Kd*(error-error_1);
// Accion de Control
U=Up+Ud;
114
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
// fprintf (PC,"||%f\r\n",U);
error_1 = error;
Ud_1=Ud;
void main()
set_tris_B(0b000100000);
set_tris_F(0xFF);
set_tris_E(0x00);
set_tris_D(0x00);
init_Motors();
Tunning();
output_HIGH(Led_Derecho);
output_HIGH(Led_Izquierdo);
// Boton o Rx de arranque
while(1){
if (input(RX)==0 || input(Button)==1)
output_LOW(Led_Derecho);
output_LOW(Led_Izquierdo);
Calibrar_sensores();
break;
115
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
while(1)
linea=Calcular_Linea();
error=8.0 - linea;
if (error>0){
output_HIGH(LED_Izquierdo);
output_LOW(LED_Derecho);
}else{
output_LOW(LED_Izquierdo);
output_HIGH(LED_Derecho);}
OptimalSpeed();
//UR=UL=00;
Motors(UL,UR);
/*if (input(RX)==0)
output_LOW(Led_Derecho);
output_LOW(Led_Izquierdo);
Motors(0000,0000);
delay_ms(2000);
break;
116
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
117
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ANEXO 11
118
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
FIRMA ESTUDIANTES
FIRMA ASESOR
MODIFICACIONES_______
ACTA NO._____________
119
Código FDE 089
INFORME FINAL DE
Versión 03
TRABAJO DE GRADO
Fecha 2015-01-22
ACTA NO._____________
120