Sunteți pe pagina 1din 3

Universitaria De Investigacin y Desarrollo, Maikol Fernando Navarro, Freddy Camargo, Diego Mendez.

ROBTICA
Navarro Maikol., Camargo Freddy. Mendez Diego. Fabio Quintero UNIVERSITARIA DE INVESTIGACION Y DESARROLLO

PROGRAMA
#include "EFmJM60_StackConfig.h" //Libreria de Configuracion Global /*************************************************** *****************/ /*---------- Espacio para declaracion de constantes ---------------*/ /*************************************************** *****************/ //valore de referencia de cada sensor que me diera si estaba en blanco o negro #define REFERENCIA #define REFERENCIA3 #define REFERENCIA4 218 //Q3 215 //Q4 216 //Q2

Resumenavance en la realizacin de carro seguir de lnea tanto en la parte de hardware como la de software. INTRODUCCIN El sensor se alimenta con un voltaje de 3.3v y mediante toma de datos por puerto serial paso el sensor por blanco y negro y me da esta grafica.

/*************************************************** *****************/ /*------- Espacio para declaracion de variables globales ----------*/ /*************************************************** *****************/ unsigned char DatoADC[5];

/*************************************************** *****************/ /*************************************************** *****************/ /*-------------------- Espacio para funciones --------------------*/ /*************************************************** *****************/

Grafica de sensor

En el microcontrolador la configuracin de la resolucion del ADC es de 8 bits. Con eso analizo los valores que me da la grfica y determino los lmites entre blanco y negro. Hasta ahora se ha realizado qu valor es el ms adecuado para que me determine si el sensor esta sensando blanco o negro y me realice las respectiva direccin de los motores.

//funcion para detener los motores void Robot_Detener(void){ // Controla direccion de Motor1, entradas al puente H PTED_PTED5=0; PTED_PTED4=0; // Controla direccion de Motor2,entradas al puente H PTED_PTED6=0; PTED_PTED7=0; } //funcion para que los dos motores tengan aprox. las mismas revoluciones void Robot_Adelante(int duty){ //incremento del pwm proporcionalmente while(duty<7200){ set_pwm5_duty(duty); set_pwm6_duty(duty); delay_ms(1); duty=duty + 450;

Universitaria De Investigacin y Desarrollo, Maikol Fernando Navarro, Freddy Camargo, Diego Mendez.

PTED_PTED5=1; PTED_PTED4=0; PTED_PTED6=0; PTED_PTED7=1;

//Configura como salida el puerto que controla habilitador de Motor2 PTEDD_PTEDD3=1;

//Habilita Motor1 PTED_PTED2=1; } } //funcion que el carro gire a la izquierda void Robot_Izquierda(int duty_der1, int duty_der2){ setup_adc_clock(ADC_CLOCK_DIV_4); // Configura Reloj para ADC setup_adc_ports(AN0|AN1|AN2|AN3|AN4); // Configura puertos como entradas analogas (B0..B4) set_adc_channel(ChAN0); // Selecciona primer canal para convertir por AD //Habilita Motor2 PTED_PTED3=1;

set_pwm5_duty(duty_der2);//M1 set_pwm6_duty(duty_der1);//M2 delay_ms(1);

PTED_PTED5=1; PTED_PTED4=0; PTED_PTED6=0; PTED_PTED7=1; } //funcion que el carro gire a la derecha void Robot_Derecha(int duty_der1, int duty_der2){ set_frecuency_pwm6(3000); el PWM Ch6 (E2) setup_pwm6(CLEAR_ON_COMPARE); PWM M2 set_pwm6_duty(65500); Duty canal6 set_frecuency_pwm5(3000); 50 Hz el PWM Ch5 (E3) setup_pwm5(CLEAR_ON_COMPARE); PWM M1 set_pwm5_duty(65500); Duty canal5 // Ajusta // Habilita // Ajusta

// Ajusta a // Habilita // Ajusta

set_pwm5_duty(duty_der2);//M1 set_pwm6_duty(duty_der1);//M2 delay_ms(1);

PTED_PTED5=1; PTED_PTED4=0; PTED_PTED6=0; PTED_PTED7=1;

for(;;){

start_adc_channel(ChAN1); // Inicia ADC por canal 1 wait_adc_done(); // Espra fin de ADC DatoADC[1]=read_adc(); // Almacena resultado start_adc_channel(ChAN2); // Inicia ADC por canal 2 wait_adc_done(); // Espra fin de ADC DatoADC[2]=read_adc(); // Almacena resultado start_adc_channel(ChAN4); // Inicia ADC por canal 4 wait_adc_done(); // Espra fin de ADC DatoADC[4]=read_adc(); // Almacena resultado

/*************************************************** *****************/ /*************************************************** *****************/ /*------------------- Espacio de codigo principal -----------------*/ /*************************************************** *****************/ void main(void) { mcu_init(); //Inicializa microcontrolador (No Borrar)

//Configura como salida los puertos para controlar direccion de Motor1 PTEDD_PTEDD5=1; PTEDD_PTEDD4=1; //Configura como salida los puertos para controlar direccion de Motor2 PTEDD_PTEDD6=1; PTEDD_PTEDD7=1; //Configura como salida el puerto que controla habilitador de Motor1 PTEDD_PTEDD2=1; // siga derecho if(DatoADC[4]>REFERENCIA) Robot_Adelante(6000);//Q3 mitad negro //giro a la izquierda if(DatoADC[1]<REFERENCIA4){ //Q4 este en blanco

Universitaria De Investigacin y Desarrollo, Maikol Fernando Navarro, Freddy Camargo, Diego Mendez.

if(DatoADC[4]<REFERENCIA)Robot_Izquierda(3600,9000) ; //Q3 este en blanco } //giro a la derecha if(DatoADC[2]<REFERENCIA4){ //Q2 esta en blanco

if(DatoADC[4]<REFERENCIA)Robot_Derecha(87 00,3400) ;//Q3 este en blanco }

delay_ms(1); // Retardo entre bucle } }

CONCLUSIONES Para mejorar el sensado se elev la base de los motores para que nos bajara los sensores y que nos diera una mejor respuesta. Para el manejo de las curvas se escogi que dos sensores el de la mitad y alguno de las esquinas ya sea izquierda o derecha si censaban blanco me manejaran el respectivo control de los motores que me diera la curva. No se pudo incrementar velocidad porque se perda el control de carro. La evolucin del control es un control PID que me corrija el error.

S-ar putea să vă placă și