Reporte de Seguidor de Linea

August 29, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF