Tautronix - FASE 4

                                       


                                                


Introducción a la Ingeniería Electrónica - 710100M

Facultad de Ingeniería

Universidad del Valle


Integrantes

Daniel Eduardo Zuluaga Escobar - 202126017

Gonzalo José Paz González - 202124979


FASE 4 - Robot seguidor de línea Tautronix


Se decidió utilizar el driver para motores TB6612FNG que posee 2 puentes H, puede controlas hasta dos motores DC con corriente constante de 1.2A. Este driver tiene dos señales de entrada (IN1 y IN2) que sirven para controlar los motores en uno de cuatro modos: CW(giro en sentido de las manecillas del reloj), CCW (en contra de las manecillas), short-brake y stop. Las dos salidas de motores (A y B) pueden ser controladas de manera separada, la velocidad de cada motor es controlada mediante una señal PWM con una frecuencia de hasta 100kHz.

Figura 1 (Driver TB6612FNG)


Diagrama de conexión del robot:

Figura 2 (Diagrama de conexiones)


Diagrama de flujo del código:

Figura 3 (Diagrama de flujo)

Imágenes del montaje actualizado:

Figura 4 (Montaje - Lateral derecho)

Figura 5 (Montaje - Lateral izquierdo)

Figura 6 (Montaje - Arriba)

Video del robot en funcionamiento:

Figura 7 (Video Tautronix en funcionamiento)

Mecanismos de sujeción:

Se utilizó silicona caliente para fijar todas las piezas con el objetivo de que todo quede completamente fijo y que sea fácil de retirar en caso de querer hacer algún cambio.

Figura 8 (Silicona)

Pista de pruebas:

Se utilizó cartulina blanca y cinta aislante para hacer una pequeña pista de pruebas.

Figura 9 (Pista de pruebas)

Programa implementado para el funcionamiento de robot:

#define EMITTER_PIN             12  //Emitter es controlado por el pin digital 2
#define pwm_i 3
#define izq_1 5
#define izq_2 4

#define pwm_d 9
#define der_1 7
#define der_2 8

//Los sensores del 0 al 5 se conectaron a las entradas analógicas del 0 al 5, respectivamente.

void setup()
{  
delay(1000);
pinMode(izq_1,OUTPUT);
pinMode(izq_2,OUTPUT);
pinMode(der_1,OUTPUT);
pinMode(der_2,OUTPUT);
pinMode(6,OUTPUT);
  delay(500);
  int i;
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);    // Encender LED para indicar que está en modo calibración.
  for (i = 0; i < 400; i++)  //Realizar la calibración, toma unos 10 segundos
  {
    qtra.calibrate();       // Lee todos los sensores 10 veces a 2.5ms cada uno.
  }
  digitalWrite(13, LOW);     // Apagar el LED para indicar que pasó la calibración.
}
 
void loop()
  unsigned int position = qtra.readLine(sensorValues);
    digitalWrite(6,HIGH);
   if (sensorValues[0] < 500 && sensorValues[1] < 500 && sensorValues[2] < 500 && sensorValues[3] < 500 && sensorValues[4] < 500 && sensorValues[5] < 500 && sensorValues[6] < 500 && sensorValues[7] < 500)
  {
    digitalWrite(izq_1,LOW);
    digitalWrite(izq_2,HIGH);
    analogWrite(pwm_i,75);
    digitalWrite(der_1,LOW);
    digitalWrite(der_2,HIGH);
    analogWrite(pwm_d,75);
  }
  if (sensorValues[3] > 500 && sensorValues[4] > 500)
  {
    digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,150);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,150);
  }
  if(sensorValues[3] > 500 && sensorValues[2] > 500)
    {digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,150);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,125);
    }
  if(sensorValues[2] > 500 && sensorValues[1] > 500)
    {digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,150);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,100);
    }
   if(sensorValues[1] > 500 && sensorValues[0] > 500)
    {digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,150);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,75);
    }
     if (sensorValues[4] > 500 && sensorValues[5] > 500)
  {
    digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,125);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,150);
  } 
  if(sensorValues[5] > 500 && sensorValues[6] > 500)
    {digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,100);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,150);
    }
  if(sensorValues[6] > 500 && sensorValues[7] > 500)
    {digitalWrite(izq_1,HIGH);
    digitalWrite(izq_2,LOW);
    analogWrite(pwm_i,75);
    digitalWrite(der_1,HIGH);
    digitalWrite(der_2,LOW);
    analogWrite(pwm_d,150);
    }
  }

Explicación:

"pmw_d" corresponde al motor derecho.
"pmw_i" corresponde al motor izquierdo.

Velocidad máxima 150, velocidad mínima 0.
  • La parte derecha del sensor corresponde a los sensores 0, 1 y 2.
  • La parte central del sensor corresponde a los sensores 3 y 4.
  • La parte izquierda del sensor corresponde a los sensores 5, 6 y 7.
  • Si los sensores del lado derecho detectan negro arrojando valores mayores a 500 (Cercanos a 1000) el motor del lado izquierdo baja la velocidad. Asimismo pasa con el lado izquierdo, cuando los sensores detectan negro y arrojan valores mayores a 500 el motor del lado derecho baja la velocidad y el motor del lado izquierdo se pone a su máxima velocidad.
  • Si los sensores de la parte central (3 y 4) arrojan valores mayores a 500 se le asigna a ambos motores la velocidad máxima.








Comentarios

Entradas populares de este blog

Robot laberinto Kastelean

Fase 4 Robot seguidor de linea

FASE 2 ROBOT SEGUIDOR DE LINEA