0% encontró este documento útil (0 votos)
52 vistas3 páginas

Programacion de Robot Velocista

El documento es un código en C++ para controlar un robot utilizando un controlador de motores TB6612FNG y un sensor QTR-8A. Implementa un control PID para ajustar la velocidad de los motores en función de la posición del sensor. Incluye la calibración del sensor y la lectura de botones para iniciar el funcionamiento del robot.

Cargado por

AndersonParejo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
52 vistas3 páginas

Programacion de Robot Velocista

El documento es un código en C++ para controlar un robot utilizando un controlador de motores TB6612FNG y un sensor QTR-8A. Implementa un control PID para ajustar la velocidad de los motores en función de la posición del sensor. Incluye la calibración del sensor y la lectura de botones para iniciar el funcionamiento del robot.

Cargado por

AndersonParejo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

#include <QTRSensors.

h>

// Definir pines para el controlador de motores TB6612FNG


#define motorAInput1 7
#define motorAInput2 8
#define motorBInput1 5
#define motorBInput2 4
#define motorAPWM 9
#define motorBPWM 3
#define STBY 6 // Pin STBY del TB6612FNG

// Definir pines para el sensor QTR-8A


#define NUM_SENSORS 8
#define NUM_SAMPLES_PER_SENSOR 4
#define EMITTER_PIN 10

// Definir pines para los botones


#define CALIBRATION_BUTTON 12
#define START_BUTTON 2

// Constantes del control PID


#define KP 4.6// Constante proporcional
#define KD 19.4 // Constante derivativa
#define KI 0.009 // Constante integral

QTRSensors qtr;

unsigned int sensorValues[NUM_SENSORS];


int lastError = 0;
int integral = 0;

void setup() {
// Establecer pines de salida para el driver TB6612FNG
pinMode(motorAInput1, OUTPUT);
pinMode(motorAInput2, OUTPUT);
pinMode(motorBInput1, OUTPUT);
pinMode(motorBInput2, OUTPUT);
pinMode(motorAPWM, OUTPUT);
pinMode(motorBPWM, OUTPUT);
pinMode(STBY, OUTPUT);

// Establecer pines de entrada para los botones


pinMode(CALIBRATION_BUTTON, INPUT);
pinMode(START_BUTTON, INPUT);

digitalWrite(STBY, HIGH);
// Inicializa el sensor QTR-8A
[Link]();
[Link]((const uint8_t[]){A0, A1, A2, A3, A4, A5, A6, A7},
NUM_SENSORS);
[Link](EMITTER_PIN);

digitalWrite(LED_BUILTIN, HIGH); // enciende LED de Arduino para indicar el


inicio de la calibracion

[Link](9600);// inicio de comunicacion serial

// Esperar a que se presione el bot�n de calibraci�n


while (digitalRead(CALIBRATION_BUTTON) == LOW) {
delay(10);
}

// Calibrar el sensor
for (int i = 0; i < 250; i++) {
[Link]();
delay(10);
}

digitalWrite(LED_BUILTIN, LOW); //apaga el led Arduino para indicar termino de


calibracion

// Esperar a que se presione el bot�n de inicio


while (digitalRead(START_BUTTON) == LOW) {
delay(10);
}
}

void loop() {
// Leer valores del sensor
uint16_t position = [Link](sensorValues);

// Calcular el error (posici�n central ponderada)


int weightedSum = 0;
int sum = 0;
for (int i = 0; i < NUM_SENSORS; i++) {
weightedSum += (i * sensorValues[i]);
sum += sensorValues[i];
}
int error = position - (NUM_SENSORS - 1) * 1000 / 2;

// Calcular componentes de control PID


int proportional = KP * error;
int derivative = KD * (error - lastError);
integral += error;
int integralComponent = KI * integral;

// Calcular se�al de control


int controlSignal = proportional + derivative + integralComponent;

// Controlar motores usando la se�al de control


int motorSpeed = 255; //Ajuste este valor para controlar la velocidad de
avance//130

// Control de motores usando la se�al de control


int motorSpeedA = motorSpeed - controlSignal;
int motorSpeedB = motorSpeed + controlSignal;

// Limit the motor speed values to the range of 0-255


motorSpeedA = constrain(motorSpeedA, 0, 255);
motorSpeedB = constrain(motorSpeedB, 0, 255);

digitalWrite(motorBInput1, LOW);
digitalWrite(motorBInput2, HIGH);
digitalWrite(motorAInput1, LOW);//LOW para avanzar hacia adelante
digitalWrite(motorAInput2, HIGH);
analogWrite(motorAPWM, motorSpeedA);
analogWrite(motorBPWM, motorSpeedB);
// Update last error
lastError = error;
// Print sensor values and position to the serial monitor
for (int i = 0; i < NUM_SENSORS; i++) {
[Link](sensorValues[i]);
[Link]('\t');

}
[Link](controlSignal);

También podría gustarte