h>
//Mapeo de pines
#define STBY 9
#define AIN1 3
#define AIN2 4
#define PWMB 5
#define PWMA 6
#define BIN1 8
#define BIN2 7
#define NUM_SENSORS 6
#define NUM_SAMPLES_PER_SENSOR 4
#define EMITTER_PIN 11
#define LED 13
float KP = 0.01;
float KD = 1.0;
float Ki = 0.006;
int error1=0;
int error2=0;
int error3=0;
int error4=0;
int error5=0;
int error6=0;
if ( value >= 0 )
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
else
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
value *= -1;
analogWrite(PWMB,value);
if ( value >= 0 )
{
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
else
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
);
value *= -1;
analogWrite(PWMA,value);
//Accionamiento de motores
digitalWrite(STBY,HIGH);
Motoriz(left);
Motorde(righ);
//funcin de freno
digitalWrite(STBY,HIGH);
if ( left )
{
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,HIGH);
if ( righ )
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,HIGH);
void setup()
pinMode(LED ,OUTPUT);
pinMode(BIN2 ,OUTPUT);
pinMode(STBY ,OUTPUT);
pinMode(BIN1 ,OUTPUT);
pinMode(PWMB ,OUTPUT);
pinMode(AIN1 ,OUTPUT);
pinMode(AIN2 ,OUTPUT);
pinMode(PWMA ,OUTPUT);
// Calibramos con la funcin qtra.calibrate();, y dejamos parpadeando el led, mientras se
produce la calibracin.
qtra.calibrate();
delay(3000);
int last_prop; // ltima valor del proporcional (utilizado para calcular la derivada del error)
int Target = 2500; // Setpoint (Como utilizamos 6 sensores, la lnea debe estar entre 0 y 5000,
por lo que el ideal es que est en 2500)
void loop()
Motorde(0);
freno(true,false,255);
Motoriz(0);
freno(false,true,255);
integral = error1+error2+error3+error4+error5+error6;
last_prop = proporcional;
error6=error5;
error5=error4;
error4=error3;
error3=error2;
error2=error1;
error1=proporcional;