Control PID de un Balancin con Arduino
Control PID de un Balancin con Arduino
Práctica: Control PID de un Balancín
Objetivos:
- Controlar la posición angular de un balancín utilizando un controlador PID.
- Medir la posición angular del balancín mediante un potenciómetro.
- Implementar el control PID utilizando Arduino para estabilizar el balancín.
Materiales:
- Arduino Uno.
- Balancín (sistema de inclinación).
- Driver Puente H (L298 o similar).
- Potenciómetro de 10 kΩ.
- Motor DC con hélice para aplicar fuerza en uno de los extremos del balancín.
- Contrapeso para equilibrar el otro extremo del balancín.
Descripción del Sistema:
El balancín será controlado por un motor DC con hélice ubicado en uno de sus extremos, mientras que un potenciómetro conectado al eje de rotación del balancín medirá su inclinación. Para mantener el balancín en una posición específica, se implementará un controlador PID que ajuste la velocidad del motor en función del error entre la posición medida y la posición deseada. Un contrapeso en el lado opuesto de la hélice facilitará el movimiento del balancín.

Diagrama de Conexión (No Simulación):
- Potenciómetro:
- Conectar el potenciómetro al eje de rotación del balancín para medir la posición angular.
- Los pines del potenciómetro deben conectarse a 5V, GND, y la salida del cursor al pin A0 del Arduino.
- Motor DC:
- El motor DC con hélice debe colocarse en uno de los extremos del balancín.
- Controlar el motor a través del driver L298, conectando el pin Enable del driver al pin 9 del Arduino para manejar la señal PWM.
- Contrapeso:
- Colocar un contrapeso en el extremo opuesto al motor para equilibrar el balancín, facilitando el control de la posición angular.
Código Arduino:
Explicación del Código:
- Lectura del Potenciómetro: El potenciómetro mide la posición angular del balancín, que se lee a través del pin A0 y se almacena en la variable
posicion. - Control PID: El controlador PID se encarga de ajustar la velocidad del motor según el error entre la posición deseada (Setpoint) y la posición medida. El resultado del cálculo del PID se convierte a un valor PWM (0-255) que se envía al motor.
- Salida PWM: La salida del PID se mapea a un valor de PWM para controlar la velocidad del motor. Este valor se utiliza para ajustar la potencia entregada al motor a través del pin 9 del Arduino y el driver L298.
- Monitor Serial: Se envían datos al monitor serial para visualizar la posición actual, el error, la salida del PID y el valor PWM aplicado al motor, permitiendo así monitorear el comportamiento del sistema en tiempo real.
Conclusión:
Este proyecto utiliza un controlador PID para estabilizar la posición angular de un balancín, midiendo su inclinación mediante un potenciómetro y ajustando la velocidad de un motor DC en función del error de posición. La implementación del PID permite un control suave y preciso, adaptándose a los cambios en la posición del balancín.
CÓDIGO ARDUINO
#include <PID_v1.h>
int valorpote; //Variable que recoge el valor del potenciómetro
int pwm1; //Variable del PWM 1
int pin2=9; //Entrada 2 del L293D al Enable salida PWM
//Define Variables we’ll be connecting to
double posicion, Setpoint,Output, error;
//Specify the links and initial tuning parameters
double Kp=1, Ki=0.1, Kd=0.23;
PID myPID(&posicion, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup(){
Setpoint = 130; //posicion referencia Voltalje
pinMode(pin2,OUTPUT);
posicion = analogRead(0);
Serial.begin(9600); //Iniciamos la comunicación con el puerto monitor serial
myPID.SetMode(AUTOMATIC);
}
void loop(){
posicion = analogRead(0);
error = Setpoint – posicion;
// valorpote=analogRead(1);
myPID.Compute();
//Timer1.pwm(salidaPWM, Output,1000);
pwm1 = map(Output, 0, 1024, 0, 255);
// int ancho=50;
analogWrite(pin2,pwm1);
Serial.println(«x»);
Serial.println(posicion);
Serial.println(error);
Serial.println(Output);
Serial.println(pwm1);
Serial.println(«x»);
}
