Header image  
Electricidad, Electrónica, automatización industrial, láser, vacío  
line decor
    INICIO  || Traductor de idiomas ||
line decor
 
 
 
 

 
 

Automatismo control presión con Arduino

Diseño e implementación de un control PID para ajustar la presión en conductos de ventilación:

Solución con Arduino y regulador Dimmer monofásico:

El problema del Dimmer:

Resultado final:

dimmer1

dimmer4

Resumen del programa y funcionamiento general.

Código programa:

// Automatismo control presión. Mantiene la presión constante del ventilador sin pasarse al cerrar compuertas.
// Diseño por Alfonso Torres Rodríguez 24-4-2013

#include <Servo.h>
#include <PID_v1.h>

//Define las variables que se usarán en el PID
double Setpoint, Input, Output;

//Especifica los valores iniciales del PID y las variables que se usarán
PID myPID(&Input, &Output, &Setpoint,2,5,1, DIRECT);

Servo myservo; // Crea un objeto de servo

int potpin = 0; // VALOR SONDA PRESION
int setpin = 1; // VALOR SET POTENCIOMETRO
float val = 0, valset = 0; // variables de trabajo
float pcalibrado = 0, presion = 0; // Variables de trabajo
const float convmbar = 0.1276; // Valor conversión bits de entrada analógica a presión en mBar


void setup()
{
myservo.attach(9); // Configura servo en el pin 9
Serial.begin(9600);
Serial.println(" ----------------- Inicio programa ---------------- ");
Serial.println("Diseno programa por Alfonso Torres Rodriguez (Altortech) 24-4-2013");
Serial.println("Automatismo control presion recuperador para XALOC, Girona");
Serial.println();
Serial.println("Espera 10 segundos con motor parado para calibrar sonda presion ...");
myservo.write(150); // Pone el servo a 150 grados, que es el 0% de potencia del motor
delay(10000); // Espera 10 segundos a que el motor esté parado
for(int i=0;i<100;i++){ // Media de 100 lecturas
pcalibrado = pcalibrado + (analogRead(potpin)*convmbar); // Acumulador de la media de 100 lecturas, del valor de presión de la sonda.
}
pcalibrado = pcalibrado / 100; // Divide y obtiene la media
Serial.println("Valor presión calibrado mBar = ");
Serial.print(pcalibrado);
Serial.println();
Serial.println("Fin setup -----------");

myPID.SetMode(AUTOMATIC); // Configuración del PID en modo Automático

}

void loop()
{
for(int i=0;i<100;i++){ // Media de 100 lecturas
val = analogRead(potpin); // Lectura de la sonda de presión
Input = Input + ((val*convmbar) - pcalibrado); // Conversión de la lectura a presión y entrada al algoritmo PID
Setpoint = Setpoint + (analogRead(setpin)*convmbar); // Lectura setpoint i entrada al algoritmo PID

}
Setpoint = Setpoint / 100; // Lectura corregida del SETPOINT
Input = Input / 100; // Lectura sensor corregida INPUT
Serial.print("Presión mBar= ");
Serial.print(Input);
Serial.print(" Setpoint mBar= ");
Serial.println(Setpoint);
myPID.Compute(); // Cálculo del PID
myservo.write(map(Output,0,255,150,20)); // Salida OUTPUT aplicado al control del servo.
delay(15); // Delay para que el servo actue
}

Notas:
- El sensor de presión lleva un tubito conectado a la salida de la impulsión.
- La regulación en grados del Servo-motor de modelismo, está ajustado a un margen justo para que mecánicamente no fuerce al potenciómetro.

Descarga programa .INO

Esquema electrónico:

esquema

Descarga esquema multisim


Pruebas de funcionamiento:

http://www.youtube.com/watch?v=z4jcUwqgSxM&feature=youtu.be

Volver al index