Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NACIONAL DEL
CALLAO
FIEE
ESCUELA DE INGENIERIA
ELECTRONICA
ROBOT VELOCISTA – CHALON
INTEGRANTES:
- ALVARADO VALDIVIESO HAROL 1423225092
- ESPINOZA DIAZ RENZO 1423215135
- MAYTA CASO MISAEL 1423225173
- GARCIA SALVADOR ALEX 1423225415
PROFESOR: ING. ABILIO CUZCANO
2017 B
INTRODUCCION:
Tanto a nivel nacional como a nivel internacional existe una gran cantidad de
competiciones en las que el objetivo principal es que uno o varios robots autónomos
realicen una determinada tarea tratando de conseguir un mejor resultado en términos
de tiempo u objetivos alcanzados que el resto de participantes, o enfrentándose
literalmente a ellos.
La mayoría de estas competiciones están destinadas a estudiantes (principalmente de
ingeniería, pero cada vez más también a alumnos más jóvenes en institutos) y tienen
asociada una finalidad educativa importante ya que implican una aplicación práctica
de los conocimientos adquiridos en materias como electrónica, robótica, regulación
automática y programación. Además, permiten desarrollar capacidades de trabajo en
equipo y plantean un reto importante al enfrentar a los participantes a problemas
reales que han de resolver de manera ingenieril.
ROBOT VELOCISTA:
QTR 8RC
Básicamente estos sensores utilizan pines digitales, también se pueden utilizar en
pines analógicos, pero previamente configurados como digitales. Es por ello que estos
sensores son muy versátiles y tienen mayor distancia de sensado a comparación de
los analógicos. La forma de funcionamiento de estos sensores es a base de la carga y
descarga de los condensadores que está en serie con los fototransistores, cuando este
en una superficie blanca el capacitor tendera a no retener carga por lo tanto la salida
será de 0 volts, pero, por el contrario, si se encuentra en una superficie oscura, el foto-
transistor no se saturará, de esta forma el capacitor retendrá carga, produciendo un
voltaje positivo. Previamente se tiene que configurar los pines como salida, mandando
un pulso de unos cuantos microsegundos, luego configurando como entrada los pines
haciendo una lectura; esto continuamente en un bucle.
Es así como se puede saber si se está en blanco o negro. Pero estos sensores ya
cuentan con una librería en arduino que hace todo este procedimiento de forma
automática, solo tendremos que declarar los pines que utilizaremos y haremos los
llamados a las respectivas funciones de calibrados, funciones de lectura de sensores y
lecturas de posición, que es justamente la que utilizaremos para el robot velocista
ARDUINO NANO:
Este es elemento principal y crítico que determinará las características del robot
velocista, ya que básicamente dependerá de qué tipo de reducción, consumo y torque
que poseerá. Por lo general se utilizan los " high power" o "HP" con reducciones de
10:1 y 30:1. La reducción es el tipo de engranaje que poseerá el motor para reducir la
velocidad del motor, y convertirla en torque, o lo vulgarmente decimos "fuerza" es
decir, un motor de reducción 10:1 utilizara engranajes que reducirán 10 vueltas del
motor en un 1 produciendo un torque relativamente mayor, por ejemplo: un motor de
reducción 10:1
PROCEDIMIENTO:
PASO I.- Se investigó, observo diseños de otros velocistas ya realizados para poder
tener ideas de como hacer nuestro velocista. Se optó por un diseño y comenzamos a
realizar el nuestro.
PASO II.- Nos guiamos en un cierto diseño y de ahí nos basamos en todo las compras
que realizamos; La lista de materiales que se compro fue:
ARDUINO NANO
DRIVER TB6612FNG
QTR POLOLU 8A ALIMENTACION ANLOGICA
UN PAR DE MOTORES POLULO 1:10
RUEDA LOCA BALL CASTER
UN PAR DE LLANTAS DE GOMAS PARA VELOCISTA
ESPADINES PARA CONEXIÓN
GANCHOS PARA SUJETAR EL MOTOR
BATERIA DE LIPO 7.4v 950 mAh
CABLES HEMBRA-HEMBRA
PLACA DE BAQUELITA PARA CONEXIÓN
Realiza lecturas en bruto de cada sensor, para obtener estos valores es necesario leer
el índice de array donde se guarda los valores de cada sensor. Por ejemplo, si
queremos saber el valor de reflactancia que tiene el sensor numero 1 tenemos que
crear una variable y asignar el valor del array que contiene el valor del sensor:
int sensor_1=sensorValues[0];
PARAMETROS:
Proporcional=(posición) - punto_consigna
Integral: La integral es la sumatoria de los errores acumulados, tiene como
propósito el disminuir y eliminar el error en estado estacionario provocado por el
modo proporcional, en otras palabras, si el robot velocista se encuentra mucho tiempo
alejado del centro (ocurre muchas veces cuando se encuentra en curvas), la acción
integral se ira acumulando e ira disminuyendo el error hasta llegar al punto de
consigna
Integral=Integral + proporcional_pasado
Derivativo=proporcional-proporcional_pasado
CONSTANTES
Factor (Kp): Es un valor constante utilizado para aumentar o reducir el impacto de
Proporcional. Si el valor es excesivo, el robot tendera responder inestablemente,
oscilando excesivamente. Si el valor es muy pequeño, el robot responderá muy
lentamente, tendiendo a salirse de las curvas
Factor (Ki): Es un valor constante utilizado para aumentar o reducir el impacto de
la Integral, El valor excesivo de este provocara oscilaciones excesivas, Un valor
demasiado bajo no causara impacto alguno.
Factor (Kd): Es un valor constante utilizado para aumentar o reducir el impacto de
la Derivada. Un valor excesivo provocara una sobre amortiguación. provocando
inestabilidad.
Salida_pwm = (proporcional * Kp) + (derivativo * Kd) + (integral*Ki);
SINTONIZACION PID
Aquí viene el reto, la sintonización PID, es aquí donde se tendrá que buscar las
constantes que correspondan a las características físicas del robot, la forma más fácil
de hacerlo es por ensayo y error, hasta obtener el valor deseado.
Los pasos a seguir para lograr una buena sintonización, son los siguientes:
1. Comience con Kp, Ki y Kd igualando 0 y trabajar con Kp primero. Pruebe establecer
Kp a un valor de 1 y observar el robot. El objetivo es conseguir que el robot siga la
línea, incluso si es muy inestable.
Si el robot llega más allá y pierde la línea, reducir el valor de Kp. Si el robot no puede
navegar por una vez, o parece lenta, aumente el valor Kp.
2. Una vez que el robot es capaz de seguir un poco la línea, asignar un valor de 1 a Kd.
Intente aumentar este valor hasta que vea menos oscilaciones.
3. Una vez que el robot es bastante estable en la línea siguiente, asigne un valor de 0,5
a 1,0 a Ki. Si el valor de Ki es demasiado alto, el robot se sacudirá izquierda y derecha
rápidamente. Si es demasiado baja, no se verá ninguna diferencia perceptible. El
Integral es acumulativo por lo tanto el valor Ki tiene un impacto significativo. puede
terminar ajustando por 0,01 incrementos.
4. Una vez que el robot está siguiendo la línea con una buena precisión, se puede
aumentar la velocidad y ver si todavía es capaz de seguir la línea. La velocidad afecta
el controlador PID y requerirá re-sintonizar como los cambios de velocidad.
PROGRAMACION:
#include <QTRSensors.h>
//Mapeo de pines
#define STBY 6
#define AIN1 8
#define AIN2 7
#define PWMB 3
#define PWMA 9
#define BIN1 5
#define BIN2 4
#define NUM_SENSORS 8
#define TIMEOUT 2500
#define NUM_SAMPLES_PER_SENSOR 4
#define EMITTER_PIN 13
#define LED 12
const int btn1=2;
//Accionamiento de motores
void Motor(int left, int righ)
{
digitalWrite(STBY,HIGH);
Motoriz(left);
Motorde(righ);
}
//función de freno
void freno(boolean left, boolean righ, int value)
{
digitalWrite(STBY,HIGH);
if ( left )
{
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,HIGH);
analogWrite (PWMB, value);
}
if ( righ )
{
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,HIGH);
analogWrite (PWMA, value);
}
}
void setup()
{
// Declaramos como salida los pines utilizados
pinMode(LED ,OUTPUT);
pinMode(BIN2 ,OUTPUT);
pinMode(STBY ,OUTPUT);
pinMode(BIN1 ,OUTPUT);
pinMode(PWMB ,OUTPUT);
pinMode(AIN1 ,OUTPUT);
pinMode(AIN2 ,OUTPUT);
pinMode(PWMA ,OUTPUT);
pinMode(btn1 ,INPUT);
// Calibramos con la función qtra.calibrate();, y dejamos parpadeando el led, mientras
se produce la calibración.
void loop()
{
if (digitalRead(btn1)==1){
for(;;){
qtrrc.read(sensorValues);
position = qtrrc.readLine(sensorValues, QTR_EMITTERS_ON, 0);
proporcional = ((int)position) - 3500;
error6=error5;
error5=error4;
error4=error3;
error3=error2;
error2=error1;
error1=proporcional;
( diferencial < 0 ) ?
Motor(Velmax+diferencial, Velmax) : Motor(Velmax, Velmax-diferencial);
}}}
OBSERVACIONES
Tuvimos que cambiar el driver DRV8835, por el L293D debido a una mala conexión. El
segundo tiene un similar funcionamiento al primer driver usado.
En un comienzo, el sensado solo se realizaba del lado derecho, corregimos ese
error, revisando y cambiando las entradas del PWM, las cuales estaban mal
conectadas.