Reporte de Seguidor de Linea
August 29, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Reporte de Seguidor de Linea...
Description
INSTITUTO TECNOLÓGICO SUPERIOR DE LERDO INGENIERIA ELECTROMECÁNICA
MATERIA:
Microcontroladores
DOCENTE:
Angélica Velázquez Chávez
Equipo Integrantes: J. Alejandro Ramírez Contreras
16231433
Jorge Daniel Martínez Ruiz
16231144
José Luis Pérez Álvarez
16231375
Manuel Jiménez Ortega
15231621
Arturo Efrén Dueñez Rodríguez
16231652 Cd. Lerdo, Dgo. A 29 de abril de 2019.
Introducción En la clase de Microcontroladores aprendemos diferentes cosas, pero más que aprender, nos acercamos un poco más al conocimiento del funcionamiento y la programación de muchas de las cosas que utilizamos diariamente. En esta ocasión hablaremos sobre un *Carro seguidor de línea*. Empezando por el concepto de ¿Qué es un microcontrolador? hasta el diagrama de conexión para el modelo que escogimos. Para ello se tiene en cuenta datos sobre: alimentación o cuestión energética para alimentar todos los componentes del carro, el puente h que decidimos usar y el porqué, la estructura del código, la clase de sensores y él porque decidimos usar ese, la estructura del carro y por ultimo complementos como rueda loca o para desplazarse el carro. En cuestión de la estructura de la programación se tomó como base trabajos ya realizados para poder basarnos y realizar nuestra versión del carro seguidor de línea. El código fue basado en su totalidad en trabajos y ensayos ya realizados por “Aprendiendo Fácil Electrónica”.
Materiales: 1 arduino nano 1 puente H L298N 2 Micro motores pololu relación 10:1 de 3000 rpm 1 batería tipo lipo de 3 celdas de 11.1 V (el amperaje puede variar) 1 sensores QTR 8RC 2 Llantas para motores pololu
Procedimiento Para realizar el carro seguidor de línea primero se tienen en cuenta los materiales. Para ello la base de la estructura del carro son sensores, los motores, arduino, puente H L298N, los dos motores y la batería de litio tipo lipo.
Como se puede observar en la imagen, lo que se tiene que tomar en cuenta en la mayoría de la estructura del carro es la distribución de peso. La mayor dificultad que tuvimos para realizar la distribución de peso fue elegir el tipo de chasis que íbamos a usar ya que al principio compramos un chasis el cual abarcaba una parte del peso permitido por las normas de la competencia.
Para esto decidimos recortar algunas de las partes del chasis para aligerar el peso del mismo carro y así los motores puedan con el torque el cual le estamos demandando para éste. Lo siguiente que hicimos después de distribuir el peso de todos los componentes del carro fue realizar el diagrama de conexión, proporcionado por la página web www.aprendiendofacilelectronica.blogspot.com www.aprendiendofacilelectronica.blogspot.com ya que en esta página fue en donde nos basamos para realizar todo el trabajo.
Una vez realizada las conexiones se cargó el código en el arduino para hacer las pruebas del control PID para poder hacer las modificaciones correspondientes. #include ///////////////////////////////////////////////////////////////////////// //////////// //************* Programa realizado por MARCO A. CABALLERO MORENO*************** // // Solo para fines educativos // robot velocista mini FK BOT V 2.0 // // micro motores pololu MP 10:1, sensores qtr 8rc, driver drv8833, arduino nano // // 05/12/2014 // ACTUALIZADO 29/3/2015 ///////////////////////////////////////////////////////////////////////// //////////// //numero de sensores usados // tiempo de espera para dar resultado en uS //pin led on ///////////////pines arduino a utilizar///////////////////// #define led1 13 #define NUM_SENSORS #define TIMEOUT #define EMITTER_PIN
8 2000 6
#define #define #define #define #define #define #define
led2 mot_i mot_d sensores boton_1 pin_pwm_i pin_pwm_d
4 7 8 6 2 //pin para boton 9 10
QTRSensorsRC qtrrc((unsigned char[]) {19, 18, 17, 16,15,14,11,12} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN); //variables para almacenar valores de sensores y posicion unsigned int sensorValues[NUM_SENSORS]; unsigned int position=0; /// variables para el pid int derivativo=0, proporcional=0, integral=0; //parametros int salida_pwm=0, proporcional_pasado=0; ///////////////AQUI CAMBIEREMOS LOS PARAMETROS DE NUESTRO ROBOT!!!!!!!!!!!!!!! int velocidad=120; //variable para la velocidad, el maximo es 255 float Kp=0.18, Kd=4, Ki=0.001; //constantes //variable para escoger el tipo // de linea int linea=0; 0 para lineas negra, 1 para lineas blancas void setup() { delay(800); pinMode(mot_i, OUTPUT);//pin de direccion motor izquierdo pinMode(mot_d, OUTPUT);//pin de direccion motor derecho pinMode(led1, OUTPUT); //led1 pinMode(led2, OUTPUT); //led2 pinMode(boton_1, INPUT); //boton 1 como pull up for (int i = 0; i 1000) integral=1000; //limitamos la integral para no causar problemas if (integral velocidad ) salida de pwm if ( salida_pwm < -velocidad )
salida_pwm = velocidad; //limitamos la salida_pwm = -velocidad;
if (salida_pwm < 0) { motores(velocidad+salida_pwm, velocidad); } if { (salida_pwm >0)
motores(velocidad, velocidad-salida_pwm); } proporcional_pasado = proporcional; } //funcion para control de motores void motores(int motor_izq, int motor_der) { if ( motor_izq >= 0 ) //motor izquierdo { digitalWrite(mot_i,HIGH); // con high avanza analogWrite(pin_pwm_i,255-motor_izq); //se controla de manera //inversa para mayor control } else { digitalWrite(mot_i,LOW); //con low retrocede motor_izq = motor_izq*(-1); //cambio de signo analogWrite(pin_pwm_i,motor_izq); } if ( motor_der >= 0 ) //motor derecho { digitalWrite(mot_d,HIGH); analogWrite(pin_pwm_d,255-motor_der); } else { digitalWrite(mot_d,LOW); motor_der= motor_der*(-1); analogWrite(pin_pwm_d,motor_der); } } void frenos_contorno(int tipo,int flanco_comparacion) { if(tipo==0) { if(positionflanco_comparacion || sensorValues[1]>flanco_comparacion ) //asegurar que esta en linea {break;
} } }
if (position>=6550) //si se salio por la parte izquierda de la linea { motores(90,-80); while(true) { qtrrc.read(sensorValues); if(sensorValues[7]>flanco_comparacion || sensorValues[6]>flanco_comparacion ) { break; } } } } if(tipo==1) //para linea blanca con fondo negro { if(position
View more...
Comments