You are on page 1of 31

ROBOT - LABERINTO

FABINTON SOTELO GOMEZ ANDRES FELIPE VELASCO

UNIVERSIDAD NACIONAL ABIERTA Y ADISTANCIA UNAD FACULTAD DE CIENCIAS BASICAS E INGENIERA INGENIERIA DE SISTEMAS ROBOTICA POPAYAN, 09 SEPTIEMBRE DE 2.006

ROBOT LABERINTO

PLANTEAMIENTO DEL PROBLEMA Con el auge tecnolgico en el que cada da nos vemos imbolucrados en nuestra sociedad, vemos que el uso de nuevas herramientas tecnologicas a nivel de ingenieria tanto electrnica como de sistemas se hace mas comn. Es por ello que surge la idea de entrar a explorar ese mundo para tratar de experimentar y solucionar el siguiente problema: Se requiere de una maquina electromecnica autnoma (podra ser en forma de un auto) que sea capaz de pasar de inicio a fin el siguiente laberinto, sin tocar sus bordes y lo mas rpido posible..

La pregunta es: Como y que necesitamos para realizar es robor para que recorra este laberinto

de forma eficientemente ?

JUSTIFICACIN La realizacin de este proyecto parte de la idea de colocar aspectos claves en el curso de ROBOTICA, como lo es el manejo de sensores, PICs, Dispositivos electrnicos , Desarrollo de Software y manejo de aplicaciones que me permitan la realizacin de este proyecto. De otro lado nos vemos en la necesidad de comenzar a trabajar en proyectos en los cuales se podran representar a la Universidad en eventos en los cuales aun no lo ha hecho, A dems te ver reflejado de forma real los conceptos bsicos de la materia, como son la autonoma que ciertas maquinas podran llegar a tener de acuerdo a una programacin humana.

OBJETIVO GENERAL Con la realizacin de este proyecto se pretende: Los que se pretende con este proyecto es la elaboracin de una maquina electromecnica capas de detectar obstculos (en el momento que debe realizar las curvas) y tomar una decisin optima para superarlo y cumplir con su objetivo, el cual es recorrer de principio a fin el laberinto planteado Los que se pretende con este proyecto es la elaboracin de una maquina electromecnica capas de detectar obstculos (en el momento que debe realizar las curvas) y tomar una decisin optima para superarlo y cumplir con su objetivo, el cual es recorrer de principio a fin el laberinto planteado

OBJETIVOS ESPECIFICOS 1. Conocer algunas especificaciones del hardware que se va ha utilizar. 2. Conocer algunas especificaciones software que se va ha utilizar para la programacin del microcontrolador. 3. Realizar el montaje electromecnico del ROBOT-LABERINTO. 4. Desarrollar el software capaz de controlar el ROBOT-LABERINTO.

REFERENTES TERICOS Desde el inicio de la historia el hombre siempre ha tratado de mejorar su calidad de vida, buscando asi la manera de explorar, experimentar, crear y utilizar nuevas herramientas que le faciliten la realizacion de sus actividades. En la linea del tiempo nos damos cuenta como el hombre a medidad de sus necesidades a inventado herramientas como el hacha, el fuego, la rueda, la transformacion del metal, la polvora entre otras que han marcado la hiostoria de vida, Es asi como se ha llegado a la creacion de maquinas en su principio mecanicas, luego electromecanicas hasta llegar a maquinas electromecanicas programadas por computador con el objetivo de realizar tareas mas complejas y precisas. Hoy en dia observanos como a Maquinas Electromecanicas cumplen con funciones delicadas donde se compromete la vida humana (Robots que interbienen en cirujias), exploradeores de suelos minados, en la industria auto motriz y en el hogar. Por lo anterior podemos decir que los robots cumplen una una gran utilidad social, econimica e investigativa donde toda la humanidad ha reconocido sus avences tecnologicos. Con este proyecto como futuros ingenieros de sistemas pretendemos acercarnos mucho mas a esta tecnologia, apoderarnos de ella para llevar acabo nuestro objetivo, por tal razon dedicaremos parte de nuestro tiempo a conocer y aplicar las utilidades que nos brinda la electronica y el desarrollo de software.

DEFINICIN DEL EQUIPO DE TRABAJO Nuestro equipo de trabajo esta conformado por las siqguietes personas: Nombre: Andres Felipe velasco: Perfil: Tecnologo en Desarrollo de Software, Estudiante de Ultimo Semestre de Ingenieria de Sistemas de la Universidad Nacional Abierta y a Distancia UNAD, E-Mail: andresfel_03@yahoo.es, Cargo en el Proyecto: Profudizar en los componente electronicos y microcontrolador; Montage del cicuito Electronico. Nombre: Andres Felipe velasco: Perfil: Tecnologo en Desarrollo de Software, Tecnologo en Administracon de Redes de Computadores, Estudiante de Ultimo Semestre de Ingenieria de Sistemas de la Universidad Nacional Abierta y a Distancia UNAD, E-Mail: fabinton.sotelo@gmail.com. Cargo en el Proyecto: Profudizar en los componente Software para la programacion del microcontrolador; Montage del cicuito Electronico. Nota: Los dos participantes se comprometen a compartir mutuamente los nuevos conocimientos adquiridos y a su dominio de ellos,

METODOLOGA

Para el cumplimiento de nuetsro objetivo, el proyecto lo dividiremos en las siguientes faces: 1. Recoleccion de Informacion: En esta nos documetaremos teoricamente sobre los dispositivos a utilizar. 2. Desarrollo de Hardware: En esta se arma completamente el Robot Laberinto, segn esto conoceremos aspectos claves para comenzar a programar . 3. Desarrollo de Software: En esta fase comenzaremos a realizar la progranacion del software para el microcontrolador, haciendo simulaciones software. 4. Pruebas: Se empotrara el software al microcontrolador y se realizaran pruebas de funcionamiento. 5. Implementacion: Se colocara al Robot Laberinto en el laberinto,

CRONOGRAMA Nuestro cronograma de trabajo se basa en las faces nombrada:

Fase Recoleccion Informacion Desarrollo de Hardware Desarrollo de Software Pruebas Implementacion

No Semanas de 1 3 2 1 2

de Fecha 25 (L) Septiembre 3 (L) Octubre 4 (M) Octubre 17 (M) Octubre 18 (Mi) Octubre 1 (Mi)Noviembre 2 (J)Noviembre - 14 (J)Noviembre 15 (V)Noviembre - 23 (J)Noviembre

PRESUPUESTO Y FINANCIACIN Para la realizacion del proyecto se requieren los siguiente materiales relacionados con su costo:

CANTIDAD 2 6 2 1 1 1 1 1 1 1 1 2 Total

ELEMENTO Servomotores Ruedas Sensores de distacia. Baquela perforada. Pieza de acrilico. Microcontrolador pic 16f876A de Microchip. LB1649 que es un puente H se usa para darle los giros a los servomotores LM7505. Cristal de 4MHZ. Buzzer. Bateria de 9 voltios Condensadores, resistencias, diodos, cables, leds, tornillos, turcas, conectores, lamina

COSTO 40,000 10,000 60,00 4,000 5,000 30,000 6,000 2,000 10,000 7,000 10,000 20,000 204,000

Los costos se asumiran de partes iguales por los participarntes del proyecto, el quemaodor del PIC se pedir en calidad de prestamo.

FASE UNO RECOLECCION DE INFORMACION MICROCONTROLADOR: Se denomina microcontrolador a un dispositivo programable capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales y del control y comunicacin digital de diferentes dispositivos. Los microcontroladores poseen una memoria interna que almacena dos tipos de datos; las instrucciones, que corresponden al programa que se ejecuta, y los registros, es decir, los datos que el usuario maneja, as como registros especiales para el control de las diferentes funciones del microcontrolador. Los microcontroladores se programan en Assembler y cada microcontrolador vara su conjunto de instrucciones de acuerdo a su fabricante y modelo. De acuerdo al nmero de instrucciones que el microcontrolador maneja se le denomina de arquitectura RISC (reducido) o CISC (complejo). Los microcontroladores poseen principalmente una ALU (Unidad Lgico Aritmtica), memoria del programa, memoria de registros, y pines I/O (entrada y/0 salida). La ALU es la encargada de procesar los datos dependiendo de las instrucciones que se ejecuten (ADD, OR, AND), mientras que los pines son los que se encargan de comunicar al microcontrolador con el medio externo; la funcin de los pines puede ser de transmisin de datos, alimentacin de corriente para l funcionamiento de este o pines de control especifico

En este proyecto se utilizo el PIC 16F877. Este microcontrolador es fabricado por MicroChip familia a la cual se le denomina PIC. El modelo 16F877 posee varias caractersticas que hacen a este microcontrolador un dispositivo muy verstil, eficiente y practico para ser empleado en la aplicacin que posteorimente ser detallada. Algunas de estas caractersticas se muestran a continuacin: Soporta modo de comunicacin serial, posee dos pines para ello.

Amplia memoria para datos y programa. Memoria reprogramable: La memoria en este PIC es la que se denomina FLASH; este tipo de memoria se puede borrar electrnicamente (esto corresponde a la F en el modelo).

Set de instrucciones reducido (tipo RISC), pero con las instrucciones necesarias para facilitar su manejo.

DIAGRAMA DE PINES

SENSOR Un sensor es un dispositivo formado por clulas sensibles que detecta variaciones en

una magnitud fsica (luz, temperatura, sonido, tamao, velocidad, color, etc.) u otras alteraciones de su entono, y las convierte en seales tiles para un sistema de medida o control. Pueden ser de indicacin directa (Ej. un termmetro de mercurio) o pueden estar conectados a un indicador (posiblemente a travs de un convertidor analgico a digital, un computador y un display) de modo que los valores obtenidos puedan ser ledos por un humano. SENSOR DE INFRARROJOS: Descripcin: Es un pequeo dispositivo que puede alojar en su interior un diodo emisor de infrarrojos que trabaja a una longitud de onda determinada y un receptor, que puede ser un fototransistor (deteccin de lnea o proximidad) que se dispone en paralelo al emisor apuntando ambos en la misma direccin, puede ser un sensor lineal (medidor de distancias), dependiendo del modelo su salida puede ser analgica, digital o booleana. O puede ser un detector modulado de infrarrojos, este sensor incorpora un modulador/demodulador integrado en su carcasa y a travs de una patilla controla un diodo LED de infrarrojos externo, modulando la seal que este emitir, para ser captada por el receptor. Cuando un objeto se sita enfrente del conjunto emisor/receptor parte de la luz emitida es reflejada y demodulada para activar la salida que pasar a nivel bajo si la seal captada es suficientemente fuerte. El uso de luz IR modulada tiene por objeto hacer al sensor relativamente inmune a las interferencias causadas por la luz normal de una bombilla o la luz del sol. Funcionamiento: El dispositivo emite luz infrarroja por medio de un led emisor de IR y dependiendo del receptor, tenemos los siguientes funcionamientos: Si se trata de un fototransistor, contra ms luz reflejada del emisor capte por su base mas conducir el fototransistor (una superficie blanca refleja mucho ms que una negra). La salida de este dispositivo es analgica y viene determinada por la cantidad de luz reflejada. Si de trata de un sensor lineal, la luz del emisor pasa atravez de un lente qu concentra los rayos de luz formando un nico rayo lo mas concentrado posible para as mejorar la directividad del sensor, la luz va recta hacia delante y cuando encuentra un obstculo

reflectante rebota y retorna con cierto ngulo de inclinacin dependiendo de la distancia, la luz que retorna es concentrada por otra lente y as todos los rayos de luz inciden en un nico punto del sensor de luz infrarroja que contiene en la parte receptora del dispositivo. Este sensor es un CCD lineal y dependiendo del ngulo de recepcin de la luz incidir esta en un punto u otro del sensor pudiendo de esta manera obtener un valor lineal y proporcional al ngulo de recepcin del haz de luz.

Nuestro sensor:

El Sharp GP2D12 es un sensor medidor de distancias por infrarrojos que indica mediante una salida analgica la distancia medida. La tensin de salida vara de forma no lineal cuando se detecta un objeto en una distancia entre 10 y 80 cm. La salida esta disponible de forma continua y su valor es actualizado cada 32 m. Normalmente se conecta esta salida a la entrada de un convertidor analgico digital el cual convierte la distancia en un numero que puede ser usado por el microprocesador. La salida tambin puede ser usada directamente en un circuito analgico. Hay que tener en cuenta que la salida no es lineal. El sensor utiliza solo una lnea de salida para comunicarse con el procesador principal. El sensor se entrega con un conector de 3 pines. Tensin de funcionamiento 5V, Temperatura funcionamiento:-10 a 60C, Consumo Medio: 35 mA. Margen de medida 10cm a 80 cm.

Dual Bidirectional Motor Driver


Es el encargado de manejar los motores:

FASE 2 Desarrollo de Hardware Se identificaron los elementos necesarios para el circuito electronico y puertos a usar

CIRCUITOS DEL CARRO

Censor Frontal

Seal del Censor

Motor Salida 0,1 Pin 3 Salida 0,1 Diodo Negro Diodo Sener Salida 0,1

Censor Lateral

Pin 11 Pin 3 Pin 5 Tierra Pin 8

Conector del Censor Tierra Conector del Censor Motor Condensador Tierra

Positivo

Seal del Censor

Salida 0,1

FASE 3 Desarrollo de Software:


//HEADER FILES (.H) //ADC.H: Configuracion del modulo analogo digital #ifndef _ADC_H_ #define _ADC_H_ void AdcSetup(void); float Leer_canal(unsigned char); #endif //BATERIA.H #include <pic.h> #include "adc.h" #define VoltajeUmbral 819 #define LedBateriaTris TRISB4 #define LedBateria RB4 #define CanalBateria 0 void BateriaInicio(void); void ChequearVoltajeBateria(void); //BUZZER.H #include <pic.h> #include "delay.h" #define RetardoBuzzer 50 #define BuzzerTris #define BuzzerPort void BuzzerInicio(void); void Pitar (void); //DELAY /* * Delay functions for HI-TECH C on the PIC * * Functions available: * DelayUs(x) Delay specified number of microseconds * DelayMs(x) Delay specified number of milliseconds * * Note that there are range limits: x must not exceed 255 - for xtal * frequencies > 12MHz the range for DelayUs is even smaller. * To use DelayUs it is only necessary to include this file; to use * DelayMs you must include delay.c in your project. * */ /* Set the crystal frequency in the CPP predefined symbols list in HPDPIC, or on the PICC commmand line, e.g. TRISB2 RB2

picc -DXTAL_FREQ=4MHZ or picc -DXTAL_FREQ=100KHZ Note that this is the crystal frequency, the CPU clock is divided by 4. * */ #ifndef XTAL_FREQ #define XTAL_FREQ #endif #define MHZ #define KHZ #if *1000L *1 4MHZ /* Crystal frequency in MHz */ /* number of kHz in a MHz */ /* number of kHz in a kHz */ MAKE SURE this code is compiled with full optimization!!!

XTAL_FREQ >= 12MHZ { unsigned char _dcnt; \ _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \ while(--_dcnt != 0) \ continue; } { unsigned char _dcnt; \ _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \ while(--_dcnt != 0) \ continue; }

#define DelayUs(x)

#else #define DelayUs(x)

#endif extern void DelayMs(unsigned char); //Programa de conduccion de un movil en un LABERINTO //Configuracion de pines: // RC4-> Salida motor derecho A // RC1-> Salida motor derecho B // RC2-> Salida motor izquierdo B // RC5-> Salida motor izquierdo A // Los motores con A=1,B=0 giran hacia adelante. // Los motores con A=0,B=1 giran hacia atras. // Los motores con A=0,B=0 paran. #include <pic.h> #define TrisMotorDerechoA #define TrisMotorDerechoB #define TrisMotorIzquierdoA #define TrisMotorIzquierdoB #define MotorDerechoARC4 #define MotorDerechoBRC1 TRISC4 TRISC1 TRISC5 TRISC2

#define MotorIzquierdoA #define MotorIzquierdoB #define PWM_FREC_E 200

RC5 RC2

void MotoresInicio(void); //Inicializa el funcionamiento de los motores void MotorDerechoPwm(unsigned char); //Modifica el PWM del motor derecho. void MotorIzquierdoPwm(unsigned char); //Modifica el PWM del motor izquierdo. void MotorDerechoAdelante(void); //Pone a andar el motor derecho hacia adelante void MotorDerechoAtras (void); //Pone a andar el motor derecho hacia atras void MotorIzquierdoAdelante(void); //Pone a andar el motor izquierdo hacia adelante void MotorIzquierdoAtras (void); //Pone a andar el motor izquierdo hacia atras void IrAdelante(); void PararMotores(); void GirarDerecha(); void GirarIzquierda(); //void final(); //SENSORES #include <pic.h> #include <math.h> #define SensorFrontalCanal 1//va al AN1 que es el pin 3 #define SensorLateralCanal 2//va al AN1 que es el pin 4 float LeerDistanciaFrontal( void ); -*-*-* - SOURCE FILES (.C) -*-*-*//ADC.C Configuracion del modulo analogo digital #include <pic.h> #include "adc.h" #include "delay.h" void AdcSetup() //FUNCION DE CONFIGURACION DEL PUERTO ANALOGO. { ADCON1 = 0b10000000; // Entradas analogas todas//0b=se trabaja con codigo binario//justificacion a la derecha?? ADCON0 = 0xc1; //Reloj RC del ADC, CANAL 0//0x=se trabaja con codigo hexaecimal//11000001 TRISA = 0XFF;//el puerto queda configurado como entrada ADIF = 0; //BORRO LA BANDERA DEL CONVERSOR } float Leer_canal(unsigned char CANAL) { float RESULT; ADCON0 = (CANAL<<3)+ 0xC1; //Reloj RC DelayUs(30); //Retardo para tiempo de adquisicin. ADGO = 1; while (ADGO)continue; RESULT= (float)( (((unsigned int)ADRESH)<<8 ) + (unsigned int)ADRESL ) * 0.0048875855; return RESULT;

} *-*#include "bateria.h" void BateriaInicio() { LedBateriaTris = 0; LedBateria = 0; }

//configuracion del pin RC7 como salida a led //Inicializamos el led apagado.

void ChequearVoltajeBateria(void) { if(Leer_canal(CanalBateria) <= VoltajeUmbral) { LedBateria = 1; } else{LedBateria = 0;} } //BUZZER #include "buzzer.h" void BuzzerInicio () { BuzzerTris = 0; //Configuramos el pin como salida BuzzerPort = 0; //Se apaga el buzzer } void Pitar() { BuzzerPort = 1; DelayMs(RetardoBuzzer); BuzzerPort = 0; DelayMs(RetardoBuzzer); BuzzerPort = 1; DelayMs(RetardoBuzzer); BuzzerPort = 0; } //DELAY.C /* * * * * */ Delay functions See delay.h for details Make sure this code is compiled with full optimization!!! "delay.h"

#include

void DelayMs(unsigned char cnt)

{ #if

XTAL_FREQ <= 2MHZ do { DelayUs(996); } while(--cnt);

#endif #if XTAL_FREQ > 2MHZ unsigned char i; do { i = 4; do { DelayUs(250); } while(--i); } while(--cnt); #endif } //MAIN #include <pic.h> #include "motores.h" #include "bateria.h" #include "buzzer.h" #include "sensores.h" #include "adc.h" #include "delay.h" void main (void) {unsigned int cont=0; AdcSetup(); MotoresInicio(); BateriaInicio(); BuzzerInicio(); DelayMs(255); DelayMs(255); DelayMs(255); DelayMs(255); TRISB3=0; TRISB4=0; Pitar(); //IrAdelante(); while(Leer_canal(SensorFrontalCanal) < 1.8)//LeerDistanciaFrontal() > 14.0) adelante hasta que la distancia sea menor de 11cm { IrAdelante(); } PararMotores(); GirarDerecha(); PararMotores(); cont=cont+1; //Nos encontramos el primer giro a la derecha. //Vamos hacia

while(LeerDistanciaFrontal() > 12.0) de 11cm { IrAdelante(); } PararMotores(); GirarIzquierda(); PararMotores(); while(1)continue;

//Vamos hacia adelante hasta que la distancia sea menor

//Nos encontramos el segundo giro a la izquierda.

//

while(1)//(Leer_canal(SensorLateralCanal)>0.9 ) { IrAdelante(); } PararMotores(); while(1)continue; } //MOTORES #include "motores.h" #include "delay.h" #include "sensores.h" #include "ADC.H" #define INCREMENTO 5 void MotoresInicio(void) { TrisMotorDerechoA = 0; //pin como salida TrisMotorDerechoB = 0; //pin como salida TrisMotorIzquierdoA = 0; //pin como salida TrisMotorIzquierdoB = 0; //pin como salida PR2 = PWM_FREC_E; // CCPR1L = 2; CCPR2L = 2; T2CON =0b00000100; //Post- escalador y pre*escalador a 1:1, tmr2 encendido. CCP1CON = 0b00001111; CCP2CON = 0b00001111; } void MotorDerechoPwm(unsigned char PWM_VALOR) { if (MotorDerechoA == 1) {CCPR2L = 200 - PWM_VALOR;} else {CCPR2L = PWM_VALOR;} } void MotorIzquierdoPwm(unsigned char PWM_VALOR) { if (MotorIzquierdoA == 1) {CCPR1L = 200 - PWM_VALOR;} else {CCPR1L = PWM_VALOR;} } void MotorDerechoAdelante(void) { MotorDerechoA = 1;

} void MotorDerechoAtras (void) { MotorDerechoA = 0; } void MotorIzquierdoAdelante(void) { MotorIzquierdoA = 1; } void MotorIzquierdoAtras (void) { MotorIzquierdoA = 0; } void IrAdelante() { if(Leer_canal(SensorLateralCanal)>1.5)//correcion motor izq { MotorDerechoAdelante(); MotorDerechoPwm(145); MotorIzquierdoAdelante(); MotorIzquierdoPwm(148+4); //INCREMENTADO RB3=1; RB4=0; } else { MotorDerechoAdelante(); MotorDerechoPwm(145+INCREMENTO+1); MotorIzquierdoAdelante(); MotorIzquierdoPwm(150); RB3=0; RB4=1; } } void PararMotores() { MotorDerechoPwm(1); MotorIzquierdoPwm(1); DelayMs(255); } void GirarDerecha() { MotorDerechoAtras(); MotorIzquierdoAdelante(); MotorDerechoPwm(120); MotorIzquierdoPwm(120); DelayMs(192); }

void GirarIzquierda() { MotorIzquierdoAtras(); MotorDerechoAdelante(); MotorIzquierdoPwm(120); MotorDerechoPwm(120); DelayMs(203); } /*void final() { if((Leer_canal(SensorLateralCanal)>40) && (Leer_canal(SensorFrontalCanal>70 && (cont==2)))) { } }*/ //SENSORES #include "sensores.h" #include "adc.h" float LeerDistanciaFrontal( void ) { float Voltaje; Voltaje = Leer_canal(SensorFrontalCanal); return (6.29579 + 2475.13 * exp(-Voltaje/0.10339)+81.405 * exp(-Voltaje/0.79197)); }

FASE 4 Pruebas: Se empotrara el software al microcontrolador y se realizaran pruebas de funcionamiento.

FASE 5 Implementacion: ,

BIBLIOGRAFA 1. GIAMARCHI, Frederic. 2001. 2. lBOLTON, W. Mecatrnica. 3. OLLERO, Anbal. Mxico, 2001. 4. BARRIENTOS, Antonio y otros. Madrid, 1997. 5. Internet, Fundamentos de robtica. Mc Graw Hill, Robtica. Sistemas de control electrnico en ingeniera Manipuladores y robots mviles. Alfaomega, mecnica y elctrica. Alfaomega, Mxico, 2001. Robots mviles. Estudio y construccin. Paraninfo.

You might also like