Buenas , estoy realizando el control de apertura y cierre de una válvula(con un motor de 12V DC) , para controlar la cantidad de líquido en el depósito tengo conectado un potenciómetro multiuelta a una boya , de manera que cuando el líquido suba , el potenciómetro se mueva . El programa me funciona correctamente cuando se trata de valores máximos y mínimos , es decir el motor gira en la dirección correcta para abrir o cerrar la válvula hasta que el potenciómetro alcanza los valores máximos y mínimos.
Mi problema es que no soy capaz de establecer un cierto valor ( un valor entre el máximo y el mínimo) y la válvula se abra o se cierre hasta dicho punto sin llegar a los límites mencionados .
Estoy utilizando la libreria PID de Arduino , el driver que estoy utilizando para mover el motor es Ardumoto(basado en el L298P) . adjunto el trozo de código en el que no consigo realizar esto :
if(Output>0) //la válvula se abre
{
//AQUI PUEDES DAR VALORES A INPUT
//Si está dentro de 1000 el valor de apertura, ejecuta el PID . 1000 es el valor máximo superior para abrir la válvula
if(Input<1000)
{
aux=abs(Output);
driveArdumoto(MOTOR_B, FORWARD, aux); //función del driver , utilizando el motor_b , hacia la direccion derecha y a una velocidad marcada (-255,255)
}
//Si se pasa de 1000 al abrir, la válvula se para y
//manda un 0 a la salida
else
{
myPID.SetMode(MANUAL);
Output=0;
stopArdumoto(MOTOR_B);//Funcion para parar el motor b
}
//Función para mover el motor
void driveArdumoto(byte motor, byte dir, byte spd)
{
if (motor == MOTOR_B)
{
digitalWrite(DIRB, dir);
analogWrite(PWMB, spd);
}
}
Mi problema es que no soy capaz de establecer un cierto valor ( un valor entre el máximo y el mínimo) y la válvula se abra o se cierre hasta dicho punto sin llegar a los límites mencionados .
Estoy utilizando la libreria PID de Arduino , el driver que estoy utilizando para mover el motor es Ardumoto(basado en el L298P) . adjunto el trozo de código en el que no consigo realizar esto :
if(Output>0) //la válvula se abre
{
//AQUI PUEDES DAR VALORES A INPUT
//Si está dentro de 1000 el valor de apertura, ejecuta el PID . 1000 es el valor máximo superior para abrir la válvula
if(Input<1000)
{
aux=abs(Output);
driveArdumoto(MOTOR_B, FORWARD, aux); //función del driver , utilizando el motor_b , hacia la direccion derecha y a una velocidad marcada (-255,255)
}
//Si se pasa de 1000 al abrir, la válvula se para y
//manda un 0 a la salida
else
{
myPID.SetMode(MANUAL);
Output=0;
stopArdumoto(MOTOR_B);//Funcion para parar el motor b
}
//Función para mover el motor
void driveArdumoto(byte motor, byte dir, byte spd)
{
if (motor == MOTOR_B)
{
digitalWrite(DIRB, dir);
analogWrite(PWMB, spd);
}
}