Download - Arte de guerra - repositorio.tec.mx
ITESM-CCM
TECNOLÓGICO DE MONTERREY•
BiSL;O T.ECA
Proyectos de Ingeniería Computacional
"Arte de Guerra"
Integrantes:
Pablo Ayala Sarmiento
Yamil Ramos Tueme
Rodrigo Eddy Ochoa
Asesor:
Marco Antonio Paz Ramos
Enero-Mayo 2006
ÍNDICE
, l. INTRODUCCION ....................................................................... 3
i. Objetivos y Metas .............................................................. 3
ii. Estado del Arte .................................................................. 5
, 11. TEORIAS ................................................................................. 7
i. Hardware ........................................................................ 7
a. Componentes .......................................................... 7
b. Diagramas de bloques .............................................. 13
c. Conexiones ............................................................ 17
ii. Software ........................................................................ 21
a. Idea básica ............................................................ 21
b. Diagramas de flujo .................................................. 22
111. RESULTADOS ......................................................................... 30
i. Resultados Hardware ........................................................ 30
ii. Resultados Software ......................................................... 31
iii. Estudio de mercado y análisis financiero ................................ 32
IV. CONCLUSIONES ..................................................................... 33
V. REFERENCIAS ........................................................................ 34
VI. ANEXOS ................................................................................. 34
TECNOLOOCO DE MONTERREY.
2
I. INTRODUCCIÓN
La robótica comienza a ser un concepto de dominio público, el conocimiento sobre
sus aplicaciones y el potencial que ofrece está en aumento; el diseño de un Robot va
desde la tracción y locomoción que tendrá así como los distintos dispositivos
electrónicos que le permitirán comunicarse con el mundo para interactuar con él.
Hay diferentes tipos de robots, los de velocidad, seguidores de línea, luchadores de
sumo, de fútbol, etc. En nuestro caso hemos decidido trabajar con robots que pelean
mediante transmisores y receptores infrarrojos, detectan obstáculos y a su enemigo
mediante la ayuda de una cámara que permite la interpretación de imágenes a través de
un microprocesador; de esta forma englobamos la mayoría de las funciones de los
robots antes mencionados.
A lo largo del siguiente documento explicaremos todo el diseño y desarrollo del
proyecto antes descrito.
i. Objetivos y Metas.
Los objetivos planteados para la creación de los robots son los siguientes:
a. Diseño de hardware eficiente que permita desplazar a los robots e
interactuar con el entorno, el diseño incluye:
1. Selección correcta de los motores que proporcionen tanto potencia
como torque suficiente para mover todo el mecanismo.
2. Acoplamiento de las llantas a los motores
3. Selección indicada de los sensores que van a detectar los obstáculos en
el espacio del robot.
4. Selección de los motores que moverán a los sensores (servos).
5. Selección de los disparadores y receptores.
6. Selección de la cámara para el seguimiento de color y procesamiento
de imágenes.
TECNOLÓGICO DE MONTERREY ..
3
7. Integración de todos los elementos de Hardware mediante la creación
de un sistema mínimo.
b. Diseño de software para lograr la integración funcional de todos los
elementos antes mencionados en la parte de hardware, el diseño incluye:
1. Lógica correcta para manejar las señales del puente h que permita el
giro en ambas direcciones de los motores según la necesidad del robot
2. Lógica para el manejo de los sensores mediante interrupciones
externas, evitando choques constantes del robot.
3. Creación de dos señales PWM para los servos que maneJan los
sensores, controlándolos para mantener sólo el rango de movimiento
deseado (lateral y frontal).
4. Después de detectar al enemigo a una distancia segura de disparo
(menos de 30 cm), crear un tren de pulsos para generar el disparo a
través de los transmisores.
5. Lógica para recibir los disparos y deshabilitar al robot después de su
muerte (50 flancos de subida recibidos= muerte).
6. Con la cámara tenemos como objetivos la detección y seguimiento del
color deseado (rojo, verde) y la medición de la mediana de valores
RGB de cada imagen; al mencionar seguimiento como objetivo
tenemos que el robot sea capaz de dirigirse hacia el centro de masa del
color que tenga programado.
7. Integración de los elementos de Software.
La meta principal es la correcta integración tanto del software como
del hardware mediante la implementación de cada uno de los
objetivos. Como objetivo adicional se pretende programar lógica
difusa para permitir que el robot haga la selección del rango válido de
detección del enemigo o para diferir entre obstáculos del mismo color
que su enemigo mediante la detección de movimiento.
TECNOLÓC1CO DE MONTERREY ..
4
ii. Estado del Arte
a. Robots de Guerra
Figura I
El robot mostrado en la imagen es un
prototipo que se utiliza actualmente
por el gobierno de USA, lo que se
espera es que en un futuro puedan ser
dejados caer desde un avión y que
tengan la coordinación suficiente para
diseñar y ejecutar ataques en el campo
enemigo. Actualmente pueden recorrer terrenos evitando obstáculos, liberar
cortinas de humo, verificar la presencia de armas químicas, además de tener
un "cuello" que les permite observar en las esquinas sin ser detectados por el
enemigo.
b. Sensores de Proximidad
Dentro de la categoría de sensores ultrasónicos encontramos al Massa-Sonic
M-5000/95 que es lo último en tecnología ultrasónica ya que alcanza un rango
de 6 metros de detección sin ningún problema, además de tener incluido un
microprocesador, para tener un control altamente exacto de la distancia,
posición o nivel.
c. Servos
UIJIA: tfRW W\.U'tlB ·iriut fn:
Figura 2.
t.JW;A:~. NXCR-m Mt·i•s
Los servos mostrados arriba son de la marca F ANUC líder en el desarrollo
de motores, poseen ventajas como la detección de errores dentro de los
t. TECNOLÓGICO .. DE MONTERREY.,
5
equipos mediante un sensado de la temperatura en el motor, además de que
ahorran energía detectando estados estacionarios.
d. Cámara
Figura 3
La cámara utilizada en
este proyecto es el modelo
CMU carn2, en este caso
coincide en ser el estado
del arte en cuanto a
procesamiento de
imágenes a bajo costo se
refiere, es la segunda
generación del modelo
CMU, con las ventajas de
que tiene salidas para
controlar directamente los servos. Detecta movimiento, provee estadísticas de
los valores RGB y transmite información de las imágenes captadas hacia la
computadora para procesamiento adicional.
6
11. TEORÍAS
Como ya se ha manejado anteriormente, y por simplicidad del proyecto y su más fácil
comprensión se ha optado por dividir los conceptos en parte de Hardware y parte de
Software. La primera parte se narra todo lo que tiene que ver con la parte fisica del diseño
así como las interconexiones del dispositivo que permiten que el sistema funcione de
manera adecuada. En la segunda parte, que será referente a la parte lógica se expondrá
todo lo asociado con el desarrollo de la parte de programación.
l. Hardware
Los componentes de la parte del Hardware son muy diversos ya que las
tareas que podrá desempeñar también serán muy diversificadas, por lo que debe
estar adaptado a distintas situaciones y tener las herramientas necesarias para
resolver los problemas que se puedan presentar.
a. Componentes:
~ Sensores ultrasónicos. Para esquivar obstáculos en caso de ser necesario.
~ Microcontrolador. Parte central de procesamiento (CPU).
~ Cámara de video. Encargada de efectuar la adquisición digital de imágenes.
~ Receptores. Fototransistores con una etapa de amplificación para recibir y
corregir la señal.
~ Disparadores. LED Infrarrojo para manar el disparo.
~ Motores. Motores acoplados con llantas para desplazar al robot.
~ Circuitos Integrados. Encargados de manejar la lógica de disparo en el
hardware.
~ Puente 'H'. Encargado de polarizar los motores.
~ Fuente de Alimentación. Batería de l 2V
i. Sensores ultrasónicos
Los sensores para la detección de obstáculos son ultrasónicos
conocidos corno sensores de sonar de bajo costo SRF04
TECNOLÓGtCO DE MONTERREY.,
7
Figura4
Beam Pattem Ver gráfico 1 ¡
¡Voltaje 5v
,Corriente 30mA Typ. 50mA Max
Frecuencia ¡40KHz
[Rango Máximo !3m 1
Rango Mínimo ¡3 cm !
Sensibilidad ¡Detecta a un tubo de 3cm de diametro a más de 2 m 1
¡Disparador de entrada¡ 1 OuS Min. Pulsos TTL
:Pulso de Eco jPositive TTL level signal, width proportional to range.
Tabla I
Gráfico I
TECNOLÓOCO DE MONTERREY ..
8
En la tabla 1 se encuentran las especificaciones del sensor, en el gráfico uno
se describe el rango de alcance que tiene el sensor.
T rigger Input To Module
SRF04 Timing Diagram
Trigger Pulse 10uS Min ~
- -
Sanie Burst From Module
Echo Pulse Outpli To User Timing C1rcuit
8 Cycle Sanie Sur& Allow10mS From
Figura 5
1-------1 End of Echo To Next Trigger Pulse
Note. Echo Pulse Echo Pulse is .Ap¡:iroK. 36mS
100uS to 1BmS if no Object Detected
El diagrama de tiempos mostrado en la figura 7 ejemplifica el
funcionamiento del sensor ultrasónico, recibe un pulso de entrada que
lo habilita, lanza las señales ultrasónicas y regresa la señal de eco,
donde cada 30us igualan a 1 cm de distancia.
El precio de cada uno de los sensores es de 25 dólares y como se
necesitan 4 sensores en total, dos por cada uno de los carros,
haciendo la conversión a pesos el costo de los sensores fue de $1090.
Estos dispositivos pueden ser adquiridos en Estados Unidos en la
tienda acroname.
ii. Servo-motores
Este es el diagrama de un servomotor típico:
TECNOLÓGICO DE MONTERREY~
9
Diámero = o.~ cm
~- 1.7.S em-·j --- 2c:m----
Cable blanco o .marilo (Nsos)
V~ D.2011
/
11
'c~r(f) :--: Cable negro ( + sv) 1 (Tierra)
! ··· ··· 3.6 cm·····-;
Figura 6
4 c:m
' ' ------------
Un servomotor de este tipo consiste básicamente en un motor
eléctrico que sólo se puede mover en un ángulo aproximado de 180
grados (no dan vueltas completas como los motores normales) y la
posición deseada se le indica al servomotor por medio de pulsos
PWM que se generan en el CPU.
Los servomotores fueron adquiridos también en Estados Unidos en la
tienda acroname y el precio de cada uno de ellos es de 10.90 dólares.
El número total de servomotores es de 4, ya que se necesita uno por
cada sensor. El costo en pesos de estos dispositivos es de $475.24
iii. Reguladores
El regulador utilizado en el proyecto del robot va a ser el
LM7805 en la siguiente figura se muestra en encapsulado de
un regulador LMXX.
TECNOLÓGICO DE MONTERREY.,
10
:1 o 11:
E] ET S
Figura 7
En la figura anterior, se muestra un típico integrado regulador
de tensión donde E es la entrada de la fuente de alimentación;
T la tierra y S la salida regulada, en el caso de este proyecto,
la salida está regulada a 5 volts, para mantener voltajes TTL.
Este regulador de voltaje es fácil de encontrar en cualquier
tienda de electrónica, como puede ser Steren u Omega. Este
dispositivo tiene un costo por unidad de $5.
iv. Cámara.
La cámara se comumca de manera serial con el
microprocesador, para fines del proyecto se programa para
que realice tres funciones.
Alta Resolución. Permite tener el doble de pixeles para dar
seguimiento a cualquier detección del enemigo. Se envía el
Comando HR 1 seguido de un enter.
Rastreo de movimiento. Como su nombre lo indica recibe los
parámetros RGB del color que se quiere rastrear y regresa un
paquete con la información solicitada. Ejemplo:
TECNOLÓGtCO DE MONTERREY ..
11
Enviamos TC 100 120 75 140 200 220 enter
De respuesta obtenemos el paquete T con la información.
Medianas RGB. Regresa el valor medio RGB de la imagen.
Ejemplo:
Enviamos GM enter
Obtenemos de respuesta el paquete S con la información.
La cámara es uno de los componentes más importantes y
delicados de la plataforma, es por ello que es el componente
más costoso. Cada una de las cámaras tiene un costo de 169
dólares y también pueden ser adquiridas en la tienda
acroname. El costo total de las dos cámaras ascendió a
$3,684.20.
v. Disparadores y Receptores de disparo
Consisten en una transmisión y recepción infrarroja, el envío
se realiza a través de un led infrarrojo (IR 383) con el cátodo
(-) conectado a tierra y el ánodo ( +) conectado al
microprocesador que envía los pulsos de disparo.
El receptor es un fototransistor (PT331 C) en el que la base
recibe la señal, el colector está alimentado con 6 V y el
emisor se manda a la etapa de amplificación que consta de un
arreglo de 2 transistores y un rectificador inversor de señal
TTL para tener una mayor distancia recepción.
Tanto disparadores como receptores pueden ser adquiridos en
AG Electrónica. El precio al público de los disparadores
como de los receptores es de $3.50. El número de receptores
TECNOLÓCICO DE MONTERREY ..
12
por plataforma es de ocho y de disparadores es de cuatro. Por
lo que tenemos un total de: $84.00.
vi. Batería
La batería utilizada recargable, sellada, de acido-plomo,
maneja 12 Volts de corriente directa, 4.0 Ah y hasta 1000
ciclos de carga/descarga, cuenta con sistema de proteccion
para carga excesiva. Soporta hasta 300 grados Centigrados.
Sus dimensiones son: 90 mm de largo, 70 mm de ancho, 101
mm de alto (Con terminales 106 mm) y peso de 1, 7 kilos.
Las pilas anteriormente descritas se pueden encontrar muy
fácilmente en las tiendas de electrónica, para este caso las
compramos en Steren, donde éstas tienen un valor por unidad
de $160, lo que produce un total de $320. Además se
adquirió un cargador inteligente para las baterías que
representó un costo de $140.
vii. Motores DC.
Los motores utilizados para mover el carro fueron motores de
DC con reductor. Estos motores tienen 14cm de largo y
cuenta con un poste de cada lado. Uno de los postes del
motor tiene un reductor, lo que hace que gire a menos
revoluciones que el otro poste. Esto es con el fin de que el
carro no avance tan rápido.
El costo de cada uno de estos motores es de $90, y como se
necesitan 4 motores el total generado es de $360. Los
motores por lo general se pueden conseguir en tiendas de
electrónica.
----
TECNOLÓGtCO DE MONTERREY ..
13
viii. Puente 'h'
El puente 'h' (l298n) es un controlador para motores de
corriente directa, que permite su funcionamiento con dos
líneas de señales de control. Las entradas de control manejan
voltajes normales TTL y tienen la opción de ser habilitados y
deshabilitados según sea la conveniencia.
Este dispositivo puede ser adquirido en tiendas de electrónica
como AG Electrónica a un precio de $27 y se necesita sólo
uno por plataforma ya que cada circuito integrado cuenta con
dos instancias distintas de puente 'h', por lo que en total nos
da $54.
b. Diagrama a Bloques
Adquisición de Imagen
I Identificador de obstáculos
Etapa de Amplificación
e
~BEQ e=)
Figura 8.
--- -
TECNOLÓGICO DE MONTERREY.
Receptor de disparo
14
i. Bloque de imagen
Este bloque constará únicamente de la micro cámara
digital la cual se encargará de llevar a cabo la adquisición de
imagen en tiempo real. La conexión de la cámara se hará de
manera directa al microcontrolador pues a pesar de ser una
comunicación serial, ambos dispositivos mane3an
compatibilidad en sus voltajes de operación. La importancia
de este bloque radica en que será el encargado de buscar y dar
información necesaria para la identificación del enemigo.
ii. Bloque de identificación de Obstáculos.
El detectar y poder esquivar obstáculos es vital para el
buen desempeño del robot, sin este bloque no podria recorrer
el circuito de pelea de manera satisfactoria. Con el fin de
cumplir con este propósito se utilizaron sensores ultrasónicos,
los cuales se encargan de realizar un barrido de los
alrededores del carro. Estos sensores se conectan, manipulan
e interpretan directamente con la parte central del carro.
Las partes primordiales a revisar para evitar obstáculos
son el frente y los costados. Para llevar esto a cabo de una
manera exitosa, los sensores tienen movilidad, lo que les
permite cubrir las zonas previamente mencionadas. La
movilidad que se requiere que tengan los sensores es
proporcionada por dos servomotores, uno para cada sensor.
- - -- -
TECNOLÓCilCO DE MONTERREY~
15
Los servomotores se encuentran en la parte frontal del robot y
son la base sobre la cual se encuentran los sensores, cabe
aclarar que no existe ningún tipo de comunicación entre los
servomotores y los sensores; ya que al igual que estos
últimos, los servomotores se conectan directamente con el
CPU.
iii. Bloque de Transmisión y Recepción de disparo.
El clímax de una contienda ocurre cuando uno de los
competidores es blanco de un ataque perpetuado por su rival,
ya que finalmente este es la razón de ser de una batalla. Con
base en lo anterior es lo que da a este bloque su importancia y
trascendencia dentro de la pelea. Cada uno de los robots
contará con cuatro puntos de disparo, todos ellos se
encontrarán al frente del robot, ya que será por donde habrá
localizado a su enemigo. Estos disparadores estarán
conectados todos en paralelo para que operen bajo la misma
señal y exista una mayor posibilidad de victoria.
Los receptores se encontrarán colocados en todos los
lados del coche esto tendrá como fin darle al robot
vulnerabilidad por cualquier lado que sea atacado. Cada uno
de los lados tendrá dos receptores, dando como resultado final
un total de ocho. Todos los puntos de recepción seguirán el
mismo procedimiento para validar la señal recibida. Los
receptores son fototransistores, los cuales responden
únicamente a señales de luz infrarroja; debido a que no se
tiene la certeza de que la señal que se recibirá será del todo
limpia, ésta pasará por un proceso de amplificación y
corrección. Esto proceso se compondrá en un inicio por una -·-·-
TECNOLÓOCO DE MONTERREY.
16
etapa de amplificación del voltaje, la cual será llevada a cabo
por un arreglo de 2 transistores. Esta parte nos dará una
ganancia en voltaje, la cual servirá para mandar la señal a un
rectificador inversor, este será el encargado de darle a la señal
cuadrada voltajes TIL, necesarios para ser interpretados por
el microcontrolador. Finalmente cada una de las señales
receptoras será la entrada de una NOR de 8 entradas, así el
micro validará la muerte sin importar de donde haya venido el
disparo.
La distancia a manejar de los disparadores es de un
máximo aproximado de 35 cm. Los cuales tendrán un rango
de libertad de ± 15º con respecto al receptor. Así mismo a
una distancia mínima de 1 O cm., los disparadores tendrán la
libertad de estar a una altura de 0.5cm sobre o por debajo de
los receptores.
iv. Bloque de Movimiento
En busca de tener una mayor probabilidad de ganar,
cada uno de los robots debe tener la posibilidad de
desplazarse libremente por todo el "campo de batalla". En
función de lograr esto de la mejor manera posible, los carros
contarán con un bloque de movimiento que les dará la opción
de moverse sin mayores complicaciones. Cada uno de los
carros contará con dos motores, los cuales estarán acoplados
de manera perfecta a las llantas, esto es muy importante
debido a que si no se lleva a cabo un buen acoplamiento, el
giro del motor no se verá reflejado correctamente en el giro de
las llantas y podrá repercutir en viajar en direcciones no
deseadas.
TECNOLÓGlCO DE MONTERREY ..
17
Los motores utilizados en este punto son motores de
DC, los cuales tienen la opción de trabajar alimentados hasta
con 12V. Sin embargo para los fines requeridos estos
operarán con 9V, voltaje que a pesar de ser menor que el
máximo permitido se encuentra muy por encima de los
voltajes TTL manejados por el microcontrolador. Para poder
acoplar los motores al CPU sin problemas se utilizan los
Puentes 'H'; estos dispostivos se encargan de alimentar al
motor. Otra función muy importante para los Puentes 'H' es
que ellos reciben las señales de control de manera directa del
microcontrolador y se encargan de mandar el voltaje al motor
polarizado de la manera deseada. Podemos imaginar que los
Puentes 'H' funcionan como interfaces entre el
microcontrolador y los motores, ya que además de separar los
distintos voltajes reciben e interpretan las señales del CPU
que harán girar al motor hacia un lado o hacia otro.
vi. Bloque de Alimentación
Para que todos los bloques anteriores puedan
funcionar, se necesita de una fuente de alimentación. Para
alimentar todo el hardware el robot usa una batería recargable
de l 2V que puede proporcionar una corriente de hasta
2000mAh. Para lograr los voltajes menores buscados por
cada uno de los componentes se usan reguladores de voltaje
conectados en paralelo para dividir la corriente y evitar
perdida de energía por disipación de calor.
c. Conexiones de Hardware.
18
TECNOLÓG1CO , DE MONTERREY ..
El sistema mínimo es un dispositivo fonnado por varios circuitos
integrados como lo son el microprocesador, los reguladores, entre otros más,
a continuación se hace una breve explicación.
Como podemos ver en la figura 9 y en el esquemático anexo, las
conexiones que existen entre los circuitos lógicos como son las compuertas
nand o los inversores schmitt trigger con el microprocesador hacen que el
sistema funcione correctamente.
Comenzamos el sistema alimentándolo a 12 volts de entrada gracias a
la pila la cual nos entrega ese voltaje a 4 Ah, como la mayoría de los
circuitos requieren voltaje TIL es necesario bajar el voltaje de
entrada, 12 volts, a voltaje de 5 volts, esto se hace mediante los
tres reguladores que se encuentran montados sobre la tarjeta, dichos
dispositivos tienen 3 pmes, en uno entra el voltaje de
alimentación, el otro pm es de tierra y el último es el de salida,
dando los 5 volts. Como se pueden dar cuenta se utilizan capacitores
entre la entrada de 12 volts y tierra así como la salida de 5 volts a
tierra, ésto se hace para que no exista ruido en el sistema. Como los
reguladores bajan el voltaje de 12 volts a 5 volts disipando la
energía en calor, los 7805 se calientan demasiado, es por eso que
utilizamos tres dispositivos para que así la corriente se divida y no se
sobrecaliente demasiado el regulador.
Después de haber analizado el sistema de entrada pasamos a las
conexiones entre el microcontrolador y las compuertas lógicas. El
robot va a disparar a su oponente mediante leds infrarrojos, para
poder lograr esto lo único que se hace es conectar la salida del
puerto a la parte positiva del led y la parte negativa conectándola a
tierra, así se logra que la corriente pase por el led dando como
TECNOLÓGICO DE MONTERREY~
19
resultado un tren de disparos a su oponente, como el robot también recibe
disparos, se tiene una configuración de leds, transistores y resistencias para
la recepción. Como la señal que viaja del transmisor al receptor infrarrojo
tiende a caer se tiene que levantar ese voltaje para que el microcontrolador lo
pueda entender, ésto lo hacemos mediante el ensamblado de una
configuración de transistores. El hecho de que la salida del emisor del
transistor de la izquierda, esté conectado a la base del otro
transistor hace que la ganancia de corriente sea mucho más alta que
para un único transistor -de hecho es el producto de las ganancias de
corriente individuales de los dos transistores que forman el par- y la
corriente que soporta en el emisor-colector sea mayor, ahora como
tenemos una resistencia también conectada con tierra, hacemos que la
corriente baje y cierta parte se vaya para la base del transistor dos y otra
parte se vaya para la resistencia.
Un valor típico de ganancia de corriente puede ser de 1000. Lo que
quiere decir que la corriente que pasa por el colector hacia el
emisor, es unas mil veces mayor que la corriente que entra por la
base, en el caso de que no exista resistencia a tierra en el emisor del primer
transistor.
Los transistores se alimentan con voltaje TTL y el fotodiodo se
alimenta con 6 volts, para conseguir este valor utilizamos un divisor de
voltaje con los 12 volts.
En total son 4 disparadores y 8 receptores por lo que van a ser 8
configuraciones antes mencionadas, todas las salidas están
conectadas a un 74HC14 o inversor Schmitt trigger el cual nos da como
resultado una salida TTL la cual va a poder ser entendida por el
microprocesador, pero antes de esto para ahorrar puertos del
TECNOLÓGICO DE MONTERREY~
20
microcontrolador, cada salida de los schmitt va a una compuerta nand de
ocho entradas (74LS30) logrando utilizar una línea de puerto en lugar de
ocho
El reloj del sistema es un cristal de 16 MHz que nos permite un
desempeño a una mayor velocidad tanto para la ejecución del código como
para la transmisión serial que se realiza a 34800 baudios.
Figura 9
TECNOLÓG1CO DE MONTERREY ..
21
2. Software
La parte de Software se encontrará implementada en su totalidad dentro del
microcontrolador. Este contará con un programa el cual fue desarrollado para
cumplir específicamente con las tareas que se le puedan presentar al robot dentro de
un escenario de batalla. El archivo que puede interpretar el microcontrolador es un
archivo hexadecimal (*.hex), el cual es tan sólo una traducción de un archivo en
bajo nivel llamado ensamblador (* .asm). Para poder desarrollar estos dos archivos
es necesario utilizar el paquete computacional Code Vision, en el cual se escribirá
todo el código en lenguaje de alto nivel, en este caso C, y se migrará y ensamblará
para tener los archivos necesarios para programar el microcontrolador.
La ventaja de programar en un lenguaje de alto nivel es que es mucho más
intuitivo y fácil de interpretar ya que a diferencia de los lenguajes de bajo nivel tiene
más parecido con el lenguaje humano. Por otro lado permite el uso de métodos y
variables que dan al programador más herramientas para cumplir con los objetivos.
Es por ello que el desarrollo de los programas para los robots se llevó a cabo en este
ambiente.
i. Idea básica del Programa
La idea básica del programa se menciona a continuación.
1. Inicialización de constantes y modo de ejecución.
2. Inicialización y reconocimiento de la cámara de video.
3. Interrupción vía Serial (USART)
4. Recepción de confirmación por parte de la cámara.
5. Envío de configuración y modo de operación.
6. Adquisición y reconocimiento de la imagen.
7. Interrupción vía Serial (USART)
8. Reconocimiento e interpretación de la imagen.
9. Toma de decisión con base en la imagen.
a. Realizar Disparo
b. Moverse
TECNOLÓGICO DE MONTERREY.
22
e ln'clo )
CooUl:!ttta veloctdar(de rx y
RX
Activa inteirup,ciooes
I claliza ir\lerrvp;;ioneS,
il'xtemas
1 O. Realizar banido ultrasónico.
a. Detectar y esquivar Obstáculos.
11. Tomar decisiones con base en el resultado del banido.
a. Movimiento de Motores.
12. Aplicar lógica difusa en caso de ser necesario.
13. Detección de disparo por medio de Interrupción Externa.
a. Validación del disparo
b. Muerte.
ii. Descripción del Software por bloques.
a. Diagrama General
!nlclal!za fntertupc!mies de
contaoor
lr.icializ.a <:ámara .
MooltOfes de. tracldng ·
Dotocdó de obst.ácutoo co l~
Figura 10
NO
TECNOLÓOCO De MONTERREY.,
Sigue rodf;md<, hasta emcornrar
éMmlg<>
Da Vlfl}il{ls pQt 3 segundos
1
Ois.panul #tití .90
23
NO
Joício
Envio de seoueooia de inicios de la
cámara
Recepci6n de confirmación por
parte de la ~mara
En una vista general (figura 1 O), el programa pasa por el
proceso de inicialización de puertos, comunicación serial,
interrupciones, reloj y cámara. Después se mantiene revisando en
forma cíclica si hay obstáculos o si se encuentra al enemigo, cuando
lo encuentra y nota que está a una distancia de disparo realiza el
disparo, a la vez puede recibir disparos del enemigo, mismos que
recibe por una interrupción externa, al detectarse muerto gira durante
3 segundos para que el observador note el hecho, después de este
punto reinicia los valores y repite la secuencia mencionada.
b. Diagrama de la cámara
$ 1
l Envioo,e
resolución
R~epcloooo oonfwmación
Figura 11
l:nvio de ·mooo de tracking
R~ión de confumación
SI
cn'<'ió para medias, deRGB
1 $1
+
En la parte de hardware se mencionaron las capacidades de la
cámara utilizadas en el proyecto y los comandos que se deben enviar
para su funcionamiento. La secuencia consiste primero en detectar 24
TECNOLÓGlCO DE MONTERREY ..
que la cámara tiene comunicación con el microprocesador, mientras
no se tenga la comunicación se siguen enviando comandos de prueba
a través del microprocesador hasta que la cámara responde en la
manera indicada. El paso siguiente es el de enviar la resolución al
nivel alto para tener una detección más fina de los colores ya que
contamos con el doble de pixeles; después de un envío satisfactorio
del comando se envían los límites RGB para la detección de los
colores que se quieren seguir (amarillo o rojo) y se termina el proceso
con el envío del comando que permite obtener las medidas de las
medias RGB detectadas en la imagen, utilizadas para la lógica difusa.
c. Diagrama de tracking o monitoreo del color enemigo
l • Recepciór. de dalOSde la cár?i3ra por
interrupción serial
Checar posición en'Y
' "--··~,.,s,.,..,.,., ... , .. -···"·
Figura 12
TECNOLÓCICO DE MONTERREY ..
Girar izquierda
1
1 !
l ! ~
25
Se realiza la recepción serial del paquete T que se describe a
continuación:
T mx my xl yl x2 y2 pixeles confianza \r
La cámara está colocada en forma horizontal para tener un mayor
rango de visibilidad (356 en "y" contra 292 en "x"), de esta forma los
valores del paquete T utilizados son:
T - Identifica el paquete
my - centro de masa en "y" que permite tomar decisiones sobre la
posición del enemigo
pixeles - Brinda el centro de masa de la imagen detectada, lo que
permite tomar la decisión sobre la distancia a la que se realiza un
disparo válido (menor a 30 cm).
d. Diagrama de Servos
Inicia contador delos de m;iquír.a
El ·'-''''""''''"'
Valor in ici!l 1 ,. OCR1A•
OCR1B (Ancho del P'M'.1)
• !
~-N01 '=: 1
SI
lr~rernen!a en uno el oodlo del PINM
Guarda valor
NO
Manda sefial dePWM
Figum 13
TECNOLÓGICO ,,, De MONTERREY ..
OeófQfl)ei\10 i;
u110 el ancho del PWM
NO
26
Los servos son encargados de cambiar la posición de los
sensores que detectan obstáculos y como se mencionó en la parte de
hardware su posición se determina mediante la modulación de ancho
de pulso o PWM. Se utiliza un contador que limita el tiempo en que
se incrementa/disminuye el ancho de la señal, si el contador es
mantenido constante los servos no cambian de posición, dentro del
código lo que se hace es incrementar el ancho de pulso hasta 115 y
después disminuirlo hasta 85, permitiendo así que los servos se
muevan cíclicamente hacia el frente y a los lados.
e. Diagrama puente h
Puente 2: Camino hacia delan!e, 1ll(>l0f' actív~do
Puente 2: Camioo hacia attás, motor
activado con Polaridad inver.ida
Poonte 2: Dersnci6n
inmediaia de motor
j • ¡ ¡
NO
~
¡
NO i •
Aimenta et puente H
NO ! ¡
¡
¡ NO
Figura 14
VSS•5V VS• 12V
GNO
EnableA= t Enable B" t
•
NO
•
NO ..
Puer.te 1; Camino 1--+o hacia delante,
trolClr BC"Jvado
Puente 1: Camno hacía atrás, motor s1- activado oon µolaridad Invertida
Puente 1:
.s,-- Detención Inmediata de
molor
El movimiento de llantas se realiza mediante el control de un
puente h que recibe una señal de habilitación y 2 de control, la señal
TECNOLÓCtCO OE MONTERREY.,
27
de habilitación debe estar en alto para que funcione el puente h, el
primer bit en alto y el segundo en bajo indican un movimiento hacia
delante e invertidos un movimiento hacia atrás, cualquier
combinación en la que los dos bits de control sean iguales provoca un
paro total del motor. Para cada motor es necesario utilizar un puente
h, por lo tanto para los 2 robots se utilizan en total 4 puentes h.
f. Receptores de disparo
Figura 15.
Aumenta. tu.'ime<o de di paro$
Fí
La recepción de los disparos se realiza a través de una
interrupción externa dentro de la cual se incrementa un contador cada
vez que se recibe un pulso de entrada, el disparo consta de un tren de
pulsos, por lo tanto, cuando el contador alcanza el valor de 50 se
considera que el robot ha muerto.
TECNOLÓCi1CO DE MONTERREY.
28
g. Sensores de proximidad
Reinicia las constantes de
tiempo
SI
Figura 16.
El funcionamiento de los sensores de proximidad se divide en
dos etapas la primera está en la interrupción de 30 us donde se
reinicia el contador y se aumentan los arreglos que guardan la
distancia a la que está el obstáculo cada 30us que equivale a un cm de
distancia. Cada 30 ms se envía la señal de habilitación a los sensores
para que inicien el barrido de obstáculos.
Cambia flanco de .,.____·NO---ínterrupción ~-
• l-á-1 cambia flanco de la inlemlpción
--~e Fin )+---
TECNOLÓGICO DE MONTERREY ..
Figura 17.
29
Reversa y giro S1
Los sensores mandan su respuesta o eco a través de una
interrupción externa, por lo tanto, la segunda parte de la lógica de los
sensores consiste en detectar el flanco por el cual entra a la
interrupción, si es por flanco de subida reinicia los arreglos de
distancia ya que este flanco nos indica que se empezó el sensado, en
forma inversa cuando entra por flanco de bajada indica que se
terminó el sensado y por lo tanto se guarda la distancia a la que
detectó el obstáculo más cercano; este valor de distancia es el que se
utilizará para determinar cuando se detectó un obstáculo que pueda
significar un peligro para la integridad del robot.
g. Detección de obstáculos.
r-~-·,.,-.. ~.u.u,umm,.,,.,h. "'~. ,----~---~-·-··'·'"')
* ·-{_Fin_)-·-Figura 18.
SI
Gira Manta izquierda
Cuando el robot detecta que hay un obstáculo a una distancia
menor al límite establecido de 45 cm gira a la derecha si detectó el
obstáculo a la izquierda y viceversa.
TECNOLÓC1CO DE MONTERREY ..
30
111. RESOL T ADOS
La mejor forma de evaluar los resultados del proyecto es mediante la revisión del
estado de cada uno de los objetivos propuestos y que se describen a continuación:
a. Hardware
Motores que proporcionen tanto potencia como torque suficiente para mover
todo el mecanismo. Después de realizar las pruebas hemos descubierto que el robot se
mueve a una velocidad razonable para las funciones que debe desarrollar, no hay que
olvidar que la velocidad de los robots va disminuyendo conforme la carga en las
baterías disminuye, de esta forma concluimos que los motores utilizados son óptimos
para las funciones a realizar.
Acoplamiento de las llantas a los motores El diseño requirió de la asistencia de un
tornero para acoplar las llantas, el resultado no fue el óptimo ya que constantemente hay
que apretar las llantas a los motores, sin embargo, con la ayuda de un pegamento se
evita este problema.
Propuesta adecuada de los sensores que van a detectar los obstáculos en el
espacio del robot. Los sensores funcionan a la perfección y se acoplan correctamente a
nuestro diseño ya que no necesitamos que detecten los obstáculos a grandes distancias,
el tiempo de respuesta a los obstáculos que nos brindan es óptimo ya que permite que el
robot reaccione en el momento indicado para evitarlos.
Selección de los motores que moverán a los sensores (servos). Los servos
permiten un desplazamiento correcto de los sensores y no generan ruido al circuito, en
proyectos pasados hemos tenido que separar la alimentación del circuito principal de
los motores por esta causa. El poder controlarlos mediante PWM nos ayuda a llevarlos
a la posición indicada y a detenerlos en el momento deseado.
TECNOLÓOCO DE MONTERREY~
31
Selección de los disparadores y receptores. Los receptores y disparadores
funcionan correctamente, sin embargo, la limitación en cuanto al presupuesto nos
impidió elegir un modelo con mayor alcance, sin embargo, el modelo actual nos
permite demostrar la aplicación funcional del disparo y recepción del mismo.
Selección de la cámara para el seguimiento de color y procesamiento de
imágenes. La cámara fue la mejor inversión del proyecto ya que después de investigar
descubrimos que es uno de los modelos más avanzados en el campo de procesamiento
de imágenes a bajo costo, además de que su programación no es tan complicada como
en otros modelos. Nos permite seguir los colores contrastantes mismos con los que es
posible detectar al enemigo.
Integración de todos los elementos de Hardware mediante la creación de un
sistema mínimo. La parte más importante dentro del hardware es la de lograr que todos
los elementos interactúen entre sí para tomar una decisión o realizar una función
específica, el lograr que cada elemento funcione por separado no es suficiente para un
proyecto de ingeniería ya que los fabricantes garantizan el correcto funcionamiento, el
verdadero valor agregado del proyecto se demuestra al lograr la unión de todos los
componentes para un funcionamiento en conjunto, en nuestro caso se realizó esta
interacción y correcto funcionamiento.
b. Software
Toda la parte del software funciona conforme a los objetivos como se
demostró en páginas anteriores en los diagramas de bloques de cada función, la
integración de cada parte de la lógica del programa se realizó satisfactoriamente y
es por esto que se puede mostrar un diagrama general de cada elemento
interactuando con los demás y por lo tanto al unirlo con el hardware tenemos como
resultado el correcto funcionamiento de los robots.
32
. TECNOLÓCICO DE MONTERREY.
Como resultado final tenemos un programa desarrollado en C que puede ser
portable para implementarse con algún otro micro controlador. Así mismo es
mucho más sencillo hacer cambios o anexar trabajos futuros.
c. Estudio de mercado y análisis financiero
Antes de comenzar con más detalle la parte del análisis financiero es importante
tener en mente que los robots se encuentran en fase de desarrollo e investigación, por lo
que en general la inversión se hace mayor. El costo de cada uno de los robots es de
$4,365.15 (cuatro mil trescientos sesenta y cinco pesos 15/100 m.n.). El costo de estos
robots se atribuye en su totalidad a las piezas de hardware ya que el diseño, desarrollo
del software y el armado del mismo fue realizado por nosotros y está libre de cargo.
Al momento de realizar un modelo como prototipo o parte de un proceso de
investigación y desarrollo, se tienen ciertos errores en los gastos ya sea por materiales
no tan provechosos o que de alguna manera pudieran ahorrarse. Todo esto es parte de
un proceso de investigación y elaboración por parte de los desarrolladores. A pesar de
que el costo pueda sonar un poco excesivo, no lo es del todo si consideramos que tiene
tecnología de punta en las cámaras, las cuales son el principal gasto.
Si se deseara producir los robots en serie, el costo se bajaría de manera imortante,
ya que no será necesario utilizar materiales que sólo sirven para el desarrollo, si no más
bien utilizar materiales más baratos y adecuados para su venta. Un aspecto muy
importante a considerar, es la circuitería del mismo ya que podría ser incluida en su
mayoría en un circuito impreso, lo que reduciría notablemente el espacio. Al reducir el
espacio de los circuitos se reducirá el volumen de la carcasa, por consiguiente, el peso y
la pila podrá reducirse en tamaño y peso. Como nos podemos dar cuenta el proyecto
tiene la posibilidad de reducir mucho sus costos, siendo posible una reducción de hasta
un 35% del precio original.
TECNOLÓGICO DE MONTERREY,,
33
De esta manera logramos que tenga un precio mucho más accesible. Sin embargo
las intenciones inmediatas no es sacarlo al mercado, si no, pretendemos trabajar con el
área de desarrollo. Un posible mercado lo encontramos en las universidades o
empresas que se encargan de investigación, ya que los robots y sus encuentros, podrán
simular situaciones bélicas en las que dichos investigadores consideren posibilidades de
guerra sin estar inmersos en ella.
IV. CONCLUSIONES
Al trabajar con un proyecto tan extenso como lo es este, tuvimos la necesidad de
poner en práctica todos aquellos conocimientos que adquirimos estos años en el
transcurso de la carrera. La integración de todo lo aprendido tanto teórico como
práctico tuvo su clímax en el desarrollo de "Arte de Guerra".
Podemos decir que nos sentimos satisfechos por haber logrado la integración de
tan diversas teorías, conocimientos que fuimos adquiriendo de manera paulatina, dando
tiempo de maduración a nuestra capacidad de aprendizaje que en esta ocasión se puso a
prueba durante un largo periodo de tiempo. Un aspecto muy importante es la
organización tanto de tiempos como de trabajo, para un proyecto de la magnitud de
este, fue trascendental saber llevar esto a cabo. A pesar de ser capaces para realizar la
mayoría de las diversas tareas es importante tener a un encargado de monitorear un
bloque específico así se respetarán tanto los tiempos como el ritmo de trabajo.
Es importantísimo para nosotros aclarar que "Arte de Guerra" a pesar del nombre
no tiene fines bélicos bajo ninguna circunstancia, ya que nosotros nos oponemos
rotundamente a la guerra, pero no al desarrollo tecnológico que nace con desarrollo
militar. "Arte de Guerra" es un proyecto que busca evitar confrontaciones de manera
real, por lo que nos sentimos orgullosos de haber alcanzado casi en su totalidad los
objetivos propuestos.
En lo que respecta a la parte de los objetivos que propusimos en un inicio, al
comenzar este proyecto, podemos estar satisfechos que se cumplieron en su mayoría ya
TECNOLÓCitCO DE MONTERREY ..
34
que de alguna u otra manera logramos cubrir las necesidades que se fueron presentando
a lo largo de todo este desarrollo.
Con lo que respecta a la parte de Hardware, todos los objetivos se cumplieron de
sobremanera. Esto lo corroboramos fácilmente pues se hizo una adecuada propuesta de
Hardware por bloques, que además debían interactuar entre ellos de alguna u otra
manera. Parte importante del desarrollo de hardware es saberlo trabajar a la par por
bloques que simplifiquen la idea total. Así mismo es de suma importancia que cada
uno de los bloques haya funcionado bien para posteriormente unirlo al sistema mínimo.
La culminación del buen desarrollo de Hardware concluyó al unir todos los
bloques en un mismo sistema donde se integraron todas las partes y gracias a esto y al
buen funcionamiento del mismo se pudo concluir que el trabajo fue realizado de
manera adecuada y correcta, pues se acertó que las actividades propuestas fueron
cubiertas alcanzando el grado de funcionalidad deseado.
Por otro lado manejamos los aspectos de los objetivos enfocados más hacia el
software o la parte lógica. Para este caso los alcances no fueron tan bastos como en el
rubro anterior, sin embargo se concluyó adecuadamente con los puntos más importantes
propuestos en un inicio.
El hecho de desarrollar un software que controlara la plataforma de manera
adecuada hace que los objetivos básicos de la parte lógica se cubran. Todas las señales
de control para todo el circuito funcionan de manera adecuada aunque con ciertas
limitaciones. Una de las ciertas limitaciones que se tiene en este proyecto es que todas
las decisiones que se presentan en el programa son decisiones de Sí o No. Visto de otra
forma las decisiones que se pueden tomar son de encendido y apagado. A pesar de
cubrir todos los aspectos considerados como importantes con una lógica sencilla en
algún momento se contempló como una actividad extra plantear una lógica que diera
más versatilidad y robustez al diseño.
A pesar de no incluir en el programa ningún tipo de lógica más compleja que la
antes mencionada, se realizó una investigación sobre Lógica Difusa y de que manera se
podría implementar para nuestro diseño. Para este punto extra no tuvimos el alcance
desado debido a la falta de tiempo. Sin embargo el hecho de comenzar a investigar un
TECNOLÓGtCO DE MONTERREY ..
35
punto como el anterior, puede sentar las bases para que se siga con el proyecto en un
futuro, con los objetivos de mejorar las decisiones que se toman en todo el programa.
A pesar de que no se cubrieron en tu totalidad los objetivos extra, éstos sentan la
base para dar pie a que se siga con la investigación y perfeccionamiento de las
plataformas.
i. Perspectivas y trabajo a futuro
Para nosotros, la fase de desarrollo ha concluido, sin embargo, esto no quiere
decir que "Arte de Guerra" tenga por qué quedarse estático en el punto donde nosotros
hemos de dejarlo. Gracias a su gran versatilidad tiene la opción de ser retomado en un
futuro y seguir por el mismo camino o incluso llegar a ser usado para otras
aplicaciones, lo cual dependerá enteramente de los futuros desarrolladores.
Como se llegó a mencionar anteriormente, una de las bases más importantes que
se puede segur como un trabajo futuro es manejar todo un software de lógica difusa.
Ya se ha manejado que la lógica difusa puede ser utilizada para detección de color,
comprobación de si es un enemigo o no y casi cualquiera de las actividades que realice
la plataforma. Así mismo otra opción de la lógica difusa es que tiene también
aplicación en el control de los motores, ya que se puede buscar que estos manejen
distintas velocidades dependiendo de la situación en la cual se encuentre en un
momento determinado.
El hecho de que en este momento se mencione la lógica difusa como principal
camino de desarrollo no quiere decir que éste sea el único, si no que tan sólo es una
sugerencia de nuestra parte. Finalmente como se mencionó en varias oaciones, la
versatilidad de la plataforma permite que el camino que siga el proyecto no es único, y
más bien dependerá de las necesidades que se planteen en un futuro.
ii. Comentarios
Ante una sociedad tan cambiante como lo es en la que vivimos hoy en día, el
desarrollo de nuevas ideas, siempre será una vacante para quien quiera ocuparla. Para
TECNOLÓGICO DE MONTERREY~
36
nosotros conjuntar diversas áreas de conocimiento en ingeniería Fue el área a la cual
nosotros pretendimos quitar la bacante, pero que sabemos siempre estará ahí para todos
aquellos que quieran tener una oportunidad en ella.
Sólo queda agregar que nosotros como desarrolladores de este proyecto nos
sentimos realmente satisfechos por la gran calidad de trabajo que logramos a lo largo de
este tiempo. Los resultados que se obtuvieron son fruto de muchas horas de trabajo y
dedicación, que además repercuten en nuestra alegría ahora que finalizamos esta etapa
de nuestras vidas, lo hacemos con un excelente proyecto.
V. REFERENCIAS i. http://www.cbsnews.com/stories/2003/0 l/l 3/tech/main536254.shtml
u. http://www.engineeringtalk.com/news/vyd/vyd 108.html m. http://www.fanuc.co.jp/en/product/cnc/l 5i l 50i/hrv/hrv.html 1v. http://www.acroname.com/robotics/parts/R27 l-SRF05.html v. http://www.robot-electronics.eo.uk/htm/srfü4tech.htm
vi. http://www.creaturoides.com/anterior/srvesp.htm vii. http://www.unicrom.com/ Art historiaReguladoresLineales.asp
VI. ANEXOS a. En el cd se encuentra el póster con la descripción del proyecto, éste documento, todos
los documentos o data sheets relacionados con el proyecto, video del mismo funcionando y código fuente del mismo.
TECNOLÓCilCO DE MONTERREY ..
37
b. Esquemático
~ TECNOLÓGICO ~- DE MONTERREY.
38
/********************************************* This program was produced by the CodeWizardA VR VI .23.8a Professional Automatic Program Generator © Copyright 1998-2003 HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:[email protected]
Project: Version: Date : 28/03/2006 Author : Rodrigo Eddy, Yamil Ramos, Pablo Ayala Company: Comments:
Chip type : ATmega32 Program type : Application Clock frequency : 16.000000 MHz Memory model : Small Externa} SRAM size : O Data Stack size : 512 *********************************************/
#include <mega32.h> #include <delay.h> #include <stdio.h>
char info[SO]; void valida(); void tracking(); bit dp=O,lectura=O, cam=O,ack,sensorl=O,sensor2=0,servoA,servoB,bdisparo,bservo=O,DERECHA,IZQUIE RDA; unsigned int valorsensor[2],valorsensort[2],habilitasensor=O,contadorA=O,contadorB=O,car=O, golpedelamuerte; unsigned int hit=O; bit enemigo=O, bMUERTO=O; #define sensora PORTC.O //habilita sensor izq #define sensorb PORTC. l //habilita sensor derecha
// INTERRUPCION EXTERNA 1 PARA EL SENSOR DERECHO interrupt [EXT_INTI] void ext_intl_isr(void){ i f ( sensor 1 ==O){
TECNOLÓG1CO DE MONTERREY.
40
MCUCR-=OblOO;// cambia entrada a interrupcion por flanco de bajada valorsensort[O]=O; // inicia el conteo de la distancia que detecta el sensor sensorl =l; }
else if(sensorl=l){ MCUCR+=OblOO; // cambia entrada a interrupcion por flanco de subida sensorl=O; valorsensor[O]=valorsensort[O]; // guarda el valor de la distancia detectada por el
sensor }
}
// INTERRUPCION EXTERNA O PARA EL SENSOR IZQUIERDO, realiza las mismas funciones que la interrupcion anterior interrupt [EXT _ INTO] void ext_intO _isr(void){ if (sensor2==0){
MCUCR-=l; valorsensort[ 1 ]=O; sensor2=1; }
else if(sensor2=1){ MCUCR+=l; sensor2=0; valorsensor[ 1 ]=valorsensort[ 1]; }
}
/******************************************* * FIN SENSORES * *******************************************/
#define RXB8 1 #define TXB8 O #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define limitel 45 //45 limite deteccion de pared #define FRAMING _ ERROR (1 <<FE) #define PARITY_ERROR (l<<UPE) #define DATA_OVERRUN (l<<OVR)
TECNOLÓGICO DE MONTERREY ..
41
#define DATA_REGISTER_EMPTY (l<<UDRE) #define RX _ COMPLETE (1 <<RXC) #define CAMARA PORTA.6 // Led que se enciende cuando el micro logra comunicacion e inicializacion de la camara #define DISPARO PORTD.6 // salida a los leds infrarrojos de disparo #define MUERTO PORTA.7 // led que indica que el robot ha muerto #define phizqe PORTA.O// salida para el puente h #define phizqc PORTA.2 #define phizqd PORTA.3 #define phdere PORTA.1 #define phderc PORTA.4 #define phderd PORTA.5
// Externa} Interrupt 2 service routine interrupt [EXT _ INT2] void ext_int2_isr(void) //recibe el disparo { // Place your code here //delay ms(50); // if (PORTB.2==1){
golpedelamuerte++;// incrementa cada vez que recibe un disparo if(golpedelamuerte>5) {
// } }
} else{
}
MUERTO=!; bMUERTO=l;
MUERTO=O; bMUERTO=O;
// USART Receiver buffer #define RX BUFFER SIZE 8 - -char rx _ buffer[RX _BUFFER_ SIZE]; unsigned char rx _ wr _index,rx _rd _index,rx _ counter; // This flag is set on USART Receiver buffer overflow bit rx _buffer_ overflow;
// USART Receiver interrupt service routine #pragma savereg-interrupt [USART_RXC] void uart_rx_isr(void) { char status,data; #asm
push r26
TECNOLÓGICO oe MONTERREY.
42
push r27 push r30 push r31 in r26,sreg push r26
#endasm status=UCSRA; data=UDR; if((status & (FRAMING_ERROR I PARITY_ERROR I DATA_OVERRUN))==O)
{ rx buffer[ rx wr index ]=data;
- - -info[car]=data; // guarda en info la informacion recibida por el serial if(data==13){ //revisa si se recibio un retomo de carro que indica el fin de la instruccion
car=O; // regresa el valor del apuntador de info lectura= 1 ;//indica que ya leyo un comando completo valida(); //descifra la informacion recibida
} else{
car++; } if(++rx_wr_index = RX_BUFFER_SIZE) rx_wr_index=O; if(++rx_counter = RX_BUFFER_SIZE)
};
{ rx _ counter=O; rx _buffer_ overflow= 1; };
#asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26
#endasm }
#pragma savereg+
#ifndef DEBUG TERMINAL 10 - -// Get a character from the USART Receiver buffer #define AL TERNA TE GETCHAR - - -#pragma used+ char getchar(void) // recibe comando por el puerto serial {
TECNOLÓGICO DE MONTERREY.
43
char data; while (rx counter==O); data=rx _ buffer[ rx _rd _index ]; if (++rx_rd_index = RX_BUFFER_SIZE) rx_rd_index=O; #asm("cli") --rx _ counter; #asm("sei") retum data; } #pragma used#endif
// USART Transmitter buffer #define TX _BUFFER_ S IZE 8 // envia comando por el puerto serial char tx buffer[TX BUFFER SIZE]; - - -unsigned char tx _ wr _index,tx _rd _index,tx _ counter;
// USART Transmitter interrupt service routine #pragma savereg-interrupt [USART_TXC] void uart_tx_isr(void) { #asm
· push r26 pushr27 push r30 push r31 in r26,sreg push r26
#endasm if (tx _ counter)
{ --tx _ counter; UDR =tx _ buffer[ tx _rd _index]; if (++tx_rd_index = TX_BUFFER_SIZE) tx_rd_index=O; } ;
#asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26
#endasm } #pragma savereg+
TECNOLÓC1CO . DE MONTERREY ..
44
#ifndef DEBUG TERMINAL 10 - -// Write a character to the USART Transmitter buffer #define AL TERNA TE PUTCHAR - - -#pragma used+ void putchar( char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if(tx_counter 11 ((UCSRA & DATA_REGISTER_EMPTY)==O))
{ tx _ buffer[ tx _ wr _index ]=c; if(++tx_wr_index = TX_BUFFER_SIZE) tx_wr_index=O; ++tx _ counter; }
else UDR=c; #asm("sei") } #pragma used#endif
// Standard Input/Output functions int contador-O; // INTERRUPCION DE TIMER CADA 30us interrupt [TIMO_ OVF] void timerO _ ovf_isr(void) { TCNTO=OxCS; if((habilitasensor++)==966){ // cada 30 ms envía un trigger al sensor para que empiece la medicion
habilitasensor=O; sensora=l; sensorb=l; }
else { sensora=O; sensorb=O; }
valorsensort[O]++; //incrementa 1 cm la distancia detectada cada 30 us valorsensort[ 1 ]++; } void valida() {
while(lectura!=l); // espera a que se reciba el comando completo lectura=O; if(info[O]=':'){ //senal para saber que recibio correctamente el comando enviado
dp=l; }
else if(info[O]='C'&&info[l]=='M'&&info[2]=='U'){ //letras que indican que se inicio la comu
-
TECNOLÓGICO DE MONTERREY ..
45
}
}
//nicacion con la camara cam= 1; I /bit que indica que se detecto la camara
else if(info[O]='T'){ tracking(); // se trata de un paquete T y se llama a la funcion tracking
}
void tracking() {
int celda=O; // variable para recorrer el arreglo info int unidad=O;// recorre cada uno de los 8 elementos del arreglo T (tracking) int valor=O; // es el valor numerico de cada uno de los elementos int conta=O;// contador de los espacios en el paquete T while( conta<8) {
if(info[ celda]=' 'llinfo[ celda]=32){ con ta++; if(conta==211conta=7){
unidad=O; celda++;
while (info[celda+unidad]!=32llinfo[celda+unidad]!=' '){//recorre cada valor por separado hasta un espacio o CR
unidad++;// para saber cuantos digitos tiene el numero }
if(unidad=l){//se convierten los caracteres a un int de O a 255 valor= info[celda]-48;
} else if(unidad==2){
valor= (info[ celda ]-48)* 1 O+info[ celda+ 1 ]-48; }
else if(unidad==3) { valor = (info[ celda ]-48)* 1 OO+(info[ celda+ 1 ]-
48)* 1 O+info[ celda+2]-48; }
if(conta==2){ //posicionen la que se detecto al enemigo if( valor<=? 5&&valor> 1) { // se detecto el enemigo a la
derecha
}
DERECHA=O; IZQUIERDA=l;
else if(valor>=200){ // detecto enemigo a la izquierda DERECHA=l;
}
---
IZQUIERDA=O;
TECNOLÓCICO DE MONTERREY.
46
}
}
} else{
}
} else{
}
else{ // detecto enemigo a la derecha DERECHA=!; IZQUIERDA=l;
} } if( conta==7) {// valor de la masa detectada if(valor> 135){// el enemigo esta a una distancia de disparo
bdisparo= 1 ;//se activa el disparo if(DISPARO=l){
}
}
DISPARO=O;
} else if(DISPARO=O){
DISPARO=!; delay us(IOO);
}
else{ bdisparo=O;
}
celda++;
celda++;// continua recorriendo el arreglo
// Declare your global variables here
void main(void) {
// Declare your local variables here
// Input/Output Ports initialization // Port A initialization // FuncO=Out Func 1 =Out Func2=0ut Func3=0ut Func4=0ut Func5=0ut Func6=0ut Func7=0ut // StateO=O Statel=O State2=0 State3=0 State4=0 State5=0 State6=0 State7=0 PORTA=OxOO;
. TECNOLÓGtCO DE MONTERREY.
47
DDRA=OxFF;
// Port B initialization // FuncO=In Funcl =In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // StateO=T Statel=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=OxOO; DDRB=OxOO;
// Port C initialization // FuncO=In Funcl =In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // StateO=T Statel=T State2=T State3=T State4=T State5=T State6=T State7=T PORTC=OxOO; DDRC=Ox03;
// Port D initialization // FuncO=In Funcl=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // StateO=T Statel =T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=OxOO; DDRD=Ox70;
// Timer/Counter O initialization // Clock source: System Clock // Clock value: Timer O Stopped // Mode: Normal top=FFh // OCO output: Disconnected TCCRO=Ox02;//30 us TCNTO=OxC5; OCRO=OxOO;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC 1 A output: Discon. // OCIB output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCRlA=OxA2; // PWM TCCR1B=Ox03; TCNTIH=OxOO; TCNTl L=OxOO; OCRIAH=OxOO; OCRIAL=Ox55; OCRIBH=OxOO; OCR1BL=Ox55;
--
TECNOLÓGICO DE MONTERREY~
48
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=OxOO; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// Externa} Interrupt( s) initialization // INTO: On // INTO Mode: Falling Edge // INTl: Off // INT2: Off GICRl=OxEO; MCUCR=Ox05;//0F MCUCSR=Ox40; GIFR=OxEO;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=OxOl;
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 38400 UCSRA=OxOO; UCSRB=OxD8; //D8 UCSRC=Ox86; UBRRH=OxOO; UBRRL=Ox 19;// 19
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off
ACSR=Ox80; SFIOR=OxOO;
// Global enable interrupts
----- -
TECNOLÓGICO DE MONTERREY-
49
#asm("sei")
while(cam!=l){ // mientras no haya con la comunicacion con la camara se sigue intentando
putchar('g'); putchar('v'); putchar('\r'); delay _ ms(l 00);
}
//envia alta resolucion poniendo un 1 en el registro dp=O; while(!dp) { putchar('H'); putchar('R'); putchar(' '); putchar(' l '); putchar('\r'); delay _ ms(l 00); } //inicializar tracking con TC y RGB min y max dp=O; while(!dp ){
//amarillo putchar('T'); putchar('C'); putchar(' '); putchar('9'); //114 240 16 48 43 78 putchar('5');
// putchar('4'); putchar(' '); putchar('l '); putchar('7'); putchar('O'); putchar(' '); putchar('l '); putchar('2'); putchar('O'); putchar(' '); putchar('l '); putchar('7'); putchar('6 '); putchar(' '); putchar('l '); putchar('5');
// putchar('l ');
--
TECNOL.ÓOCO DE MONTERREY.,
50
putchar(' '); // putchar('2');
putchar('2 '); putchar('5'); putchar(13); dela y_ ms( 100);
//rojo /*
}
putchar('T'); putchar('C'); putchar(' '); putchar('l '); putchar('2'); putchar('5'); putchar(' '); putchar(' l '); putchar('9'); putchar('5'); putchar(' '); putchar('l '); putchar('5'); putchar(' '); putchar('4 '); putchar('5'); putchar(' '); putchar(' 1 '); putchar('l '); putchar(' '); putchar('2'); putchar(' 1 '); putchar(13); delay_ms(lOO); */
CAMARA=l; //termina la inicializacion de la camara bMUERTO=O; MUERTO=O; golpedelamuerte=O;
while (1){ if(bMUERTO=O){
if( contador++==550) { if(bservo==O){ //incrementa el ancho del PWM
OCR 1 B=OCRI A; if((OCRIA++)=Oxl 15)bservo=l;
TECNOLÓGICO DE MONTERREY ..
51
}
}
} if(bservo==l){ //decrementa el ancho del PWM
OCR 1 B=OCRI A; if( ( OCR 1 A--)=Ox85)bservo=O;
contador-O;
//Deteccion de obstaculos if( valorsensor[ O]<limite 1 &&valorsensor[ 1 ]<limite 1 ){ // obstaculo detectado en
sensor izquierdo
}
contador= 100;// para que no sigan avanzando los servos phizqe= 1 ;//secuencia de movimiento hacia atras y despues a la izquierda phdere=l; phizqc=O; phizqd=l; phderc=O; phderd=l; delay_ms(SOO); phizqe=l; phdere=l; phizqc=l; phizqd=O; phderc=O; phderd=l; delay _ ms(SOO);
else if(valorsensor[O]<limitel){ //obstaculo detectado en sensor izquierdo contador=IOO;// para que no sigan avanzando los servos phizqe=l; // se mueve a la derecha phdere=l; phizqc=l; phizqd=O; phderc=O; phderd=l;
}
else if(valorsensor[l]<limitel){//obstaculo detectado en sensor derecho contador= 100;// para que no sigan avanzando los servos
phizqe=l;//se mueve a la izquierda phdere=l; phizqc=O; phizqd=l;
TECNOLÓOCO DE MONTERREY ..
52
} else{
}
phderc=l; phderd=O;
if(bdisparo==O) {
}
phizqe= 1 ;// sigue avanzando phdere=l; phizqc=l; phizqd=O; phderc=l; phderd=O;
//deteccion de enemigo if(DERECHA&&!IZQUIERDA){//DETECTO AL ENEMIGO A LA IZQ
// contador=lOO; //detiene los servos y gira a la izquierda phizqe=l; phdere=l; phizqc=O; phizqd=l; phderc=l; phderd=O;
} else if(!DERECHA&&IZQUIERDA){//DETECTO AL ENEMIGO A LA DER
// contador= 100;// detiene los servos y gira a la derecha phizqe=l;
} else{
}
phdere=l; phizqc=l; phizqd=O; phderc=O; phderd=l;
if(bdisparo==O) {
}
phizqe=l ;//sigue avanzando phdere=l; phizqc=l; phizqd=O; phderc=l; phderd=O;
if(bdisparo==l){//detener al robot
TECNOLÓCtCO DE MONTERREY.
53
} else{
} }; }
}
contador= 100; //para que no sigan avanzando los servos phizqe=l; phdere=l; phizqc=l; phizqd=l; phderc=l; phderd=I;
phizqe=l;//gira circulos phdere=l; phizqc=l; phizqd=O; phderc=O; phderd=l; delay _ ms(8000); bMUERTO=O; MUERTO=O; golpedelamuerte=O;
TECNOLÓGICO , DE MONTERREY.
54