código para un seguidor de linea blanca

Necesito su ayuda, en la Uni un profe (el cual no nos enseño nada) nos encargo un robot seguidor de linea blanca, y encontré el código que anexo en el cual se usa:

-Arduino Uno
-POLOLU QTR-8 RC
-ADAFRUIT Motorshield

El problema es que como ya mencione, el profesor no no enseño nada; la clase consistía en una hora semanal durante aproximadamente 5 meses, el tipo nos quiso enseñar desde análisis nodal, leyes de Kirchoff, montar circuitos sencillos como leds en paralelo, hasta la programación en Arduino. Así que nos atiborro de información y se salto prácticamente el apartado de programación de Arduino.

Conseguí este código de un video de youtube (video) , la verdad el montaje del robot se ve bastante sencillo, pero esta hecho para seguir una linea negra y es más delgada que la que ocuparemos.

Pregunte al tipo del video y me dice que el código es el mismo para linea blanca pero que si debo adaptarlo al groso de mi linea. Mi pregunta es: ¿El código si es el mismo para linea blanca?, y me podrían decir que es lo que necesito cambiar para el groso de la linea.

De ante mano gracias :slight_smile:

#include <AFMotor.h>
#include <QTRSensors.h>
  
AF_DCMotor motor1(1, MOTOR12_8KHZ );
AF_DCMotor motor2(2, MOTOR12_8KHZ );
  
#define KP .2
#define KD 5
#define M1_minumum_speed 150
#define M2_minumum_speed 150
#define M1_maksimum_speed 200
#define M2_maksimum_speed 200
#define MIDDLE_SENSOR 4
#define NUM_SENSORS 5
#define TIMEOUT 2500
#define EMITTER_PIN 2
#define DEBUG 0
  
QTRSensorsRC qtrrc((unsigned char[]) { A4,A3,A2,A1,A0} ,NUM_SENSORS, TIMEOUT, EMITTER_PIN);
  
unsigned int sensorValues[NUM_SENSORS];
  
void setup()
{
delay(1500);
manual_calibration();
set_motors(0,0);
}
  
int lastError = 0;
int last_proportional = 0;
int integral = 0;
  
void loop()
{
unsigned int sensors[5];
int position = qtrrc.readLine(sensors);
int error = position - 2000;
  
int motorSpeed = KP * error + KD * (error - lastError);
lastError = error;
  
int leftMotorSpeed = M1_minumum_speed + motorSpeed;
int rightMotorSpeed = M2_minumum_speed - motorSpeed;
  
// set motor speeds using the two motor speed variables above
set_motors(leftMotorSpeed, rightMotorSpeed);
}
  
void set_motors(int motor1speed, int motor2speed)
{
if (motor1speed > M1_maksimum_speed ) motor1speed = M1_maksimum_speed;
if (motor2speed > M2_maksimum_speed ) motor2speed = M2_maksimum_speed;
if (motor1speed < 0) motor1speed = 0; 
if (motor2speed < 0) motor2speed = 0; 
motor1.setSpeed(motor1speed); 
motor2.setSpeed(motor2speed);
motor1.run(FORWARD); 
motor2.run(FORWARD);
}
  
void manual_calibration() {
  
int i;
for (i = 0; i < 250; i++)
{
qtrrc.calibrate(QTR_EMITTERS_ON);
delay(20);
}
  
if (DEBUG) {
Serial.begin(9600);
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
  
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
}
}