SWIFT DRAGON F5

                      Universidad del Valle

Introducción a la ingeniería electrónica

Julio Hernán Flores Acosta - 2170357

Fase 5: Robot seguidor de línea Swift Dragon 



Swift Dragon es un seguidor de linea integrado con una regleta de sensores QTR-8A, un Arduino nano y un driver TB6612FNG, capaz de seguir una linea de color negro en una superficie de color blanco , relativamente se puede considerar que es muy eficiente al realizar esta tarea, ya que por el par de motores N20 de 3000rpm puede alcanzar una buena velocidad para recorrer circuitos rápidamente.

Es importante destacar que a lo largo de este proceso desde el inicio hasta la fase actual se han realizado ciertos cambios que permitieron mejorar el rendimiento, entre estos están:

CAMBIO DE BATERIA DE 9V A 7,4V 1000mah


Batería LiPo (polímero de iones de litio) de descarga alta, permite que los dos motores puedan funcionar correctamente abasteciendo su consumo de de 300 mah, además de suministrar la corriente suficiente para que el Arduino y puente h puedan funcionar.

Características

  • Capacidad: 1000mAh
  • Voltaje: 2S1P / 2 / celulares 7.4V
  • Descarga: 25C Constante / 35C Burst
  • Peso: 67 g (incluyendo cable y enchufe)
  • Dimensiones: 72x34x15mm
  • Conector de Balance: JST-XH

CAMBIO DE RUEDAS, /(SE AGREGA SUJETADORES A LOS MOTORES)
En el caso de las ruedas se realizo el cambio por unas de 3mm de diámetro a causa de que las anteriores habían sido adaptadas y presentaban desbalanceo en comparación con estas y el soporte del motor garantiza mayor fijación y seguridad que las amarras de plástico utilizadas inicialmente. 

Esquema final de conexión  entre los compuestos utilizados

Diagrama de bloques



CODIGO PID

PID significa Proporcional, Integral y Derivada. 

        El valor proporcional es aproximadamente proporcional a la posición del robot con respecto a la línea. Es decir, si el robot está centrado con precisión en la línea, se espera un valor proporcional de exactamente 0.


       El valor integral registra el historial del movimiento del robot: es una suma de todos los valores del término proporcional que se registraron desde que el robot comenzó a funcionar.


       La derivada es la tasa de cambio del valor proporcional.


CODIGO PROGRAMACION FINALIZADO SEGUIDOR DE LINEA


#include <QTRSensors.h> // Se hace uso de la librería para los sensores QTR-8A

//PUENTE H int PWMA=5; int AIN2=6; int AIN1=7; int PWMB=11; int BIN2=10; int BIN1=9; int STANDBY=8; int LED=13; int P=0; int I=0; int D=0; int LAST=0; float vel; //SE DEFINE LA VELOCIDAD int VelMax =57;

//SE ADAPTAN Y ASIGNAN PINES LOS SENSORES

#define NUM_SENSORS 8 // number of sensors used #define TIMEOUT 2500 // waits for 2500 microseconds for sensor outputs to go low #define EMITTER_PIN 12 // emitter is controlled by digital pin 2 // ENTRADAS SENSORES

QTRSensorsRC qtra((unsigned char[]) {A7, A6, A5, A4, A3, A2, A1, A0}, NUM_SENSORS, TIMEOUT, EMITTER_PIN); unsigned int sensorValues[NUM_SENSORS]; unsigned int position=0;

void setup()

//SE ASIGNAN LOS PINES

{ pinMode(PWMA,OUTPUT); pinMode(AIN1,OUTPUT); pinMode(AIN2,OUTPUT); pinMode(PWMB,OUTPUT); pinMode(BIN1,OUTPUT); pinMode(BIN2,OUTPUT); pinMode(LED,OUTPUT); pinMode(STANDBY,OUTPUT);

//PROCESO DE SENSADO (OBTENCIÓN DE VALORES) delay(1500); for (int j = 0; j <150; j++) { digitalWrite(LED, HIGH); delay(20); qtra.calibrate(); // reads all sensors 10 times at 2.5 ms (8 sensores) digitalWrite(LED, LOW); // turn off LED delay(20); }

//APAGADO DEL LED digitalWrite(LED, LOW);

// ARANQUE DE LOS MOTORES digitalWrite(AIN1,LOW); digitalWrite(AIN2,HIGH); digitalWrite(BIN1,HIGH); digitalWrite(BIN2,LOW); analogWrite(PWMA,0); analogWrite(PWMB,0);

//HABILITA EL PUENTE H PARA SU FUNCIONAMIENTO

digitalWrite(STANDBY, HIGH); delay(4000);

void loop()

{ //GENERAR VALORES unsigned int position = qtra.readLine(sensorValues); for (unsigned char i = 0; i < NUM_SENSORS; i++) { Serial.print(sensorValues[i]); Serial.print('\t'); } Serial.println(position); // comment this line out if you are using raw values delay(250); //LEEMOS LA SEÑAL DE LOS SENSORES qtra.read(sensorValues); position = qtra.readLine(sensorValues, QTR_EMITTERS_ON, 0); P = ((position)-(3500)); /// ERROR

/////FRENOS//// if(P<-3500){ analogWrite(PWMA,200); // V MOTOR DERECHO analogWrite(PWMB,255); // V MOTOR IZQUIERDO digitalWrite(AIN1,LOW); ///DISMINUCION DEV, RETROCEDE digitalWrite(AIN2,HIGH); digitalWrite(BIN1,LOW); ///RETROCEDE digitalWrite(BIN2,HIGH); } else if (P>3500){ analogWrite(PWMA,255); // VMOTOR DERECHO analogWrite(PWMB,200); // V MOTOR IZQUIERDO digitalWrite(AIN1,HIGH); ///DISMINUCION DE V, RETROCEDE digitalWrite(AIN2,LOW); digitalWrite(BIN1,HIGH); ///FRENTE digitalWrite(BIN2,LOW); } else{ D= (P - LAST); /// ERROR MENOS EL ERROR ANTERIOR I=(P+ LAST); //INTEGRAL vel=(P*0.02)+(D*1.20)+(I*0.0052); if(vel >VelMax) vel=VelMax; if(vel<-VelMax) vel=-VelMax; analogWrite(PWMA,VelMax-vel); // VELOCIDAD MOTOR DERECHO analogWrite(PWMB,VelMax+vel); // VELOCIDAD MOTOR IZQUIERDO digitalWrite(AIN1,LOW); ///FRENTE digitalWrite(AIN2,HIGH); digitalWrite(BIN1,HIGH); ///FRENTE digitalWrite(BIN2,LOW); LAST=P; } }

Actualización (imágenes del robot)










        Swift Dragon inicios                                              Swift Dragon v2


SWIFT GRAGON VERSION ACTUALIZADA

conclusión 

En el transcurso de estos meses se trabajo en la elaboración del Proyecto Swift Dragon  seguidor de linea , con la creación de 5 fases hasta la actual de ha evidenciado el proceso que se ha llevado a cabo para conseguir esta meta, cada etapa tuvo gran relevancia ya que permitió comprender mejor muchas partes y funcionamiento del proyecto y así mismo realizar cabios en beneficio de su funcionalidad, una excelente experiencia de aprendizaje , no fue un proceso fácil, pero con el método de prueba y error al final se consiguió que el proyecto Swift Dragon  seguidor de lineal sea una relaidad.

Comentarios

Entradas populares de este blog

Robot laberinto Kastelean

Fase 4 Robot seguidor de linea

FASE 2 ROBOT SEGUIDOR DE LINEA