Beruflich Dokumente
Kultur Dokumente
\
|
(3.3)
Por lo que por cada centmetro que avance la llanta tendremos 627 pulsos aproximadamente, lo
que sirve de unidad en el esquema de control.
3.8.1 Algoritmo de control de posicin.
En la figura 3.13 se muestra el diagrama de bloques del sistema de de control de posicin para
las dos ruedas del robot.
Figura 3.13 Diagrama de bloques del sistema de posicin
Se puede apreciar que la parte dentro de la lnea punteada es la que el microcontrolador va a
realizar y que se trata de la parte digital del control. El bloque Gp(s) es nuestra planta que incluye la
etapa de aislamiento, la etapa de potencia, el motor, la reduccin por los engranes y la cadena.
41
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
3.8.2 Algoritmo de control de posicin.
El algoritmo de control de posicin propuesto se basa en la idea de Takashi Kenjo de su libro
Power Electronics [Kenjo], en done se propone una tabla constante que relaciona la velocidad con
el error de posicin.
La posicin y velocidad de la flecha del rotor estn relacionadas por la siguiente ecuacin:
=
dt
(3.4)
Esto implica que para controlar la posicin de requiere controlar la velocidad y la relacin entre
el par Tm proporcionado por el motor y la velocidad del rotor esta dada por la ecuacin dinmica
Newtoniana:
Tm = D +
dt
d
) J + (J
l m
(3.5)
Donde: J
m
= momento de inercia del motor.
J
l
= momento de inercia de la carga.
D = coeficiente de amortiguamiento viscoso.
Para la accin de control de la posicin se plantean tres etapas:
1) Aceleracin: El motor es aclarado por un par constante Tm generado por la mxima
corriente permisible. En este caso la solucin a la ecuacin de la ecuacin (3.5) est
dada por:
(
|
|
.
|
\
|
l m
J + J
Dt
D
Tm
= exp 1 (3.6)
La relacin de con respecto al tiempo se muestra en la figura 3.14.
2) Velocidad constante: Si la derivada de la ecuacin(3.5) es cero, la solucin a la ecuacin
es:
=
CS
=
Tm
D
(3.7)
42
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
Figura 3.14 Curva de aceleracin.
Donde:
CS
es la velocidad que se mantiene constante, en la fase anterior
3) Desaceleracin El motor es desacelerado aplicando una corriente negativa que
proporciona un par negativo. Si se logra el termino D
C
S
Figura 3.15 Perfil de velocidad
Aceleracin: el contador de error (error de posicin) ordena un valor mximo de velocidad
hacia el cual el rotor es acelerado de acuerdo a la dinmica del motor y el controlador de velocidad
empleado.
Velocidad constante: Cuando el rotor alcanza la velocidad mxima deseada se mantiene
constante esta velocidad, por medio del controlador de velocidad.
Desaceleracin: Para frenar al rotor con aceleracin constante, el comando se debe dar de
acuerdo con la siguiente ecuacin:
( ) 2q =
C
(3.10)
Donde: q = error de posicin (la diferencia al valor deseado de posicin dado en pulsos del
encoder montado en la flecha del motor).
= aceleracin negativa o razn de desaceleracin en pulsos/seg
2
.
Ajuste: Idealmente el motor se debera para en la posicin deseada y no debera viajar ms all
de esa posicin. En la prctica, sin embargo, existe la posibilidad de que el rotor vaya ms all de la
posicin deseada, debido a que los comandos de velocidad no son dados en forma de funcin lineal
ideal, sino en forma discontinua debido a la cuantizacin digital. El sistema de control se disea
para que el rotor eventual se detenga en el objetivo despus de varios ciclos de oscilacin alrededor
de la referencia.
44
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
Paro: Se alcanza cuando el rotor se detiene en la posicin deseada.
Para lograr el perfil de velocidad deseado, mostrado en la figura 3.15, el microcontrolador
genera los comandos de la velocidad que dependen del error de posicin, de acuerdo a ecuacin
(3.10). As estos comandos se calculan de acuerdo a las reglas, las cuales se muestran grficamente
en la figura 3.16.
i) si q = q < q <
ref f max
2 0 (3.11)
ii) si q = < q < q
ref f max
2 0 (3.12)
iii) si
max max
= q < q < q
ref f
(3.13)
iv) si
max max
= q < q < q
ref f
(3.14)
Donde:
q
f
= valor del error a partir del cual de comienza la regin de frenado( este valor
define indirectamente el tiempo de frenado).
ref
= valor deseado de velocidad.
max
= valor digital que representa la desaceleracin mxima utilizada.
q
max
= error de posicin mximo.
ref
max
-q
max
-q
f
+q
f +q
max
-
max
Figura 3.16 Relacin de error de posicin y los comandos de velocidad.
45
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
3.8.3 Algoritmo de control de velocidad.
Para el control de velocidad se implement un control proporcional Integral (PI) digital, El lazo
de control se muestra en la figura 3.17 en su forma analgica.
U(s)
ref
E(s)
Figura 3.17 Diagrama de control de velocidad
La accin de control PI tiene su ecuacin en el dominio del tiempo se muestra en la ecuacin
3.15.
}
+ =
t
dt t e
Ki
Kp
t e Kp t U
0
) ( ) ( * ) ( (3.15)
Donde:
Kp = ganancia proporcional analgica.
Ki = ganancia integral analgica.
ref
= velocidad deseada.
La accin de control digital para el controlador PI que se propone se puede implementar
fcilmente mediante una aproximacin de la ecuacin diferencial para llegar a una ecuacin de
diferencias.
El trmino integral de la ecuacin diferencial se puede aproximar a la suma de las reas de las
muestras considerando que entre muestra y muestra no existe un cambio significativo en la seal
medida, La figura 3.18 muestra la grafica de cmo de hace el calculo de la integral del error esta
forma de hacer la integral tiene el problema de al realizar el calculo de la integral por un periodo
grande de tiempo puede darse el caso de que el valor de la integral sea demasiado grande y por lo
46
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
tanto a tiempos de estabilizacin mucho muy grandes, por lo que es necesario limitar el crecimiento
de la integral, en ste caso con el control de la velocidad fijamos el valor mximo de la integral igual
al mximo valor que puede recibir nuestra accin de control.
}
) 1 (
0
) (
k T
dt t e
T kT e dt t e
kT
k T
* ) ( ) (
) 1 (
}
~
Figura 3.18 Calculo de la integral.
El trmino proporcional se calcula simplemente multiplicando cada periodo de muestreo el
valor del error por una constante Kp. El la accin de control se calcula solo sumando cada trmino
como se muestra en la ecuacin 3.16
(3.16) ( ) T iT e kT e Kp kT U
k
i
* ) ( ) ( *
0
=
+ =
3.8.4 Ganancias proporcional e integral.
Existen varios mtodos para la eleccin de las ganancias ptimas para el sistema como las
reglas de sintonizacin de Ziegler-Nicols. Para la eleccin de las ganancias del controlador PI se
eligi hacerlo de manera manual viendo los efectos de cambiar las ganancias en el programa del
microcontrolador, en la Tabla 3.1 se muestra como varan las caractersticas de la respuesta cuando
se hacen variar las ganancias de control proporcional e integral, de acuerdo a estos efectos se decidi
dejar las ganancias como Ki=10 y Kp =30 ya que con estas se obtuvieron buenos resultados.
47
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
Tabla 3.1 Efectos del incremento de las variables de control.
Parmetro Tiempo de subida Sobre impulso Tiempo de establecimiento
Error de estado
estable
Kp
Se reduce Se incrementa Cambia poco Se reduce
Ki
Se reduce Se incrementa Se incrementa Se elimina
3.8 Mdulo de Movimiento del sensor de distancia SRF08.
Este mdulo se compone por un circuito ULN2803 que es un arreglo de 8 transistores
darlington, para suministrar la corriente necesaria para energizar las bobinas de un motor de pasos.
El motor de pasos tiene acoplado un sensor ultrasnico que mide la distancia al frente del robot
como se muestra en la figura 3.19.
Salidas Entradas
Mdulo
Sensor
SRF08
Figura 3.19 Mdulo de movimiento del sensor SRF08.
El circuito ULN2803 recibe una secuencia de pasos para el movimiento del motor de pasos, esta
secuencia es igual a la que se presenta en la tabla 2.1. Este modulo ayuda a orientar el sensor en
diferentes direcciones para obtener la medicin de todo el frente del modulo. Tambin ayuda cuando
se encuentra en un recorrido y se detecta un objeto que interrumpe el trayecto, esto se hace
moviendo el sensor a la izquierda y derecha y detectando si hay un objeto por la derecha o la
izquierda del robot as se puede evitar el objeto.
48
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
3.9 Mdulo secuencial de movimiento del sensor de distancia
SRF02.
El sensor SRF02 sirve para medir la distancia desde el sensor hacia el suelo, y con esto se puede
saber si hay algn desnivel. Pero el problema de tener un solo sensor es que no puede cubrir todo el
frente del robot por esto el sensor esta montado en una varilla roscada que al girar hace mover de
manera lineal el sensor izquierda a derecha y viceversa. El movimiento se genera por un modulo
secuencial que esta compuesto por dos compuertas NOR conectadas al circuito de potencia L293
como se muestra en la figura 3.20.
Figura 3.20 Circuito de movimiento secuencial.
El circuito al conectar el pin marcado como izquierda a cero volts el giro del motor hace el
sensor se mueva a la izquierda. Si se hace lo mismo con el pin marcado como derecha el motor hace
girar la varilla hacia la derecha. Para activar los pines derecha e izquierda se tienen dos interruptores
que los conectan a tierra. Cada interruptor esta en un extremo de la varilla y cuando el sensor llega a
49
Captulo 3 Descripcin de los Mdulos en el Robot Mvil
50
uno de los extremos presiona el interruptor que hace girar el motor en sentido opuesto hasta llegar al
otro extremo. En la figura 3.21 se muestra como est montado el sensor en la varilla y se aprecia del
lado izquierdo el motor que le da movimiento.
Figura 3.21 Sensor SRF02 montado en el Robot.
3.10 Conclusiones.
En este captulo se mostraron todos mdulos y la funcin que tiene cada uno de ellos por que al
dividir las tareas se hace mas sencillo modificar el funcionamiento de cada uno de los mdulos y el
mejoramiento del mismo con modificaciones por mdulos y no tener que cambiar todo el sistema.
Los mdulos donde se tiene un microcontrolador como parte principal hacen ms sencilla la
tarea de modificar y hacer ms eficiente su funcionamiento, ya que el programa que tienen se puede
modificar a conveniencia.
Se tomaron las precauciones necesarias para que se pudieran aislar los mdulos de control
conectados a los mdulos de potencia. Se colocaron reguladores de voltaje en todos los mdulos
para evitar variaciones de voltaje y sobrecalentamiento de los reguladores.
Las funciones de los mdulos solucionan cada uno alguno de los problemas que se tienen y en
conjunto hacen un sistema
Captulo 4 Software de Control del robot Mvil
Captulo 4
Software de Control del Robot Mvil
El software es una de las partes ms importantes que conforman nuestro sistema ya que sin un
programa que dirija las acciones el sistema no realiza nada.
En ste capitulo se describen los programas que se disearon para cada uno de los mdulos que
estn compuestos por un microcontrolador.
4.1 Programa para el microcontrolador A.
En el programa del microcontrolador A interpretan las seales recibidas y dependiendo que
comando que se recibe realiza una accin. Hay dos tipos de comandos que puede reconocer el
microcontrolador:
Comandos de Velocidad.
Comandos de posicin.
Comando de trayecto.
Los comandos de velocidad indican que se enviar la referencia de la velocidad a seguir al
microcontrolador B que se encarga de enviar los comandos a los mdulos de movimiento, el
microcontrolador A despus de enviar el comando de velocidad espera y realiza mediciones de los
sensores hasta que finaliza la ejecucin del comando.
Los comandos de posicin que son recibidos, indicando la distancia de avance o retroceso, la
cantidad de giro que se dar, despus de identificar los comandos se enva el comando al
microcontrolador B para que organice y enve los comandos a los mdulos de movimiento. El
microcontrolador A despus de enviar los comandos de posicin se espera y realiza mediciones con
los sensores hasta que finalice la accin.
51
Captulo 4 Software de Control del robot Mvil
El comando de trayecto cuando se recibe indica que se va a realizar un trayecto definido en la
memoria del microcontrolador A. Este trayecto se realiza mediante una repetida serie de comandos
de velocidad y posicin que en conjunto definen un trayecto trazado donde el robot despus de ser
puesto en la posicin de inicio sigue hasta finalizar con los comandos de la matriz
As tambin el microcontrolador A se encarga de realizar las mediciones de los sensores de
distancia y del sensor de comps peridicamente para evitar choques mientras el robot se mueve y
controlar la cantidad de giro que se da cuando el robot esta girando. El diagrama de flujo se muestra
en la figura 4.1.
Figura 4.1 Diagrama de Flujo del microcontrolador A.
52
Captulo 4 Software de Control del robot Mvil
El diagrama describe las acciones que se toman, en primer lugar el programa conduce a la
inicializacin de variables globales y configuracin de puertos despus se inicia la recepcin de
comandos del puerto serial. Al recibir el comando se identifica si ste es un comando conocido y por
lo tanto valido para continuar la ejecucin del programa, si es as se procede a identificar que tipo de
comando es. En el programa se diferencian tres comandos bsicos que son que son los de posicin,
de velocidad y trayecto, esto es:
Cuando se recibe un comando de velocidad se pueden tener varios movimientos como, avance,
retroceso giro a la derecha o giro a la izquierda. Tambin se reciben los comandos para el
movimiento de la cmara. Los movimientos del robot son realizados con una velocidad constante
indicada en los mdulos de movimiento del robot y que es constante. Cuando se ha identificado el
comando recibido se realiza una accin marcada segn la tabla 4.1.
Tabla 4.1 Comandos recibidos en el microcontrolador A
Instruccin recibida Accin del microcontrolador A
00000000 Detiene cualquier accin.
10110100 Enva el comando de avance.
10110000 Enva el comando de retroceso.
01111000 Enva el comando de giro a la izquierda.
01110000 Enva el comando de giro a la derecha.
11100001 Giro a la derecha de la cmara.
11100000 Giro a la izquierda de la cmara.
11010010 Giro hacia arriba de la cmara.
11010000 Giro hacia debajo de la cmara.
Los comandos de posicin indica la distancia de referencia que se ha de avanzar por las dos
ruedas hacia delante o hacia atrs.
El comando de trayecto indica que se har un recorrido en una secuencia definida en una matriz
de almacenamiento que tiene por el momento un espacio de 30 comandos consecutivos donde los
comandos describen la distancia que se debe recorrer y la orientacin en la que se debe hacer, cada
que se completa un comando se avanza al siguiente comando en la matriz, si en la matriz el
siguiente comando tiene un valor de cero de avance y cero de posicin se termina el ciclo del
trayecto. Durante el trayecto se envan comandos al microcontrolador B de dos tipos, que son los de
avance o retroceso del robot y de giro a la derecha o izquierda con velocidad constante. Los
comandos de posicin se envan en dos partes, la primera que enva un nmero identificador del
53
Captulo 4 Software de Control del robot Mvil
comando que se realizara en el microcontrolador B y la segunda parte, que es la distancia que tiene
que recorrer el robot. Las instrucciones enviadas como comandos se muestran en la tabla 4.2
Tabla 4.2 Comandos de posicin enviados al microcontrolador B
Instruccin enviada Accin del microcontrolador B
00001111 Enva el comando de avance
00001110 Enva el comando de retroceso.
Los comandos de giro del robot durante la secuencia del trayecto, se envan de igual manera que
los comandos de velocidad constante.
En la matriz del trayecto se compone por treinta filas de dos columnas, donde cada fila tiene en
la primera columna una orientacin y en la segunda columna una distancia. En el la secuencia del
trayecto se seleccionan fila por fila para realizar dos acciones, primero se enva el comando de giro
al robot donde se mide la orientacin con el sensor de comps, hasta llegar a la orientacin en la que
se debe recorrer la distancia, se detiene el giro del robot, despus se da el comando de posicin de
avance o retroceso y se enva la distancia del recorrido. Cuando se llega a la posicin final se
selecciona la siguiente fila para realizar la misma accin hasta llegar al final del recorrido.
Cuando se realiza el trayecto si el sensor ultrasnico un obstculo se activa una secuencia para
evitar el obstculo y continuar con el recorrido de acuerdo con el diagrama de flujo que se muestra
en la figura 4.2.
El llenado de la matriz de trayecto se realiza mediante la comunicacin serial, se recibe el
comando de llenado y se enva la seal de comienzo de la recepcin de comandos para el llenado de
la matriz. Para realizar la transmisin de los datos de la matriz del trayecto se dise un programa en
LabVIEW, en el que se realiza el llenado de la matriz y cuando se que tengan los datos en el panel
frontal se inicia el programa. En la Figura 4.2 se muestra el panel frontal donde se hace el llenado de
la matriz.
En el programa de LabVIEW se realiza una secuencia de acciones empezando por la
configuracin del puerto serial que es el que esta conectado con el control remoto que realiza las
transmisiones a una velocidad de 9600baudios, con datos de 8 bits, con un bit de parada, sin paridad
y sin control de flujo de los datos. Despus de la configuracin se espera a que se presione botn de
Enviar Datos, se enva el comando de trayecto y el comando de llenado de la matriz, despus se
54
Captulo 4 Software de Control del robot Mvil
espera a recibir la confirmacin del robot para iniciar el llenado de la matriz y se inicia el envo de
los datos para conformar la matriz del trayecto esto se hace de forma secuencial enviando primero el
comando de orientacin y despus el comando de distancia que se ha de recorrer hasta que se
completan los 30 elementos de las dos columnas de la matriz. En la siguiente figura se muestra el
diagrama de LabVIEW para el llenado de la matriz.
Figura 4.2 Diagrama de flujo para evitar obstculos.
55
Captulo 4 Software de Control del robot Mvil
Figura 4.3 Panel frontal del programa de llenado
4.2 Programa del control remoto.
El control remoto es un dispositivo que enva y recibe seales entre el robot, el control remoto y
la computadora. El diagrama de flujo del programa dentro del circuito PIC18F2431 se presenta en la
figura 4.4.
En el diagrama de flujo se muestran dos modos de uso que se seleccionan mediante los botones
debajo de las palancas de mando, para accionarlos se debe presionar las palancas hacia el circuito
hasta or un pequeo chasquido, con el botn de la palanca derecha se selecciona el modo de
movimientos controlados por el control remoto. Con el botn de la palanca izquierda se selecciona
el modo de trayecto, si se quiere seleccionar el llenado de la matriz del trayecto tiene que presionar
la el botn de la palanca derecha mientras se tiene el botn de la palanca izquierda presionado. Si se
quiere iniciar el recorrido solo se debe presionar dos veces el botn de la palanca izquierda.
Mientras el robot realiza la un trayecto si la computadora esta enviando los datos de la matriz
del trayecto el control remoto no responde a ninguna instruccin hasta que se finalicen las dos
instrucciones. Al finalizar las instrucciones el robot enva al control la seal de finalizacin.
. Cuando se recibe el fin de trayecto se vuelve a esperar un comando de los botones del control.
56
Captulo 4 Software de Control del robot Mvil
Figura 4.4 Diagrama de flujo del control remoto.
4.3 Programa microcontrolador B.
El microcontrolador B es el encargado de enviar los comandos al modulo de movimiento y
tambin de enviar la secuencia de pasos al modulo para mover el sensor ultrasnico dirigido al
frente del robot. Los comandos que se pueden recibir pueden ser de tres tipos:
Comandos de velocidad.
Comandos de posicin.
57
Captulo 4 Software de Control del robot Mvil
Comando de movimiento del sensor ultrasnico.
Estos comandos se reciben por medio del puerto B del microcontrolador que corresponde a
ocho bits, para identificar de qu comando se trata, se tienen los comandos en una lista y al recibir
un comando se compara con los de la lista, si se trata de un comando conocido se realiza una accin
de acuerdo al comando.
Los comandos velocidad se enfocan a mantener una velocidad constante como referencia para
la accin de control que se enva a los mdulos de movimiento, los comandos pueden ser de cinco
maneras:
o Movimiento hacia delante con velocidad constante.
o Movimiento hacia atrs con velocidad constante.
o Giro a la derecha con velocidad constante.
o Giro a la izquierda con velocidad constante.
o Parada de emergencia.
Cada uno de estos comandos tiene diferentes caractersticas para el envo de las instrucciones de
movimiento a los mdulos de la rueda derecha e izquierda Los comandos de velocidad recibidos en
el microcontrolador se muestra en la tabla 4.3.
Tabla 4.3 Comandos de velocidad recibidos en el microcontrolador B
Instruccin recibida Accin del microcontrolador B
00000000 Detiene cualquier accin.
11110001 Enva los comandos de avance.
11110010 Enva los comandos de retroceso.
11110011 Enva los comandos de giro a la izquierda.
11110100 Enva los comandos de giro a la derecha
Para los movimientos hacia delante o hacia atrs se enva el comando para que se muevan las
dos ruedas para que generen un movimiento con una velocidad constante, las dos ruedas giran en el
mismo sentido.
Para los movimientos de giro a la izquierda o derecha se envan comandos de movimiento a las
dos ruedas pero con la diferencia de que se indican sentidos de giro opuestos si la rueda derecha gira
a la hacia delante, la rueda izquierda hacia atrs, el robot gira a la izquierda y viceversa.
58
Captulo 4 Software de Control del robot Mvil
La parada de emergencia se utiliza para detener cualquier movimiento que se tenga de las
ruedas, esto es en caso de que alguno de los sensores ultrasnicos detecte algn obstculo.
Los comandos de posicin indican cuanto tiene que moverse el robot esto se hace al enviar un
comando a cada uno de los mdulos de movimiento indicando la posicin de referencia y con esto
generar movimiento con una distancia de recorrido fija que puede ser para avanzar o retroceder
solamente ya que para dar giros exactos se tiene en los comandos de velocidad una funcin que
realiza esta accin y con la ayuda del sensor de comps es posible tener una buena precisin en los
giros. Los comandos de posicin son los mostrados en la tabla 4.2.
El diagrama de flujo del microcontrolador B de la Figura 4.4 muestra en primer lugar el inicio
del programa seguido de la inicializacin de variables globales y puertos, despus lee el puerto B y
se revisa si se tiene un comando vlido, si es as se verifica si es un comando de velocidad o un
comando de posicin.
Cuando se identifica un comando de velocidad se verifica que sea el comando se a conocido,
cuando es conocido se selecciona de la lista de comandos de velocidad y se enva la referencia de
velocidad a los mdulos de movimiento.
En caso de que se trate de un comando de posicin se enva la referencia de posicin a los
mdulos de movimiento para iniciar el la accin.
En caso de se reciba de un comando para mover el motor de pasos del sensor ultrasnico
SRF08, dependiendo de la direccin que se quiere mover y la cantidad de pasos que se necesiten se
inicia en envo de la secuencia de pasos, al terminar la secuencia enva por el pin RC0 el aviso de
que finaliz el movimiento. Los comandos recibidos se muestran en la tabla 4.5.
Tabla 4.4 Comandos para el movimiento del motor del sensor SRF08
Instruccin enviada Accin del microcontrolador B
0111XXXX Enva secuencia para tener un giro a la derecha.
1111XXXX Enva secuencia para tener un giro a la Izquierda.
Donde: XXXX es el numero de pasos en binario desde 0 a 15.
Despus de finalizar todos los comandos se regresa el programa a leer de nuevo el puerto B para
verificar si se ha mandado un comando nuevo.
59
Captulo 4 Software de Control del robot Mvil
Figura 4.5 Diagrama de flujo del microcontrolador B
4.4 Programa de los mdulos de movimiento de la cmara.
Cada mdulo de movimiento de la cmara est compuesto por un microcontrolador PIC16F84
que contiene un programa que consiste en una secuencia de pasos (tabla 2.1) que genera un giro en
el rotor del motor de pasos. Cuando se quiere tener un giro en sentido opuesto lo nico que hay que
hacer es enviar la secuencia en forma inversa. En el programa del microcontrolador se tiene la
secuencia y dependiendo del estado de los pines RB0, RB1 y RB2 (figura 2.3), se enva la secuencia
en forma normal o invertida. En el diagrama de flujo de la Figura 4.5 muestra el diagrama de flujo
del programa.
60
Captulo 4 Software de Control del robot Mvil
Figura 4.5 Diagrama de flujo de los mdulos de movimiento de la cmara.
4.5 Programa de los mdulos de movimiento.
En el sistema se cuenta con dos mdulos de movimiento, cada uno para cada rueda del robot.
Los mdulos son idnticos en su construccin y tienen un el mismo programa en el
microcontrolador.
La funcin fundamental es controlar la velocidad de los motores que dan movimiento al robot.
Para ello se tienen un sensor en cada motor, el sensor da dos trenes de pulsos desfasados.
Dependiendo de la direccin y la velocidad que es medida con el sensor ptico acoplado en la flecha
del motor las seales de los canales (QEA y QEB) como se muestra en la Figura 4.6 se aumenta una
variable (POSCNT) o la reduce si va en sentido contrario.
Esto se aprovecha para que el microcontrolador se realice las funciones de medicin de
velocidad y posicin. La medicin de la velocidad se realiza midiendo cada milisegundo, la cuenta
acumulada en el contador POSCNT del microcontrolador y teniendo la diferencia entre el valor
61
Captulo 4 Software de Control del robot Mvil
actual y el valor anterior del contador se puede saber la diferencia entre las mediciones y as
obtenemos la cantidad de pulsos por milisegundo.
Figura 4.6 Diagrama de pulsos del sensor ptico de posicin.
El programa en el PIC18F4431 Recibe los comandos por el puerto serial y puede recibir dos
tipos de instrucciones donde se recibe la referencia de posicin o la referencia de velocidad. En la
figura 4.7 se muestra el diagrama de flujo del programa.
Figura 4.7 Diagrama de flujo del modulo de movimiento.
62
Captulo 4 Software de Control del robot Mvil
63
Cuando recibe un comando de velocidad se fija la referencia de velocidad y la direccin de giro
del motor, la referencia de velocidad permanece as hasta que se reciba un nuevo comando.
Cuando se recibe un comando de posicin se fija la referencia de posicin he inicia la rutina
para llegar a la posicin de referencia. Para llegar a la referencia de posicin se utiliza la rutina de
control de posicin de acuerdo a la seccin 3.8.2. Mientras se est cambiando la referencia de
posicin para realizar la accin de control, tambin se verifica si no se activa el puerto serial, ya que
cuando se detecta un objeto cerca es necesario detener el robot. Cuando se activa el puerto serial el
robot se detiene y el modulo del motor derecho enva el error de posicin al microcontrolador B para
verificar si se tiene espacio para evitar el obstculo.
4.6 Conclusiones.
En el capitulo se presentaron los diagramas de flujo de los programas que son una
representacin de los programas que se tienen en los circuitos programables del sistema.
Tambin se diseo un programa en LabView para enviar datos al robot.
Los programas pueden ser mejorados y dar una mejor respuesta en el comportamiento del
sistema, en los programas tambin se pueden aadir mejoras para en manejo de nuevos mdulos.
Explicando las funciones del programa sirve para entender el funcionamiento e interaccin de
los mdulos, es por eso que se hicieron diagramas de flujo que hacen mas clara la explicacin del
programa.
Captulo 5 Pruebas y resultados
Captulo 5
Pruebas y resultados
Dado que el robot esta diseado por mdulos que se interconectan entre s las pruebas fueron
enfocadas a los mdulos por separado y en conjunto.
5.1 Pruebas de hardware.
Los mdulos al momento de la construccin de los circuitos se revisaron y se probaron en su
funcionamiento en de la siguiente manera
Receptor de radio frecuencia: Se realizaron pruebas para verificar la velocidad de transmisin y
a la que se puede transmitir, con la velocidad de 115200baudios se vio que no se reciba siempre la
misma seal que se enviaba por lo que se probo con velocidades menores y se obtuvieron buenos
resultados con velocidades desde 9600bausios hasta 1200baudios y se convino usar una velocidad
de 9600baudios que es la mas rpida. Se realizaron diferentes transmisiones para revisar que los
datos enviados y recibidos coincidieran. La antena fue colocada en los mdulos segn la
documentacin de los mdulos de radiofrecuencia [Robodacta 2009].
Mdulos de motores de pasos: se verific que los motores de pasos y la secuencia estuvieran en
el correcto orden para que el motor gire adecuadamente, tambin se probaron los comandos con los
que se controla el movimiento.
Cmara: se prob que la cmara tuviera un correcto funcionamiento en el envo de la seal de
video y en el movimiento correspondiera al ordenado desde el control remoto.
Sensor de comps: Se calibro el sensor antes de realizar las pruebas de medicin como lo
recomienda el fabricante [Robot-e 2009], y se verific que las mediciones fueran las correctas.
Sensores ultrasnicos: Se cambio la direccin del sensor SRF02 para que cada uno tuviera una
diferente y no haya colisiones en el bus de datos. Tambin se realizaron pruebas de mediciones en el
rea de medicin verificando el correcto funcionamiento y las distancias.
Etapa de potencia: se verifico que el estado de los puentes H fuera optimo para hacer funcionar
los motores, tambin se verifico que no hubiera sobrecalentamiento de los circuitos.
Etapa de aislamiento ptico: Se verific que las seales de entrada se reflejaran en la salida.
64
Captulo 5 Pruebas y resultados
Tambin se verifico que la frecuencia del PWM no fuera mayor a la recomendada por el fabricante,
tambin se tomo en cuenta que el voltaje a la salida fuera el necesario para controlar el modulo de
potencia.
Modulo del control de movimiento del robot: que las salidas y entradas pudieran ser activadas
por las seales correspondientes.
Motores: Se verific que la parte fsica del motor estuviera fija al armazn del robot, tambin se
ajusto la cadena para evitar problemas de rigidez. Se verifico las seales de los encoders que se
encuentran en la flecha del rotor de cada motor fueran bien recibidas.
5.2 Pruebas de Software.
El software que se realizo para los microcontroladores se realizo en el siguiente orden.
Prueba al PIC16F84: En este se verifico que la frecuencia entre los cambios de secuencia fueran
los adecuados para los motores se movieran suavemente, tambin se verifico que la secuencia de
cada uno de los mdulos funcionara con los motores de pasos que forman parte de el sistema fsico
de la cmara.
Prueba al PIC16F877A: Se realizaron pruebas en dos partes al microcontrolador A y al
microcontrolador B.
Microcontrolador A: Se realizaron las pruebas de deteccin de comandos del modulo
de radio frecuencia. Se realizo el envo de comandos de movimientos al robot. Se
verific que durante el seguimiento de trayecto enve bien los comandos al
microcontrolador B. Tambin se probo que la secuencia de evasin de obstculos, en
los que se obtuvieron buenos resultados pero se encontr que esta rutina tiene
limitaciones con objetos con que ocupen tamaos mayores a 60 cm
2
.
Microcontrolador B: Se realizaron las pruebas de recepcin de comandos del
microcontrolador A y se verificaron las salidas hacia los mdulos de movimiento.
Prueba al PIC18F2431: Se realizaron pruebas por separado a cada modulo de movimiento
indicando diferentes referencias tanto de posicin como de velocidad. En estas pruebas se verifico
un buen comportamiento de las acciones de control de velocidad y de posicin teniendo unos muy
65
Captulo 5 Pruebas y resultados
bajos errores de posicin. El comportamiento del control se verific haciendo pruebas con los
motores sin carga y con la carga que representa el peso del robot obteniendo un buen resultado en
los movimientos.
5.3 Pruebas de conjunto.
El prototipo fue probado en condiciones de un suelo plano y regular. Las pruebas consistieron
en probar que el control remoto enviara las seales y que los movimientos correspondieran a las
instrucciones que el usuario indicaba.
Se prob el envo de los comandos desde la computadora para el llenado de la matriz del
trayecto. Se hicieron pruebas para ver la respuesta del sistema de control de velocidad de los
motores que dan el movimiento al robot, y para realizar estas pruebas se diseo un programa en el
entorno de LabVIEW para recibir las mediciones hechas por los mdulos de movimiento del robot
por el puerto serial. La grafica de la velocidad en lazo cerrado se muestra en la figura 5.1.
Figura 5.1 Respuesta en lazo cerrado del sistema de control
En la grafica se aprecia que el sistema tiene un tiempo de establecimiento de 120 milisegundos
que es una muy buena respuesta. Algo importante es que no se tiene sobre impulso. Esta respuesta
corresponde a la rueda derecha, pero tambin se prob en la rueda izquierda obteniendo la misma
respuesta.
Tambin se comprob el perfil de velocidad deseado en el la accin de control de posicin
donde tambin se recibieron los datos por medio del programa de LabVIEW y se grafic su
respuesta que se muestra en la figura 5.2 la referencia de velocidad fue de cuatro centmetros y el
66
Captulo 5 Pruebas y resultados
error de posicin que se tiene es menor a 5 milmetros. Esta prueba fue realizada en las dos ruedas y
se obtuvieron resultados muy similares.
Figura 5.2 Perfil de velocidad real.
Otra de las pruebas realizadas fue para ver el funcionamiento del seguimiento de trayectoria que
en un trayecto de prueba realizado en la que se tienen cuatro pares de datos que representan un
recorrido en la matriz del trayecto, el trayecto de prueba se presenta en la tabla 5.1, en donde se
tienen los recorridos unitarios en los segmentos AB, BC, CD y DE. Los datos de cada segmento del
recorrido son los de orientacin y distancia. La orientacin esta expresada con nmero de 0 a 255
que representa el giro completo, donde por cada unidad de ste nmero representa 1.41 del giro del
robot. La orientacin esta expresada en centmetros, la mxima distancia que se puede avanzar en un
solo paso es de 255 centmetros, que es el valor mximo que puede contener la variable de ocho bits
dentro del programa.
Tabla 5.1. Datos de la trayectoria de la figura 5.3.
Recorrido Orientacin Distancia (cm)
AB 245 50
BC 54 65
CD 245 30
DE 54 50
67
Captulo 5 Pruebas y resultados
(255, 30)
(255, 30)
(255, 30)
(255, 30)
D
C
E
B
A
Figura 5.3 Trayecto de Prueba.
El resultado de sta prueba fue satisfactorio donde se obtuvo un pequeo error en los giros al
orientarse ya que el giro solo esta controlado por el sensor de comps y no por el control de posicin
y lo nico que se realiza medir la orientacin mientras gira el robot, y al llegar a la posicin de
referencia se detiene el robot, y el error del giro se da cuando el robot por la inercia del giro avanza
unos grados mas que dan un error de orientacin. En las distancias recorridas se tiene un pequeo
error que es menor a un centmetro en cada seccin del trayecto.
5.4 . Posicin de los elementos dentro del robot
Todos los elementos dentro del robot tienen una posicin especfica para que el sistema pueda
operar de una manera adecuada. En la figura 5.4 se muestra la posicin en la base metlica. Los
mdulos estn distribuidos en dos tablas de madera puestas en las varillas roscadas como se muestra
en la figura 5.5.
Los elementos en el primer nivel los circuitos estn distribuidos de manera que exista espacio
entre los mdulos para poder interconectarlos. En la primera capa como se muestra en la figura 5.6
se tienen la mayora de los componentes, los microcontroladores A y B, el modulo de
radiofrecuencia, los sensores de distancia, el sensor de comps en el centro de giro del robot, el
mdulo de aislamiento y los mdulos de potencia.
68
Captulo 5 Pruebas y resultados
Batera de potencia
Batera de
control
Motores
Figura 5.4 Elementos montados en la base metlica.
Figura 5.5 Vista frontal del Robot.
Los circuitos montados en la tabla mostrada en la figura 5.6 ocupan la mayor parte del rea y
estn puestos a una distancia suficiente para poder conectar cada circuito con los que le
corresponden evitando enredar los cables.
69
Captulo 5 Pruebas y resultados
Mdulos de
Potencia
Mdulo de RF
Interruptores
Generales
Mdulo de
Aislamiento
Microcontrolador
B
Sensor
Microcontrolador
A
Sensor de
Comps
Mdulos de
movimiento de
los sensores
ultrasnicos Ultrasnico
Figura 5.6 Primer nivel de circuitos.
En el segundo nivel se pusieron los mdulos de movimiento, la cmara, los motores de pasos
que dan movimiento a la cmara y los mdulos de los motores de pasos como se aprecia en las
imgenes de la figura 5.7.
Mdulos de los
motores de pasos
Mdulo de movimiento
de la rueda derecha
Mdulo de movimiento
de la rueda izquierda
Cmara mvil
Figura 5.6 Parte inferior y superior del segundo nivel.
70
Captulo 5 Pruebas y resultados
En la figura 5.7 se muestra el frente del robot y se sealan las posiciones de los sensores
ultrasnicos, el sensor SRF08 sobre el motor de pasos que lo hace girar y el sensor SRF02 en la
varilla roscada que lo hace moverse de derecha a izquierda y viceversa.
Sensores
Ultrasnicos
Figura 5.7 Vista frontal del robot.
Se realizo tambin una prueba para probar la cmara mvil. En esta prueba se conecto el
receptor inalmbrico en un televisor para ver la seal de la cmara se tomo una fotografa de esta
prueba que se presenta en la figura 5.8.
Figura 5.8 Prueba de la cmara inalmbrica.
71
Captulo 5 Pruebas y resultados
72
5.5 Conclusiones
Las pruebas nos permiten conocer que la eficiencia del trabajo realizado, permite reconocer y
modificar en caso de haber errores en los diseos.
Las pruebas muestran que se tienen buenas caractersticas y buen desempeo de todos los
mdulos en el robot.
Las pruebas siempre son realizadas desde la construccin y dependiendo de los resultados de
estas se mejoran los mdulos hasta llegar a satisfacer las necesidades del mdulo y del sistema.
Captulo 6 Conclusiones
Captulo 6
Conclusiones
6.1 Conclusiones Generales
Los conocimientos aplicados en el proyecto son un conjunto de diversas reas tales
como la electrnica, la programacin, la electrnica de potencia.
Los materiales en cada robot pueden variar dependiendo de las necesidades y de las
caractersticas deseables en el robot.
La facilidad de usar microcontroladores que atiendan diversas actividades en el robot la
flexibilidad de poder cambiar partes del sistema y de mejorar los programas existentes. El
uso de diferentes microcontroladores permite aprovechar las caractersticas especiales de
cada uno de ellos, como es el caso del PIC 18F2431 que tiene incorporado un mdulo que
ayuda a recibir las seales directamente de los sensores de los motores sin necesidad de
agregar circuitos codificadores de pulsos.
Algunos de los materiales utilizados fueron reciclados. Cuando tenemos algo que se
descompone, no siempre dejan de funcionar todas sus partes. Los motores de pasos que son
fciles de utilizar fueron reutilizados de dos impresoras que se tenan descompuestas de
partes de sus circuitos que ya estaban destinadas a desecharse. Esta es una buena manera de
conseguir materiales para la construccin de proyectos pero no siempre la mejor, por que
algunos elementos despus de que tienen un uso prolongado se desgastan, cuando son
reutilizados pueden fallar, por eso es necesario verificar su buen funcionamiento.
Los sensores son la parte mas imprtate del sistema, por que sin ellos no se podra
tener informacin del entorno. Los sensores tienen buenas caractersticas, se busc que
73
Captulo 6 Conclusiones
74
fueran baratos y que fuese fcil conseguirlos. Se busc la manera de poder utilizar el
mnimo posible de sensores y que cubrieran los aspectos bsicos de medicin.
Cuando se tienen mdulos con el propsito de que sean como cajas negras donde se
tienen entradas y salidas, se puede mejorar el funcionamiento de los mismos o cambiarlos o
agregar mas mdulos dependiendo de las necesidades del sistema.
Los mdulos hechos son susceptibles de mejoras y cambios para hacerlos mas
eficientes.
El objetivo del trabajo fue el de mejorar un robot agregando caractersticas para que
ste pudiera ser capaz de ser manejado a distancia, que pudiera recorrer trayectos por s
mismo y que pudiera evadir obstculos. Estos objetivos fueron cumplidos como se muestra
en ste trabajo, los errores de en los comandos de posicin y velocidad son pequeos, en los
comandos de posicin las el error es menor a un centmetro, en los comandos de velocidad
siempre se llega a la velocidad final gracias al algoritmo de control PI. Con este algoritmo
no se obtuvieron sobre-impulsos y el tiempo en el que se llega a la velocidad final es
pequeo de alrededor de 0.2 segundos.
Es posible controlar el robot a distancia sin necesidad de estar en el mismo sitio donde
el robot se mueve ya que se cuenta con una cmara inalmbrica y un control remoto con los
que se puede estar a una distancia de aproximadamente 40 metros sin ningn problema
viendo el entorno donde se est moviendo el robot.
Con las caractersticas y la experiencia que se obtuvo en la realizacin de este proyecto
es posible sugerir los siguientes trabajos futuros.
a) Desarrollo de un algoritmo de exploracin de espacios.
b) Prueba de alguna alternativa diferente de control de posicin del robot.
c) Realizacin de un algoritmo robusto de evasin de obstculos.
Apndice
A.1 Listados de los Programas.
/////////////////////////////////////////////////////////////////
// Programa microcontrolador A
/////////////////////////////////////////////////////////////////
#include <pic.h>
#include "delay1.c"
#include "pserie.c"
#include evita.c
///////////definiciones de comandos////////////////////////////
#define stop 0b00000000
#define avan 0b11110001
#define ret 0b11110010
#define giraI 0b11110011
#define giraD 0b11110100
/////////definiciones de variables//////////////////////////////
void config(void); // Configuracion de los puertos y regstros para la comunicacion i2c
void mpasos(unsigned char n); // Controla el movimiento de los motores de pasos
unsigned int medir(unsigned char direcc); // me da la distancia de cualquiera de los sensores ultrasonicos
unsigned char d; // variable de recepcion
unsigned char Ang[4]; // variable para la medicion del compas
unsigned char tol08 =10; // tolerancia en cm del srf08
unsigned char tol02 =14; // tolerancia en cm del srf02
unsigned char cont1=0;
unsigned char cont2=0;
unsigned char comp=0xC0;
unsigned int col=0;
unsigned int dista1=0;
unsigned int dista2=0;
unsigned char tray[30][2]={{0,0}, //Matriz del trayecto
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0},{0,0},
{0,0},{0,0}};
////////definiciones de subprogramas /////////////////////////
void decide(unsigned int dist[], unsigned char tr); // Define los Subprogramas
void compas(unsigned char *comp);
void SecTr(unsigned char orien,unsigned char dist);
void main(void) // programa principal
{
config(); //configuraciones generales
init_pserie_9600(); // Inicializa puerto serial a 9600 baudios
init_trans_rec(); // Inicializa transmisin y recepcin
75
PORTB=0b01110111;
PORTA=0b00000000;
while(1) //ciclo infinito
{
d=recibe();
switch(d)
{
case 'a':
//Caso de comandos de Velocidad
{
d=recibe();
switch(d)
{
default: //detenido todo
{
PORTA=0b00000000;
break;
}
case 0b11100001: //giro a la izquierda de la cmara
{
PORTA=0b11110001;
break;
}
case 0b11100000: //giro a la derecha de la cmara
{
PORTA=0b00100111;
//transmite('3');
break;
}
case 0b11010010: //giro hacia arriba de la camara
{
PORTA=0b01110001;
break;
}
case 0b11010000: //giro hacia abajo de la camara
{
PORTB=0b01110010;
break;
}
case 0b10110100://Comando de velocidad del robot hacia adelante
{
PORTB=avan;
break;
}
case 0b10110000://Comando de velocidad del robot hacia atrs
{
PORTB=ret;
break;
}
case 0b01111000://Comando de velocidad del robot giro a la izquierda
76
{
PORTB=giraI;
break;
}
case 0b01110000://Comando de velocidad del robot giro a la derecha
{
PORTB=giraD;
break;
}
}
}
case 'b': //comandos de posicin
{
PORTB=0b00001111;//comando de posicin microcontrolador B hacia
adelante
d=recibe();
//recibe la referencia del serial
DelayUs(10); //Espera un tiempo
PORTB=d;
while(RC0==0); //espera a que finalice el movimiento
}
case 'c':
{
PORTB=0b00001110;//comando de posicin microcontrolador B hacia atrs
d=recibe();
//recibe la referencia del serial
DelayUs(10); /Espera un tiempo
PORTB=d;
while(RC0==0); //espera a que finalice el movimiento
}
case 't': //trayecto
{
d=recibe(); //recibe la referencia del serial
switch(d)
{
default: //detenido todo
{
break;
}
case 'm': //llenado de matriz de trayecto
{
transmite('i'); //envia seal de inicio de llenado
for(col=0;col>30;col++)
{
d=recibe();
tray[col][0]=d;
d=recibe();
tray[col][1]=d;
}
break;
}
case 'S': //inicia recorrido
{
77
fot(cont=0;cont<29;cont++)
SecTr(tray[cont][0], tray[cont][1]);
break;
}
}
}
}
}
}
//////////////rutina de seguimiento de trayecto///////////////////
void SecTr(unsigned char orien,unsigned char dist)
{
unsigned char cont=0;
unsigned char ban=0;
unsigned char angl[4];
unsigned char tol=5;
compas(angl);
while(ban==0) //dirige al robot en la direccin del avance
{
if(orien<127)
{
if(orien<tol)
{
if((angl[1]<(orien+127))&&(angl[1]>orien))
{
PORTB=giraI;
while(angl[1]>(orien+tol))
{
compas(angl);
}
PORTB=0x00;
}
else
{
PORTB=giraD;
while(angl[1]<(255-(tol-orien)))
{
compas(angl);
}
PORTB=0x00;
}
}
else
{
if((angl[1]<=(orien+127))&&(angl[1]>orien))
{
PORTB=giraI;
while(angl[1]>(orien+tol))
{
compas(angl);
}
PORTB=0x00;
}
else
78
{
PORTB=giraD;
while((angl[1]<(orien-tol))&&(angl[1]>(orien+127)))
{
compas(angl);
}
PORTB=0x00;
}
}
}
else if(orien>=127)
{
if((255-orien)<tol)
{
if((angl[1]>=(orien-128))&&(angl[1]<(orien)))
{
PORTB=giraI;
while(angl[1]<(orien-tol))
{
compas(angl);
}
PORTB=0x00;
}
else
{
PORTB=giraD;
while(angl[1]<(255-orien))
{
compas(angl);
}
PORTB=0x00;
}
}
else
{
if((angl[1]>=(orien-128))&&(angl[1]<(orien)))
{
PORTB=giraI;
while(angl[1]<(orien-tol))
{
compas(angl);
}
PORTB=0x00;
}
else
{
PORTB=giraD;
while((angl[1]>(orien+tol))&&(angl[1]<(127-(255-orien))))
{
compas(angl);
}
PORTB=0x00;
}
}
}
}
79
PORTB=stop;
while(RC0==0) //enva la distancia a recorrer
{
PORTB=0b00001111;
PORTB=dist;
if(dista1<tol08||(dista2<tol02)
{
evita();
}
}
}
unsigned int medir(unsigned char direcc)
{
unsigned int dist;
// Esta primera parte enva el comando a la direccin especificada arriba
SEN =1; // enva bit de inicio
while(SEN); // y espera a que sea cero
SSPIF =0; // bit de interrupcin en cero
SSPBUF =direcc; // enva direccin del sensor
while(!SSPIF); // espera a la interrupcin
SSPIF =0; // entonces la cambiamos a cero de nuevo
SSPBUF =0; // se enva direccin de comandos del sensor
while(!SSPIF); // espera a la interrupcin
SSPIF =0; // entonces la cambiamos a cero de nuevo
SSPBUF =81; // comando de la medicin en CM
while(!SSPIF); //
SSPIF =0; //
PEN =1; // se enva bit de parada
while(PEN); // se espera a que finalice
// Ahora se es pera a que la medicion concluya.
DelayMs(70);
// finalmente obtendremos la distancia
SEN =1; // enviamos bit de inicio
while(SEN); // y esperamos que se haga cero
ACKDT =0; // ponemos el bit de reconocimiento en cero
SSPIF =0;
SSPBUF =direcc; // enviamos la direccin
while(!SSPIF); // esperamos a la interrupcin
SSPIF =0; // la hacemos cero otra vez
SSPBUF =2; // le enviamos la direccin que se va a leer- el bit alto del resultado
while(!SSPIF); // esperamos
SSPIF =0; // y hacemos cero
RSEN =1; // enviamos bit de reinicio
while(RSEN); // esperamos a que sea cero
SSPIF =0; //
SSPBUF =direcc+1; // enviamos la direccin - con el bit de lectura puesto
while(!SSPIF); // esperamos a la interrupcin
SSPIF =0; // y lo hacemos cero
RCEN =1; // enviamos bit de inicio de recepcin
while(!STAT_BF); // y esperamos a que se guarde en el buffer-la parte alta
dist =SSPBUF<<8; // y lo guardamos
ACKEN =1; // iniciamos secuencia de reconocimiento
while(ACKEN); // esperamos a que termine
RCEN =1; // iniciamos recepcin
while(!STAT_BF); // y esperamos a que se reciba la parte baja
80
dist +=SSPBUF; // y la guardamos
ACKDT =1; //
ACKEN =1; //
while(ACKEN); //
PEN =1; // enviamos bit de parada
while(PEN); // y esperamos a que termine
return dist; // regresamos el dato obtenido
}
void compas(unsigned char *comp)
{
//Comando para obtener la lectura de posicin del comps electrnico
//via i2c
SEN =1; // enva bit de inicio
while(SEN); // y espera a que sea cero
ACKDT =0; // bit de reconocimiento
SSPIF =0;
SSPBUF =0xC0; // Enva la direccin
while(!SSPIF); // espera a la bandera
SSPIF =0; //limpia la bandera.
SSPBUF =0; // lee de la direccin 0x00
while(!SSPIF); //
SSPIF =0; //
RSEN =1; // enva el bit de reinicio
while(RSEN); // espera a que sea cero
SSPIF =0;
SSPBUF =0xC1; // direccin de lectura
while(!SSPIF); //
SSPIF =0; //
RCEN =1; // empieza a recibir
while(!STAT_BF); // espera el buffer
comp[0] =SSPBUF; // lo guarda
ACKEN =1; // enva bit de reconocimiento
while(ACKEN); //espera
RCEN =1; // recive el Segundo dato
while(!STAT_BF); //
comp[1] =SSPBUF; //
ACKEN =1; //
while(ACKEN); //
RCEN =1; //
while(!STAT_BF); //
comp[2] =SSPBUF; //
ACKEN =1; //
while(ACKEN); //
RCEN =1; //
while(!STAT_BF); //
comp[3] =SSPBUF; //
ACKDT =1; //
ACKEN =1; //
while(ACKEN); //
81
PEN =1; // enva bit de parada
while(PEN); //
}
void config(void)
{
TRISC =0b00011000; //configuracin para la comunicacin i2c como entradas
PORTC =0xff; //Puerto C en 1 para todos
TRISB =0x00; //configuracin de salidas en el puerto B
PORTB =0x00; //El puerto B en cero para todos
ADCON1 =0x06; //Configuracin de i/o digitales en el puerto A
TRISA =0x00; //puerto A como salidas
PORTA=0x00; //puesto A todo a cero
T1CON=0b00110010; //Configuracin del timer1
INTCON =0b11000000; //Configuracin de interrupciones
PIE1=0b00000001; //
PIR1=0b00000000;
RCIF=0; //
SSPSTAT =0x80; //configuracin I2c
SSPCON =0x38; //
SSPCON2 =0x00; //
SSPADD =50; // SCL =91khz con un oscilador de 20Mhz
}
void interrupt inte(void)
{
if(TMR1IF) //Interrupcin TIMER1
{
TMR1ON=0;
dista1 =medir(0xE0); //Mediciones de Distancias
dista2 =medir(0xE2);
TMR1H=0
TMR1L=0
TMR1ON=1;
TMR1IF=0;
}
}
82
////////////////////////////////////////////////////////////////////////
//Progrma PIC B
////////////////////////////////////////////////////////////////////////
#include<pic.h>
#include "delay.c"
#include "pserie.c"
#define MEDIO 0x80
#define MIN 0xFF
#define MAX 0x00
unsigned char valor=0;
unsigned char ret=0;
const unsigned char pasos[5]= {0b00000000, //tabla de los pasos
0b00000011,
0b00000110,
0b00001100,
0b00001001};
unsigned char pas=0;
unsigned char REF=0;
main()
{
Init_PWM();
init_pserie_9600();
init_trans();
TRISB=0xFF; //Entrada de los comandos puerto B
PORTB=0;
ADCON1=0x06; //configura PORTA con entradas o salidas digitales
TRISA=0x00; //Salida motor de pasos
TRISD=0x00; //
PORTD=0;
//TRISC=0xFF;
PORTC=0;
while(1)
{ //ciclo principal
/*************************************
HACE LA BUSQUEDA DEL DATO EN LA TABLA
**************************************/
valor=PORTB;
switch(valor)
{
default:
{
DelayUs(1);
transmite('s');//Detiene el movimiento
break;
}
case 0b11110001: //Hacia adelante
{
transmite('I'); //selecciona el modulo de la izquierda a
transmite('A'); //comando de velocidad Avanza
transmite('D'); //selecciona el modulo de la
transmite('A'); //Comando de velocidad Avanza
transmite('Y'); //enva a ambos el comando de iniciar
83
break;
}
case 0b11110010: //Hacia atrs
{
transmite('I'); //selecciona el modulo de la izquierda
transmite('R'); //comando de velocidad Retrocede
transmite('D'); //selecciona el modulo de la derecha
transmite('R'); //Comando de velocidad Retrocede
transmite('Y'); //enva a ambos el comando de iniciar
break;
}
case 0b11110011: //Izquierda
{
transmite('I'); //selecciona el modulo de la izquierda
transmite('R'); //comando de velocidad Retrocede
transmite('D'); //selecciona el modulo de la
transmite('A'); //Comando de velocidad Avanza
transmite('Y'); //enva comando de inicio a ambos
break;
}
case 0b11110100: //Derecha
{
transmite('I'); //selecciona el modulo de la izquierda
transmite('A'); //comando de velocidad Avanza
transmite('D'); //selecciona el modulo de la derecha
transmite('R'); //Comando de velocidad Retrocede
transmite('Y'); //enva comando de inicio a ambos
break;
}
case 0b01110000: //
Movimiento del motor de pasos del RSF08 a la izqierda
{
pas=valor&0b00001111;
while(pas!=0)
{
if(pas<1)
pas=4;
PORTA=pasos[pas];
DelayMs(250);
DelayMs(250);
DelayMs(250);
pas--;
}
PORTA=0;
break;
}
case 0b11110000: // Movimiento del motor de pasos a la derecha
{
pas=valor&0b00001111;
while(pas!=0)
{
if(pas<1)
pas=4;
84
PORTA=pasos[pas];
DelayMs(250);
DelayMs(250);
DelayMs(250);
pas++;
}
PORTA=0;
break;
}
case 0b00001111: //comando de avance controlando la posicin
{
RC0=0; //Bandera de ocupado
while(valor==PORTB);//Espera la referencia a avanzar
REF=PORTB;
transmite('M'); //selecciona los dos mdulos
transmite(REF); //Enva la referencia de posicin
DelayUs(10); //Espera un tiempo
transmite('P'); //enva a ambos el comando de iniciar
ret=recibe();
RC0=1;
break;
}
case 0b00001110: //comando de retroceso controlando la posicin
{
RC0=0; //Bandera de ocupado
while(valor==PORTB); // Espera la referencia a avanzar
REF=PORTB;
transmite('N'); //selecciona los dos mdulos
transmite(REF); //Enva la referencia
DelayUs(10); //Espera un tiempo
transmite('P'); //Enva a ambos el comando de iniciar
ret=recibe(); //recibe finalizacin
RC0=1;
break;
}
}
}
}
85
/////////////////////////////////////////////////////////////////
// Programa de los mdulos de Velocidad
/////////////////////////////////////////////////////////////////
#include <p18f2431.h>
#include "pserie.c"
#include "QEI.h"
#include "motor_PWM.h"
#include "PWM_MOD.c"
#include "tabla.c"
#define FOSC 20e6
#define T 0.001
#define ki 30
#define kp 30
#pragma config OSC=HS
unsigned int el=0,em=0;
unsigned int A=0;
unsigned int pos=0;
unsigned int pos1=0,conv=0;
unsigned int velAc=0,velAn=0;
unsigned char d1=0;
unsigned char d2=0;
unsigned int RefP=0;
unsigned int Posi=0xffff,Posi1=0xffff;
unsigned char Cvel=50; //velocidad constante en comandos de v
unsigned int factor=627;
signed int inte=0,deri=0,prop=0,error=0, errorAn=0;
signed int AC=0;// ACan=0;
signed int Ref=0;
void InterruptHandlerHigh(void);
void main(void)
{
unsigned int cont=0;
unsigned int c2=0;
unsigned char com=0;
init_pserie_1200(); // Inicializa puerto serial
init_trans_rec(); // Inicializa transmisin y recepcin
initQEI(4); // Configura el modulo QEI
DFLTCON=0b00111000; //
RCON=0b10000000;
INTCON=0b11000000;
PIE3=0b00000101; //habilita bit0 TMR5IE y bit2 IC2QEIE
PIR3=0b00000000; //limpia las banderas de interrupcin bit1 IC1IF bit2 IC2QEIF
IPR3=0b00000101; //bit0 TMR5 y bit2 QEI en alta prioridad
//inicializa los demas puertos y los pone en cero para evitar entradas no esperadas
ANSEL0= 0b00000001;
TRISA =0b00111001;
LATA = 1;
TRISB = 0;
LATB =0;
setPDC0(0);
enablePWM( PWM_EN_0_1 &
86
PWM_01_COMPLEMENTARY);
configPWMFreq(18000); //configura la frecuencia del PWM
#define PERIOD_COUNT(period,prescale) ((20000000/4)*period/prescale-1)
T5CON =0b00001000; //1:2 prescale
PR5H =(unsigned int)PERIOD_COUNT(T,2)/256;
PR5L =(unsigned int)PERIOD_COUNT(T,2)%256;
while(1)
{
com=recibe();
if(com=='I') //seleccion del modulo
{
com=recibe();
if(com=='R') //retrocede
{
com=recibe();
if(com=='Y')
{
PORTBbits.RB2=1;
T5CONbits.TMR5ON=1;
}
}
if(com=='A') //avanza
{
if(com=='Y')
{
PORTBbits.RB2=0;
T5CONbits.TMR5ON=1;
}
}
}
if(com=='M') //control de velocidad
{
com=recibe();
RefP=(int)com*factor;
PORTBbits.RB2=1;
T5CONbits.TMR5ON=1;
while(1)
{
PIE3=0b00000001;
initQEI(4);
PORTAbits.RA0=1;
RefP=1625;//6500;
/////////////////////control de posicion por tabla//////////////////////////
while(Posi>1000)
{
conv=(unsigned int)(POSCNTH*256)+(unsigned int)POSCNTL;
87
Posi=RefP-conv;
Ref=63;
if(PIR1bits.RCIF==1)
{
Ref=0;
T5CONbits.TMR5ON=0;
for(A=0;A<65535;A++);
transmite(Posi/factor);
Posi=2000
break;
}
}
Posi1=Posi1;
Ref=(Posi-5)>>4;
while(Posi<1000&&Posi<0)
{
conv=(unsigned int)(POSCNTH*256)+(unsigned int)POSCNTL;
Posi=RefP-conv;
if(Posi1==Posi)
{
Posi1=Posi;
}
else
Ref=Tabla[Posi]>>4;
if(PIR1bits.RCIF==1)
{
Ref=0;
T5CONbits.TMR5ON=0;
for(A=0;A<65535;A++);
transmite(Posi/factor);
Posi=0
break;
}
Posi=0;
Ref=0;
T5CONbits.TMR5ON=0;
}
}
if(com=='s')
{
Ref=0;
Posi=0;
T5CONbits.TMR5ON=0;
}
}
}
//----------------------------------------------------------------------------
// Vector de alta prioridad de interrupcin
#pragma code InterruptVectorHigh =0x08
88
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //salta a la rutina de interrupcin
_endasm
}
//----------------------------------------------------------------------------
// Rutina de alta prioridad de interrupcin
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void)
{
if(PIR3bits.IC2QEIF)
{
if(QEICONbits.UP_DOWN)
pos1=2048-pos1;
else
pos1=2048+pos1;
PIR3bits.IC2QEIF=0;
}
if(PIR3bits.TMR5IF)
{
pos=getQEIPos(); //obtiene la posicin actual
if(QEICONbits.UP_DOWN)
if((pos-pos1)>200)
{}
else
velAc=pos-pos1;
else
if((pos1-pos)>200)
{}
else
velAc=pos1-pos;
pos1=pos;
/////////////Algoritmo de controlde velocidad//////////////////
error=(Ref-velAc);
prop=error*kp;
inte=(kp/ki)*(inte+error);
if(inte>1000)
inte=1000;
AC=inte+prop;
if(AC>1000)
AC=1000;
else if(AC<0)
{
AC=AC^0xFF;
AC++;
PORTAbits.RA0=1;
}
else
PORTAbits.RA0=0;
89
setPDC0(AC); //enva la accin de control
PIR3bits.TMR5IF=0; //pone bandera en 0
}
}
//------------------------------------------------------------------------
90
/////////////////////////////////////////////////////////////////
// Programa de los mdulos movimiento de la cmara
/////////////////////////////////////////////////////////////////
#include <pic.h>
#include "delay1.c"
//secuencia de pasos
const unsigned char pasos[9]= {0b00000000, 0b00000001,
0b00000011,
0b00000010,
0b00000110,
0b00000100,
0b00001100,
0b00001000,
0b00001001};
void main(void)
{
unsigned char cont=0;
TRISD =0x00;
TRISB =0xFF;
PORTD =0x00;
PORTB =0x00;
while(1)
{
//PORTA=0xFF;
//DelayMs(255);
//PORTA=0x00;
//DelayMs(255);
while(RB2) //si RB2 es uno no avanza ni retrocede (stop)
{
if(RB0) // si RB2 yRB0 son 1 avanaza
{
cont++;
if(cont>8)
cont=1;
}
else if(!RB1) //si RB2=1 RB0=0 y RB1=1 el motor retrocede
{
cont--;
if(cont<1)
cont=8;
}
PORTD=pasos[cont];
DelayMs(10);
}
}
}
91
#include <p18f2431.h>
#include "pserie.c"
#define uno(var,numbit) ((var)|=1<<(numbit)) //pone un 1 en la variable var y en el numero de bit numbit
#define cero(var,numbit) ((var)&=~(1<<(numbit))) //pone un 0 en la variable var y en el numero de bit numbit
unsigned char ret=0; //variable de comandos
void comp(unsigned char canal,unsigned int dat);
void main(void)
{
//unsigned char com=0;
unsigned char channel=0;
unsigned int conv=0;
TRISA=0xFF; // RA0-RA3
//inicializa todo lo que no se usa en cero para evitar entradas flotantes
ANSEL0=0b00001111; //Entradas AN0-AN3 habilitadas
LATA = 0;
TRISB =0b11000000; // RB0-RB3 salida de RF
LATB =0;
TRISC =0b00001111; // RC0-RC3 entrada de RF
LATC =0;
init_pserie_1200(); // Inicializa puerto serial
init_trans_rec(); // Inicializa transmisin y recepcin
//ADC setup
ADCON0 =0b00000001; // Single-shot y seleccion manual de canales de conversion
ADCON1 =0b00000000; // Se usa los voltajes del PIC como referencias y no se usa el bufer FIFO
ADCON2 =0b00000000; // Se justifica a la derecha
ADCON3 =0b00000000; // Sin disparadores
ADCHS =0b00000000; // Se usan los canales AN0-AN3
while(1)
{
for(channel=0;channel<4;channel++)
{
if(channel==0)
ADCON0 =0b00000001;
if(channel==1)
{
ADCON0 =0b00000101;
}
if(channel==2)
{
ADCON0 =0b00001001;
}
if(channel==3)
{
ADCON0 =0b00001101;
}
ADCON0bits.GO_DONE=1;
//Inicia la conversion
while(ADCON0bits.GO_DONE){}
//espera a que finalice la conversion
conv=(unsigned int)(ADRESH*256)+(unsigned int)ADRESL;//convertimos int
92
comp(channel,conv);
//conascii_Int(conv);
//transmite(' ');
}
if(PORTBbits.RB0)
{
transmite('t');
if((PORTBbits.RB0==1)&&(PORTBbits.RB1==1))
transmite('m');
else
transmite('sm');
}
if(PORTBbits.RB1)
{
transmite('a');
transmite(ret);
}
}
}
void comp(unsigned char canal,unsigned int dat)
{
if(canal==0)
{
if(dat<25000)
{
cero(ret,0);
cero(ret,4);
}
else if(dat>45000)
{
uno(ret,0);
cero(ret,4);
}
else
{
cero(ret,0);
uno(ret,4);
}
}
if(canal==1)
{
if(dat<25000)
{
cero(ret,1);
cero(ret,5);
}
else if(dat>45000)
{
uno(ret,1);
cero(ret,5);
}
else
{
cero(ret,1);
93
uno(ret,5);
}
}
if(canal==2)
{
if(dat<25000)
{
cero(ret,2);
cero(ret,6);
}
else if(dat>45000)
{
uno(ret,2);
cero(ret,6);
}
else
{
cero(ret,2);
uno(ret,6);
}
}
if(canal==3)
{
if(dat<25000)
{
cero(ret,3);
cero(ret,7);
}
else if(dat>45000)
{
uno(ret,3);
cero(ret,7);
}
else
{
cero(ret,3);
uno(ret,7);
}
}
}
94
/////////////////////////////////////////////////////////////////
// Tabla de desaceleracin
/////////////////////////////////////////////////////////////////
//#pragma romdata array=0x1760
static rom unsigned int Tabla[1000]={
0,31,44,54,63,70,77,83,89,94,100,104,109,114,118,122,126,130,134,137,141,144,148,151,154,158,
161,164,167,170,173,176,178,181,184,187,189,192,194,197,200,202,204,207,209,212,214,216,219,221,223,
225,228,230,232,234,236,238,240,242,244,246,249,251,252,254,256,258,260,262,264,266,268,270,272,273,
275,277,279,281,282,284,286,288,289,291,293,294,296,298,300,301,303,304,306,308,309,311,313,314,316,
317,319,320,322,324,325,327,328,330,331,333,334,336,337,339,340,342,343,344,346,347,349,350,352,353,
354,356,357,359,360,361,363,364,366,367,368,370,371,372,374,375,376,378,379,380,382,383,384,386,387,
388,389,391,392,393,394,396,397,398,400,401,402,403,404,406,407,408,409,411,412,413,414,415,417,418,
419,420,421,423,424,425,426,427,428,430,431,432,433,434,435,437,438,439,440,441,442,443,444,446,446,
447,448,449,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,469,470,471,472,473,
474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,498,499,
500,501,502,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,
524,525,526,527,528,529,530,531,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,
548,549,550,551,552,553,554,554,555,556,557,558,559,560,561,562,563,563,564,565,566,567,568,569,570,
570,571,572,573,574,575,576,577,577,578,579,580,581,582,583,583,584,585,586,587,588,589,589,590,591,
592,593,594,594,595,596,597,598,599,600,600,601,602,603,604,604,605,606,607,608,609,609,610,611,612,
613,614,614,615,616,617,618,618,619,620,621,622,622,623,624,625,626,626,627,628,629,630,630,631,632,
633,634,634,635,636,637,637,638,639,640,641,641,642,643,644,644,645,646,647,648,648,649,650,651,651,
652,653,654,654,655,656,657,658,658,659,660,661,661,662,663,664,664,665,666,667,667,668,669,670,670,
671,672,673,673,674,675,676,676,677,678,678,679,680,681,681,682,683,684,684,685,686,687,687,688,689,
689,690,691,692,692,693,694,694,695,696,697,697,698,699,700,700,701,702,702,703,704,704,705,706,707,
707,708,709,709,710,711,712,712,713,714,714,715,716,716,717,718,719,719,720,721,721,722,723,723,724,
725,725,726,727,728,728,729,730,730,731,732,732,733,734,734,735,736,736,737,738,738,739,740,740,741,
742,742,743,744,744,745,746,746,747,748,749,749,750,751,751,752,752,753,754,754,755,756,756,757,758,
758,759,760,760,761,762,762,763,764,764,765,766,766,767,768,768,769,770,770,771,772,772,773,773,774,
775,775,776,777,777,778,779,779,780,781,781,782,782,783,784,784,785,786,786,787,788,788,789,789,790,
791,791,792,793,793,794,794,795,796,796,797,798,798,799,800,800,801,801,802,803,803,804,804,805,806,
806,807,808,808,809,809,810,811,811,812,813,813,814,814,815,816,816,817,817,818,819,819,820,820,821,
822,822,823,824,824,825,825,826,827,827,828,828,829,830,830,831,831,832,833,833,834,834,835,836,836,
837,837,838,839,839,840,840,841,842,842,843,843,844,844,845,846,846,847,847,848,849,849,850,850,851,
852,852,853,853,854,854,855,856,856,857,857,858,859,859,860,860,861,861,862,863,863,864,864,865,866,
866,867,867,868,868,869,870,870,871,871,872,872,873,874,874,875,875,876,876,877,878,878,879,879,880,
880,881,882,882,883,883,884,884,885,886,886,887,887,888,888,889,889,890,891,891,892,892,893,893,894,
894,895,896,896,897,897,898,898,899,900,900,901,901,902,902,903,903,904,904,905,906,906,907,907,908,
908,909,909,910,911,911,912,912,913,913,914,914,915,915,916,917,917,918,918,919,919,920,920,921,921,
922,923,923,924,924,925,925,926,926,927,927,928,928,929,930,930,931,931,932,932,933,933,934,934,935,
935,936,937,937,938,938,939,939,940,940,941,941,942,942,943,943,944,944,945,946,946,947,947,948,948,
949,949,950,950,951,951,952,952,953,953,954,954,955,956,956,957,957,958,958,959,959,960,960,961,961,
962,962,963,963,964,964,965,965,966,966,967,967,968,969,969,970,970,971,971,972,972,973,973,974,974,
975,975,976,976,977,977,978,978,979,979,980,980,981,981,982,982,983,983,984,984,985,985,986,986,987,
987,988,988,989,989,990,990,991,991,992,992,993,993,994,994,995,995,996,997,997,998,998,999,999};
//#pragma romdata
95
96
A.2 Copia del Articulo Publicado.
S. Ramrez, N. Barrera e I. I. Lzaro, Robot Barredora Dcima Reunin de Otoo de Potencia,
Electrnica y Computacin ROPEC 2008, Morelia Michoacn 2008.
g
Aplicacin de un Robot mvil
S. Ramrez, N. Barrera e I. I. Lzaro
ResumenEl presente articulo muestra una aplicacin de la
Robtica mvil. Se plantea el diseo de un robot mvil autnomo
o controlado por el usuario, empleado para la limpieza domestica
en un espacio fsico, que aprovecha la base de una escoba
elctrica swivel sweeper. El robot mvil esta basado en
microcontroladores de la familia PIC. Este microcontrolador
activa los motores de corriente directa que mueven al robot a
travs de una etapa de potencia. El robot tambin tiene sensores
que le permiten conocer algunos parmetros del entorno donde
se mueve Con la informacin que se obtiene de los sensores y que
es procesada por el microcontrolador es posible realizar la tarea
de limpieza en el espacio fsico deseado. Se describe el
funcionamiento de los sensores, as como de la construccin del
robot.
Temas clavesRobtica, Instrumentacin, barredora y
Prototipo.
I. INTRODUCCIN
n el campo de la ingeniera electrnica y en especial en
la rama de la robtica y de control y automatizacin, se
busca poder crear robots para diferentes aplicaciones y usos.
Los robots se clasifican, segn su movilidad, de dos formas:
robots manipuladores y mviles. Los manipuladores estn
formados de una cadena cinemtica abierta formada por un
conjunto de eslabones o elementos de cadena
interrelacionados mediante articulaciones o pares cinemticas.
Son empleados comnmente para mover piezas, herramientas
o dispositivos y se programan para ejecutar este tipo
especfico de tareas. Por otro lado, dentro del desarrollo de los
robots mviles se han implementado robots mviles con patas,
robots mviles con pndulo invertido, robots mviles que
vuelan, robots mviles humanoides y robots mviles con
ruedas [1].
Los robots mviles con ruedas, pueden estar constituidos
por diversos materiales y sensores, estas configuraciones son
utilizadas para satisfacer las diversas aplicaciones, como
extender las actividades realizadas por un manipulador a
travs de la movilidad por tener caractersticas como: tele-
operacin, funcionamiento repetitivo y autonoma e
inteligencia, as como, el reconocimiento de lugares y
97
Incluir filiacin en este prrafo:
Salvador Ramrez e Isidro Ignacio Lzaro laboran en la Universidad
Michoacana de San Nicols de Hidalgo en la Facultad de Ingeniera Elctrica.
(e-mail: szavala@zeus.umich.mx y ilazaro@zeus.umich.mx).
Noe Barrera es estuante de la misma Universidad. (e-mail:
a0001125x@correo.fie.umich.mx).
personas, la construccin de mapas, soldar, pintar, etc. [2]
El mundo ha experimentado cambios muy significativos en
los ltimos veinte aos. Nuevos descubrimientos y
aplicaciones han sido realizados en los campos de la
Electrnica y la Ingeniera. Dichas innovaciones han
impactado poco hasta ahora significativamente en los
electrodomsticos del hogar. La domtica y el
comportamiento automtico como el de los robots, empiezan a
abandonar las pantallas de cine de ciencia ficcin y los
laboratorios para lentamente llegar a nuestros hogares y dar a
luz a dispositivos inteligentes que liberen la necesidad de la
intervencin directa de un ser humano en tareas sencillas [3].
Los robots han sido desarrollados en un principio para
automatizar y hacer ms eficientes las actividades que las
personas realizan. Es el caso de las actividades domesticas,
donde ahora con la forma de vida que lleva la sociedad en
general no se tiene el tiempo necesario para realizar todas las
actividades que se necesitan en la casa. Ya existen varios
electrodomsticos que de manera automtica desarrollan sus
funciones haciendo ms fcil las tareas en el hogar como lavar
la ropa, hacer el caf a una hora especfica, etc. Sin embargo
hay actividades que por el momento no se dispone de un
aparato comercial de fcil acceso que las realice, como es el
caso de los robots limpiadores.
As que el objetivo principal de este trabajo, es la
construccin de un prototipo de robot barredor autnomo o
controlado por el usuario que realice la limpieza de un espacio
fsico, no importando si en este existen obstculos o no.
II. ESTRUCTURA GENERAL DEL ROBOT MVIL
El robot mvil que se desarrollo para la aplicacin de
barredora, esta compuesto a partir de una estructura metlica
sobre la cual estn montados diversos dispositivos como lo
son llantas que le proporcionan movilidad a la estructura, el
sistema de control y sensores.
En la Fig. 1 se muestra el diagrama de bloques del sistema
diseado. Este muestra las partes constitutivas ms generales
del sistema desarrollado.
Las partes que conforman el sistema son: un
microcontrolador PIC16F877 (PIC1), el cual contiene el
programa principal para el control de las funciones del
sistema, dos sensores ultrasnicos, uno que mide la distancia a
la que se encuentran objetos y otro que mide los desniveles
del terreno en el que s esta transitando, un sensor de comps
que realiza la funcin de una brjula electrnica y proporciona
E
la direccin en la que el robot esta orientado con respecto al
campo magntico terrestre, dos motores de corriente directa
(CD) que nos dan el movimiento del robot y que son
accionados por un microcontrolador PIC16F877 (PIC2),
donde estn programados cuatro movimientos especficos de
los motores de movimiento: avance, retroceso, giro a la
izquierda y giro a la derecha. Adems este segundo
microcontrolador (PIC2) controla tambin dos motores de
pasos, que permite mover una pequea mini cmara que
transmite la seal a control remoto a un monitor, para ver los
movimientos del robot. El robot mvil tambin tiene un
sistema de comunicacin para la recepcin de instrucciones
del un supervisor que puede manipular los movimientos del
robot y de la cmara [4] [5].
Fig. 1 Diagrama de bloques del sistema.
II. MODOS DE OPERACIN
El robot puede operar de dos maneras distintas como se
muestra en la Tabla I.
TABLA I
MODOS DE OPERACIN DEL ROBOT BARREDOR
Modos de
operacin
Acciones del robot barredor
Modo 1 -El operador controla el robot barredor.
Modo 2 -Rutina de recorrido no asistido (autnomo).
98
El primer modo de operacin es que el usuario genere las
instrucciones del movimiento del espacio fsico a barrer,
mediante un control remoto inalmbrico. El segundo modo de
operacin es que mediante un algoritmo de movimiento
definido, el robot se mueva en toda el rea de manera que se
cubra en su totalidad el espacio fsico deseado a barrer.
A. Modo de operacin controlado por el usuario (Modo 1)
El robot recibe rdenes a travs de seales de
radiofrecuencia que son generadas por medio de un control
remoto como se ve en la Fig. 2, estas seales son interpretadas
por un microcontrolador PIC1 y dependiendo del comando se
realizan ciertas acciones.
Cuando se esta en este modo el uso de la mini cmara es
imprtate, ya que con esta se puede observar por donde esta
barriendo el robot sin estarlo vigilando de cercas, adems
debido a que es posible que se acerque demasiado a los
objetos y chocar con ellos, el sistema del robot esta midiendo
con los sensores la distancia los objetos alrededor de el, con el
fin de no permitir que el usuario con las instrucciones
enviadas choque deliberadamente.
Fig. 2 Control remoto inalmbrico.
La palanca derecha controla el movimiento del avance de
el robot, si esta palanca se mueve hacia arriba, el robot
avanzara durante 0.5seg., si la palanca se mueve hacia abajo el
robot retroceder durante 0.5seg., si la palanca se mueve hacia
la derecha o izquierda el robot girara sobre su mismo lugar a
la derecha o a la izquierda respectivamente, en caso de que
haya objetos delante del robot que sean detectados por los
sensores de distancia el microcontrolador que controla los
motores de avance (PIC2), no realizara ningn movimiento.
La palanca de la izquierda controla el movimiento de los
motores de paso, que sostienen a la mini cmara. Si la palanca
se mueve hacia arriba o hacia abajo, el motor de pasos que
genera el giro vertical se mueve, haciendo que la cmara gire
hacia arriba o hacia abajo respectivamente, Si la palanca se
mueve hacia la izquierda o hacia la derecha el motor de pasos
que genera el giro horizontal hace que la cmara gire hacia la
izquierda o la derecha respectivamente. Con esto podemos
tener movimientos combinados de los motores de forma
esfrica, el giro horizontal de la cmara esta limitado a 180
del motor horizontal debido a los cables del motor la Fig. 3 se
muestra este arreglo.
Giro
Vertical
Fig. 3 Mini cmara montada sobre los motores de paso.
B. Modo de operacin no asistido (Modo 2)
Giro Horizontal
En este modo de operacin, el microcontrolador PIC1 le da
la instruccin de iniciar la rutina de movimiento libre o la
rutina de movimiento recorrido no asistido.
La rutina de recorrido no asistido consta de una secuencia
de movimientos que se muestran en la Fig. 4 En el que el
robot debe colocarse en cualquier esquina de la habitacin
como punto de inicio, de frente al rea que se desea barrer.
Cuando se oprime el botn de inicio el robot empieza a
avanzar mientras no haya ningn obstculo en el trayecto, en
el caso de que se encuentre un obstculo, el microcontrolador
evala que tipo de obstculo es, esto con la ayuda de los
sensores de ultrasonido. Si se detecta que es un obstculo
pequeo, el robot lo rodea, pero si es mas grande que la
distancia que puede medir los sensores, lo toma como una
pared y el robot gira 90, avanzando una distancia de 30 cm.
que es el espacio que cubre la barredora, despus vuelve a
girar 90 para avanzar de nuevo hasta encontrar otro obstculo
como una pared y realizar el mismo movimiento de un
extremo a otro. Para hacer un recorrido por franjas y as
recorrer toda el espacio fsico deseado. La distancia recorrida
por el robot, es fijada medida con un tiempo, en cual se
recorre la distancia necesaria cubrir por partes la habitacin
como se muestra en la Fig. 4.
99
Fig. 4 Trayectoria tpica.
Cuando se encuentra un obstculo en el recorrido detectado
por el sensor de ultrasonido y que no sea detectada como una
pared, dependiendo de que lado del obstculo sea detectado, el
robot decide rodearlo ya sea por el lado derecho o por el lado
izquierdo y despus de superado el obstculo vuelve a su
camino.
Se tiene el otro sensor que mide la distancia que hay hacia
el suelo y si la distancia es mayor a 19 cm. quiere decir que
hay un desnivel mayor y en ese caso retroceder una distancia
de 40cm y girar 90 despus avanza 30cm, vuelve a girar 90
y empieza a avanzar nuevamente continuando con el
recorrido.
III. CARACTERSTICAS DE LOS ELEMENTOS DE ROBOT
El robot esta compuesto de un conjunto de elementos tales
como; motores, microcontroladores, sistema de control de
motores, estructura mecnica, bateras y sensores.
El robot tiene una estructura metlica que sirve de apoyo a
todo el hardware. La estructura metlica tiene forma
rectangular de 24.5 cm. de ancho por 26 cm. de largo y una
estructura trasera que sobresale 8 cm.como se puede apreciar
en la Fig. 5. Cuenta con cuatro perforaciones, una en cada
esquina de la estructura, en las cuales van varillas para
soportar las plataformas de base para los circuitos de control.
Fig. 5. Estructura metlica.
El robot mvil est construido con tres ruedas, colocadas
como se muestra en la Fig. 6a. Las dos ruedas delanteras
donde esta el sistema de traccin. Para ello se acopla, en cada
rueda, un conjunto de estrellas, de las usadas en las bicicletas
de velocidades. A los motores tambin se les coloc una
estrella en su eje. Estas estrellas estn acopladas mediante una
cadena de eslabones, como se muestra en la Fig. 6b. La rueda
trasera es de libre movimiento que puede girar 360, no esta
controlada y sirve solo de soporte.
Fig. 6. (a) Colocacin de las ruedas, (b) Acoplamiento entre motor y rueda
llanta acoplada con el motor.
Los motores utilizados para la traccin son motores de CD.
Los cuales son alimentan con una batera independiente a la
del sistema de control.
Para el manejo de los motores se utilizan dos circuitos
integrados de Puentes-H (LMD18200), diseado para
aplicaciones de control de movimiento. Ideal para manejar
motor de CD. Estos Puentes-H estn acoplados a un
microcontrolador PIC1 por medio de Optoacopladores
INICIO
FIN
30cm
(H11L1), de esta forma queda total mente aislada la etapa de
potencia de la etapa de manejo de los motores [6].
Como se puede apreciar en la Fig. 5, se muestran las dos
bateras que son la fuente de energa del robot. La razn por la
que se tienen dos bateras es para tener por separado la energa
que alimenta a los motores y la energa que alimenta los
circuitos de control, las bateras son de 12 Volts de 12
Amperes-hora y 8 Amperes-hora respectivamente.
Adems del microcontrolador PIC1 que controla el sistema
y el microcontrolador PIC2 que controla el movimiento o
traccin del robot, exciten dos microcontroladores PIC16F84
[4][5], que controlan las secuencias de pasos de los motores
de pasos que sostienen la mini cmara. Esto se hace para
poder tener el diseo del robot en forma modular.
En la parte frontal de la estructura del robot se montaron
dos sensores de ultrasonido (SRF08 y SRF02), uno que
permite ver la distancia que hay al frente del motor, el cual se
encuentra montado en un motor a pasos permitiendo
monitorear hasta 180
0
y el segundo que permite saber si hay
algn tipo de desnivel en el suelo, montado en una varilla
roscada, que gira y hace que el sensor se desplace de un lado
al otro del robot de manera secuencial, cuando llega al
extremo de un lado presiona un botn y un circuito lgico
hace cambiar el sentido de giro del motor. El sensor se mueve
de un lado a otro a razn de 4 vueltas por minuto (Fig. 7),
adems se tiene un sensor de comps (CMPS03) para saber la
orientacin que tiene el robot en cualquier momento. [7] [9].
100
Fig. 7 Parte frontal del robot
Un elemento importante es la barredora elctrica de la
marca swivel sweeper modelo XR-DC080200 que realiza el
trabajo de ir limpiando el rea por la que se va transitando,
esta barredora esta colocada en la parte de atrs del robot.
Para el modo de operacin controlado por el usuario (modo
1). El microcontrolador PIC 1 recibe las seales de comandos
que enva el control remoto por medio de un modulo de radio
frecuencia (RWS315) a una velocidad de transmisin de 9600
baudios/segundo, cada comando que se recibe es un numero
binario de 8bits Los comandos que son recibidos son
interpretados y dependiendo del comando se realiza una
accin. Las acciones que se pueden realizar se muestran en la
Tabla II.
TABLA II
INSTRUCCIONES DEL PIC 1
Instruccin
recibida.
Acciones del robot barredor.
0000XXXX El robot inicia el recorrido de limpieza.
11110000 Detiene cualquier movimiento del robot
11100001
Mueve el motor del movimiento horizontal
de la cmara hacia la derecha.
11100000
Mueve el motor del movimiento horizontal
de la cmara hacia la izquierda.
11010010
Mueve el motor del movimiento vertical de
la cmara hacia arriba.
11010000
Mueve el motor del movimiento vertical de
la cmara hacia abajo.
10110100
Enva la instruccin al PIC 2 para que el
robot avance
10110000
Enva la instruccin al PIC 2 para que el
robot retroceda
01111000
Enva la instruccin al PIC 2 para que el
robot gire sobre su eje a la derecha.
01110000
Enva la instruccin al PIC 2 para que el
robot gire sobre su eje a la izquierda.
Donde: X: indica que no importa si es 1 0.
1: indica un voltaje lgico alto.
0: indica un voltaje lgico bajo.
Mini cmara
El microcontrolador PIC2 se dedica solo a seguir las
instrucciones que recibe del microcontrolador PIC1. Las
instrucciones que enva el microcontrolador PIC1 son
enviadas mediante tres pines de un puerto digital (C) y estos
van conectados a un puerto digital (B) del microcontrolador
PIC2. El microcontrolador PIC2 cada vez que termina uno de
los comandos realizados enva una seal de finalizacin
mediante un pin del puerto B y es recibida esta seal en el un
pin del puerto C del microcontrolador PIC1. Estos comandos
se muestran en la Tabla III.
Motor
Sensores
ultrasnicos
TABLA III
INSTRUCCIONES DEL PIC 2
Instruccin
recibida.
Accin del PIC 2
000 Detiene cualquier accin.
001 Avanza
010 Retrocede
011 Gira hacia la Derecha.
100 Gira a la Izquierda.
101 Gira el motor de pasos a la Derecha.
110 Gira el motor de pasos a la Izquierda.
111 No realiza ninguna accin
En la Fig. 8, se muestran la distribucin de los circuitos de
control colocados en la tabla que va encima del robot.
101
Fig. 8 Distribucin de los circuitos de control montados en el robot.
En la parte superior del robot solo se encuentra solamente
la pequea mini cmara con los motores de pasos que
permiten su movimiento como se muestra en al Fig. 9.
Fig. 9 Parte superior del robot.
IV. PRUEBAS REALIZADAS
Las pruebas realizadas al prototipo iniciaron desde que se
construyo cada uno de los mdulos para verificar que se
tuviera el comportamiento adecuado de los mdulos por
separado ya que se diseo una distribucin modular, una vez
hecho esto se procedi con la conexin con de todos los
mdulos.
Despus de interconectar todos los circuitos que componen
al robot mvil, fue necesario probar que los programas
tuvieran un funcionamiento adecuado primero para el
microcontrolador PIC1 y luego para el microcontrolador
PIC2.
Se probaron ambos modos de funcionamiento del robot,
primero para el modo de control hecho por un operador y
despus para el modo de recorrido no asistido, verificando
primero que el primer modo siguiera las instrucciones de
acuerdo a los movimientos realizados desde el control remoto,
para el segundo modo se puso el robot a barrer un espacio
fsico sin obstculos para ver el comportamiento en el
recorrido, despus se probo con obstculos realizando una
buena tarea el robot.
Las tolerancias de cercana fueron ajustadas midiendo el
acercamiento mnimo con el cual se puede girar sin tocar los
objetos a su alrededor. Como se muestra en la Fig. 10, la
barredora fue fijada en la parte de atrs del robot para ser
remolcada, as se permite que la barredora valla limpiando
todo el recorrido que el robot est haciendo.
30cm
Fig. 10 Robot barredor construido.
V. CONCLUSIONES
Se ha logrado disear una aplicacin de un robot mvil
para el uso casero, especficamente como barredora de fcil
uso, que permite desplazarse dentro de un espacio fsico con
mucha facilidad, seguridad e independencia ante la presencia
de objetos no deseados. Esto debido a que el sistema
desarrollado aumenta la informacin acerca de algunos
obstculos que la barredora pueda encontrar en su camino y
pueda tomar la decisin acerca de la ruta para su
desplazamiento.
La utilizacin de los sensores como fuentes de informacin
del estado del medio ambiente en el que se desenvuelve la
barredora brinda al robot barredor la posibilidad de ayudarle a
alcanzar una trayectoria libre de obstculos. Se comprob el
buen desempeo de los sensores al permitir realizar
trayectorias deseadas.
Se comprob la funcionalidad de manejo de la barredora,
presentando buenas caractersticas en los dos modos de
trabajo diseados.
El desarrollo del presente proyecto permiti observar que el
campo de aplicacin de los robots mviles, es muy extenso y
un slo proyecto puede crecer tanto como la creatividad, el
conocimiento, el tiempo y el recurso econmico lo permita,
dejando el presente proyecto como base para futuros
proyectos.
Debido a que la barredora se mueve junto con el robot
cuando este da vuelta, la barredora tiene un movimiento
circular, esto no permite limpiar adecuadamente las esquinas y
rincones cercanos a las paredes, otro inconveniente que se
observo es que el robot por su tamao no permite limpiar
debajo de los objetos como mesas pequeas o camas.
Referencias
[1] http://www.ece.buap.mx/robocatepetl/espanol/jgx.htm
[2] http://acm.asoc.fi.upm.es/sigbot/docus/introRobotica2004.pdf
[3] Cerezo Echevarra, Mikel, Snchez Miralles lvaro Aspiradora
inteligente para limpieza automtica de suelos ICAI- Universidad
Pontificia Comillas
[4] Angulo J ., Microcontroladores PIC Diseo Practico de Aplicaciones,
McGraw Hill 1997.
[5] Manual del microcontrolador PIC16F87xA, y PIC16F84,
http://www.microchip.com.
[6] Muhammad H. Rashid. Power Electronics Circuts, Devices and
Applications. Prentice-Hall 1993.
[7] Robodacta http://www.robodacta.com.mx/
[8] Santafe Y. E., J ugo D., Cote P., Gonzlez M., Sistema de deteccin de
obstculos por sonar ultrasnico para personas invidentes (Bastn
ultrasnico), Memorias del II Congreso Colombiano de Ingeniera e
Ingeniera Biomdica, Bogot, Octubre 2005.
[9] Herrera A., J aramillo R., Diseo y construccin de un dispositivo para
la alerta de obstculos (DAO), Revista Ingeniera Biomdica, ISSN
1909-9762, numero 1, mayo 2007, Pgs. 23-27.
BIOGRAFA
102
ntrol e
Instrumentacin.
de inters son Electrnica de Potencia, Robtica,
Control e Instrumentacin
uo. Sus reas de inters son
alidad de la Energa, Control e Instrumentacin.
Salvador Ramrez Zavala naci en Morelia, Mich. Recibi
el grado de Ingeniero Electricista en la Universidad
Michoacana de San Nicols de Hidalgo, el grado de
Maestro en Ingeniera Elctrica en la misma Institucin en
1990 y 1998 respectivamente. Sus reas de inters son
Electrnica de Potencia, Robtica, Co
Noe Barrera Gallegos naci en Morelia, Mich, pasante de Ingeniera
Electrnica de la Universidad Michoacana de San Nicols de Hidalgo en la
Facultad de Ingeniera Elctrica. Actualmente se encuentra terminando se
trabajo de tesis. Sus reas
Isidro Ignacio Lzaro Castillo naci en Crdoba, Veracruz,
Mxico. Recibi el grado de Ingeniero Electricista en la
Universidad Michoacana de San Nicols de Hidalgo, el grado
de maestro en Ingeniera Elctrica en la misma Institucin en
1992 y 1999 respectivamente. Actualmente es Profesor
Investigador de tiempo completo de la misma Facultad. Autor
del libro Ingeniera de Sistemas de Control Contin
C
103
Referencias
[Rodrigez 2005]
Ing. Ren Rodrguez Zalapa, Robot mvil controlado por infrarrojos, Tesis de Licenciatura
Agosto de 2005, Universidad Michoacana de San Nicols de Hidalgo
[Ramrez 1998]
MC. Salvador Ramrez Zavala, Diseo y construccin de un manipulador con dos grados de
libertad y orientacin del efector final, Tesis de Maestra Octubre de 1998, Universidad
Michoacana de San Nicols de Hidalgo
[Kenjo]
Takashi Kenjo, Power Electronics for the Microprocessors Age, Oxford Science Publications
1994.
[Barrientos 2007]
A. Barrientos, Fundamentos de Robtica, McGraw Hill 2007
[Ogata 1997]
Katsuhiko Ogata, Sistemas de Control en Tiempo discreto, Prentice Hall 1996
[Ogata 1993]
Katsuhiko Ogata, Ingeniera de Control Moderna, Prentice Hall 1993
[Robodacta 2009]
Robodacta, Pagina principal, Mxico, 10 de enero de 2009, http://www.robodacta.com.mx/.
[Robot-e 2009]
Robot electronics, Pagina principal, Reino unido, 10 de enero de 2009, http://www.robot-
electronics.co.uk.
[Avagotech 2009]
Avago Technologies, Pagina principal, Estados Unidos, 10 de enero de 2009,
http://www.avagotech.com/pages/home/.
[Microchip 2009]
Microchip Technology Inc. Pagina principal, Estados Unidos, 10 de enero de 2009,
http://www.microchip.com.
103
104
[Fairchild 2009]
Fairchild Semiconductor, Pagina principal, Estados Unidos, 10 de enero de 2009,
http://www.fairchildsemi.com/.
[National 2009]
National Semiconductor Corporation, Pagina principal, Estados Unidos, 10 de enero
de 2009, http://www.national.com/.
[Steren 2009]
Steren, Pagina principal, Mxico, 10 de enero de 2009, http://www.sterenl.com.mx/.
[Todo-R 2009]
Todo Robot, Tutorial sobre Motores Paso a Paso, Argentina, 15 de enero de 2009,
http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm.