proyecto final robot · web viewen esta etapa el circuito integrado “pic16f628” nos permite...

15
Proyecto Final Robot Seguidor de Línea Docentes: Lazarte, Matias Collovati, Susana Correa, Diego Integrantes: Arza, Isaias Guardia, Dante

Upload: hadung

Post on 08-Apr-2018

247 views

Category:

Documents


13 download

TRANSCRIPT

Proyecto Final Robot

Seguidor de Línea

Docentes: Lazarte, Matias Collovati, Susana

Correa, Diego

Integrantes: Arza, Isaias Guardia, Dante

Introducción:El objetivo principal del proyecto fue el innovar el viejo robot seguidor de línea, el cual estaba programado en assembler y con el hardware armado, la meta que nos propusieron fue la de hacer que ese robot fuera capaz de resolver un laberinto.

Investigación y búsqueda de información: Armado de circuitosComo primer objetivo que nos planteamos fue el conocer los detalles del robot, así sabemos dónde estamos parados a la hora de empezar a programar, que necesitamos tener en cuenta con respecto a materiales, herramientas etc.

El robot consta de los siguientes circuitos: Censado.

Los materiales destacados y utilizados en este circuito son los sensores CNY 70 y el CD 40106, debajo de detallan las funciones de los mismos.

Página 1 de 11

Sensores Cny 70:

El CNY70 es un paquete de emisor y receptor de infrarrojos. Su funcionamiento se basa en la capacidad de reflexión del objeto, ya que el emisor y el receptor apuntan en la misma dirección.

Los sensores están acomodados en el circuito tal que al encontrarse en un fondo negro entregue a la salida del transistor “0” (cero) y cuando este en blanco un 1 (cinco).

Sensores Cny 70

CD 40106:

El encapsulado CD40106 no es más que un inversor que al recibir un 0 entrega un 1 en su salida, y viceversa, este entrega las señales discretas invertidas a un Circuito integrado “Pic 16f628”.

Página 2 de 11

El robot consta de los siguientes circuitos: Control de motores.

En esta etapa el circuito integrado “Pic16f628” nos permite hacer una lectura de la situación de los sensores y también comandar ambos motores girando corrigiendo etc.

El robot consta de los siguientes circuitos: Circuito de fuerza.

Este es la etapa más simple del circuito, ya que el CI “pic16f628” envía pulsos a la base de los transistores, así polariza el transistor y los motores logran su funcionamiento.

Página 3 de 11

Funcionamiento de los motores: modulación por ancho de pulso

En nuestro caso, utilizamos servomotores. Los servos son un tipo especial de motor de c.c. que se caracterizan por su capacidad para posicionarse de forma inmediata en cualquier posición dentro de su intervalo de operación. Para ello, el servomotor espera un tren de pulsos que se corresponde con el movimiento a realizar.Se dice que el servo es un dispositivo con un eje de rendimiento controlado ya que puede ser llevado a posiciones angulares específicas al enviar una señal codificada (PWM). Mientras que este reciba determinados anchos de pulsos, el servo se mantendrá en una posición.Nosotros utilizamos 3 tipos de pulsos de un ciclo de 20ms (50 Hz). Para que el motor se posicione a 180º usamos 2,5 ms de tiempo en alto.Para que se posicione a 0º usamos 0,5 ms.Y para la posición neutral (90º) se utiliza 1,5 ms.

Página 4 de 11

Etapa de control: PIC 16f628a

Al ser un proyecto “heredado” tuvimos que acoplarnos a la tecnología usada en años anteriores (micro controladores, motores, etc.) y agregándole este año la implementación del lenguaje C.Podríamos decir que nuestro programa esta divido en 2 partes.

La primera, es en donde formamos el PWM. Para ello utilizamos la interrupción interna (RTC) con un prescaler de 256 µs (esto quiere decir que una vez activada, se interrumpirá lo que se haga cada 256 µs).

La segunda, es la etapa del censado. Allí miramos el estado de 3 salidas (RB0, RB1 y RB2) y depende el resultado (1 ó 0 lógico) tomaremos la acción.

Página 5 de 11

Desarrollo del proyecto robot - laberinto:Semana 1:

Entrega y charla de proyectos. Análisis de circuitos y pcb: Al hacerlo vimos que el hfe40106 estaba mal puesto, y lo pusimos

como debería estar, al ubicarlo y encenderlo funcionó con un giro derecha permanente con el programa antiguo.

Con un teléfono celular vimos el láser de los sensores para saber si no estaban quemados y logramos ver que el censor ubicado en medio estaba quemado, lo cambiamos viendo el data sheet del censor (alimentación salidas y demás)

Semana 2:

Luego de chequear la placa, comenzamos a pensar la forma en y con que íbamos a programar. Finalmente nos definimos por usar lenguaje c para micro controladores (CCS).

Ajeno a los servo motores y trenes de pulsos, lo primero que se pensó fue la forma en que verificaríamos el estado de los sensores. Lo que haría esta parte del programa es, mediante un Switch-Case (función de condición multiple) mira el estado de PORTB (donde se encuentran los sensores) y depende que número se forme en el registro iría a un caso determinado.

Luego, nos preguntamos “Y una vez que llegue a un case, ¿Qué va a hacer nuestro programa?”. Y ahí fue cuando decidimos hacer diferentes subrutinas para cada caso que se presente.

Página 6 de 11

Finalmente fue probado en proteus, y después de varias pruebas el switch-case funciono correctamente

Semana 3:

Dejando reposar el tema del switch-case nos pusimos a pensar la otra parte del programa, los trenes de pulsos. La idea anterior de trabajar con funciones fue descartada, y empezamos a plantear como lo utilizaríamos con interrupción en Timer 0.

La primicia era que, con un tiempo de interrupción determinado lleguemos a tener un pulso perfecto, ya que con una interrupción es mucho más sencillo y preciso que con funciones utilizando retardos (delay).

Se hizo un programa que no anduvo.

Semana 4:

Empezamos a escribir en código y compilar todo lo analizado en la semana anterior, pero haciéndolo por partes, así podíamos ver en donde estaba el error.

Paralelamente al timer, buscábamos otras posibles soluciones, y a la vez se diseñaba una nueva placa para el micro controlador y otra para los sensores.

Finalmente, se terminaron los diseños de las placas y el programa no tenía errores PERO había un problema de descoordinación en los motores y el PORTB no era leído.

Semana 5:

Con un programa ajeno al switch-case, pudimos lograr que el robot se mueva a la derecha a una velocidad muy lenta.

Al haber encontrado el problema, logramos un giro a una velocidad perfecta, rápida y prolija.

Semana 6:

Hicimos un programa que afecte solamente a un motor, para luego ver los pulsos que producía en el osciloscopio.

Empezamos a diseñar un nuevo programa también con timer 0, pero con un razonamiento o lógica distinta.

Semana 7:

Pasamos el diagrama de flujo a lenguaje C y después de algunos retoques de código, logramos que el motor pueda girar hacia la izquierda y la derecha (en la simulación).

Al paso de un mes y medio de la entrega de los proyectos, nuestros logros fueron:Rehacer el programa y adecuarlo al resuelve laberintos en CCS que antes no se había utilizado en el mismo, para poder hacerlo nos tuvimos que familiarizar con el tipo de leguaje entender la meta del proyecto y demás.

Página 7 de 11

Semana 1: En el transcurso del mes de Septiembre luego de la entrega escrita y oral del primer informe de

avances del proyecto, logramos manipular y hacer que el robot respondiera a la línea negra. Conseguimos hacer funcionar el robot siguiendo la línea negra con el nuevo lenguaje CCS. Decidimos poner en funcionamiento a dos robots ya que sería como replicar el nuestro y

además dejaríamos en funcionamiento dos.

Semana 2: Durante estos días tuvimos un gran avance con respecto al robot resuelve laberinto. En la segunda semana del mes de octubre logramos tener el robot resuelve laberintos casi

resuelto.Semana 3:

En la tercera semana del mes de octubre teníamos el robot resuelve laberintos resuelto a excepción de un solo cruce que al hacerlo los sensores con el movimiento censaban otro caso.

Para intentar solucionar eso cambiamos las ubicaciones de los censores para intentar evitar imperfecciones.

Cruz: lo resolvía sin problema tomando la dirección hacia la derecha.

Cruces tipo L también los resolvía sin ningún problema.

En este cruce “cruce en T” al realizar los giros, se formaban otros casos de giro.

Página 8 de 11

Semana 4: En la última semana del mes de octubre a 10 días de las olimpiadas de robot se nos comunicó

que la competencia no era con un robot inteligente, sino con uno seguidor de línea en carreras. En el transcurso de la semana, dejamos de lado el robot de laberintos y retomamos el seguidor. Al finalizar la semana el robot ya seguía la línea negra, pero con algunas correcciones un poco

bruscas, ya que con los motores nada más podíamos hacer movimientos de ± 90° y 0°. Empezamos a modificar al seguidor para que siga la línea blanca.

Semana 5: En la primera semana del mes de noviembre a 3 días del viaje mientras programábamos el

seguidor de línea blanca nos dimos cuenta que el robot no se comportaba de la misma manera. El día anterior al viaje nos recomendaron empezar otro programa para ver sus resultados.

Viaje a Bahía Blanca competencia de Robótica:En este viaje tuvimos la oportunidad de compartir buenos momentos con los docentes y alumnos, además participamos de varias charlas y capacitaciones sobre micro controladores, creación de circuitos electrónicos, realización de instalación domiciliaria y sobre el creciente uso y utilidades de las placas “arduino”.

En esta última capacitación de arduino mi compañero Arza Isaías se acercó a pedirle sugerencias, ideas y demás para poder solucionar el problema del robot seguidor de línea blanca y sus correcciones, él nos comentó que los servomotores que nosotros estábamos utilizando, para un corredor de carreras no servían ya que las velocidades y movimientos que nos ofrecen los mismos son muy limitadas. Añadió que esos motores venían perfectos para brazos robot y ese tipo de cosas en las que se necesita un límite de giro preciso, nos recomendó la utilización de motores de continua.

Siendo ya sábado y estando en la competencia seguíamos intentando hacer competir a los dos robots “sniffer 1” “sniffer 2”, pero cuando la carrera comenzó no teníamos mucho tiempo para seguir trabajando y decidimos confirmar nuestra descalificación en la carrera.

Cuando estuvimos de regreso en la escuela, seguíamos intentando variar las velocidades en los servomotores, pero sin conseguir mucho resultado decidimos poner en práctica varias sugerencias de nuestros docentes:

Hacer una placa de leds, en la que podamos ver el estado de cada sensor sin tener que levantar el robot. (resultados favorbles)

Cambiar la ubicación de la placa de los sensores adelante y atrás. (sin resultados) Girar la placa 180° para ver sus cambios y reacciones. (Sin resultados) Rehacer el hardware del robot sniffer 1. (Resultados favorables, conseguimos que la

estructura sea mucho más prolija)

Página 9 de 11

Probar las variaciones de los servomotores con una señal de un 555. (sin resultados buenos).

Conclusión:Después de todos los intentos que hicimos seguíamos sin poder hacer que el robot siguiera la línea blanca, y en el Primer encuentro regional de Robótica, realizado el día 26 de noviembre de 2013 en las instalaciones del colegio N°724 de la ciudad de Trelew nosotros como no llegábamos con el corredor de línea blanca pensamos en llevar el de línea negra, para no ir con las manos vacías. Luego de varias pruebas difícilmente seguía la línea negra, esto se debió a varias modificaciones en el programa y en el hardware.

En la feria del intec continuando con el proceso del seguidor de línea blanca, construimos otra placa de sensores, y terminamos de armar el hardware incompleto que teníamos.

En el día 30 de noviembre en la feria del intec pudimos retomar el seguidor de línea negra con el programa basado en “switch-case”.

Conseguimos el seguidor de línea negra con otro programa que nada mas censaba los 3 sensores del centro.

Utilizamos el programa de los tres censores para incorporarlo al seguidor de línea blanca. Tuvo muy buenos resultados, ya que seguía las curvas sin problema alguno, pero en las líneas rectas las correcciones seguían siendo bruscas seguía la línea blanca por unos 10 cm sin problema pero al empezar a corregir en línea recta re descarrilaba, ya que los motores nos entregan ± 90° y 0° la línea de dos centímetros es muy fina.

Nosotros llegamos a la conclusión de que el robot puede ser capaz de seguir línea blanca, pero no participar en una carrera, ya que los servomotores lo dificultarían.

Página 10 de 11