• No se han encontrado resultados

SISTEMA DE CONTROL DE DESPLAZAMIENTO DE UN ROBOT MOVIL DE PROPOSITO GENERAL, EMPLEANDO EL PROTOCOLO ZIGBEE

N/A
N/A
Protected

Academic year: 2017

Share "SISTEMA DE CONTROL DE DESPLAZAMIENTO DE UN ROBOT MOVIL DE PROPOSITO GENERAL, EMPLEANDO EL PROTOCOLO ZIGBEE"

Copied!
67
0
0

Texto completo

(1)

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y

ELÉCTRICA

Sistema de control de desplazamiento de un robot móvil de propósito general,

empleando el protocolo Zigbee

Para obtener el título de:

Ingeniero en Comunicaciones y Electrónica

Por:

García Bonilla Miguel

Guridi Torres Erik

Pacheco Rivera Luis Daniel

Asesor Técnico: Ing. Alejandro V. Lugo Silva

Asesor Metodológico: M. en C. Genaro Zavala Mejía

(2)
(3)

ÍNDICE

Objetivo General ………... iii

Objetivos Particulares ……..………..……... iii

Justificación………... iv

Introducción………... 1

Capítulo I Antecedentes

1.1 Estado del arte……… 3

1.2 Marco teórico………. 4

Capítulo II Descripción de los bloques del sistema

2.1. IGU……….…... 8

2.1.1. Función IGU……….………..……….8

2.2. Transmisión y Recepción de datos ……….………..10

2.2.1 Función de la transmisión y recepción de datos…………..…. …..10

2.3 Descripción del robot ……….………12

Capítulo III Resultados de Hardware

3.1 Módulo receptor zigbee.………..……….…….13

3.2 Microcontrolador.………...……….14

3.3 Interfaz de potencia..………..………..………….15

3.4 Motores a pasos..………..……….17

3.5 Circuito final………18

Capitulo IV Resultado de Software

4.1 Desarrollo de la interfaz gráfica (IGU)……… ….21

(4)

4.1.1.1 Conexión al puerto………...………21

4.1.1.2 Calidad de la señal………...…22

4.1.1.3 Archivo………22

4.1.1.4 Bloque prohibido……… ….. ………..….23

4.1.1.5 Bloques de trayecto………..………..…..23

4.1.1.6 Botón de inicio………...………24

4.2 Configuración de los módulos………..……25

4.3 Configuración del microcontrolador……….…………28

Conclusiones……….…29

Apéndice 1. Costos………..30

Apéndice 2. Código del Microcontrolador………..31

Apéndice 3. Código de la Interfaz Gráfica ……….33

Apéndice 4. Hojas de datos de los módulos xbee ………...…………..……….58

(5)

Objetivo General

Diseñar un programa que controle la trayectoria de un robot por medio de

una interfaz gráfica, empleando una red inalámbrica punto a punto con protocolo

Zigbee y la base de un robot de propósito general.

Objetivos Particulares

Diseñar y programar la interfaz gráfica para desarrollar la aplicación del

proyecto.

Diseñar y construir el hardware de un robot móvil elemental.

Establecer la comunicación entre la computadora y el robot mediante

protocolo zigbee.

(6)

Justificación

En los últimos años han surgido nuevas tecnologías encaminadas al

monitoreo remoto de sensores, motivado por el bajo costo de los sistemas

para la transmisión inalámbrica, ZigBee es una de ellas.

Zigbee presenta las siguientes ventajas: tiene un menor consumo energético, un

tiempo de respuesta instantáneo, permite la comunicación inalámbrica

omnidireccional fiable y de dos vías, agilidad de canales para una mejor

coexistencia con otras tecnologías inalámbricas de 2.4 GHz, permite una

instalación y configuración sencilla.

Por las ventajas que presenta Zigbee despertó el interés de la realización del

proyecto, en el cual la parte medular es la comunicación inalámbrica por medio de

estos módulos. Con los cuales se busca hacer la conexión remota de la

computadora con un móvil de propósito general. (esta investigación aplicativa se

realizará con el fin de dar a conocer cómo se puede aplicar el protocolo

inalámbrico Zigbee ).

(7)
(8)

INTRODUCCIÓN

La automatización es un proceso que ha crecido en los últimos años y por

lo tanto se ha vuelto de gran importancia, la implementación de nuevas técnicas y

tecnologías dentro de este campo están encaminadas a satisfacer de manera más

veloz y eficientemente las necesidades de las empresas.

La automatización es un sistema donde se trasfieren tareas de producción,

realizadas habitualmente por operadores humanos a un conjunto de elementos

tecnológico.

El proyecto será una base para resolver diferentes tipos y niveles de

complejidad de problemas relacionados. No estará enfocado a la solución de un

problema en específico. El objetivo es hacer más eficiente el traslado y almacén

de material pesado, peligroso o de difícil manejo, eliminando el contacto directo de

la mano del hombre sobre estos con la ayuda de comunicación inalámbrica para

transmitir las instrucciones desde un ordenador personal a un robot que realizará

el trabajo físico.

El desarrollo del proyecto se presentara a través de cinco capítulos

distribuidos de la siguiente manera:

El capítulo I consta de la presentación del proyecto donde se abordara el

fundamento teórico que se aplicara posteriormente.

El capítulo II describe el diagrama a bloques, detallando claramente cuál es

el esquema funcional al que se debe llegar al concluir el mismo.

En el capítulo III se muestran los resultados correspondientes al hardware,

mientras que el capítulo IV hace referencia a los resultados obtenidos en software.

(9)

CAPITULO I Antecedentes

ZigBee se ha desarrollado para satisfacer la creciente demanda de

capacidad de red inalámbrica entre varios dispositivos de baja potencia. En la

industria ZigBee se está utilizando para la próxima generación de fabricación

automatizada, con pequeños transmisores en cada dispositivo, lo que permite

la comunicación entre dispositivos a un ordenador central.

Para llevar a cabo este sistema, un grupo de trabajo llamado Alianza

ZigBee (ZigBee Alliance) formado por varias industrias, sin ánimo de lucro, la

mayoría de ellas fabricantes de semiconductores, está desarrollando el estándar.

La alianza de empresas está trabajando codo con codo con IEEE para asegurar

una integración, completa y operativa. Esta alianza en las cuales destacan

empresas como Invensys, Mitsubishi, Philips y Motorola trabajan para crear un

sistema estándar de comunicaciones, vía radio y bidireccional, para usarlo dentro

de

dispositivos

de

automatización

hogareña

(domótica),

de

edificios

(inmótica), control industrial, periféricos de PC y sensores médicos. Los miembros

de esta alianza justifican el desarrollo de este estándar para cubrir el vacío que se

produce por debajo del Bluetooth como se muestra en la tabla comparativa.

(10)

1.1.

ESTADO DEL ARTE

Las comunicaciones inalámbricas son aquellas que propagan la información

en condiciones de espacio libre, por medio de ondas electromagnéticas, por lo

tanto este tipo de red carece de cables, existen varios tipos de redes inalámbricas.

Las redes inalámbricas facilitan cualquier tipo de instalación. Permiten que

los dispositivos remotos se conecten sin dificultad, sin necesidad de realizar

cambios en la infraestructura del lugar donde se va a instalar. Esto ha hecho que

el uso de esta tecnología se extienda con rapidez.

El mayor interés global de mejorar la eficiencia energética puede

desempeñar un papel fundamental en introducir a los consumidores el valor de las

soluciones de automatización del hogar, para esto fue creado Zigbee.

ZigBee, también conocido como "

HomeRF Lite

", es una tecnología

inalámbrica, basada en el estándar IEEE 802.15.4. Su objetivo son las

aplicaciones que requieren comunicaciones seguras con baja tasa de transmisión

de datos y maximización de la vida útil de sus baterías.

ZigBee comunica una serie de dispositivos haciendo que trabajen más

eficiente entre sí. Es especialmente útil para redes de sensores en entornos

industriales, médicos y domóticos.

1.1.1. ZIGBEE EN APLICACIONES DOMÓTICAS

Es el estándar mundial para el control de electrodomésticos, iluminación, el

medio ambiente, gestión energética, y seguridad.

Los protocolos ZigBee están definidos para su uso en aplicaciones

embebidas con requerimientos muy bajos de transmisión de datos y consumo

energético. Se pretende su uso en aplicaciones de propósito general como se

muestra en la figura 1, con características auto organizativas y bajo coste.

Puede utilizarse para realizar control industrial, albergar sensores

empotrados, recolectar datos médicos, ejercer labores de detección de humo y en

el área de la domótica.

(11)
[image:11.595.97.510.95.285.2]

Figura 1.2 Diferentes aplicaciones de ZigBee[3]

La seguridad de las transmisiones y de los datos son puntos clave en la

tecnología ZigBee.

ZigBee utiliza el modelo de seguridad de la subcapa MAC IEEE 802.15.4, la

cual especifica 4 servicios de seguridad.

Control de accesos. El dispositivo mantiene una lista de los dispositivos

“comprobados” en la red.

Datos Encriptados. Los cuales usan una encriptación con un código de 128

bits.

Integración de tramas para proteger los datos de ser modificados por otros.

Secuencias de refresco, para comprobar que las tramas no han sido

reemplazadas por otras.

El controlador de red. Comprueba estas tramas de refresco y su valor, para

ver si son las esperadas.

Depende del dispositivo final que creemos será nuestra decisión el dotarlo

de más o menos seguridad.

1.2.

MARCO TEÓRICO

(12)

También es la base sobre la que se define la especificación de ZigBee,

cuyo propósito es ofrecer una solución completa para este tipo de redes

construyendo los niveles superiores de la pila de protocolos que el estándar no

cubre

1.2.1. Características de Zigbee

ZigBee opera en las bandas libres ISM (Industrial, Scientific& Medical) de

2.4 GHz, 868 MHz (Europa) y 915 MHz (Estados Unidos).

Tiene una velocidad de transmisión de 250 Kbps y un rango de cobertura

de 10 a 75 metros.

[image:12.595.83.520.357.572.2]

A pesar de coexistir en la misma frecuencia con otro tipo de redes como

WiFi o Bluetooth su desempeño no se ve afectado, esto debido a su baja tasa de

transmisión y, a características propias del estándar IEEE 802.15.4 [3] que

muestra espectro de Zigbee frente a otras tecnologías.

Figura 1.3Espectro de distintas tecnologías[3]

La fabricación de un transmisor ZigBee consta de menos circuitos

analógicos de los que se necesitan habitualmente.

Diferentes tipos de topologías como estrella, punto a punto, malla, árbol.

(13)

Escalabilidad de red: Un mejor soporte para las redes más grandes,

ofreciendo más opciones de gestión, flexibilidad y desempeño.

Cada red ZigBee tiene un identificador de red único, lo que permita que

coexistan varias redes en un mismo canal de comunicación sin ningún

problema.

Puesta de servicio inalámbrico: El conjunto fue mejorado con capacidades

seguras: para poner en marcha el servicio inalámbrico.

Ventajas

Ideal para conexiones punto a punto y punto a multipunto

Diseñado para el direccionamiento de información y el refrescamiento de la

red.

Opera en la banda libre de ISM 2.4 Ghz para conexiones inalámbricas.

Óptimo para redes de baja tasa de transferencia de datos.

Reduce tiempos de espera en el envío y recepción de paquetes.

Detección de Energía (ED).

Baja ciclo de trabajo: Proporciona larga duración de la batería.

Soporte para múltiples topologías de red: Estática, dinámica, estrella y

malla.

Hasta 65.000 nodos en una red.

Provee conexiones seguras entre dispositivos.

Son más baratos y de construcción más sencilla.

Desventajas

La tasa de transferencia es muy baja.

Solo manipula textos pequeños comparados con otras tecnologías.

Zigbee trabaja de manera que no puede ser compatible con bluetooth en

todos sus aspectos porque no llegan a tener las mismas tasas de

transferencia, ni la misma capacidad de soporte para nodos.

Tiene menor cobertura porque pertenece a redes inalámbricas de tipo

WPAN.

(14)

Dispositivos Zigbee según su papel en la red

Coordinador (ZigBee Coordinator, ZC). Que es el encargado del control la red y

los caminos que deben seguir los dispositivos para conectarse entre ellos.

Router (ZigBee Router, ZR).

Que tiene la funcionalidad del enrutamiento de

paquetes y ser origen o destino de información.

Dispositivo final (ZigBee EndDevice, ZED).Que serán los sensores y actuadores

de la red.

Dispositivos Zigbee según su funcionalidad.

Dispositivo de funcionalidad completa (FFD). Es capaz de recibir mensajes en

formato del estándar 802.15.4. Gracias a la memoria adicional y a la capacidad de

computar, puede funcionar como coordinador o router o puede ser usado en

dispositivos de red que actúen de interface con los usuarios.

Dispositivo de funcionalidad reducida (RFD).

Tiene capacidad y funcionalidad

limitadas (especificada en el estándar) con el objetivo de conseguir un bajo coste y

una gran simplicidad. Básicamente, son los sensores/actuadores de la red.

Para el desarrollo del proyecto se basara en los diferentes de dispositivos

ZigBee según su papel en la red para implementar la red inalámbrica que se

mencionara más adelante.

Tipos de Trafico de Datos

ZigBee/IEEE 802.15.4 dirige tres tipos de tráfico típicos:

Cuando el dato es periódico. La aplicación dicta la proporción, el sensor se

activa, chequea los datos y luego desactiva.

Cuando el dato es intermitente. La aplicación, u otro estímulo, determinan la

proporción como en el caso de los detectores de humo. El dispositivo necesita

sólo conectarse a la red cuando la comunicación se hace necesaria. Este tipo

habilita el ahorro óptimo en la energía.

(15)

CAPITULO II Solución Propuesta

El objetivo principal de la tesis es el diseño de un programa para que un

usuario controle la trayectoria de un robot por medio de una interfaz gráfica,

empleando el protocolo zigbee para la transmisión de información y la base de un

robot de propósito general, esto se llevara a cabo en 3 etapas:

-

Interfaz Gráfica de Usuario(IGU)

[image:15.595.119.472.284.552.2]

-

Transmisión y Recepción de datos a través del módulo zigbee

-

Control del robot (Microcontrolador y sistema de potencia).

La figura 2.1 muestra el diagrama a bloques general del proyecto.

Figura 2.1 Diagrama a bloques del sistema

2.1. IGU

Esta etapa del proyecto consiste en desarrollar e implementar, una interfaz

amigable para el usuario con la cual podrá controlar los movimientos del robot en

base al trazado de una trayectoria previamente diseñada.

2.1.1. Función IGU

(16)
[image:16.595.168.430.151.209.2]

la de simular la situación en la que se encuentre actualmente el almacén

correspondiente. (figura 2.2)

Figura 2.2 Bloques sin función

Una vez que quede bien hecho todo el diseño se indicarán todos los

caminos posibles por los que podrá transitar nuestro robot. Al hacer esto se busca

facilitar la forma de enviar los datos o instrucciones a los motores, además de que

de esta forma evitaremos que el usuario dibuje trayectorias erróneas que al ser

realizadas puedan causar algún daño al móvil o al mismo almacén.

Todas las trayectorias posibles serán dibujadas en la interfaz por medio de

bloques muy pequeños. Cada uno de estos bloques tendrá un menú donde el

usuario podrá elegir en donde quiere que el móvil se detenga cierto tiempo, gire o

que realice alguna otra actividad, esto con el fin de facilitar aún más su manejo y

que sea mucho más versátil. (figura 2.3)

Figura 2.3 Bloques para definir trayectorias

Para que el usuario pueda indicar el inicio de la trayectoria bastará con que

de un click sobre el bloque correspondiente, posteriormente pasara el mouse

sobre los bloques que dibujen correctamente el camino requerido y finalizara el

trayecto con un click nuevamente sobre el bloque final.

[image:16.595.186.410.416.525.2]
(17)
[image:17.595.83.514.90.396.2]

Figura 2.4 Diseño de interfaz gráfica de usuario

2.2. Transmisión y Recepción de datos a través del módulo zigbee

La transmisión y recepción de datos es una etapa esencial para la

realización del proyecto, ya que esta será la encargada de comunicar y de

llevar la transmisión de comandos, desde la interfaz hasta el robot.

2.2.1 Función de la transmisión y recepción de datos

Para que esta etapa se lleve a cabo, como se había mencionado

anteriormente utilizaremos módulos zigbee para la comunicación entre el

computador y el robot, esto debido a que es ideal para el proyecto, puesto que el

protocolo zigbee es ideal para domótica y para la inmótica, ya que el ancho de

banda es pequeño en consideración al bluetooth, puesto que para este tipo de

tareas no se necesita gran cantidad de información y su consumo de potencia es

mínimo.

(18)

requieren de una alimentación desde 2.8 a 3.4 V, y cuenta con 8 entradas/salidas

digitales las cuales van a ser útiles para manipular los motores del robot que se

utiliza.

Figura 2.5 Módulo Xbee S1 [1]

[image:18.595.129.471.447.567.2]

Para poder tener toda la conectividad completa, necesitaremos dos de

estos módulos, una base para conectar a la computadora a través de un cable

USB llamado Xbee Explorer USB, y otra base llamada XBee Explorer Regulated,

que se posicionara en el robot la cual está destinada a regular el voltaje correcto

para que el módulo trabaje

Figura 2.6 Accesorios xbee necesarios para la conectividad [1]

(19)
[image:19.595.136.478.254.344.2]

Teniendo conocimiento de este tipo de tramas, la cual se muestra su

estructura en la figura 2.7, no se dependerá de programas que se mencionaran

posteriormente para poder transmitir información, sin entrar al modo de comandos,

ya que con el solo tener acceso al puerto serial (para esto usaremos una clase

incorporada al programa visual studio) podemos enviar la trama directamente y el

módulo la identificara como comando realizando la instrucción que se le asigne.

Figura 2.7 Estructura del frame del modo API [2]

2.3 Descripción del robot

En dicha etapa se controlara la activación y desactivación de los motores

del robot a utilizar, esto con el propósito de dar la instrucción a la etapa de

potencia para que el robot siga la trayectoria previamente diseñada por el usuario

en la interfaz gráfica de usuario.

El robot debe de contar con dos motores a pasos los cuales deberán tener

la suficiente potencia para llevar a cabo los movimientos trazados en la IGU y que

a su vez se transmitirán por medio de los módulos zigbee.

(20)

CAPITULO III Resultados de Hardware

[image:20.595.121.479.189.376.2]

La etapa correspondiente al hardware está compuesta de distintas fases las

cuales se muestran en la figura 3.1. Dichas fases se describen en los subtemas

posteriores.

Figura 3.1. Diagrama a bloques de la etapa de hardware

3.1 Módulo receptor zigbee.

Para la recepción de los comandos enviados a partir de la interfaz gráfica

de usuario, se está haciendo uso del módulo xbee s1.

Dicho módulo se configuro para hacer uso de dos salidas digitales, las

cuales serán parte fundamenta en el control de la activación de los motores. Las

terminales correspondientes son las siguientes:

Pin 20 DIO0: Entrada o salida digital 0.

Pin 19 DIO1: Entrada o salida digital 1.

(21)
[image:21.595.203.393.112.298.2]

Figura 3.2. Diagrama de pines del módulo Xbee

Otro parámetro configurado de este módulo es el muestreo de las salidas

digitales a través del comando ATIR con un intervalo de 1 segundo, el cual nos

sirve para mostrar en IGU la intensidad de la señal.

3.2 Microcontrolador.

En esta fase se hace uso del microcontrolador MSP430 de Texas

Instruments, construido con una CPU de 16 bits, está diseñado para aplicaciones

empotradas de bajo costo y bajo consumo de energía. Este dispositivo tiene una

variedad de configuraciones con los siguientes periféricos: oscilador interno, timer

incluyendo unPWM, watchdog, USART, SPI, I2C, 10/12/14/16-bit ADCs.

Con este microcontrolador controlamos los motores a pasos, esto a través de la

programación de las secuencias lógicas necesarias para lograr el giro de los

motores.

(22)
[image:22.595.118.502.105.224.2]

Figura 3.3. Diagrama de pines del microcontrolador MSP430

En lo que se refiere a la configuración de entradas y salidas digitales del

microcontrolador la llevamos a cabo de la siguiente forma:

Puerto 1: correspondientes del pin 2 al 9 (P1.0-P1.7). Se configuraron como

salidas digitales, para hacer la conexión con los motores a pasos, distribuidos de

la siguiente manera:

P1.0-P1.3.- Destinados a las 4 terminales del motor a pasos 1.

P1.4-P1.7.- Destinados a las 4 terminales del motor a pasos 2.

Puerto 2: correspondientes a los pines 12 y 13 (P2.6, P2.7). Se configuraron

como entradas digitales, ya que estas terminales son las que interconectan al

módulo receptor xbee, y las cuales nos indican que motor se activa y por cuánto

tiempo.

Para verificar la configuración y programación de secuencias de este

microcontrolador consultar el apéndice 2.

De esta forma llevamos a cabo la fase de control de nuestro hardware, es

decir del movimiento y dirección de nuestro robot.

3.3 Interfaz de potencia.

Debido a que el microcontrolador no puede suministrar la corriente

necesaria para los devanados de los motores a pasos, para cumplir con dicha

necesidad hacemos uso del circuito integrado L293D.

(23)

Las salidas tienen un diseño que permite el manejo directo de cargas

inductivas tal es el caso de los motores a pasos, ya que incorpora internamente

los diodos de protección de contracorriente para cargas inductivas.

[image:23.595.206.380.271.481.2]

La estructura interna consiste en transistores en configuración Darlington

que conducen la terminal de salida a tierra y otro par de transistores en conexión

seudo Darlington aporta la corriente de alimentación desde

VCC2. Las salidas

tienen diodos incorporados en el interior del chip para proteger al circuito de

manejo de potencia de las contracorrientes de una carga inductiva, todo esto se

muestra en la figura 3.4.

Figura 3.4. Estructura interna del integrado L293D.

(24)
[image:24.595.143.490.100.280.2]

Figura 3.5. Diagrama de pines del integrado L293D.

3.4 Motores a pasos

Para realizar el movimiento preciso y sincronizado de las dos llantas

traseras del robot, se hace uso de dos motores pasos unipolares.

Estos motores suelen tener 5 ó 6 cables de salida dependiendo de su

conexionado interno (en nuestro caso tiene 5 cables). Estos motores utilizan un

cable común a la fuente de alimentación y posteriormente se van colocando las

otras líneas a tierra en un orden especifico para generar cada paso, si tienen 6

cables es porque cada par de bobinas tiene un común separado, si tiene 5 cables

es porque las cuatro bobinas tiene un solo común.

Los motores a pasos que se están utilizando tienen la matrícula M35SP-9

C5870-60004 mitsumi mostrado en la figura 3.6, dentro de sus características da

7.5° por paso, es decir es necesario dar 48 pasos para una vuelta completa del

motor.

[image:24.595.216.377.553.673.2]
(25)

Existen tres secuencias posibles para este tipo de motores: secuencia

normal, wave drive, medio paso. En nuestro caso llevamos a cabo la secuencia

normal.

[image:25.595.169.462.245.481.2]

Con esta secuencia el motor avanza un paso por vez y debido a que

siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y

de retención. La secuencia se puede consultar en la figura 3.7.

Figura 3.7. Secuencia normal para motor a pasos unipolar.

3.5 CIRCUITO FINAL

Este es el capítulo final de los resultados de hardware. En esta etapa se

juntan todos los resultados anteriores en un solo circuito, para que en conjunto

realicen las instrucciones enviadas por el programa.

(26)
[image:26.595.86.519.103.288.2]

.

Figura 3.8 Circuito final de Hardware

Una vez realizado el circuito y probado en una tabla de prácticas

(protoboard), se realizó el PCB del circuito. Y quedó como se muestra en la figura

3.9.

[image:26.595.160.453.387.681.2]
(27)
[image:27.595.83.459.124.415.2]

En la figura 3.10 se muestra la etapa de hardware completa

(28)

CAPITULO IV Resultados de Software

4.1 Desarrollo de la interfaz gráfica (IGU)

[image:28.595.84.505.289.501.2]

El diseño de la IGU se llevó a cabo en la paquetería de Visual Studio 2010

ultimate (C#), el modelo consiste en una serie de bloques, los cuales representan

el espacio por el cual el robot podrá desplazarse, la trayectoria el usuario la

indicara mediante el paso del cursor (mouse) sobre los pequeños bloques, los

cuales irán cambiando de color mostrando el recorrido que seguirá el robot; así

como también se mostrara un menú de opciones el cual permitirá realizar una

serie de eventos (este se mostrara dando clic derecho sobre el bloque en el cual

se encuentra localizado). La figura 4.1 muestra el diseño.

Figura 4.1 Diseño de la IGU

4.1.1 Controles

4.1.1.1 Conexión al puerto

Esta área denominada conectividad está conformada por un comboBox donde se muestra

la lista de los posibles puertos donde se puede conectar el módulo X-Bee transmisor,

además de un par de botones, uno para iniciar la conexión y otro para frenar la conexión

con el puerto seleccionado.

(29)
[image:29.595.217.379.107.185.2]

Figura 4. 2 Area de conectividad

4.1.1.2 Calidad de la señal

Esta área denominada señal cuenta con un pictureBox y el un textBox en

los cuales se mostrará la calidad de la señal mientras se está transmitiendo la

señal.

El pictureBox irá cambiando de color verde cuando la señal es muy fuerte y

cambiando progresivamente el tono hasta llegar a rojo cuando la señal se vuelve

muy débil. De igual manera en el textBox se mostrará el texto “muy fuerte” cuando

la señal es perfecta cambiando a “fuerte”, “débil” y “muy débil” mientras el móvil se

va alejando. El límite permitido para el correcto funcionamiento es hasta cuando la

señal es débil, en el momento que este pase a ser muy débil se corre el riesgo de

que la conexión se pierda.

Figura 4.3 Área de calidad de la señal

4.1.1.3 Archivo

Este control está hecho con menuItem donde se despliega un menú muy

simple que cuenta con 2 posibles acciones, resetear y salir.

[image:29.595.234.397.414.492.2]
(30)
[image:30.595.254.378.107.180.2]

Figura 4.4 Menu principal de la IGU

4.1.1.4 Bloque prohibido

Estos son bloques formados por controles pictureBox que simplemente

representan el estado geográfico de la zona por donde se moverá el robot. Estos

bloques son zonas prohibidas para el móvil, el mismo programa no te permite

elegirlas, esto con la finalidad de evitar posibles errores por parte del usuario al

trazar la trayectoria.

Figura 4.5 Bloques Prohibidos

4.1.1.5 Bloques de trayecto

Estos bloques representan todos los posibles caminos por donde puede

moverse el robot hechos con el control pictureBox, basta con dar un click izquierdo

en el primer bloque y a partir de ahí simplemente pasar el cursor por todo el

camino que quieres que realice el móvil.

[image:30.595.238.389.371.458.2]
(31)
[image:31.595.181.445.107.234.2]

Figura 4.6 Bloques de trayecto

Otra característica que tienen es que dentro de cada pictureBox que

representa el camino hay un pequeño menú que se despliega al darle un click

derecho. Este menú despliega 3 opciones las cuales son el tiempo que quieres

que se detenga el móvil. Una vez que haya cumplido el móvil el tiempo de espera,

este continuara con el camino indicado.

Figura 4.7 Opciones del click derecho

4.1.1.6 Botón de inicio

[image:31.595.218.413.374.493.2]
(32)
[image:32.595.152.444.303.687.2]

Figura 4.8 Botón de Inicio

4.2 Configuración de los módulos

Para la programación de los módulos necesaria para que estos se

identifiquen, uno como transmisor y el otro como receptor existe software llamado

el X-CTU (figura 4.1), que es capaz de probar el correcto funcionamiento de los

módulos, indicarnos su versión, y leer el contenido de los mismos.

(33)
[image:33.595.83.505.235.430.2]

La programación de los módulos se puede hacer con este programa

mediante la pestaña Terminal, o también con el programa Hyperterminal, todo esto

atreves de una serie de comandos llamados AT commands (Comandos AT), los

cuales pueden ser capaces de asignar un id a cada módulo así como configurarlos

para que interactúen entre ellos, en la figura 4.2 se muestra un ejemplo para la

lectura de parámetros.

Figura 4.10 Ejemplo de lectura de parámetros[1]

Nuestro propósito es configurar las entradas y salidas digitales de dichos

módulos para la transmisión información, el módulo cuenta con 8 IO, de las cuales

solo vamos a hacer uso de 2.

Los comandos AT necesarios para la programación de los módulos se

usaran los siguientes comandos AT

ATMY

ATDL

ATAP

ATD0,ATD1

ATIR

(34)

que ATDL será la dirección del módulo remoto con la que se identificara. El

comando ATAP se activara en ambos módulos como 1, esto para que sean

capaces de identificar tramas API.

Las configuraciones que se realizaran para el control de

entradas/salidas digitales se llevaran a cabo con los comandos ATDX

donde X es la entrada o salida digital que se quiere modificar, tendiendo 8

disponibles, modificaremos solo 2 de estas.

Para el módulo local las modificaciones que se harán será

ATMY1234 y ATDL5678 lo que indica que el módulo remoto tiene la

dirección de 5678.

Parametro

Valor

ATDL

5678

ATMY

1234

[image:34.595.74.519.290.350.2]

ATAP

1

Figura 4.11 Configuraciones del módulo local

La configuración del módulo remoto para la identificación del otro módulo,

se hará inverso a como se había hecho con el módulo local, esto quiere decir que

ahora será ATMY5678 y ATDL1234, teniendo ahora una conexión exitosa entre

los módulos. Para la configuración de las entrada/digitales se configuraran ahora

con ATD04 y ATD14 que representaran salidas digitales que serán las

encargadas de controlar las llantas del robot. ATIR es un comando que estará

sensando constantemente el estado de las entrada/salidas digitales del módulo,

indicándonos constantemente la potencia de la señal que se recibe, aquí se

propone de un segundo teniendo ATIR3E8.

Parametro

Valor

ATDL

1234

ATMY

5678

ATAP

1

ATD1

4

ATD0

4

ATIR

3E8

[image:34.595.77.515.543.645.2]
(35)

4.3 Configuración del microcontrolador

[image:35.595.128.535.225.609.2]

Para la programación del microcontrolador, se declararon tres vectores,

DATOS1, DATOS2, DATOS3, los cuales contienen las secuencia para controlar

motor a pasos 1, motor a pasos 2, y los dos motores respectivamente; dichas

secuencias van a estar activándose dependiendo de las entradas del puerto 2, tal

y como se muestra en el diagrama de flujo en la figura 4.13G.

(36)

Conclusiones.

Con la realización del proyecto Sistema de control de desplazamiento

de un robot móvil de propósito general, empleando el protocolo zigbee se llegaron

a las siguientes conclusiones.

Del estudio realizado se determinó que zigbee es una buena alternativa

debido a que no maneja gran cantidad de ancho de banda (250kbps), lo cual es

idóneo para la aplicación de nuestro proyecto.

Logrando entender el funcionamiento del módulo xbee en modo de

operación API, se pudo establecer una interconexión exitosa entre la interfaz

gráfica de usuario y el robot, permitiendo enviar comandos sin la necesidad de

usar el modo de comandos, debido a que API lo realiza automáticamente.

Con el diseño de la etapa del movimiento del robot y la comprensión

del funcionamiento e implementación de los motores a pasos se logro que el robot

cumpliera con la función de llevar a cabo el desplazamiento, que previamente se

diseña en la interfaz gráfica.

Otra etapa fundamental la cumple el Microcontrolador MSP430, en el

cual se programo las secuencias necesarias para el buen funcionamiento de los

motores a pasos, además de ayudar con el ahorro de energía

(37)

Apendice 1. Costos

Nombre

Costo

Cantidad

Total

Placa 10X10

10.50

1

10.50

Base 14 pines

2.50

1

2.50

Base 16 pines

2.50

2

5.00

Bornes 3 terminales

5.50

3

16.50

Bornes 2 terminales

5.00

2

10.00

Módulos xbee

490.00

2

980.00

Xbee explorer USB

500.00

1

500.00

Xbee explorer regulador

200.00

1

200.00

L293D

40.00

2

80.00

Microcontrolador

MSP430

40.00

1

40.00

Programador

MSP-EXP430G2

150.00

1

150.00

Motores a pasos unipolar

40.00

2

80.00

Resistencia 10K

1.00

1

1.00

Alambre

2.00

2m

4.00

Soldadura

5.00

2m

10.00

Pila 9volts

40.00

1

40.00

Pila 1.5volts

10.00

4

40.00

Cloruro Férrico

20.00

1

20.00

(38)

Apendice 2. Codigo del Microcontrolador

NAME main ; module name

PUBLIC main ; make the main label vissible

; outside this module

#include "msp430x20x2.h" ; #define controlled include file

;

ORG 0xF800 ;Inicio del programa ;

---main

RESET MOV.W #0x280, SP ; Inicialización del Stackpointer

MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Watchdog timer detenido

MOV.B &CALBC1_1MHZ,&BCSCTL1 ;DCO funcionando a la frecuencia

MOV.B &CALDCO_1MHZ,&DCOCTL ;calibrada de 1MHz

INICIO MOV.B #0x00,&P1SEL MOV.B #0xFF,&P1DIR MOV.B #0x00,&P2SEL MOV.B #0x00,&P2DIR MOV.B &P2IN,R4 ST AND.B #0xC0,R4 CMP.B #0x80,&P2IN JZ INICIO1 CMP.B #0x40,&P2IN JZ INICIO2

CMP.B #0xC0,&P2IN JZ INICIO3

CMP.B #0x00,&P2IN JZ INICIO4

;---

----; SUBRUTINAS

;---

----TIEMPO: DEC.W R4 NOP

CMP.W #0x0000, R4 JNZ TIEMPO RET

INICIO1: MOV.W #DATOS1,R5 BUCLE1: MOV.B @R5+,&P1OUT MOV.W #666d,R4

CALL #TIEMPO CMP.B #0x00,0(R5) JZ ST

JMP BUCLE1 INICIO2: MOV.W #DATOS2,R5 BUCLE2: MOV.B @R5+,&P1OUT MOV.W #666d,R4

CALL #TIEMPO CMP.B #0x00,0(R5) JZ ST

JMP BUCLE2 INICIO3: MOV.W #DATOS3,R5 BUCLE3: MOV.B @R5+,&P1OUT MOV.W #666d,R4

CALL #TIEMPO CMP.B #0x00,0(R5) JZ ST

JMP BUCLE3 INICIO4:

MOV.B #0x00,&P1OUT JMP ST

;---

----; SECUENCIAS

;---

----DATOS1 DC8 0x03,0x06,0x0C,0x09,0x00 DATOS2 DC8 0x30,0x60,0xC0,0x90,0x00 DATOS3 DC8 0x33,0x66,0xCC,0x99,0x00

;---

----; Vectores de Interrupcióh

;---

ORG 0xFFFE ; Vector de RESET del MSP430

DW RESET

(39)

Apéndice 3. Codigo de Interfaz Gráfica

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace IGUprueba1 {

public partial class Form1 : Form {

int bandera; int primero=0; int contador=0;

int [] variable = new int [112]; public Form1()

{

InitializeComponent(); foreach (string portname in SerialPort.GetPortNames()) { comboBox1.Items.Add(portname); } } private void adiosToolStripMenuItem_Click(object sender, EventArgs e) { }

private void Form1_Load(object sender, EventArgs e)

{

}

private void pictureBox1_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; } private void pictureBox1_MouseLeave_1(object sender, EventArgs e) {

if (pictureBox1.BackColor != Color.Aqua)

if ((pictureBox2.BackColor == Color.Aqua) || (ovalShape16.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox1.BackColor = Color.Aqua;

if (ovalShape16.BackColor == Color.Blue)

{

if (pictureBox90.BackColor == Color.Aqua)

{

variable[contador] = 3; }

contador++;

variable [contador]= 1; contador++;

primero = 1; }

}

private void pictureBox2_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox4_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox3_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox5_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox10_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox9_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox8_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox7_Click(object sender, EventArgs e)

{

(40)

}

private void pictureBox6_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox22_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox21_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox16_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox15_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox11_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox90_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox89_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox88_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1;

}

private void pictureBox70_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox71_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox72_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox81_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox80_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox79_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox99_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox98_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox97_Click_1(object sender, EventArgs e)

{

(41)

}

private void pictureBox39_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox38_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox37_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox36_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox35_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox34_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox33_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox32_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox31_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0;

}

private void pictureBox30_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox29_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox28_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox27_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox26_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox25_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox93_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox92_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox91_Click(object sender, EventArgs e)

{

(42)

}

private void pictureBox75_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox74_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox73_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox84_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox83_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox82_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox102_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox101_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox100_Click_1(object sender, EventArgs e)

bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox54_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox53_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox52_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox51_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox50_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox49_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox48_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox47_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

(43)

bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox45_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox44_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox43_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox42_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox41_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox40_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox96_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox95_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox94_Click_1(object sender, EventArgs e)

{

if (bandera != 1)

bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox78_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox77_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox76_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox87_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox86_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox85_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox105_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox104_Click_1(object sender, EventArgs e)

{

(44)

private void

pictureBox103_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox69_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox68_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox67_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox66_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox65_Click_1(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox64_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox63_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox62_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1)

private void pictureBox61_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox60_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox59_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox58_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox57_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox56_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void pictureBox55_Click(object sender, EventArgs e)

{

if (bandera != 1) bandera = 1; else if (bandera == 1) bandera = 0; }

private void

pictureBox2_MouseLeave(object sender, EventArgs e)

{

if (pictureBox2.BackColor != Color.Aqua)

if ((pictureBox1.BackColor == Color.Aqua) || (pictureBox4.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox2.BackColor = Color.Aqua;

(45)

} }

private void

pictureBox4_MouseLeave(object sender, EventArgs e)

{

if (pictureBox4.BackColor != Color.Aqua)

if ((pictureBox2.BackColor == Color.Aqua) || (pictureBox3.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox4.BackColor = Color.Aqua;

variable[contador] = 1; contador++; primero = 1;

} }

private void

pictureBox3_MouseLeave(object sender, EventArgs e)

{

if (pictureBox3.BackColor != Color.Aqua)

if ((pictureBox4.BackColor == Color.Aqua) || (pictureBox5.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox3.BackColor = Color.Aqua;

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox5_MouseLeave(object sender, EventArgs e)

{

if (pictureBox5.BackColor != Color.Aqua)

if ((pictureBox3.BackColor == Color.Aqua) || (ovalShape15.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox5.BackColor = Color.Aqua;

if (ovalShape15.BackColor == Color.Blue) { if(pictureBox10.BackColor==Color.Aqua) { variable[contador]=1; } if (pictureBox70.BackColor == Color.Aqua) {

variable[contador] = 2; }

contador++; }

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox10_MouseLeave(object sender, EventArgs e)

{

if (pictureBox10.BackColor != Color.Aqua)

if ((pictureBox9.BackColor == Color.Aqua) || (ovalShape15.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox10.BackColor = Color.Aqua;

if (ovalShape15.BackColor == Color.Blue)

{

if (pictureBox5.BackColor == Color.Aqua)

{

variable[contador] = 1; }

if (pictureBox70.BackColor == Color.Aqua)

{

variable[contador] = 3; }

contador++; }

variable[contador] = 1; contador++;

primero = 1;

} }

private void

pictureBox9_MouseLeave(object sender, EventArgs e)

{

if (pictureBox9.BackColor != Color.Aqua)

if ((pictureBox10.BackColor == Color.Aqua) || (pictureBox8.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox9.BackColor = Color.Aqua;

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox8_MouseLeave(object sender, EventArgs e)

{

if (pictureBox8.BackColor != Color.Aqua)

if ((pictureBox9.BackColor == Color.Aqua) || (pictureBox7.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox8.BackColor = Color.Aqua;

variable[contador] = 1; contador++;

primero = 1; }

}

private void

(46)

{

if (pictureBox7.BackColor != Color.Aqua)

if ((pictureBox8.BackColor == Color.Aqua) || (pictureBox6.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox7.BackColor = Color.Aqua;

variable[contador] = 1; contador++; primero = 1; }

}

private void

pictureBox6_MouseLeave(object sender, EventArgs e)

{

if (pictureBox6.BackColor != Color.Aqua)

if ((pictureBox7.BackColor == Color.Aqua) || (ovalShape14.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox6.BackColor = Color.Aqua;

if (ovalShape15.BackColor == Color.Blue)

{

if (pictureBox22.BackColor == Color.Aqua)

{

variable[contador] = 1; }

if (pictureBox81.BackColor == Color.Aqua)

{

variable[contador] = 2; }

contador++; }

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox22_MouseLeave(object sender, EventArgs e)

{

if (pictureBox22.BackColor != Color.Aqua)

if ((pictureBox21.BackColor == Color.Aqua) || (ovalShape14.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox22.BackColor = Color.Aqua;

if (ovalShape4.BackColor == Color.Blue)

{

if (pictureBox81.BackColor == Color.Aqua)

{

variable[contador] = 3; }

if (pictureBox6.BackColor == Color.Aqua)

{

variable[contador] = 1; }

}

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox21_MouseLeave(object sender, EventArgs e)

{

if (pictureBox21.BackColor != Color.Aqua)

if ((pictureBox22.BackColor == Color.Aqua) || (pictureBox16.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox21.BackColor = Color.Aqua;

variable[contador] = 1; contador++;

primero = 1; }

}

private void

pictureBox16_MouseLeave(object sender, EventArgs e)

{

if (pictureBox16.BackColor != Color.Aqua)

if ((pictureBox21.BackColor == Color.Aqua) || (pictureBox15.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox16.BackColor = Color.Aqua;

variable[contador] = 1; contador++; primero = 1; }

}

private void

pictureBox15_MouseLeave(object sender, EventArgs e)

{

if (pictureBox15.BackColor != Color.Aqua)

if ((pictureBox16.BackColor == Color.Aqua) || (pictureBox11.BackColor == Color.Aqua)||primero==0)

if (bandera == 1) {

pictureBox15.BackColor = Color.Aqua;

variable[contador] = 1; contador++; primero = 1; }

}

private void

pictureBox11_MouseLeave(object sender, EventArgs e)

{

if (pictureBox11.BackColor != Color.Aqua)

if ((pictureBox15.BackColor == Color.Aqua) || (ovalShape13.BackColor == Color.Blue)||primero==0)

if (bandera == 1) {

pictureBox11.BackColor = Color.Aqua;

if (ovalShape13.BackColor == Color.Blue)

{

Figure

Figura 1.2 Diferentes aplicaciones de ZigBee[3]
Figura 1.3Espectro de distintas tecnologías[3]
Figura 2.1 Diagrama a bloques del sistema
Figura 2.3 Bloques para definir trayectorias
+7

Referencias

Documento similar

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

dente: algunas decían que doña Leonor, "con muy grand rescelo e miedo que avía del rey don Pedro que nueva- mente regnaba, e de la reyna doña María, su madre del dicho rey,

No había pasado un día desde mi solemne entrada cuando, para que el recuerdo me sirviera de advertencia, alguien se encargó de decirme que sobre aquellas losas habían rodado

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de