SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

94
INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD PROFESIONAL "ADOLFO LÓPEZ MATEOS" ZACATENCO "SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE MATERIALES LIGEROS " TESIS PARA OBTENER EL TÍTULO DE INGENIERO EN COMUNICACIONES Y ELECTRÓNICA PRESENTAN EDGAR IVAN CAMACHO FRANCO EVELIA ESCOBEDO RAMÍREZ ASESOR ING. ALEJANDRO VICENTE LUGO SILVA CIUDAD DE MÉXICO, ENERO 2019

Transcript of SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

Page 1: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICAUNIDAD PROFESIONAL "ADOLFO LÓPEZ MATEOS" ZACATENCO

"SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE

MATERIALES LIGEROS "

TESIS

PARA OBTENER EL TÍTULO DE

INGENIERO EN COMUNICACIONES Y ELECTRÓNICA

PRESENTAN

EDGAR IVAN CAMACHO FRANCO

EVELIA ESCOBEDO RAMÍREZ

ASESOR

ING. ALEJANDRO VICENTE LUGO SILVA

CIUDAD DE MÉXICO, ENERO 2019

Page 2: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …
Page 3: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …
Page 4: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

i

ÍNDICE

Planteamiento del problema .......................................................................................................... 2

Justificación ..................................................................................................................................... 2

Hipótesis .......................................................................................................................................... 3

Objetivos ......................................................................................................................................... 3

Alcance del proyecto ....................................................................................................................... 4

1 CAPÍTULO 1. ESTADO DEL ARTE ........................................... 5

1.1 Robots de servicio ............................................................................................................... 5

1.1.1 MIR .............................................................................................................................. 6

1.1.2 Xiaowa Robotic Cleaner .............................................................................................. 7

1.1.3 Aura ............................................................................................................................. 8

2 CAPÍTULO 2. MARCO TEÓRICO ............................................9

2.1 Componentes y arquitectura de un robot móvil ................................................................. 9

2.1.1 Locomoción ............................................................................................................... 10

2.1.2 Transductores ............................................................................................................ 11

2.1.3 Tipos de comunicación .............................................................................................. 11

2.1.4 Procesadores ............................................................................................................. 12

2.1.5 Entornos de desarrollo .............................................................................................. 13

2.1.6 Normas ISO ................................................................................................................ 14

2.2 Características de los robots móviles ................................................................................ 15

2.3 Base de datos .................................................................................................................... 16

3 CAPÍTULO 3. DESARROLLO Del Prototipo ................ 18

3.1 Desarrollo de hardware..................................................................................................... 18

3.1.1 Motores ..................................................................................................................... 19

3.1.2 Llantas ....................................................................................................................... 19

3.1.3 Placa L298N ............................................................................................................... 20

3.1.4 Sensores .................................................................................................................... 22

3.1.5 Alimentación ............................................................................................................. 23

3.1.6 Raspberry Pi............................................................................................................... 24

3.1.7 Arduino ...................................................................................................................... 25

3.1.8 Herramientas para la comunicación ......................................................................... 26

Page 5: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

ii

3.1.9 Lectura del codificador .............................................................................................. 27

3.2 Desarrollo de software ...................................................................................................... 27

3.2.1 Control de motores ................................................................................................... 28

3.2.2 Lectura de sensores ................................................................................................... 29

3.2.3 Interfaz de usuario .................................................................................................... 32

3.2.4 Comunicación ............................................................................................................ 49

4 Capítulo 4. Pruebas y resultados ......................... 57

4.1 Percepción ......................................................................................................................... 57

4.2 Accesibilidad ...................................................................................................................... 58

4.3 Capacidad de carga ........................................................................................................... 58

4.4 Tiempo de respuesta ......................................................................................................... 59

4.5 Resolución ......................................................................................................................... 60

4.6 Precisión ............................................................................................................................ 62

4.7 Autonomía ......................................................................................................................... 63

4.8 Salida de la trayectoria ...................................................................................................... 63

4.9 Control del mecanismo ..................................................................................................... 64

4.10 Alcance de la comunicación .............................................................................................. 64

4.11 Transmisión de video ........................................................................................................ 65

5 CONCLUSIONES ........................................................................ 66

6 REFERENCIAS ............................................................................ 67

7 ANEXO A .................................................................................... 69

8 ANEXO b ..................................................................................... 86

Page 6: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

iii

ÍNDICE DE FIGURAS

Figura 1.1 MIR100 en hospitales ............................................................................................ 6

Figura 1.2 Robot aspiradora ..................................................................................................... 7

Figura 1.3 Robot Aura ................................................................................................................ 8

Figura 2.1 Diagrama general de un sistema robótico .................................................... 9

Figura 3.1 Diagrama general del robot móvil .................................................................. 18

Figura 3.2 Motor DC utilizado ................................................................................................ 19

Figura 3.3 Llantas con coples ................................................................................................ 20

Figura 3.4 Placa L298N ............................................................................................................. 20

Figura 3.5 Codificador óptico FC-03 .................................................................................... 22

Figura 3.6 Sensor ultrasónico HC-SR04 ............................................................................. 23

Figura 3.7 a)Batería recargable, b)Batería portátil para Raspberry ....................... 23

Figura 3.8 Elementos de una Raspberry ............................................................................ 24

Figura 3.9 Codificador óptico leyendo disco ..................................................................... 27

Figura 3.10 Disco con orificios ............................................................................................... 27

Figura 3.11 Ventana de acceso ............................................................................................. 32

Figura 3.12 Elementos de la base de datos en Access ................................................ 33

Figura 3.13 Registro de nuevo usuario .............................................................................. 34

Figura 3.14 Ventana de acceso denegado………………………………………………………….40

Figura 3.15 Ventana de acceso permitido ........................................................................ 35

Figura 3.16 Archivo .txt para guardar el registro y salida del sistema ................. 36

Figura 3.17 Ventana principal ............................................................................................... 37

Figura 3.18 Ventana para programar recorridos ........................................................... 39

Figura 3.19 Primer paso para la programación de recorridos de recorridos ....... 39

Figura 3.20 Segundo paso para la programación de recorridos .............................. 40

Figura 3.21 Tercer paso para la programación de recorridos ................................... 40

Figura 3.22 Cuarto paso para la programación de recorridos .................................. 40

Figura 3.23 Guardado de recorridos ................................................................................... 41

Figura 3.24 Calibración de vueltas ...................................................................................... 41

Figura 3.25 Ventana para obtener mapa de los recorridos establecidos ............. 42

Figura 3.26 Ejemplo de generación de mapa .................................................................. 43

Figura 3.27 Guardado del mapa ........................................................................................... 44

Figura 3.28 Abrir mapa ............................................................................................................ 44

Figura 3.29 Ventana de control para la ejecución de recorridos ............................. 47

Figura 3.30 Salida del sistema .............................................................................................. 49

Figura 3.31 Diagrama de comunicación ............................................................................ 50

Figura 4.1 Posiciones iniciales para pruebas de percepción ...................................... 57

Figura 4.2 Distancia obtenida de la prueba 3 de percepción .................................... 58

Figura 4.3 Grados de libertad ................................................................................................ 58

Figura 4.4 Delimitación de áreas para pruebas de resolución .................................. 60

Figura 4.5 Prueba 2 de resolución con peso vista superior ....................................... 62

Page 7: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

iv

Figura 4.6 Prueba 4 de resolución sin peso ..................................................................... 62

Figura 4.7 Prueba 2 de resolución con peso vista frontal........................................... 62

Figura 4.8 Cámara puesta en prototipo ............................................................................. 65

Figura 4.9 Interfaz gráfica junto con video en vivo en PC ......................................... 65

ÍNDICE DE DIAGRAMAS

Diagrama 2.1 Diagrama de una base de datos .......................................... 17

Diagrama 3.1 Diagrama de flujo del control de motores ............................. 28

Diagrama 3.2 Diagrama de flujo de sensores ............................................ 30

Diagrama 3.3 Diagrama de flujo de funciones Arduino ................................ 31

Diagrama 3.4 Diagrama de flujo de acceso al sistema ................................ 33

Diagrama 3.5 Diagrama de flujo de registro de nuevo usuario ..................... 35

Diagrama 3.6 Diagrama de flujo para verificar estado ................................ 38

Diagrama 3.7 Diagrama de flujo para la programación de recorridos ............ 42

Diagrama 3.8 Diagrama de flujo para la creación de mapa .......................... 45

Diagrama 3.9 Diagramas de flujo del control del sistema ........................... 48

Diagrama 3.10 Diagrama de flujo del control mediante una ruta .................. 55

Diagrama 3.11 Diagrama de conexiones ................................................... 56

Diagrama 3.12 Diagrama eléctrico del sistema .......................................... 56

ÍNDICE DE TABLAS

Tabla 3.1 Características de Raspberry Pi 3 .................................................................... 25

Tabla 3.2 Descripción de elementos en ventana de acceso ....................................... 33

Tabla 3.3 Descripción de elementos de ventana de registro de nuevo usuario . 34

Tabla 3.4 Descripción de los elementos en ventana principal................................... 37

Tabla 3.5 Descripción de elementos de la ventana para programar recorridos . 39

Tabla 3.6 Descripción de los elementos en ventana para obtener mapa de los

recorridos ....................................................................................................................................... 43

Tabla 3.7 Descripción de los elementos en ventana de control ............................... 47

Tabla 4.1 Pruebas de precepción .......................................................................................... 57

Tabla 4.2 Pruebas de capacidad de carga ......................................................................... 59

Tabla 4.3 Pruebas de tiempo de respuesta ...................................................................... 60

Tabla 4.4 Pruebas de resolución sin peso ......................................................................... 61

Tabla 4.5 Pruebas de resolución con peso ........................................................................ 61

Tabla 4.6 Pruebas de precisión sin peso ............................................................................ 63

Tabla 4.7 Pruebas de precisión con peso .......................................................................... 63

Tabla 4.8 Pruebas de alcance de la comunicación ........................................................ 64

Page 8: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

1

Introducción

El presente trabajo de tesis tiene como principal objetivo dar a conocer una alternativa

al manejo y transporte de materiales, principalmente dentro de áreas domésticas o de

trabajo enfocadas al servicio, con el desarrollo y la implementación del software de

control para un robot móvil aplicando una serie de algoritmos e interfaces, empleando

como elemento principal una API de tipo Rest desarrollada en Python embebida en un

servidor local dentro de una microcomputadora, así como un cliente web desarrollado

en C# el cual tiene como función dotar al sistema de una serie de interfaces gráficas

para su interacción con el usuario.

A partir del desarrollo previamente mencionado se propone la elaboración de un

mecanismo simple y funcional compuesto por un chasis con 4 motores y, adaptado a él,

una serie de componentes electrónicos para obtener un prototipo robusto el cual permite

la evaluación de nuestro sistema a través de pruebas de laboratorio.

Para el desarrollo de este proyecto se establece una metodología compuesta por el

planteamiento del problema, las razones que nos llevaron a trabajar sobre este

proyecto, una propuesta de solución, los objetivos y el alcance que delimita

explícitamente lo que comprende el trabajo.

En el capítulo 1 se aborda una investigación del tema en cuestión a lo largo de la historia,

y cómo fue que la tecnología ha ido permitiendo la aplicación de la robótica en las

distintas áreas de servicio, así también se hace mención a los proyectos similares

realizados en los últimos años.

El capítulo 2 contiene cuestiones teóricas que sustentan la parte del desarrollo del

prototipo propuesto, se describen una serie de elementos que resuelven de distintas

formas el problema planteado.

En el capítulo 3 se hace hincapié en aquellos elementos que fueron seleccionados para

este proyecto en particular, así como los pasos en el diseño y construcción del sistema

en sus aspectos de hardware y software.

Finalmente, en el capítulo 4 se dan a conocer los resultados obtenidos así como las

conclusiones del trabajo en función a las pruebas de desempeño a las que se sometió el

prototipo.

Page 9: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

2

Planteamiento del problema

En la actualidad, la productividad de los trabajadores dentro de espacios como lo son:

hospitales, escuelas, hoteles, oficinas e incluso dentro del hogar se ve afectada por la

sobrecarga de trabajo a la que están sometidos, por lo que es de vital importancia el

adecuado manejo del tiempo para cumplir exitosamente las tareas diarias. Asimismo, el

surgimiento de errores humanos, como olvidar llevar de un lugar a otro cierto papeleo

dentro de una oficina o una escuela, tropezar y tirar una bandeja de comida en un

hospital o en un hotel, o simplemente tareas que quitan mucho tiempo y que son

repetitivas, impactan en la productividad de este tipo de ambientes laborales.

Por otra parte, existe cierta población vulnerable que no puede realizar actividades que

impliquen mucho movimiento como caminar un largo trayecto o desplazarse entre

distintos espacios. Para su bienestar, necesitan la ayuda de otra persona que pueda

facilitarles sus actividades diarias y muchas veces no se cuenta con esa ayuda.

También existen ambientes hostiles para los seres humanos, tareas que son peligrosas

como la exploración de ciertos espacios, la vigilancia por las noches, trabajos en áreas

con temperaturas inadecuadas para un ser humano, entre otras.

Se propone el desarrollo de un dispositivo de ayuda para minimizar las afectaciones que

las situaciones descritas anteriormente puedan causar.

Justificación

Con el fin de obtener datos más precisos y saber el grado de aceptación primeramente,

de un cambio en la forma de trabajo y después, de la integración de un sistema robótico

dentro de las labores diarias dentro de área de servicio (hospital, escuela, oficina u

hotel), se aplicaron 25 encuestas en 4 hospitales públicos de la Ciudad de México en el

mes de mayo a médicos, enfermeras y anestesiólogos preguntando qué funciones les

gustaría que realizará un robot dentro del espacio de trabajo; un 37% de ellos

contestaron que sería útil que colabore en labores de limpieza, mientras que un 42%

encontraron conveniente que ayude al transporte de medicamentos y materiales.

Page 10: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

3

En las estadísticas obtenidas de los cuatro hospitales se ve reflejada una necesidad en

común entre distintas especialidades que existen dentro de un hospital (enfermería,

anestesiología, ginecología y medicina general), la cual demanda una mayor eficiencia

en la labor del transporte y la administración de material médico.

Finalmente se concluye gracias a las opiniones conjuntas de los trabajadores, que el

transporte de materiales mediante un dispositivo robótico apoyaría en la disminución de

tiempos perdidos, así también lograría la disminución de errores o accidentes al

momento del traslado de materiales delicados, como lo son muestras o algunos

medicamentos, estableciendo con esto un mejor sistema de gestión y administración de

los distintos materiales que se encuentran dentro del hospital, y dando como resultado

la optimización de la calidad del servicio brindado por cualquiera de estas instituciones.

Hipótesis

Es posible obtener un mayor control sobre la eficiencia y seguridad de las actividades

diarias de las distintas áreas de servicio, a través de la construcción de un sistema

robótico móvil que se encargue del transporte y entrega de materiales, dando como

resultado la optimización de estas.

Objetivos

General

Diseñar e implementar el sistema de control de un robot móvil para el transporte de

materiales en general utilizando una interfaz gráfica, una base de datos y comunicación

Wi-Fi.

Específicos

• Diseñar y construir el software para controlar el seguimiento del robot desde una

interfaz gráfica instalada en PC, así como el sistema de comunicación inalámbrica

entre la PC y el robot.

• Diseñar y programar la base de datos del sistema.

• Diseñar y construir el hardware de comunicaciones y control del robot.

• Adaptar una estructura mecánica móvil para construir el robot.

Page 11: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

4

• Evaluar el funcionamiento del sistema a través de pruebas de laboratorio.

Alcance del proyecto

El presente proyecto se centra en el control de un sistema robótico móvil por medio de

una interfaz gráfica y comunicación inalámbrica. Debido a esto no se elaborará un diseño

mecánico profesional del robot y solo se realizarán adaptaciones necesarias a una

estructura simple y funcional. Finalmente, el funcionamiento del sistema se evaluará

realizando pruebas de laboratorio.

Page 12: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

5

1 CAPÍTULO 1. ESTADO DEL ARTE

En los años ochenta, con la aceleración computacional y el desarrollo de nuevos

sensores, mecanismos y sistemas de control, permitieron aumentar la autonomía de los

robots. Como consecuencia de esto, en 1990 John Engelberger empieza a desarrollar

los primeros robots móviles para el campo industrial. A partir de ese momento este tipo

de robots empieza a cobrar una fuerza en distintas áreas. En 1994 se crea “Dante I” y

“Dante II” por la Universidad Carnegie Mellon de Pittsburgh, usados para la investigación

de volcanes activos. En 1994 la NASA lanza al espacio “Mars Pathfinder”, un rover

(también conocido como astromóvil, es un vehículo de exploración espacial diseñado

para moverse sobre la superficie de un planeta) encargado de estudiar la superficie de

Marte, controlado desde la tierra. Este aparato tenía un sistema para evitar obstáculos

y así permitir la libre exploración de la superficie marciana. A partir del año 2000 en

adelante, los robots móviles extendieron su campo de aplicación y ya no sólo limitaron

su uso para la investigación, misiones espaciales, exploraciones en volcanes o en el

fondo del mar, durante la guerra, o en fábricas. En la actualidad el uso doméstico se ha

divulgado gracias a la creación de nuevos y robots móviles avanzados como “Aibo”,

“PackBot”, “Roomba” e “IntelliRobots”, entre otros [1].

Los avances tecnológicos han permitido que cada vez los robots sean más livianos y

pequeños con nuevos dispositivos electrónicos y, como consecuencia, la construcción de

sistemas cada vez más complejos y de mejor adaptación a cualquier medio.

1.1 Robots de servicio

El nombre surge por la inquietud de la comunidad científica de realizar desarrollos

destinados a estar al servicio de la sociedad, tratando de que ésta reconozca y apoye

sus resultados. Desde el punto de vista social hay aún muy pocos desarrollos en esta

área que hayan impactado en nuestra forma de vivir, pero en los centros de

investigación especializada en robótica hay una gran actividad en investigación con este

objetivo y, posiblemente en un plazo relativamente inmediato se podrán ver robots de

servicio operando de forma masiva.

Page 13: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

6

El término “robots de servicio” apareció a finales de los años 80 con una definición

propuesta por el comité ISO TC 184/SC2 refiriéndose a todo tipo de robot que no es

industrial, asimismo la IFR (International Federation of Robotics) se refiere como “robot

que opera de forma parcial o totalmente autónoma al servicio del bienestar de los seres

humanos y de equipamiento, excluyendo operaciones manufactureras”. Los robots de

servicio tenían que poder operar en entornos no estructurados, en condiciones

ambientales cambiantes y con una estrecha interacción con los humanos. En 1995 fue

creado por la IEEE Robotics and Automation Society, el Technical Committee on Service

Robots. Este comité definió en el año 2000 las áreas de aplicación de los robots de

servicios [2].

Así bien, podemos ver esta área como la parte de la robótica que se centra en el diseño

y construcción de robots capaces de proporcionar servicios directamente a los miembros

que forman la sociedad. Algunos de los robots móviles que a la vez son robots de servicio

más famosos dentro del mercado son los siguientes:

1.1.1 MIR

En la figura 1.1 se observa un sistema robótico móvil llamado “MIR100”, desarrollado

por la empresa Mobile Industrial Robots, especializado para el transporte en el campo

industrial. Brindan una mayor flexibilidad en el trabajo y un ahorro de tiempo y dinero

en el proceso productivo. El personal puede programarlo y adecuarlo a las necesidades

para que el robot realice las entregas sin descanso [3].

Figura 1.1 MIR100 en hospitales [3]

Page 14: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

7

El Hospital de Southern Jutland en Dinamarca usa una variante de este modelo para

transportar y entregar muestras de sangre, medicinas, artículos de cama, comida,

documentación y desechos de cada cuarto. Las enfermeras y demás personal médico

pueden llamar al robot por teléfono y este los asistirá.

Este sistema puede tomar el elevador para realizar tareas en los diferentes pisos del

hospital. Si surge algún inconveniente manda un mensaje a la estación de control y una

persona encargada puede retransmitir la ruta o controlarlo remotamente a través de un

Smartphone. Para poder acceder a los cajones que contienen el material se debe teclear

un código de acceso [4].

1.1.2 Xiaowa Robotic Cleaner

Desarrollado por la empresa china Xiaomi, es un robot aspirador doméstico autónomo

que cuenta con escobillas debajo de su estructura y a su vez, tiene un sistema de

aspiración que en conjunto operan para realizar la limpieza del hogar (Figura 1.2).

Cuenta con 9 modos de limpieza los cuales es posible administrar desde cualquier

dispositivo móvil con la aplicación Mi Home. También puede limpiar esquinas, zonas

específicas que le indiquemos y alrededor de objetos, como por ejemplo las patas de los

muebles.

Figura 1.2 Robot aspiradora [5]

La aspiradora de Xiaomi tiene todo lo necesario para desplazarse y realizar su labor

correctamente como sensores de colisión e infrarrojos para evitar caer por las escaleras.

Page 15: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

8

Una gran diferencia entre el aspirador Xiaomi y otros en el mercado son el uso de voces

humanas reales y el habla para sus mensajes de estado. El resto de aspiradores o bien

sólo hacen ruidos, o sólo usan luces LED como indicador de que puede haber un

problema.

Una de sus principales ventajas es su costo, el cual es menor en comparación a otros

robots aspiradores de este tipo y posee casi las mismas especificaciones [5].

1.1.3 Aura

Aura es un equipo entrenado para moverse de manera autónoma entre los pisos y

habitaciones de un hotel, realiza tareas sencillas como llevar toallas y agua a los

huéspedes, como se muestra en la figura 1.3. Está siendo implementado por la cadena

de hoteles Millennium Hotels and Resorts que, con ayuda de Aura cuenta con un

avanzado servicio a cuarto.

Este hotel fue diseñado para las personas que se dedican a viajar por el mundo. El robot

se emplea para disminuir la carga de trabajo del personal, ya que mientras Aura se

dedica a realizar sencillas tareas de llevar los insumos que requiere una habitación, los

trabajadores pueden enfocarse en realizar otras tareas. Aura recibe la solicitud de

servicio en alguna habitación, se dirige hasta la puerta de la habitación correcta,

manipula el elevador y con esto, resuelve las solicitudes de los huéspedes a tiempo.

Este robot fue desarrollado por la empresa tecnológica Savioke, quien ya trabaja en otro

modelo que se prevé estará destinado a los servicios de cocina [6].

Figura 1.3 Robot Aura [6]

Page 16: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

9

2 CAPÍTULO 2. MARCO TEÓRICO

A lo largo de este capítulo, se describen los elementos generales que componen a un

robot móvil (Figura 2.1), las características que deben cumplir, así como algunas normas

y reglas que se solicitan en ciertos concursos de robótica.

Figura 2.1 Diagrama general de un sistema robótico [7]

2.1 Componentes y arquitectura de un robot móvil

Es posible organizar las tareas del sistema de control de una estructura robótica en

niveles jerárquicos (Figura 2.1). En el nivel inferior se realiza la supervisión del control

de físico del mismo por medio de los actuadores utilizados. El segundo nivel es el

encargado de la generación de trayectorias, es decir, el control del desplazamiento del

robot de un punto a otro. El nivel superior se ocupa de la interacción con el usuario, de

la correcta interpretación de la programación del robot, de la percepción hecha por los

sensores y de la toma de decisiones hechas por el robot de forma autónoma (detección

y evasión de obstáculos) [7].

Visión

Tacto

Audición Proximidad

Otros.

Percepción

del entorno

Sistema

de

Control

Sensores Internos

Actuadores

Page 17: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

10

2.1.1 Locomoción

Para que el robot pueda desplazarse necesita al menos dos ruedas y un motor. Según

el objetivo deseado deberán incluirse más elementos. Los diferentes tipos de motor que

se pueden emplear son:

• Motores CD: Ofrecen un movimiento lineal y rotatorio dependiendo de la

diferencia de tensión aplicada a sus entradas.

• Motores paso a paso: Ofrecen un movimiento mediante grados (pasos) lo cual

permite una mayor precisión, pero con mayor dificultad de uso y menor velocidad.

• Servomotores: Pueden ubicarse en cualquier posición dentro de un rango.

La movilidad del robot está caracterizada por dos factores: el tipo de llantas y el sistema

de locomoción empleado. Las llantas para un robot móvil pueden ser de diferentes tipos,

como:

• Ruedas convencionales: Realiza una rotación sobre el eje de la rueda. Estas a su

vez se dividen en 3:

o rueda fija: El eje de la rueda esta fijo a la estructura del robot.

o rueda orientable centrada: Permite una rotación sobre el eje de contacto.

o rueda orientable no centrada o loca: Su rotación es sobre el eje de la rueda

y sobre un eje de dirección desplazado del punto de contacto.

• Ruedas suecas: Es similar a la rueda convencional con la diferencia de que posee

rodillos que permiten su desplazamiento lateral sin cambiar la dirección de la

rueda, estos pueden situarse a distintos ángulos [8].

Los sistemas de locomoción más comunes en robots móviles son:

• Ackerman: Se utiliza en vehículos con 4 ruedas. Su sistema de movimiento es

una adaptación del movimiento de los automóviles.

• Triciclo clásico: La rueda delantera se utiliza para la tracción y el movimiento. Su

maniobrabilidad es mayor que en Ackerman pero puede no ser lo suficientemente

estable para algunos tipos de terrenos.

• Diferencial: El direccionamiento se obtiene gracias a la diferencia de velocidades

de las ruedas laterales.

• Skid steer: Incluye más de dos llantas en los laterales y el movimiento se produce

por las distintas velocidades de las llantas de cada lado.

Page 18: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

11

• Pista de deslizamiento: Utilizan ruedas tipo oruga para su movimiento.

• Síncrona: Todas las ruedas deben actuar simultáneamente y girar de forma

síncrona [7].

2.1.2 Transductores

Proporcionan al robot información acerca del entorno para que pueda ser procesada e

interpretada y usada para un objetivo en específico. Podemos clasificarlos en dos

grandes grupos:

• Sensores internos: Como su nombre lo dice, se encargan de medir el estado

interno del sistema. Estos pueden ser de posición, como los codificadores ópticos

o los potenciómetros, de velocidad como el tacómetro, de aceleración y de fuerza.

• Sensores externos: Su interés se centra en el conocimiento del entorno que rodea

al robot. Estos a su vez se dividen en dos tipos, de contacto o sin contacto. Dentro

de los primeros encontramos los piezoeléctricos o de presión y en los segundos

se encuentran los sensores de proximidad, de efecto Hall, ultrasónicos y sensores

laser [9].

2.1.3 Tipos de comunicación

El sistema robótico debe estar comunicado con la computadora o el dispositivo que le

enviará las instrucciones a realizar y que recibirá información acerca de su entorno. Esta

comunicación puede ser de dos tipos:

• Alámbrica:

o Ethernet: Se trata de cables y conectores físicos, dependiendo del tipo de

cable se determina su velocidad máxima de transmisión y el alcance que

tiene.

o Serial: La comunicación serial se utiliza para la transmisión de datos

digitales entre un procesador y una computadora u otros dispositivos. La

información es transmitida bit a bit enviando un solo bit a la vez.

Page 19: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

12

• Inalámbrica:

o Bluetooth: Se utiliza para la transmisión de voz y datos entre dispositivos

sobre la banda de 2.4 GHz. Puede ofrecer un alcance de 100 metros a una

velocidad de 24 Mbps

o Radiofrecuencia: La velocidad y el alcance está limitado al tipo de emisor y

receptor empleados.

o Infrarroja: La transmisión de datos se realiza bidireccionalmente mediante

un haz de luz infrarroja por lo que se necesita que los dispositivos estén

alineados. La velocidad máxima que alcanza es de 16 Mbps a una distancia

máxima de 1 metro.

o Wi-Fi: Trabaja en la banda 2.4 GHz. Puede llegar a transmitir con una

velocidad de hasta 54 Mbps y alcanzar hasta 50 km [10].

2.1.4 Procesadores

Los elementos que forman parte de un robot móvil deben ser controlados y los datos

extraídos del medio deben ser recibidos, procesados y enviados a un dispositivo final

para su uso. Para esta etapa se utilizan diversas opciones encargadas de realizar las

operaciones e instrucciones encargadas al robot móvil. Algunos microcontroladores

populares en el área de la robótica son:

• Arduino: Es una plataforma electrónica de código abierto, basado en los

microcontroladores ATmega.

• Mbed: Es una plataforma de experimentación para realizar prototipos con

microcontroladores ARM Cortex-M3 y ARM Cortex-M0 de 32 bits.

Otra opción es una mini- computadora, que permiten a cualquier persona disponer de

un completo servidor Linux casero de bajo consumo y por un precio muy bajo. Algunos

ejemplos son:

• Raspberry Pi: Microcomputadora de placa reducida o SBC (Single Board

Computer) de bajo costo, cuyo objetivo es el de estimular la enseñanza de las

ciencias de la computación y poder realizar múltiples aplicaciones, los sistemas

operativos más comunes para esta son: Raspbian, Windows IoT y Noobs.

Page 20: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

13

• Jaguar One: Nació de un proyecto de Kickstarter, tiene compatibilidad con X86 y

la posibilidad de instalar Windows 8 o 10 en su versión completa.

• Orange Pi: Es una placa muy parecida a Raspberry Pi, admite Linux y Android, así

como versiones de distribuciones como Ubuntu, Raspbian o Android.

• PcDuino4: Esta placa cuenta con un enfoque multimedia, compatible con vídeo

4K. Viene preparada para instalar Android y diferentes reproductores, así como

servicios de streaming de vídeo.

• ODroid-C2: Es una gran competidora de la Raspberri Pi 3 por su precio y

prestaciones. Sus ventajas son su mayor memoria RAM, sus puertos infrarrojos y

su salida HDMI que permite sacar video 4K, su desventaja es la ausencia de

conectividad Wi-Fi [11].

2.1.5 Entornos de desarrollo

2.1.5.1 Interfaz gráfica

Algunas opciones disponibles para el desarrollo de una interfaz gráfica además de

Microsoft Visual Studio como IDE y C# son:

• NetBeans: Inicialmente desarrollado por Sun y ahora en manos de Oracle. Es uno

de los IDE para desarrollo Java, C, C++ e incluso PHP.

• CodeLite: de código abierto y libre bajo la licencia GNU (General Public License)

soporta los lenguajes C/C++, PHP y Node.js.

También existen editores de código los cuales incorporan un gran número de

herramientas y con ellos es posible realizar aplicaciones en la web:

• Sublimetext: Es multiplataforma y multilenguaje, sus colores ayudan a dar una

mejor vista y organización al código. Soporta un gran número de lenguajes entre

los cuales tenemos: C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML,

Java, JavaScript, LaTeX, Lisp, Matlab, PHP, Python.

• Visual Studio Code: Desarrollado por Microsoft para Windows, Linux y MacOS.

Incluye soporte para la depuración, control integrado de Git, resaltado de sintaxis,

finalización inteligente de código, fragmentos y refactorización de código [12].

Page 21: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

14

2.1.5.2 Servidor

Para la microcomputadora Raspberry se pueden encontrar gran variedad de sistemas

operativos entre los que destacan:

• Raspbian: Es el S.O. por defecto ya que es el más completo y optimizado, está

basado en Debian 7.0 [14].

• Ubuntu Mate: Se trata de una distribución basada en UBUNTU, y en GNOME 2,

visualizador ampliamente conocido y extendido entre los usuarios de Linux.

• Windows 10 IOT Core: Su interfaz sólo permite crear proyectos de IoT (Internet

de las cosas), robótica o domótica.

Así mismo se tienen un gran repertorio de lenguajes para desarrollar aplicaciones en

Raspbian como Javascript, Python, C/C++, entre otros. Aunque los más usados son

Python y C, debido a que están implícitos dentro de raspbian, son lenguajes universales

y básicos en programación.

2.1.6 Normas ISO

Han sido desarrolladas ciertas normas que controlan el uso de robots y dispositivos

robóticos en la vida diaria, la mayoría de ellas se centran en robots industriales y en

seguridad. Algunas normas relacionadas con este proyecto son:

• ISO 13482:2014 Requerimientos de seguridad para robots de cuidado personal:

Se especifican las características para un diseño seguro, medidas de protección e

información para el uso de robots móviles de servicio y asistentes físicos.

• ISO 19649:2017 Vocabulario de robots móviles: Términos relacionados a robots

móviles industriales y de servicio.

• ISO 18646-1:2016 Criterios de desempeño y métodos de prueba relacionados

para robots de servicio - Parte 1: Locomoción para robots con ruedas.

• ISO/DIS 18646-2 Criterios de desempeño y métodos de prueba relacionados para

robots de servicio - Parte 2: Navegación.

• ISO/AWI 18646-3 Criterios de desempeño y métodos de prueba relacionados para

robots de servicio - Parte 3: Manipulación [13].

Page 22: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

15

2.2 Características de los robots móviles

Las características que debe cumplir cualquier robot móvil son:

• Percepción: La capacidad de recibir datos del medio mediante los diferentes

sensores que posee el robot. Procesar, almacenar y usar esta información recibida

para el cumplimiento de los objetivos del sistema.

• Accesibilidad: Está relacionada con los grados de libertad que posee el sistema.

• Capacidad de carga: Es el límite permisible de peso soportado por el robot para

realizar sus tareas de manera correcta.

• Rapidez de respuesta

• Resolución: Es la menor variación posible en la posición final del robot.

• Precisión: Es la diferencia entre la trayectoria realizada y la realmente ordenada.

• Repetibilidad: Es la capacidad de realizar un gran número de veces las tareas

ordenadas en las mismas condiciones [14].

En algunas competencias de robótica se especifican ciertas características que debe

cumplir cualquier robot móvil, por ejemplo:

• Autonomía: Una vez que se inicie la instrucción encomendada no se podrá tener

acceso a él. No se permite la intervención para controlarlo en el trayecto, solo en

el inicio y si en algún momento tuviera que detenerse de emergencia por la

existencia de una colisión o alguna situación que ponga en riesgo a las personas

y ambiente cercano o por petición de los jueces.

Asimismo dentro del mundo de la robótica s consideran 5 reglas para considerar

a un robot completamente autónomo, las cuales son:

1. Obtener información sobre el medio ambiente.

2. El trabajo durante un período prolongado sin intervención humana.

3. Moverse todo o parte de sí mismo a través de su entorno operativo, sin ayuda

humana.

4. Evitar situaciones que son perjudiciales para las personas, los bienes o para el

robot mismo, a menos que sean parte de las especificaciones de diseño.

Page 23: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

16

5. Poder aprender o adquirir nuevos conocimientos, como el ajuste de nuevos

métodos para el cumplimiento de su tarea(s) o la adaptación a los cambios de

entorno.

• Salida de trayectoria: Si en algún momento el robot no cumple con la trayectoria

y se desvía, tendrá que regresar desde el punto donde se perdió o algún punto

anterior para reanudar la trayectoria, no podrá tomar atajos para llegar al punto

final.

• Clasificación: Para poder clasificar a una siguiente ronda, se tienen 3

oportunidades. Si no se logra completar el recorrido, se registra la distancia

máxima avanzada.

• Tiempo límite: Es asignado un tiempo para completar las tareas, el robot que lo

haga en menor tiempo suma puntos. El que lo haga después de ese tiempo es

descalificado.

• Total control del mecanismo: Se solicita que exista una función de paro de

emergencia para evitar cualquier accidente dentro de las pistas de prueba

• Mapeo del entorno: En competencias avanzadas se añade la evaluación de la

capacidad del robot de mapear el recorrido realizado [15] [16].

2.3 Base de datos

En un dispositivo robótico se deben almacenar los datos que se reciben del exterior,

para llevar un control y ejecutar tareas repetitivas. Una base de datos es un sistema

computarizado para guardar registros; es decir, es un sistema cuya finalidad general es

almacenar información y permitir a los usuarios recuperar y actualizar esa información

con base en peticiones. La información en cuestión puede ser cualquier cosa que sea de

importancia para el individuo u organización.

Page 24: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

17

Diagrama 2.1 Diagrama de una base de datos

Base de datos: conjunto de datos persistentes que es utilizado por los sistemas de

aplicación de alguna empresa dada.

Programas de aplicación: estos programas pueden ser aplicaciones convencionales por

lotes o pueden ser aplicaciones en línea, cuyo propósito es permitir al usuario final el

acceso a la base de datos desde una estación de trabajo o terminal en línea.

Usuarios finales: son quienes interactúan con el sistema desde estaciones de trabajo o

terminales en línea. Pueden acceder a la base de datos a través de aplicaciones en línea

(también existen otros dos tipos de usuarios que son los programadores de aplicaciones

y los administradores de base de datos o DBA)

La mayoría de los sistemas de base de datos incluyen un procesador de lenguaje de

consulta, mediante el cual el usuario puede emitir solicitudes a la base de datos (también

conocidas como instrucciones o comandos), como SELECT e INSERT, en forma

interactiva con el DBA. El lenguaje SQL es un ejemplo típico de un lenguaje de consulta

de base de datos [17].

Programas

de aplicación

Base de

datos

Sistema de administración

de bases de datos (DBMS)

Usuarios finales

Page 25: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

18

3 CAPÍTULO 3. DESARROLLO Del Prototipo

En el presente capítulo se muestra el desarrollo del proyecto, tanto en hardware como

software, en la figura 3.1 se muestra el diagrama general del sistema.

Figura 3.1 Diagrama general del robot móvil

3.1 Desarrollo de hardware

El sistema completo consta de:

• 4 motores de CD de 12 v

• 4 llantas acopladas a cada motor

• 1 placa L298N

• 1 codificador óptico FC-03

• 1 sensor ultrasónico HC-SR04

• Batería de litio de 11.1 v

Servicios WEB

-Movimiento de motores

Raspberry Pi

SENSORES

PC

GUI (Microsoft

Visual Studio

2015)

-Establecimiento

de rutas

-Generación de

USUARIO

VISUALIZACIÓN

Y PROCESAMIENTO

R

E

S

T

A

P

I

WI-FI

INTERFAZ DE

COMUNICACIÓN

HTTP HTTP

HARDWARE

- Control de

Motores

GPIO

ARDUINO

(ADC) INTERACCIÓN

CON EL MEDIO

Page 26: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

19

• 1 placa Raspberry Pi 3

• 1 placa Arduino Uno

3.1.1 Motores

Los motores CD utilizados en este proyecto son los mostrados en la figura 3.2 y algunas

de sus características son:

• Voltaje nominal: 12V DC

• Voltaje de operación: 6 - 12 VDC

• Velocidad sin carga a 12 V DC: 500 RPM

• Corriente estimada: 650 mA

• Dimensiones: 10 cm longitud x 5 cm diámetro

• Peso: 167 g

Figura 3.2 Motor DC utilizado

3.1.2 Llantas

Las llantas elegidas son convencionales para motorreductor con rin deportivo y medidas

de 65 mm x 25 mm con agarre y adherencia a la superficie (Figura 3.3). El rin es de

acoplamiento hexagonal, incluye un cople de la misma forma de 12 mm de diámetro

para empotrarlo con la flecha de 5 mm del motorreductor.

Page 27: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

20

Figura 3.3 Llantas con coples

3.1.3 Placa L298N

Para el control de sentido de giro de los motores, así como su velocidad se empleó la

placa L298N. Debido a la alimentación de los 4 motores se utilizó la configuración sin el

jumper regulador, la parte lógica funciona gracias a Raspberry con una batería portátil.

El módulo L298N (Figura 3.4) consiste básicamente de dos puentes H que nos permiten

controlar la velocidad y sentido de giro de dos motores de corriente continua o un motor

paso a paso bipolar. Un puente H es un arreglo formado por 4 transistores cuya función

es invertir el sentido de la corriente, y de esta forma poder invertir el sentido de giro

del motor.

Figura 3.4 Placa L298N

Page 28: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

21

La placa también cuenta con diodos de protección y un regulador de voltaje LM7805 que

suministra 5V a la parte lógica del integrado y trabaja desde los 3V hasta los 35V, y una

intensidad de hasta 2A. La electrónica del módulo consume alrededor de 3V, por lo que

los motores recibirán 3V menos que la tensión con la que se alimenta el módulo.

Las ventajas que ofrece son facilidad de uso y un precio económico.

El módulo contiene dos salidas para los motores, La salida para el motor A está

conformada por OUT1 y OUT2 y la salida para el motor B por OUT3 y OUT4. Los

pines IN1 e IN2 sirven para controlar el sentido de giro del motor A, y los

pines IN3 e IN4 el del motor B. si IN1 está a HIGH e IN2 a LOW, el motor A gira en un

sentido, y si IN1 está a LOW e IN2 a HIGH lo hace en el otro sentido. Lo mismo sucede

con los pines IN3 e IN4 para el motor B.

Para controlar la velocidad de giro de los motores se tiene que quitar los jumpers y usar

los pines ENA y ENB para ingresar una señal PWM por ellos. Si los jumpers permanecen

colocados, los motores girarán siempre a la misma velocidad.

La entrada de tensión Vin admite tensiones entre 3V y 35V. EL pin V lógico puede

funcionar de dos maneras gracias al regulador LM7805.

Si el jumper regulador está colocado, el módulo permite una alimentación de entre 6V

a 12V, se activa el regulador y en V lógico obtendremos una salida de 5V, que puede

ser usada para alimentar la parte de control del módulo, como un microcontrolador,

Arduino o Raspberry, pero se recomienda que el consumo no sea mayor a 500 mA.

Si se quita el jumper el módulo permite una alimentación de entre 12V a 35V, el

regulador quedara desactivado, así que necesitaremos alimentar la parte lógica del

módulo con una tensión de 5V por la conexión V lógico. Usualmente esta tensión es la

misma de la parte de control.

Es importante señalar que si se introduce tensión por V lógico con el jumper de

regulación puesto podríamos dañar el módulo y que el regulador sólo funciona con

tensiones de hasta 12V en Vin, con tensiones superiores tendremos que quitar el jumper

y alimentar la parte lógica del módulo desde otra fuente [18].

Page 29: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

22

3.1.4 Sensores

Codificador óptico FC-03

El módulo FC-03 (Figura 3.5) contiene un optointerruptor MOCH22A que consiste en un

LED infrarrojo, y un fototransistor encapsulados en un pequeño contenedor y separados

por una distancia de 5 mm para colocar un disco ranurado entre ellos.

Figura 3.5 Codificador óptico FC-03

Los optointerruptores emiten un haz de luz directo entre el emisor y el receptor. Si un

objeto se interpone entre ellos, se activa la detección. Al interrumpirse el rayo de luz el

voltaje de salida lógico cambia a 0 lógico, y cuando el rayo pasa con normalidad el

módulo arroja una salida de 1 lógico. Estos pulsos son comparados en un amplificador

operacional LM393, entregando pulsos TTL que pueden ser interpretados por un

microcontrolador como Arduino [19].

Sensor ultrasónico

Un sensor ultrasónico permite medir la distancia entre un objeto y éste mediante el

tiempo entre la emisión y recepción de ondas ultrasónicas.

El sensor HC-SR04 (Figura 3.6) es un módulo que utiliza un par de transductores de

ultrasonido para determinar la distancia del sensor con un objeto colocado enfrente de

este. Su funcionamiento consiste en emitir un sonido ultrasónico por uno de sus

transductores, y esperar que el sonido rebote de algún objeto frente a él, para que el

eco sea captador por el segundo transductor.

Page 30: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

23

Figura 3.6 Sensor ultrasónico HC-SR04

La distancia entre el objeto y el sensor se puede calcular con la ecuación 1:

𝐿 =1

2∗ 𝑇 ∗ 𝐶 (𝑐𝑚) …………………….…………………………………….(1)

Donde L es la distancia, T es el tiempo entre la emisión y la recepción, y C es la velocidad

del sonido. El valor se multiplica por 1/2 porque T es el tiempo de recorrido de ida y

vuelta.

Una de las ventajas de este sensor es que incluso los objetos transparentes pueden ser

detectados gracias a que las ondas ultrasónicas pueden reflejarse en superficies de

vidrio o líquido, y retornar al sensor [20].

3.1.5 Alimentación

La batería utilizada en el proyecto es una batería de lithium-ion recargable modelo hw-

li2ah-c (Figura 3.7 a), nos ofrece un voltaje de 11.1v y 2 Ah(22wh) y sus medidas son

15 cm x 10 cm x 5 cm, la cual sirve para alimentar a los motores CD. A su vez, se utilizó

una más para la alimentación de Raspberry Pi 3 con salida de 5v a 2.4A con una

capacidad de 8000mAh (Figura 3.7 b).

Figura 3.7 a) Batería recargable b) Batería portátil para Raspberry

Page 31: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

24

3.1.6 Raspberry Pi

Dentro de ella podemos encontrar un chip Broadcom BCM2835 con procesador ARM

hasta a 1 GHz de velocidad, GPU VideoCore IV y hasta 512 Mbytes de memoria RAM

En general la mayoría de las tarjetas Raspberry Pi se componen de (Figura 3.8):

• Puertos USB 2.0 (de 2 a 4 dependiendo el modelo)

• Puerto GPIO (40 pines)

• Puerto Ethernet RJ45 (10/100Mb)

• Entrada para HDMI

• Entrada para tarjeta SD

• Entrada para la alimentación

• Entradas A/V

• Leds indicadores

• Su precio ronda entre los $700.00 a $1,000.00 MXN.

Hoy en día existe una gran variedad de modelos los cuales varían de acuerdo al precio,

especificaciones, capacidades o diseño. Sin embargo, la Raspberry que cumple con todos

los requerimientos para este proyecto es la Pi 3.

En la tabla 3.1 se muestran sus características.

Figura 3.8 Elementos de una Raspberry

Page 32: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

25

Tabla 3.1 Características de Raspberry Pi 3

Característica 3 Modelo B

CPU 1.2GHz QUAD ARM Cortex-A53

RAM 1Gb

USB 4

Video Jack, HDMI

Audio Jack, HDMI

Boot MicroSD

Red Ethernet 10/100, Wifi, BT

Consumo 2.5A/12.5w/5v

Alimentación MicroUSB/GPIO

Tamaño 85x56 mm

Precio $1,200.00

3.1.7 Arduino

Es una plataforma electrónica de código abierto, flexible y fácil de aprender y usar. Su

objetivo es ayudar a estudiantes, profesionistas y aficionados a desarrollar proyectos

embebidos usando sus herramientas con el mínimo costo y esfuerzo. Acepta otros

componentes como todo tipo de sensores, lo que lo convierte en una plataforma perfecta

para la interacción con cualquier entorno. El lenguaje para programar Arduino es una

versión simplificada de C/C++.

Existen diferentes tipos de tarjetas Arduino para cada necesidad como son: Arduino

Uno, Leonardo, LilyPad, Mega, Nano, Mini, Mini Pro, BT.

El Arduino Uno está basado en el microcontrolador ATmega328. Consta de 14 puertos

de entrada salida digitales y 6 puertos de entrada análogos y reloj de 16Mhz.

Arduino ofrece algunas ventajas frente a otras plataformas como Parallax Basic Stamp,

Netmedia’s BX-24, Phidgets, MIT’s Handyboard, como son:

• Costo: La versión del chip ATMEGA8 para ensamblar a mano cuesta $35.00, y los

módulos de Arduino pre ensamblados van desde $100.00 a $300.00 MXN.

• Multiplataforma: El software de Arduino está disponible para sistemas operativos

Windows, Macintosh OSX y GNU/Linux.

Page 33: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

26

• Entorno de programación simple y claro: El entorno de programación de Arduino

es fácil de utilizar para usuarios de todos los niveles, y flexible para que usuarios

avanzados también puedan aprovecharlo.

• Código abierto y software extensible: El software es una herramienta de código

abierto, disponible para expansión mediante librerías C++ por programadores

avanzados.

• Hardware extensible: Los circuitos para los módulos están publicados bajo licencia

Creative Commons, esto permite a diseñadores y aficionados realizar su propia

versión del módulo [21].

3.1.8 Herramientas para la comunicación

Wi-Fi

Una comunicación inalámbrica es aquella que se lleva a cabo sin la necesidad de ocupar

cables de interconexión. Brinda grandes ventajas sobre la comunicación por un medio

guiado, la más sobresaliente es la movilidad que ofrece a los usuarios.

Wi-Fi es el nombre corto de Wireless Fidelity. Se basa en el estándar IEEE 802.11

(normalmente con una velocidad de transmisión de los 11 Mbps hasta 54Mbps). Es una

tecnología ampliamente aceptada y actualmente está disponible casi en cualquier lugar

debido a su oferta y bajo precio. Permite crear una red entre distintos dispositivos para

poder compartir recursos [22].

Enrutador

Un enrutador se encarga de ofrecer una conexión de red a uno o varios dispositivos

dentro de cierto rango, y de dirigir los datos que van y vienen de ellos. Admite

conexiones cableadas e inalámbricas y la comunicación entre todos los dispositivos que

estén dentro de la red sin importar la forma en que estos se conecten. El enrutador se

conecta a un modem para compartir un servicio de internet. La mayoría de los

enrutadores incorporan un firewall para controlar el acceso seguro a la red.

Los enrutadores inalámbricos se encargan de establecer qué ruta se destinará a cada

paquete de datos dentro de una red. Verifican el correcto envío y recepción de estos.

Una de las funciones de un enrutador es el uso del protocolo DHCP (Dynamic Host

Page 34: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

27

Configuration Protocol) que realiza la asignación de direcciones IP locales para cada

dispositivo de la red.

Las direcciones IP locales son conjuntos de 4 números, un ejemplo sería: 192.168.1.X.

o 10.0.1.X. La "X" representa el cambio que hace DCHP para cada dispositivo. El DCHP

de cada enrutador puede emitir un número limitado de direcciones IP y estas direcciones

son dinámicas, pueden cambiar en cualquier momento.

Para algunas aplicaciones resulta un poco inconveniente tener una dirección IP que

puede cambiar en cualquier momento y se opta por configurar una IP estática [23].

3.1.9 Lectura del codificador

Para poder obtener el dato de la distancia avanzada por el robot fuer usado un

codificador el cual se compone de un optointerruptor contenido en una placa y un circulo

hecho de plástico con un diámetro de 5 cm y 4 orificios (Figuras 3.9 y 3.10) acoplado a

una llanta trasera del mecanismo.

Figura 3.10 Disco con orificios

3.2 Desarrollo de software

La estructura del software puede dividirse en:

• Control de motores (Raspberry Pi)

• Lectura de sensores (Arduino)

• Interfaz de usuario (VisualStudio)

• Comunicación

Figura 3.9 Codificador óptico leyendo disco

Page 35: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

28

3.2.1 Control de motores

Python

Python es un lenguaje de programación interpretado y multiparadigma, esto quiere decir

que adopta la forma y el estilo de los programadores ya que soporta diferentes formas

de programar como orientación a objetos, programación imperativa y programación

funcional, otros paradigmas son soportados mediante el uso de extensiones.

Es un lenguaje sencillo que se puede entender con facilidad, por ejemplo, se pueden

usar palabras en vez de símbolos. Un ejemplo sencillo es en los operadores lógicos and,

not y or, los cuales en python se escriben como se han mencionado antes, en cambio

en otros lenguajes de programación deben escribirse con &&, ! y —— respectivamente.

Otra ventaja de este código es que no necesita usarse llaves para los bloques de código

como bucles, funciones y clases, en Python sólo basta con usar espacios o tabulaciones

que se conocen como identación. También, a diferencia de otros lenguajes, Python no

necesita un punto y coma al final de una línea para indicar que esta ha terminado, aquí

solo es necesario dar un “enter” para cambiar de línea.

El programa para el control de motores se realizó mediante Python dentro de Raspberry,

mandando instrucciones directas a la placa L298N. A continuación (Diagrama 3.1), se

muestran los diagramas de flujo de la inicialización de los puertos de entrada y salida,

y las funciones de avance hacia adelante, giro derecha y giro izquierda.

Diagrama 3.1 Diagrama de flujo del control de motores

Page 36: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

29

3.2.2 Lectura de sensores

Para poder realizar la lectura y procesamiento de los datos recabados por los sensores

se utilizó la placa Arduino Uno, comunicándola de manera serial con Raspberry. Las

principales funciones de Arduino para el puerto serie son:

• Serial.begin(rate)

Esta instrucción nos permite abrir el puerto serie de Arduino para que inicie

comunicación con cualquier dispositivo conectado vía serial. Asigna una tasa de baudios

para la transmisión de datos serie, la típica es de 9600 bits por segundo, aunque también

otras velocidades están soportadas. Cuando se usa la comunicación serie, los pines

digitales 0 (Rx) y 1 (Tx) no pueden ser usados al mismo tiempo.

• Serial.available()

Da el número de bytes (caracteres) disponibles para leer en el puerto serie, son datos

que han llegado y se almacenan en el buffer serie que tiene un tamaño de 64 bytes.

• Serial.read();

Lee los datos provenientes del puerto serial.

• Serial.println(data)

Imprime datos al puerto serie seguidos de un enter y un avance de línea automáticos,

también permite imprimir en otros formatos especificándolo dentro del paréntesis

después del dato.

• Serial.write()

Escribe datos en binario sobre el puerto serie. El dato es enviado como un byte o serie

de bytes.

Buffer Serial: los puertos serie de los microcontroladores tienen un buffer que se va

llenando hasta que nosotros lo vamos leyendo con la función read() que lo va vaciando,

es una pila FIFO. El tamaño del buffer serie en el Arduino Uno es de 64 bytes, cuando

se llena ese buffer el resto de elementos recibidos se pierden.

Los diagramas de flujo del programa del codificador óptico y el sensor ultrasónico

(Diagrama 3.2) se muestran a continuación.

Page 37: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

30

Diagrama 3.2 Diagrama de flujo de sensores

Para el programa del sensor ultrasónico, una vez obtenido el ancho del pulso que es el

tiempo que dura en llegar el eco del ultrasonido, la distancia entre el objeto y el sensor

se puede calcular gracias a la ecuación 2:

𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 = 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑟𝑒𝑐𝑜𝑟𝑟𝑖𝑑𝑎

𝑡𝑖𝑒𝑚𝑝𝑜 (

𝑐𝑚

𝑢𝑠)……………………………….(2)

Donde velocidad es la velocidad del sonido, 0.0343 cm/us y distancia recorrida es dos

veces la distancia hacia al objeto. Planteando nuevamente la ecuación 2 se tiene que la

distancia recorrida es:

𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 (𝑐𝑚) = 𝑡𝑖𝑒𝑚𝑝𝑜 (𝑢𝑠) ∗ 0.017………………………………(3)

Mientras que, en el codificador óptico, se programa el pin de interrupción y la forma en

que se requiera que se haga, en este caso mediante el modo RISING lo que quiere decir

que el contador incrementará en uno cuando el pin cambie de estado bajo a alto. La

distancia recorrida será igual a multiplicar el contador (número de orificios) por la

distancia entre un orificio y otro. Para obtener esta distancia basta con realizar la

siguiente ecuación 4:

𝐷𝑜 =𝐷∗ 𝜋

𝑛𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑜𝑟𝑖𝑓𝑖𝑐𝑖𝑜𝑠 (𝑐𝑚)……….…………………………….(4)

Page 38: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

31

Donde Do es la distancia entre orificios y D el diámetro del círculo, para nuestro caso:

𝐷𝑜 =5 𝑐𝑚∗ 𝜋

4 (𝑐𝑚)……………………………………………….(5)

𝐷𝑜 = 3.927 𝑐𝑚………………………………………………….(6)

Los diagramas de las funciones de declaración de variables y loop (Diagrama 3.3) se

muestran a continuación:

Diagrama 3.3 Diagrama de flujo de funciones Arduino

Page 39: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

32

3.2.3 Interfaz de usuario

Visual Studio

Visual Studio es un entorno de desarrollo integrado (IDE) para Windows. Soporta

distintos lenguajes de programación como C++, C#, Visual Basic, Java, Python, Ruby y

PHP y lenguajes para el desarrollo web. Por su parte, C# es un lenguaje de programación

orientado a objetos basado en C y C++.

El desarrollo de la interfaz gráfica se realizó en este entorno de desarrollo y consta de 3

ventanas. La primera es la ventana de acceso, la segunda el registro de un nuevo

usuario y la ultima es el programa principal donde se muestra el control, programación

de recorridos y la generación del mapa con base a estos.

3.2.3.1 Acceso al sistema y registro

Para la realización de la ventana de acceso (Figura 3.11) se requirió de una conexión a

base de datos la cual se realizó con el programa Microsoft Office Access, el cual permite

almacenar la BD en un archivo .accdb y así, llevar un registro de los usuarios que pueden

acceder al sistema como también dar cabida a nuevos usuarios. Se muestra a

continuacion la ventana y el funcionamiento de cada elemento en la tabla 3.2.

Figura 3.11 Ventana de acceso

4

1

2

3

5

Page 40: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

33

Tabla 3.2 Descripción de elementos en ventana de acceso

Con ayuda de la lógica mostrada en el diagrama 3.4 se permite o denega el acceso a la

aplicación, al momento de presionar el botón “Iniciar sesión”.

Diagrama 3.4 Diagrama de flujo de acceso al sistema

La base da datos de Usuarios se compone de los elementos mostrados en la figura

3.12.

Figura 3.12 Elementos de la base de datos en Access

Control Descripción

1 Campo

de texto Introduce el nombre de usuario

2 Campo de texto

Introduce la contraseña

3 Botón Manda la información para intentar acceder al sistema

4 Botón Abre la ventana del formulario para registrar un nuevo usuario

5 Botón Permite salir de la aplicación

Page 41: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

34

Donde la llave primaria es el ID del usuaro debido a que es un único número que se

incrementará automáticamente. Aunado a esto se tienen los datos para el registro: el

nombre completo del usuario, el nombre para acceder a la plataforma y la contraseña

propia de cada usuario. También, gracias al botón “Nuevo Usuario” se puede tener

acceso a la ventana de Registro de nuevo usuario, la cual se muestra a continuación en

la figura 3.13 junto con la descripción de sus elementos en la tabla 3.3.

Figura 3.13 Registro de nuevo usuario

Tabla 3.3 Descripción de elementos de ventana de registro de nuevo usuario

Control Descripción

1 Campo de texto Introduce el nombre completo del nuevo usuario

2 Campo de texto Introduce el nombre del nuevo usuario

3 Campo de texto Introduce la contraseña del nuevo usuario

4 Campo de texto Confirmación de la contraseña para el nuevo usuario

5 Campo de texto Introduce la clave proporcionada por el administrador

para poder crear el nuevo usuario

6 Botón Guarda un registro con los datos ingresados

7 Botón Permite volver a la ventana de acceso

La lógica para guardar un nuevo usuario (Diagrama 3.5) se compone de una etapa de

validación del formulario en la cual se determina si existe algún campo sin llenar o

llenado incorrectamente. Después, para completar el registro, se tiene una clave única

proporcionada por el administrador para hacer que no cualquiera pueda registrarse sino

únicamente usuarios destinados para el control de la interfaz y a su vez del robot.

1

2

3

4

5 6

7

7

Page 42: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

35

Diagrama 3.5 Diagrama de flujo de registro de nuevo usuario

Finalmente, al regresar a la ventana de “Acceso” aparecerán dos ventanas emergentes

(Figura 3.14 y 3.15) dependiendo de si el usuario y contraseña con correctos o no.

Figura 3.14 Ventana de acceso denegado Figura 3.15 Ventana de acceso permitido

Page 43: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

36

3.2.3.2 Registro del acceso y cierre de sesión

Para tener un control y llevar registro de los usuarios que acceden y salen del sistema,

se creó un Log que lleva a cabo la tarea de almacenar dentro de un bloc de notas (.txt)

el nombre del usuario y la hora a la que accedió, así como también se imprime la hora

a la que dio cierre a la sesión.

Esto se logra a través de la clase StreamWriter, donde, con ayuda de un constructor se

inicializa una nueva instancia de la clase para el archivo especificado usando la

codificación y tamaño de búfer especificados. Si el archivo ya existe, es posible

sobrescribirlo o anexarle datos. Si el archivo no existe, este constructor crea uno nuevo.

Finalmente para poder escribir en este archivo una cadena de texto, se hace mediante

el método WriteLine() el cual escribe un terminador de línea en la cadena o secuencia.

Figura 3.16 Archivo .txt para guardar el registro y salida del sistema

Page 44: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

37

3.2.3.3 Descripción y estado general

Dentro de la sección de la descripción unicamente se expone un breve resúmen del

robot, dando a conocer su labor, su objetivo y colocando una pequeña ilustración para

hacer más amigable la interfaz.

Posterior a esto se tiene una columna que siempre será mostrada al usuario, la cual

contiene los datos más relevantes del robot como: su estatus, el nivel de batería, la

tarea que está desempeñando en el momento, y una ventana que sirve como ventana

de diálogo entre el cliente (PC) y el servidor (Raspberry Pi). La figura 3.17 nos muestra

los elementos mencionados y en la tabla 3.4 la descripción de sus elementos.

Figura 3.17 Ventana principal

Tabla 3.4 Descripción de los elementos en ventana principal

Elementos Descripción

A Texto e imagen Sección de bienvenida al usuario

B Indicadores Contiene indicadores del estado del robot

C Control de

pestañas

Contiene todas las diferentes ventanas de la aplicación

C

A B

Page 45: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

38

El funcionamiento del botón para el estado del robot, funciona gracias a la siguiente

lógica del diagrama 3.6:

Diagrama 3.6 Diagrama de flujo para verificar estado

3.2.3.4 Programación de recorridos

Para la creación de los recorridos (Figura 3.18) y del mapa se creó un sistema basado

en un formulario, el cual el usuario deberá llenar siguiendo un orden establecido y podrá

ver reflejado código por código que se estará guardando en la base de datos y,

finalmente se mostrará dentro de un DataGridView todos los códigos almacenados para

formar así el mapa completo del lugar donde trabajará el robot.

Page 46: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

39

Figura 3.18 Ventana para programar recorridos

Tabla 3.5 Descripción de elementos de la ventana para programar recorridos

Elementos Descripción

A Campo de

texto y

botón

Agrega un nuevo recorrido colocando el nombre o de dónde a

dónde irá el robot

B Formulario Define el comportamiento del recorrido especificando la distancia

y dirección del tramo

C Botones Guarda, edita o elimina un recorrido ya ingresado

D Campo de

texto

Espacio para introducir valores de calibración previamente

probados en la parte de “Control Manual”

E Tabla Muestra todos los recorridos guardados

Para poder llenar el formulario que se muestra en la figura 3.19, se deberá llenar en el

siguiente orden:

1) Llenar el nombre del recorrido (Figura 3.19).

Figura 3.19 Primer paso para la programación de recorridos de recorridos

A

B

C

D

E

Page 47: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

40

2) Elegir si va a ir hacia adelante o va a girar para dar una vuelta.

En caso de que vaya hacia adelante, colocar la distancia en centímetros y, en caso

de que vaya a dar vuelta, colocar el sentido y el ángulo al que va a ser la vuelta

(Figura 3.20).

Figura 3.20 Segundo paso para la programación de recorridos

3) Una vez que se haya llenado el formulario dar click al botón de “Agregar”, el cual

va a permitir fijar el tramo y lo irá agregando a una cadena. Si aún faltan tramos

por agregar, se repite el proceso anterior hasta que hayamos terminado con el

recorrido (Figura 3.21).

Figura 3.21 Tercer paso para la programación de recorridos

4) Una vez terminado el recorrido, se procede a dar click en el botón “Guardar”

(Figura 3.22) y se almacenará todo el recorrido dentro de una celda del

DataGridView (Figura 3.23).

Figura 3.22 Cuarto paso para la programación de recorridos

Page 48: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

41

Figura 3.23 Guardado de recorridos

5) Para agregar más recorridos y que el mapa quede completo se tendrá que repetir

el proceso anterior.

Además de estas funciones se agregaron algunos otros botones para interactuar con la

base de datos como lo es el botón de “Cancelar”, el cual interrumpe la escritura de datos

y reestablece el formulario, el botón “Editar” el cual permite realizar algún cambio en

algún recorrido y el botón “Eliminar” que permite borrar un registro de un recorrido

(Figura 3.22).

Finalmente, la interfaz cuenta con un campo de inserción para valores que ayudan a

ajustar la trayectoria al momento de dar las vueltas, estableciendo una calibración. En

el caso de que estos campos no sean llenados se tomarán los valores ya establecidos

en el programa (Figura 3.24).

Figura 3.24 Calibración de vueltas

Page 49: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

42

El diagrama 3.7 muestra la lógica para la parte de la programación de recorridos.

Diagrama 3.7 Diagrama de flujo para la programación de recorridos

3.2.3.5 Generación de mapa

Este apartado, mostrado en la figura 3.25, funciona mediante tres botones descritos en

la tabla 3.6.

Figura 3.25 Ventana para obtener mapa de los recorridos establecidos

1

2

3

4

Page 50: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

43

Tabla 3.6 Descripción de los elementos en ventana para obtener mapa de los recorridos

Control Descripción

1 Botón Genera el mapa desde BD de recorridos

2 Botón Abre un mapa guardado en la PC

3 Botón Guarda un mapa en la PC

4 Cuadro de

Imagen

Despliega el mapa creado o abre un mapa guardado

Generar Mapa: Dibuja un mapa con base en el DataGridView de la base de datos,

llenado previamente y tomando como base cada uno de los tramos. En la figura 3.26 se

muestra un ejemplo de un mapa generado.

Figura 3.26 Ejemplo de generación de mapa

Punto de inicio

Recorrido “uno” Recorrido “dos”

Recorrido “tres”

Page 51: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

44

Guardar Mapa: Abre una ventana de Guardado en la cual se puede introducir el nombre

y tipo de la imagen (Figura 3.27).

Figura 3.27 Guardado del mapa

Abrir Mapa: Abre una ventana de Archivos donde se puede seleccionar la imagen

(mapa) que se desea que se cargue y se muestre (Figura 3.28).

Figura 3.28 Abrir mapa

Page 52: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

45

El algoritmo para la generación del mapa se muestra en el diagrama 3.8:

Diagrama 3.8 Diagrama de flujo para la creación de mapa

Page 53: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

46

3.2.3.6 Ejecución de recorridos

Para la ejecución de los recorridos (Figura 3.29) previamente almacenados en la base

de datos, se tiene un pequeño sistema dividido en dos partes: control programado y

control manual.

Control programado

Dentro de este apartado, se debe ingresar únicamente dos datos, el nombre del

recorrido que se desea ejecutar y la hora a la que se desea ejecutar; Posterior a esto,

se presiona el botón “Agregar” el cual permite anexar los dos datos previamente

insertados en una cola, la cual se verá dentro del ListBox. Finalmente se debe encender

este control programado con ayuda de los Radio Buttons.

Esta parte de la interfaz también cuenta con un botón “Borrar”, el cual permite vaciar la

cola en el momento que se requiera. También podemos ver en un pequeño Label la hora

actual de nuestro sistema.

Además, la programación cuenta con una opción de ajuste, cada vez que el robot da

una vuelta ya sea de 90° o 180°, esta opera con ayuda de los campos mencionados en

la Figura 3.24 podemos acceder al control manual, insertar el valor que nosotros

consideremos para el ajuste (se debe tener en cuenta los valores por defecto que ya

tienen la aplicación) y después se procede a presionar el botón “Continuar recorrido”

para que el robot continúe su avance después de haber realizado dicho ajuste.

Control manual

Este control es el más sencillo ya que solo cuenta con cuatro botones los cuales, al darles

click el robot comenzará su avance automáticamente. También este tipo de control

cuenta con su botón de activado a través de los Radio Buttons como en el control

programado.

Page 54: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

47

Figura 3.29 Ventana de control para la ejecución de recorridos

Tabla 3.7 Descripción de los elementos en ventana de control

Elemento(s) Descripción

A Formulario Sección del control programado

B Formulario y botones

Sección del control manual

C Formulario Inserción de la hora y el recorrido deseados

D TextBox Selección de los valores de calibración dependiendo el tipo de terreno

E Botones Mover el robot automáticamente al presionar los botones arriba, izquierda , derecha y vuelta de 180°

1 Label Muestra la hora del sistema

2 RadioButtons Opciónes para encender/apagar el tipo de control

3 Botón Elimina la cola de recorridos a ejecutarse

4 Botón Indica que la vuelta se realizó correctamente y que salte al siguiente movimiento del robot

La lógica para el control programado se muestra en el diagrama 3.9.

A

B

2

3

4

D E

C

1

Page 55: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

48

Diagrama 3.9 Diagramas de flujo del control del sistema

Page 56: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

49

Como se mencionó anteriormente, la ejecución de recorridos comprende un algoritmo

el cual permite realizar un ajuste o calibración al momento de realizar una vuelta; esta

función sirve a primera instancia sólo si el operador está en el mismo lugar que el robot.

Por esta razón se le agregó una cámara IP (que para este prototipo se utilizó la de un

smartphone Android) la cual, con ayuda de la aplicación IP Webcam permite visualizar

en la PC a manera de transmisión en vivo la trayectoria por la que el robot se está

moviendo y de esta forma poder realizar cualquier ajuste en su trayectoria.

3.2.3.7 Salida del sistema

Finalmente en la parte superior derecha de la interfáz, se colocó un pequeño botón (el

cual está siempre visible) que permite salir de la aplicación en el momento en que se

requiera.

Figura 3.30 Salida del sistema

3.2.4 Comunicación

La forma de comunicación entre el robot y la computadora donde estará la interfaz

gráfica para controlarlo, se logra mediante una API REST. Raspberry funciona como

servidor y la computadora como cliente, la conexión se logra cuando los dos están en la

misma red, en este caso conectados al mismo enrutador vía WiFi.

En la figura 3.31 muestra los elementos necesarios para realizar la comunicación entre

un entorno gráfico y la parte mecánica del proyecto:

Page 57: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

50

Figura 3.31 Diagrama de comunicación

3.2.4.1 API REST

Una API, por sus siglas en inglés Application Programming Interface (Interfaz de

programación de aplicaciones) permite el acceso a datos y servicios para desarrollar

aplicaciones. Contiene funciones que facilitan el intercambio de información entre

aplicaciones de una computadora sobre una red y usando un lenguaje en común [24].

Una API REST provee características y funciones que permiten el uso de un servicio web

dentro de cualquier aplicación propia.

Las diferencias entre un sitio web y una API es que el primero provee una información

solicitada por cualquier usuario, no tiene estructuras alrededor del uso de contenido y

cualquier cambio es percibido inmediatamente por el usuario [25].

Por su parte, REST (REpresentational State Transfer), es una forma de desarrollo de

servicios web que está construido sobre sistemas y características existentes propias de

internet y sus protocolos. Se basa en una comunicación cliente-servidor. Una API REST

hace a un servicio web RESTful.

Sus objetivos son crear nuevos estándares entre sistemas de computadoras en la web,

desarrollar nuevas tecnologías y simplificar la comunicación entre ordenadores.

Características

Cliente y servidor independientes: el código del cliente o servidor puede ser modificado

en cualquier momento sin afectar la operación del otro.

Page 58: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

51

Stateless (Sin estado): Cada solicitud realizada contiene toda la información requerida,

ni el cliente ni el servidor necesitan datos previos para satisfacerla. Por lo tanto, se

puede entender cualquier mensaje.

Interfaz uniforme (UI): El uso de una interfaz uniforme sirve como identificador para

cada recurso del sistema facilitando así, el acceso y la manipulación de la información,

separando los asuntos de interface de usuario de los asuntos de almacenamiento de

datos mejoramos la flexibilidad de la interfaz y la escalabilidad simplificando los

componentes del servidor.

Cliente

Envía solicitudes para recuperar, modificar, crear o remover recursos en el servidor.

Generalmente, una solicitud consiste de las siguientes partes:

Métodos HTTP: Los métodos HTTP indican la operación a realizar y son usados en las

solicitudes para interactuar con los recursos.

• GET: obtener datos del servidor

• DELETE: remover datos del servidor

• PUT: guardar o actualizar los datos del servidor

• POST: crear un nuevo recurso

Cabecera (header): Aquí se especifica el tipo de contenido que es capaz de recibir del

servidor y se asegura que el servidor no envié datos erróneos. Las opciones para los

tipos de contenido son llamados tipos MIME (Multipurpose Internet Mail Extensions), se

dividen en tipos y subtipos y son separados por un /. Por ejemplo, para una imagen:

imagen/png

Camino al recurso: Ayuda al cliente a saber a dónde ir. Debe contener toda la

información necesaria para localizar el recurso. Un ejemplo sería,

café.com/día/223/orden/12 se observa que se está accediendo a la orden 12 del día

223.

Servidor

Realiza la operación especificada por el cliente y avisa sobre el resultado de ésta. Todas

las interacciones comunican su estado usando códigos de estado del estándar HTTP, por

ejemplo:

Page 59: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

52

• 200 (OK): Indica una solicitud HTTP correcta.

• 400 (BAD REQUEST): Indica que la solicitud no puede ser procesada por algún

error en el cliente.

• 403 (FORBIDDEN): Indica que el cliente no tiene permitido accede a ese recurso.

• 404 (NOT FOUND): Indica que la fuente solicitada no fue encontrada.

• 500 (INTERNAL SERVER ERROR): Indica un error de aplicación en el servidor.

Para los métodos HTTP existen códigos específicos que el servidor envía como

respuesta:

• GET-200 (OK)

• POST-201 (Creado)

• PUT-200 (OK)

• DELETE-204 (No hay contenido)

Ventajas

• Uso de términos familiares para todo aquel que haya usado los protocolos de

comunicación de internet (HTTP)

• Las aplicaciones REST pueden ser escritas en cualquier lenguaje de programación

como Java, Phyton, .NET o JavaScript [26] [27] [28].

3.2.4.2 IP estática

Un dispositivo con una IP estática, permite utilizar esta dirección todo el tiempo. La

mejor forma de configurar una IP estática es elegir una que quede fuera del rango que

DHCP asigna. Por ejemplo, si un servicio DHCP tiene un rango de 192.168.1.10 a

192.168.1.49, una dirección IP conveniente sería 192.168.1.100 [26].

Para configurar una IP estática en Raspbian se logra mediante el archivo “dhcpd.conf” y

logramos acceder a él con el comando “sudo nano /etc/dhcpcd.conf”.

Agregando únicamente las siguientes líneas de código:

interface eth0

static ip_address=192.168.2.102/24

Page 60: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

53

static routers=192.168.2.1

static domain_name_servers=192.168.2.1

interface wlan0

static ip_address=192.168.2.102/24

static routers=192.168.2.1

static domain_name_servers=192.168.2.1

3.2.4.3 Flask

Flask es un micro framework para el desarrollo de aplicaciones web en Python que está

basado en Werkzeug y Jinja 2. La palabra micro se refiere al hecho de flask contiene los

servicios básicos, pero se apoya en extensiones para la adición de funciones avanzadas

a la aplicación tales como bases de datos y formas de autenticación. Gracias a esto,

flask brinda soluciones rápidas y simples al mismo tiempo que tiene las ventajas de ser

escalable y flexible.

• Framework: Un framework es una librería o un conjunto de estas que permiten

la solución de una parte de un problema en vez de uno completo.

• WSGI (Web Server Gateway Interface): Es una interfaz basada en un estándar

para el desarrollo de aplicaciones web en Python. Describe la comunicación entre

un servidor web y las aplicaciones web.

• Werkzeug: Se trata de una librería de WGSI que incluye un depurador, objetos

de solicitud y respuesta, utilidades HTTP, encabezados de control caché, manejo

de cookies, carga de archivos, sistema de enrutamiento URL y módulos de

complementos dados por la comunidad.

• Jinja 2: Son plantillas para Python que permiten la creación de páginas web

dinámicas [29] [30].

Dentro del programa general de Python se especificó la ruta a seguir para poder acceder

a las diferentes opciones de control. El primer paso fue importar las librerías flask y una

vez definidas las funciones de control de motores, se creó una instancia app con el

argumento __name__. Después se especificó la ruta con la cual se puede acceder a las

opciones de control:

Page 61: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

54

@app.route('/gpio/enable/<int:direccion>/<float:distancia>/<int:vuelta>',

methods=['GET'])

Esta ruta se coloca después de la dirección IP de la Raspberry y de su puerto, a partir

de tercera diagonal encontramos variables que hacen referencia a cada opción,

mostradas a continuación, para el control del robot móvil.

• <int:direccion> : Especifica que dirección tomará el robot. Tomará el valor de 0

si la instrucción es avanzar hacia delante o 1 si la instrucción es una vuelta.

• <float:distancia> : Tomará el valor especificado por el usuario para un avance

hacia adelante. En el caso de los giros tanto derecha como a la izquierda a 90° y

180°, los valores ya están establecidos ya que siempre serán los mismos, aunque

dentro de la interfaz gráfica hay una opción de calibración debido a la variación

de velocidad y comportamiento de las llantas en distintos tipos de suelo.

• <int:vuelta> : Si se requiere una vuelta hacia la derecha tomará el valor de 1 y

hacia la izquierda un valor de 2.

Un ejemplo de una ruta completa es:

192.168.2.101:8080/gpio/enable/1/29.2/2

Se ve especificada la dirección IP de la Raspberry, su puerto y con esta combinación el

robot girará hacia la izquierda 90°.

El diagrama de este control mediante una ruta es el mostrado en el diagrama 3.10:

Page 62: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

55

Para comprobar la conexión existe otra ruta definida de la siguiente forma:

@app.route('/status', methods=['GET'])

De la misma forma se accede escribiendo la dirección IP y el puerto. Esta función retorna

un ‘ALIVE’ cuando el servidor está disponible.

El diagrama general de conexiones del sistema es el siguiente:

Diagrama 3.10 Diagrama de flujo del control mediante una ruta

Page 63: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

56

Diagrama 3.12 Diagrama eléctrico del sistema

Diagrama 3.11 Diagrama de conexiones

L298N

FC-03 HC-SR04

Arduino Raspberry Pi

Bate

ría

Motor A Motor B

Batería

5v

Page 64: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

57

4 Capítulo 4. Pruebas y resultados

Durante este capítulo se presentan las pruebas realizadas al prototipo con base en las

características que debe cumplir un robot móvil, redactadas en el capítulo 2 y también

algunas pruebas que son solicitadas en los concursos de robótica del país.

4.1 Percepción

Esta característica se ve reflejada en el sensor ultrasónico. Se realizaron pruebas

programando que el robot se detuviera cuando encontrara un obstáculo a menos de 15

cm. Los resultados (Tabla 4.1) son los siguientes:

Tabla 4.1 Pruebas de precepción

Percepción (ultrasónico)

No de prueba

Distancia robot-objeto inicial

Distancia robot-objeto medida

Distancia robot-objeto esperada

1 30cm 10cm 15cm

2 1m 7cm 15cm

3 1.30cm 11cm 15cm

4 2m 7.5cm 15cm

5 3m 9cm 15cm

La distancia medida cuando se colocó un objeto frente al robot en movimiento (Figura

4.1 y 4.2), en todos los casos, entra dentro del rango permisible. En ninguna prueba el

robot colisionó, con lo que podemos concluir que la percepción del sistema es adecuada.

Figura 4.1 Posiciones iniciales para pruebas de percepción

Page 65: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

58

4.2 Accesibilidad

Al ser un robot móvil posee únicamente 2 grados de libertad, hacia delante y atrás y

giro izquierda o derecha (flechas roja y naranja respectivamente de la figura 4.3).

Figura 4.3 Grados de libertad

4.3 Capacidad de carga

El prototipo, al ser un robot móvil de transporte, se le adaptó un pequeño cajón para

poder guardar materiales. Las pruebas realizadas para conocer el límite de peso que

podía transportar el sistema de manera satisfactoria se encuentran registradas en la

tabla 4.2.

Figura 4.2 Distancia obtenida de la prueba 3 de percepción

Page 66: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

59

Tabla 4.2 Pruebas de capacidad de carga

Capacidad de Carga

Peso adicional (kg) Realizado correctamente Observaciones

0 SI Trabaja correctamente

1 SI Trabaja correctamente

1.2 SI Trabaja correctamente

1.4 SI Trabaja correctamente

1.6 SI Trabaja correctamente

1.8 SI No recomendable (presenta ciertas dificultades)

2 NO Peso excedido

3 NO Peso excedido

5 NO Puede dañar el mecanismo

Como podemos observar, el prototipo solo responde correctamente con pesos menores

a 2 kg puestos en el cajón. Esto se debe principalmente a que el prototipo se realizó con

la ayuda de una base de metal de un robot de competencia que pesa por si sola 5 kg,

además de que las llantas acondicionadas no soportan mucho peso. Sin embargo, para

el transporte de materiales ligeros trabaja de manera adecuada.

4.4 Tiempo de respuesta

Está dado por lo que requiera la aplicación, en este caso, si el robot móvil se requiere a

una hora específica para que esté posicionado en cualquiera de los puntos programados,

será el tiempo que tarda (con cierta tolerancia) en llegar a este lugar.

Para estas pruebas se tomaron dos tiempos, el t1 se refiere al tiempo transcurrido entre

el inicio del recorrido en la interfaz gráfica y el arranque mecánico del sistema y el t2 es

el tiempo que tarda desde el arranque hasta que completa el recorrido. Los resultados

se muestran en la tabla 4.3.

Page 67: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

60

Tabla 4.3 Pruebas de tiempo de respuesta

Los tiempos de respuesta varían mínimamente entre las pruebas realizadas. La primera

con un recorrido de avanzar 2 metros hacia adelante y la segunda con un recorrido más

elaborado: avanzar 1 metro hacia adelante, dar una vuelta a la derecha, 1.3 metros

hacia adelante, vuelta a la derecha y finalmente 1 metro hacia adelante. Debido a que

los tiempos son muy parecidos, podemos asegurar un adecuado tiempo de respuesta

del sistema.

4.5 Resolución

Para medir esta característica, se colocaron en el suelo distintas marcas para observar

la llegada final del robot. Se delimitaron tres áreas (Figura 4.4), la primera es el espacio

esperado donde el robot llegará y las áreas 2 y 3 son permisibles para obtener un error

pequeño.

Figura 4.4 Delimitación de áreas para pruebas de resolución

Tiempo de respuesta

No prueba

Recorrido 1 (2m adelante) Recorrido 2 (1m-A, vueltaD, 1.3m-A, vueltaD, 1m-A )

t1 (s) t2 (s) t1 (s) t2 (s)

1 1.55 12.86 2.11 30.21

2 2.12 12.48 2.15 29.83

3 2.7 12.49 1.58 31.11

4 2.1 12.53 2.12 31.77

Page 68: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

61

La tabla 4.4 muestra los resultados de las pruebas realizadas para la característica de

resolución sin peso extra y la tabla 4.5 con un peso extra de 2 kg. Todas las pruebas

fueron con un recorrido en forma de ‘L’ con avance de 1.5 metros hacia adelante, giro

izquierda y avance 1.5 metros.

Tabla 4.4 Pruebas de resolución sin peso

Resolución (sin peso)

No. Prueba Dentro de área 1

1 SI

2 SI

3 SI

4 SI

5 SI

6 SI

Tabla 4.5 Pruebas de resolución con peso

Resolución (con peso)

No. Prueba Dentro de área 1 Dentro de área 2 y 3 Fuera de áreas

1 SI

2 SI

3 SI

4 SI

5 SI

6 SI

Los resultados obtenidos casi siempre cayeron dentro de las áreas delimitadas, excepto

en una ocasión. El comportamiento es mejor sin un peso extra de 2 kg, pero aun con

éste solo una vez cayó fuera del rango, con lo que se puede concluir que el sistema tiene

buena resolución. En las figuras 4.5, 4.6, y 4.7 se muestran algunas fotos

correspondientes a estas pruebas.

Page 69: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

62

Figura 4.7 Prueba 2 de resolución con peso vista frontal

4.6 Precisión

Se programaron recorridos rectilíneos de diferentes distancias para medir este

parámetro, se colocaron marcas en el suelo para saber la distancia exacta que debería

avanzar el prototipo. Se realizaron pruebas sin peso y con un peso extra de 2 kg. Los

resultados se muestran en la tabla 4.6 y 4.7, respectivamente.

Figura 4.5 Prueba 2 de resolución con peso

vista superior Figura 4.6 Prueba 4 de resolución sin peso

Page 70: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

63

Tabla 4.6 Pruebas de precisión sin peso

Precisión (sin peso)

No. Prueba Hacia adelante 1 m 2 m 3 m 4 m 5 m

1 +4 cm 0 cm -7.5 cm -1.5 cm +10 cm

2 -0.5 cm -4 cm +2 cm +5 cm +23 cm

3 +5.5 cm -4.5 cm +3 cm +17 cm +17 cm

4 +1.5 cm +1 cm +1 cm +11 cm +13 cm

5 -3 cm -0.5 cm -0.5 cm +23 cm +25 cm

6 +2.5 cm +1 cm +1 cm +35 cm +33 cm

¿Están dentro del límite permisible de ±10? SI SI SI NO NO

Tabla 4.7 Pruebas de precisión con peso

Precisión (con peso)

No. Prueba Hacia adelante 1 m 2 m 3 m 4 m

1 +4 cm +3.5 cm -3.5 cm +13.5 cm

2 +9 cm -1.5 cm -1.5 cm -4.5 cm

3 -4 cm +6 cm +9.5 cm +16 cm

4 +3 cm +3 cm +5.5 cm +11 cm

¿Están dentro del límite permisible de ±10? SI SI SI NO

Las pruebas reflejan un buen comportamiento en distancias cortas, a distancias mayores

de 3 metros se empiezan a ver errores de precisión mayores a 10 centímetros.

4.7 Autonomía

El sistema es parcialmente autónomo o semiautónomo, ya que solo cumple con las

características 1, 2, 3 para ser un robot completamente autónomo

4.8 Salida de la trayectoria

Para este rubro se determinó que el robot móvil no cumple con la inteligencia suficiente

para volver a la trayectoria de forma autónoma cuando se salga de esta y retomar su

camino. Sin embargo, se propone una alternativa de solución a este requerimiento con

Page 71: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

64

el cual permite pasar de un control programado a un control manual en caso de que el

dispositivo salga de la trayectoria.

4.9 Control del mecanismo

El prototipo cuenta con dos opciones de paro de emergencia. La primera consiste en un

switch integrado en la carcasa del robot el cual permite realizar un completo apagado

del sistema. La segunda se compone de un botón dentro de la interfaz gráfica con el

cual se inicia una interrupción y aborta cualquier tarea haciendo que el sistema se

detenga completamente sin interrumpir la comunicación.

4.10 Alcance de la comunicación

El enrutador que se utilizó para poder realzar la comunicación vía WiFi entre el robot y

la interfaz gráfica en una PC, brinda un alcance de 100 m. Para comprobar esto se

hicieron pruebas en el pasillo del primer piso del edificio 5 de la escuela, todos los

recorridos fueron rectilíneos variando la distancia. Los resultados se encentran en la

tabla 4.8.

Tabla 4.8 Pruebas de alcance de la comunicación

Alcance de la comunicación

No. Prueba Distancia (m) Realizado correctamente

1 9 SI

2 15 SI

3 20 SI

4 30 SI

5 50 SI

6 85 SI

Al observar los resultados se puede concluir que el alcance de conexión es el adecuado

para las aplicaciones del proyecto.

Page 72: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

65

4.11 Transmisión de video

Se colocó un Smartphone, con una aplicación integrada llamada IP Webcam que simula

este tipo de cámara utilizando la del Smartphone, en la parte de enfrente del prototipo

para que grabe los recorridos programados (Figura 4.8). Además, se colocó una flecha

para poder visualizar si era necesario realizar una calibración en el momento de los giros

del robot. Al momento de abrir la aplicación, esta brinda una dirección IP para ingresar

desde cualquier navegador y poder observar el video en vivo.

En la figura 4.9 se muestra la interfaz gráfica en PC junto con la dirección IP dada por

la aplicación desde un navegador web donde se observa la grabación de la cámara.

Figura 4.8 Cámara puesta en prototipo

Figura 4.9 Interfaz gráfica junto con video en vivo en PC

Page 73: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

66

5 CONCLUSIONES

El prototipo construido para el transporte demostró con base en las pruebas realizadas

ser un sistema semiautónomo funcional. Sin embargo, se observó un error producido

por el sistema de locomoción, específicamente las ruedas debido a distintos aspectos

como la desalineación de estas, la cantidad de peso con la que trabajan, pero sobre todo

la interacción con suelos desiguales o que presenten alguna deformación.

Además, gracias a las pruebas realizadas de percepción, precisión, resolución

rendimiento de la batería, capacidad de carga y alcance de la comunicación es posible

decir que el robot demostró ser un sistema robusto y bastante completo para su

aplicación, tomando en cuenta las distancias que recorrerá y el tiempo de labor diaria

que tendría que realizar. Cabe destacar que la mejor prueba realizada fue la de la

comunicación, dotando al sistema de un muy alto alcance para su operación en grandes

espacios y desde grandes distancias sin perder comunicación.

La interfaz gráfica contiene elementos visuales que facilitan el control del sistema,

además de que no se requiere ninguna instalación de algun software externo para su

funcionamiento. Respecto a la función de programación de horarios este responde al

tiempo que requiere el usuario con una óptima respuesta para inicializar su recorrido.

La aplicación de transmisión resultó ser funcional debido a que resultó ser en tiempo

real, con un ligero desfase pero que finalmente permite realizar ajustes sin la necesidad

de ver directamente el prototipo.

Finalmente, se demostró que los resultados cumplieron con los objetivos del proyecto.

Esto se logró en gran parte al algoritmo implementado que permite realizar un ajuste a

la función de giro y a la cámara que permite ver la posición del robot.

Page 74: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

67

6 REFERENCIAS

[1] VINSSA (2017). La historia y evolución de los robots móviles. 24 de febrero.

[2] Aracil, R., Balaguer, C. and Armada, M. (2008). “Robots de servicio”. Revista

Iberoamericana de Automática e Informática Industrial RIAI, 5(2), pp.6-13.

[3] http://www.mobile-industrial-robots.com/en/resources/case-studies/mobile-

robots-deliver-chemotherapy/ [Consultado junio 2017]. Derechos de autor [2016-2017]

por Mobile Industrial Robots ApS. Reimpresión autorizada

[4] http://www.mobile-industrial-robots.com/case-study/2ccc2f4b-12c6-11e7-9f6e-

0292f2941023 [Consultado junio 2017].

[5] https://www.lasaspiradoras.com/test-robot-aspiradora-xiaomi-mi/ [Consultado

Agosto 2017].

[6] https://www.notisistema.com/noticias/crean-a-aura-el-robot-de-servicio-a-

cuartos/ [Consultado Agosto 2017]. Derechos de autor [2014] por Notisistema.

Reimpresión autorizada

[7] Aníbal Ollero Baturone, A. (2001). Robotica. Manipuladores y robots móviles.

Barcelona, España: Marcombo Boixareu, pp.4-6, 28-32, 147-148.

[8] Vázquez Fernández-Pacheco, A. (2016). Robótica educativa. Madrid: Ra-Ma, pp.67,

68.

[9] Saha, S. (2011). Introducción a la Robotica. España: McGraw-Hill, p.54.

[10] García, J. (2012). Mapeo con robot móvil: Construcción y seguimiento. Universidad

Autónoma de Barcelona.

[11]https://www.xataka.com/especiales/alternativas-a-la-raspberri-pi-7-modelos-de-

miniordenadores-baratos-en-los-que-deberias-pensar [Consultado Julio 2018]

[12]https://www.vix.com/es/btg/tech/13220/los-mejores-ides-y-editores-para-

programadores [Consultado Julio 2018]

[13]https://therobotacademy.com/ros/4-principales-sistemas-operativos-para-

raspberry-pi [Consultado Julio 2018]

[14] https://www.iso.org [Consultado Agosto 2018]

[15] https://www.robomatrix.org [Consultado Agosto 2018]

Page 75: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

68

[16] https://www.femexrobotica.org [Consultado Agosto 2018]

[17] Date, C. (1987). Introducción a los sistemas de bases de datos. Wilmington

(Delaware): Addison-Wesley Iberoamericana.

[18] https://www.prometec.net/l298n/ [Consultado Julio 2018]

[19]https://www.amgkits.com/home/112-sensor-de-velocidad-infrarrojo-fc-03.html

[Consultado Julio 2018]

[20]https://www.keyence.com.mx/ss/products/sensor/sensorbasics/ultrasonic/info/

[Consultado Julio 2018]

[21] http://arduino.cl/que-es-arduino/ [Consultado Julio 2018]

[22] Carballar Falcon, J. (2010). Wi-fi. Madrid: RC Libros, pp.1, 2.

[23]http://www8.hp.com/ve/es/campaigns/wireless-printing-center/wireless-network-

help4.html?jumpid=re_r11400_wireless_easy_cs_redirect [Consultado Mayo 2018]

[24] Masse, M. (2012). REST API Design Rulebook. 1st ed. Sebastopol, CA: O'Reilly,

pp.5, 6.

[25] Jacobson, D., Brail, G. and Woods, D. (2012). APIs: A strategy guide. Sebastopol,

CA: O'Reilly, pp.4-6.

[26]https://bbvaopen4u.com/es/actualidad/api-rest-que-es-y-cuales-son-sus-

ventajas-en-el-desarrollo-de-proyectos [Consultado Abril 2018]

[27] https://www.codecademy.com/articles/what-is-rest [Consultado Abril 2018]

[28]https://searchmicroservices.techtarget.com/definition/REST-representational-

state-transfer [Consultado Abril 2018]

[29] http://flask.pocoo.org/ [Consultado Mayo 2018]

[30]https://www.tutorialspoint.com/flask/flask_overview.htm [Consultado Mayo 2018]

Page 76: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

69

7 ANEXO A

CÓDIGO DE LA INTERFAZ GRÁFICA

FORM1 (Ventana de acceso)

Bibliotecas utilizadas

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; using Microsoft.Win32; using System.Collections; using System.IO;

Declaración de variables/objetos

OleDbConnection conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Edgar\\Desktop\\9CM11\\Tesis\\Prueba interfaz 1\\Prueba interfaz 1\\bin\\Debug\\dbUsuarios.accdb"); OleDbCommand comando = new OleDbCommand();

internal static StreamWriter file = new StreamWriter("log.txt", true);

Botones

private void btnIniciar_Click(object sender, EventArgs e) { conexion.Open();

string consulta = "select Usuario, Contraseña from Usuarios where Usuario='" + tbUsuario.Text + "' and Contraseña='" + tbContraseña.Text + "';";

OleDbCommand comando = new OleDbCommand(consulta, conexion); OleDbDataReader leer_datos; leer_datos = comando.ExecuteReader(); Boolean existencia = leer_datos.HasRows; if (existencia) { MessageBox.Show("Bienvenido"); Form3 frmprincipal = new Form3(); frmprincipal.Show();

file.WriteLine("El usuario " + tbUsuario.Text.ToString() + " accedió al sistema a las: " + DateTime.Now.ToString());

} else { MessageBox.Show("Acceso denegado, verifica usuario o contraseña"); conexion.Close(); return; } conexion.Close();

Page 77: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

70

this.Hide(); }

private void btnNuevo_Click(object sender, EventArgs e) { this.Hide(); Form2 frmRegistro = new Form2(); frmRegistro.Show(); } private void btnSalir_Click(object sender, EventArgs e) { this.Close(); }

FORM2 (Registro de nuevo usuario)

Bibliotecas utilizadas

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb;

Declaración de variables/objetos

OleDbConnection conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Edgar\\Desktop\\9CM11\\Tesis\\Prueba interfaz 1\\Prueba interfaz 1\\bin\\Debug\\dbUsuarios.accdb"); OleDbCommand comando = new OleDbCommand();

string PassAdmin = "1234";

Botones

private void btnRegresar_Click(object sender, EventArgs e) { this.Close(); Form1 frminicio = new Form1(); frminicio.Show(); } private void btnGuardar_Click_1(object sender, EventArgs e) { if(tBadmin.Text == PassAdmin) {

if (tbNombreR.Text == "") { MessageBox.Show("Hay campos sin llenar."); } else if (tbUsuarioR.Text == "") { MessageBox.Show("Hay campos sin llenar."); } else if (tbContraseñaR.Text == "") { MessageBox.Show("Hay campos sin llenar."); } else if (tbContraseñaR2.Text == "") { MessageBox.Show("Hay campos sin llenar."); }

else

Page 78: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

71

{ conexion.Open(); int i = 0; comando.Connection = conexion;

comando.CommandText = "INSERT INTO [Usuarios]([Nombre Completo], [Usuario], [Contraseña]) VALUES('" + tbNombreR.Text + "','" + tbUsuarioR.Text + "','" + tbContraseñaR.Text + "')";

i = comando.ExecuteNonQuery(); {

comando.Parameters.AddWithValue("@Nombre Completo", tbNombreR); comando.Parameters.AddWithValue("@Usuario", tbUsuarioR); comando.Parameters.AddWithValue("@Contraseña", tbContraseñaR); MessageBox.Show("Guardado"); } } } else {

MessageBox.Show("Necesitas introducir la contraseña que te proporcionará el administrador del sistema");

} }

FORM3 (Ventana principal)

Bibliotecas utilizadas

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Imaging; using System.IO; using System.Threading;

Declaración de variables/objetos globales

Image File;

float[] tramo = new float[4]; Queue<string> tiempos = new Queue<string>(); Queue<string> codigos = new Queue<string>(); Queue<string> codigosRestantes = new Queue<string>(); float avanza = 100.1F; float daVueltanoventa = 29.3F; float daVueltacientochenta = 53.1F; string direccion = "http://192.168.2.102:8080/gpio/enable/"; bool flagAjuste = false;

Page 79: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

72

Programación de recorridos

Botones

private void btNew_Click(object sender, EventArgs e) { lblDistancia.Visible = false; tbDistancia.Visible = false; rbtnDerecha.Visible = false; rbtnIzquierda.Visible = false; rbtn90.Visible = false; rbtn180.Visible = false; lblmet.Visible = false; recorridoBindingSource.AddNew(); panel5.Enabled = true; btCancel.Visible = true; btSave.Enabled = true; btCancel.Visible = true; btSave.Enabled = true; tbNombreRec.Focus(); }

private void btnAgregarPaso_Click_1(object sender, EventArgs e) { if (tbNombreRec.Text == "") { MessageBox.Show("Hay campos sin llenar."); } else { string nombreRec; float z = 0; bool bandera2 = float.TryParse(tbDistancia.Text, out z); nombreRec = tbNombreRec.Text; if (rbtnAdelante.Checked == true) { if (bandera2 == true) { tramo[1] = 0; tramo[2] = (float.Parse(tbDistancia.Text)); tramo[3] = 0; string codigo = tramo[1] + "/" + tramo[2] + "/" + tramo[3]; tbArreglo.AppendText(codigo + ","); lBrecorrido.Items.Add(codigo); } else {

MessageBox.Show("Valor no válido (coloca un número entero o flotante).");

} } else if (rbtnVuelta.Checked == true) { tramo[1] = 1; if (rbtnDerecha.Checked == true) {

Page 80: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

73

tramo[3] = 1; if (rbtn90.Checked == true) { if (tBv90.Text == ""){daVueltanoventa = 29.3F;} else {daVueltanoventa = float.Parse(tBv90.Text);} tramo[2] = daVueltanoventa; } else { if (tBv180.Text == "") { daVueltacientochenta = 53.1F; }

else { daVueltacientochenta = float.Parse(tBv180.Text); } tramo[2] = daVueltacientochenta; } } else { tramo[3] = 2; if (rbtn90.Checked == true) { if (tBv90.Text == "") { daVueltanoventa = 29.3F; } else { daVueltanoventa = float.Parse(tBv90.Text); } tramo[2] = daVueltanoventa; } else { if (tBv180.Text == "") { daVueltacientochenta = 53.1F; }

else { daVueltacientochenta = float.Parse(tBv180.Text); } tramo[2] = daVueltacientochenta; } } string codigo = tramo[1] + "/" + tramo[2] + "/" + tramo[3]; tbArreglo.AppendText(codigo + ","); } } }

private void btSave_Click(object sender, EventArgs e) { if (!(tbArreglo.Text == "") || (tbArreglo.Text== null) ) { string codigo_final = tbArreglo.Text; tbArreglo.Text = codigo_final.Substring(0, codigo_final.Length - 1); try { this.recorridoBindingSource.EndEdit();

this.recorridoTableAdapter.Update(bdRecorridos1DataSet.Recorrido);

this.recorridoDataGridView.Refresh(); } catch (Exception exc) {

MessageBox.Show(exc.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);

recorridoBindingSource.ResetBindings(false); } } }

private void btEdit_Click(object sender, EventArgs e) {

Page 81: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

74

panel5.Enabled = true; btCancel.Visible = true; btSave.Enabled = true; tbNombreRec.Focus(); }

private void btDrop_Click(object sender, EventArgs e) {

if (MessageBox.Show("¿Desea borrar el registro?", "Borra registro", MessageBoxButtons.YesNo) == DialogResult.Yes)

{ this.recorridoTableAdapter.Delete(Convert.ToInt32(nombreTextBox.Text)); this.bdRecorridos1DataSet.Recorrido.Rows.RemoveAt(this.recorridoDataGridView.CurrentCell.RowIndex);

this.recorridoTableAdapter.Update(bdRecorridos1DataSet.Recorrido); } }

Generación del Mapa

Botones

private void button1_Click(object sender, EventArgs e) {

pB1.Image = new Bitmap(pB1.Width, pB1.Height); Graphics g = Graphics.FromImage(pB1.Image); g.Clear(System.Drawing.Color.White); g.DrawLine(Pens.Blue, 272 - 5, 216, 272, 216 - 5); g.DrawLine(Pens.Blue, 272 - 5, 216, 272 + 5, 216); g.DrawLine(Pens.Blue, 272 + 5, 216, 272, 216 - 5); for (int h = 0; h < int.Parse(recorridoDataGridView.RowCount.ToString()); h++) { int x = 272; int y = 216; int dx = 272; int dy = 216; string codigo; int[] direcciones = new int[4] { 1, 2, -1, -2 }; int[] aux = new int[4]; int auxiliar = 0; codigo = (string)recorridoDataGridView.Rows[h].Cells[2].Value; string[] codigo_leido = codigo.Split(','); for (int i = 0; i <= codigo_leido.Length - 1; i++) { string[] valores = codigo_leido[i].Split('/'); if (i == 0) { logicaMapa(aux,direcciones,valores,auxiliar,x,y,dx,dy); } else {

Page 82: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

75

x = dx; y = dy; logicaMapa(aux, direcciones, valores, auxiliar, x, y, dx, dy); } } } g.Dispose(); } private void Save_map_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Images|*.png;*.bmp;*.jpg"; ImageFormat format = ImageFormat.Png; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string ext = System.IO.Path.GetExtension(sfd.FileName); switch (ext) { case ".jpg": format = ImageFormat.Jpeg; break; case ".bmp": format = ImageFormat.Bmp; break; } pB1.Image.Save(sfd.FileName, format); } } private void button2_Click(object sender, EventArgs e) { OpenFileDialog f = new OpenFileDialog(); f.Filter = "PNG(*.PNG)|*.ppg"; if (f.ShowDialog() == DialogResult.OK) { File = Image.FromFile(f.FileName); pB1.Image = File; } }

Funciones

public void logicaMapa(int[] aux, int[] direcciones, string[] valores,int auxiliar, int x, int y, int dx, int dy) { Graphics g = Graphics.FromImage(pB1.Image);

if (valores[0] == "0") { if (direcciones[auxiliar] == 1) { dy = dy - 20; g.DrawLine(Pens.Red, x, y, dx, dy);

g.DrawLine(Pens.Blue, dx - 5, dy, dx, dy - 5); g.DrawLine(Pens.Blue, dx - 5, dy, dx + 5, dy); g.DrawLine(Pens.Blue, dx + 5, dy, dx, dy - 5); } else if (direcciones[auxiliar] == 2) {

Page 83: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

76

dx = dx + 20; g.DrawLine(Pens.Red, x, y, dx, dy);

g.DrawLine(Pens.Blue, dx, dy - 5, dx, dy + 5); g.DrawLine(Pens.Blue, dx, dy + 5, dx + 5, dy); g.DrawLine(Pens.Blue, dx + 5, dy, dx, dy - 5); } else if (direcciones[auxiliar] == -1) { dy = dy + 20; g.DrawLine(Pens.Red, x, y, dx, dy);

g.DrawLine(Pens.Blue, dx - 5, dy, dx + 5, dy); g.DrawLine(Pens.Blue, dx - 5, dy, dx, dy + 5); g.DrawLine(Pens.Blue, dx, dy + 5, dx + 5, dy); } else if (direcciones[auxiliar] == -2) { dx = dx - 20; g.DrawLine(Pens.Red, x, y, dx, dy);

g.DrawLine(Pens.Blue, dx, dy - 5, dx - 5, dy); g.DrawLine(Pens.Blue, dx - 5, dy, dx, dy + 5); g.DrawLine(Pens.Blue, dx, dy + 5, dx, dy - 5); } } else { if (valores[2] == "2") {

if (valores[1] == Convert.ToString(daVueltanoventa)) { auxiliar += auxiliar - 1; if (auxiliar == -1) { auxiliar = 3; } for (int j = 0; j <= 3; j++) { aux[j] = direcciones[j]; } } else { auxiliar += auxiliar + 2; if (auxiliar == 4) { auxiliar = 0; } for (int j = 0; j <= 3; j++) { aux[j] = direcciones[j]; } } } else {

if (valores[1] == Convert.ToString(daVueltanoventa)) { auxiliar += 1; if (auxiliar == 4) { auxiliar = 0; } for (int j = 0; j <= 3; j++) { aux[j] = direcciones[j]; } } else { auxiliar += 2; if (auxiliar == 4) { auxiliar = 0; } for (int j = 0; j <= 3; j++)

Page 84: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

77

{ aux[j] = direcciones[j]; } } } } }

Control/Ejecución de recorridos

Botones

private void timer1_Tick(object sender, EventArgs e) { lblHoraAct.Text = DateTime.Now.ToString("HH:mm:ss:f"); if (radioButton1.Checked) { if (!(tiempos == null || tiempos.Count == 0) ) { string paquete_leido; paquete_leido = tiempos.Peek(); string[] paquete_split = paquete_leido.Split(','); tBhoraDeseada.Text = Convert.ToString(paquete_split[0]); tBsearch.Text = Convert.ToString(paquete_split[1]); if (lblHoraAct.Text == tBhoraDeseada.Text + ":1") { string[] arreglo = null; arreglo = ConsultaRecorrido(tBsearch.Text);

for (int i = 0; i < arreglo.Length; i++) { codigos.Enqueue(direccion + arreglo[i]); lBrecorrido.Items.Add(arreglo[i] + "\n\r"); } if (!(codigos == null || codigos.Count == 0)) { ThreadStart delegado = new ThreadStart(Control); Thread hilo = new Thread(delegado); hilo.Start(); } tiempos.Dequeue();

recorridoDataGridView.DataSource = recorridoBindingSource; } } } }

private void btAgregar_Click(object sender, EventArgs e) { if ((tiempos == null || tiempos.Count == 0)) { string paquete = tBhoraDeseada.Text + "," + tBsearch.Text; tiempos.Enqueue(paquete); lBtiempos.Items.Clear(); foreach (string item in tiempos)

Page 85: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

78

{ lBtiempos.Items.Add(item); } } else { string paquete = tBhoraDeseada.Text + "," + tBsearch.Text; string hora = tBhoraDeseada.Text; string hora_des = hora.Substring(0, 5); string[] hora_des_split = hora_des.Split(':'); string paquete_pico = tiempos.Peek(); string hora_pico = paquete_pico.Substring(0, 5); string[] hora_pico_split = hora_pico.Split(':'); string tdeseado = hora_des_split[0] + hora_des_split[1]; string tpico = hora_pico_split[0] + hora_pico_split[1]; if ((Convert.ToInt32(tdeseado)) - (Convert.ToInt32(tpico)) <= 20) {

MessageBox.Show("Debes de dejar una tolerancia de 20 min como mínimo para el siguente recorrido");

} else { tiempos.Enqueue(paquete); lBtiempos.Items.Clear(); foreach (string item in tiempos) { lBtiempos.Items.Add(item); } } } }

private void btBorralista_Click(object sender, EventArgs e) { lBtiempos.Items.Clear(); tiempos.Clear(); }

private void button3_Click(object sender, EventArgs e) { try { peticionServidor(direccion + "0/" + avanza + "/0"); } catch (ApplicationException err) {

debugOutput("Ocurrió un error al contactar con el dispositivo remoto:" + err); } finally{} } private void derecha_Click(object sender, EventArgs e) { if (tBvuelta90.Text == "") { daVueltanoventa = 29.3F; } else

Page 86: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

79

{ daVueltanoventa = float.Parse(tBvuelta90.Text); } try { peticionServidor(direccion + "1/" + daVueltanoventa + "/1"); } catch (ApplicationException err) {

debugOutput("Ocurrió un error al contactar con el dispositivo remoto:" + err); } finally { } } private void izquierda_Click(object sender, EventArgs e) { if (tBvuelta90.Text == "") { daVueltanoventa = 29.3F; } else { daVueltanoventa = float.Parse(tBvuelta90.Text); } try { peticionServidor(direccion + "1/" + daVueltanoventa + "/2"); } catch (ApplicationException err) {

debugOutput("Ocurrió un error al contactar con el dispositivo remoto:" + err); } finally { } } private void button3_Click_1(object sender, EventArgs e) { if (tBvuelta90.Text == "") { daVueltacientochenta = 53.1F; } else { daVueltacientochenta = float.Parse(tBvuelta180.Text); } try { peticionServidor(direccion + "1/" + daVueltacientochenta + "/1"); } catch (ApplicationException err) {

debugOutput("Ocurrió un error al contactar con el dispositivo remoto:" + err); } finally { } } private void ajusteYA_Click(object sender, EventArgs e) { flagAjuste = true; }

Page 87: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

80

Funciones

public string[] ConsultaRecorrido(string recBusqueda) { string[] recSolicitado = null; if (string.IsNullOrEmpty(tBsearch.Text)) { recorridoDataGridView.DataSource = recorridoBindingSource; } { var query = from o in this.bdRecorridos1DataSet.Recorrido where o.Nombre == tBsearch.Text select o; recorridoDataGridView.DataSource = query.ToList(); } string valor_leido; valor_leido = (string)recorridoDataGridView.Rows[0].Cells[2].Value; recSolicitado = valor_leido.Split(','); return recSolicitado; } public string peticionServidor(string url) { RestClient rClient = new RestClient(); rClient.endPoint = url; debugOutput("Rest Client Created"); string strResponse = rClient.makeRequest(); debugOutput(strResponse); return strResponse; } public void Control() { try { foreach (var item in codigos) { if (item.StartsWith(direccion + "1")) { peticionServidor(item);

const string message = "¿Deseas continuar con el recorrido?"; const string caption = "Form Closing"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No) { flagAjuste = false; do { } while (flagAjuste == false); } }

Page 88: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

81

else { peticionServidor(item); } } } catch (ApplicationException err) {

debugOutput("Ocurrió un error al contactar con el dispositivo remoto:" + err); } finally { codigos.Clear(); } }

CÓDIGO PYTHON

Bibliotecas utilizadas

#!flask/bin/python from flask import Flask, jsonify from flask import abort from flask import make_response import RPi.GPIO as GPIO from flask import request import time import serial from array import array from time import sleep import socket import subprocess import sys import re import os

Funciones

def Giro_Favor_Reloj(): GPIO.output(13,True) GPIO.output(15,False) GPIO.output(16,True) GPIO.output(18,False) def Giro_Contra_Reloj(): GPIO.output(13,False) GPIO.output(15,True) GPIO.output(16,False) GPIO.output(18,True) def Giro_Favor_Reloj_Vuelta(): GPIO.output(13,False) GPIO.output(15,True) GPIO.output(16,True) GPIO.output(18,False)

Page 89: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

82

def Giro_Contra_Reloj_Vuelta(): GPIO.output(13,True) GPIO.output(15,False) GPIO.output(16,False) GPIO.output(18,True) def Wait_For_Stop(): while True: read_serial= ser.readline() print "Waiting for zero condition:" + read_serial dist_recorrida = read_serial trama = dist_recorrida.split(",") if len(trama) == 3: vueltas1 = float(trama[0]) if vueltas1 == 0.0: break ser.write("2") def get_pids(port): command="sudo lsof -i :%s | awk '{print $2}'" % port pids=subprocess.check_output(command, shell=True) pids= pids.strip() if pids: pids=re.sub(' +',' ',pids) for pid in pids.split('\n'): try: yield int(pid) except: pass

Rutas de la aplicación web

app = Flask(__name__) @app.route('/gpio/enable/<int:direccion>/<float:distancia>/<int:vuelta>', methods=['GET']) def setPin(direccion, distancia, vuelta): print "Comienza a leer datos" time.sleep(3) while True: read_serial= ser.readline() print "Info: " + read_serial dist_recorrida = read_serial trama = dist_recorrida.split(",") if len(trama) == 3: vueltas1 = float(trama[0]) ultrasonico = float(trama[1]) print str(vueltas1) + coma + str(ultrasonico) print distancia if ultrasonico > 15: if direccion==(0): if vueltas1 < distancia: Giro_Favor_Reloj() pwm_a.start(0) pwm_b.start(0) pwm_a.ChangeDutyCycle(70)

Page 90: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

83

pwm_b.ChangeDutyCycle(39) else: ser.write("2") print "parar" pwm_a.stop() pwm_b.stop() Wait_For_Stop() break elif direccion==(1): if vuelta==(1): if vueltas1 < distancia: Giro_Favor_Reloj_Vuelta() pwm_a.start(0) pwm_b.start(0) pwm_a.ChangeDutyCycle(100) pwm_b.ChangeDutyCycle(100) #print("Vuelta derecha") else: ser.write("2") print "parar" pwm_a.stop() pwm_b.stop() Wait_For_Stop() break elif vuelta==(2): if vueltas1 < distancia: Giro_Contra_Reloj_Vuelta() pwm_a.start(0) pwm_b.start(0) pwm_a.ChangeDutyCycle(100) pwm_b.ChangeDutyCycle(100) else: ser.write("2") print "parar" pwm_a.stop() pwm_b.stop() Wait_For_Stop() break else: print "Objeto detectado" pwm_a.stop() pwm_b.stop() ser.write("1") return "OK" @app.errorhandler(404) def not_found(error): return make_response(jsonify({'error': 'not found'}),404) @app.route('/status', methods=['GET']) def getStatus(): return "ALIVE"

Programa principal if __name__ == '__main__':

Page 91: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

84

inicializacion_gpio() pwm_a = GPIO.PWM(12,500) pwm_b = GPIO.PWM(35,500) ser=serial.Serial('/dev/ttyACM0',9600) trama = "" coma= "," while True: try: app.run(host='0.0.0.0', port=8080, debug=True) except: port = 8080 pids=set(get_pids(port)) command='kill -9 {}'.format(' '.join([str(pid) for pid in pids])) print(command) os.system(command) time.sleep(5)

CÓDIGO ARDUINO

Declaración de variables

int contador=1; float distancia_rec=0; long distancia1; long tiempo1; String str1 = ","; int secuencia = 0;

Funciones

void setup() {

Serial.begin(9600);

attachInterrupt(digitalPinToInterrupt(2), interrupcion, RISING);

mensj_inicial();

pinMode(9, OUTPUT);

pinMode(8, INPUT);

}

void loop() {

ultrasonico();

char opcion=Serial.read();

if (opcion == '1')

{

while(distancia1 < 15)

{

ultrasonico();

}

continuarMarcha();

//Serial.flush();

}

if(opcion == '2'){

Serial.flush();

mensj_inicial();

}

Page 92: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

85

}

void ultrasonico()

{

digitalWrite(9, HIGH);

delayMicroseconds(10);

digitalWrite(9, LOW);

tiempo1 = pulseIn(8, HIGH);

distancia1 = int(0.017 * tiempo1);

}

void mensj_inicial()

{

secuencia++;

//Serial.flush();

contador=0.00;

delay(500);

Serial.println("0.00" + str1 + "20.00" + str1 + secuencia);

}

void interrupcion()

{

contador++;

//delay(1000);

distancia_rec=contador*3.927;

Serial.println(distancia_rec + str1 + distancia1 + str1 + secuencia);

}

void continuarMarcha()

{

delay(500);

Serial.println("0.00" + str1 + "20.00" + str1 + secuencia);

}

COMANDOS PARA LA COMUNICACIÓN (RASPBERRY)

sudo nano /home/pi/bashrc //Archivo que contiene la configuración de la consola. Dentro de

él se introdujo el nombre de nuestro programa para que se ejecute al momento de abrir la

consola.

/home/pi/.config/lxsession/LXDE-pi/autostart //Se utiliza para ejecutar automáticamente un

programa (que requiera elementos gráficos) una vez que se inicia LXDE (entorno de escritorio

gráfico utilizado por Raspbian). Dentro de él se introdujo el comando “@lxterminal” para

arrancar la terminal al momento de encender la Raspberry Pi.

Page 93: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

86

8 ANEXO b

COSTO DEL PROTOTIPO

MECANISMO

Material Cantidad Precio unitario Total

Carcasa 1 $ 1,500.00 $ 1,500.00

Bases de madera 2 $ 200.00 $ 400.00

Motores CD 4 $100.00 $ 400.00

Llantas 4 $ 78.00 $ 312.00

Coples para llanta 4 $ 45.00 $ 180.00

Mueble 1 $ 459.00 $ 459.00

Subtotal $ 3,251.00

CONTROL

Material Cantidad Precio unitario Total

Raspberry pi 3 modelo B 1 $ 1200.00 $ 1,200.00

Micro SD 8 GB 1 $ 150.00 $ 150.00

Arduino Uno 1 $ 150.00 $ 150.00

Sensor ultrasónico 1 $ 30.00 $ 30.00

Sensor óptico FC-03 1 $ 20.00 $ 20.00

Placa L298N 1 $ 130.00 $ 130.00

Switch ON/OFF 1 $ 10.00 $ 10.00

Subtotal $ 1,690.00

ALIMENTACIÓN

Material Cantidad Precio unitario Total

Batería recargable 1 $ 499.00 $ 499.00

Batería de litio 1 $ 550.00 $ 550.00

Conector para batería 1 $ 10.00 $ 10.00

Subtotal $ 1,059.00

PERSONAL

Personal Días Sueldo por día Total

Trabajo técnico 21 $ 280.00 $ 5,880.00

Desarrollo de software 60 $ 480.00 $ 28,800.00

Subtotal $ 34,680.00

Page 94: SISTEMA ROBÓTICO MÓVIL PARA EL TRANSPORTE DE …

87

TOTALES

Concepto Subtotal

Mecanismo $ 3,251.00

Control $ 1,690.00

Alimentación $ 1,059.00

Personal $ 34,680.00

TOTAL $ 40,680.00