
Hoy en la Buhardilla vamos a ver como podemos medir y regular el pH de una solución líquida con un Arduino. Es posible que en algunos de nuestros proyectos tengamos que utilizar algún tipo de control de pH ya sea para regular el pH de una solución de nutrientes para un cultivo hidropónico, para tener mayor estabilidad en un bio-reactor, para mantener el agua de riego de nuestro jardín en buenas condiciones o para asegurar que el agua de nuestras peceras es la adecuada para el correcto desarrollo de los peces de su interior. Estos son solo alguno de los ejemplos en los que un control de pH nos puede ser de utilidad. En este caso en concreto vamos a ver como construir un control de pH con dos bombas dosificadoras (una para subir el pH y la otra para bajarlo) para ajustar el pH al valor deseado. Sin más dilación empecemos.
Material
- Arduino
- Sonda de pH
- 2x bombas dosificadoras
- 2x relés
A continuación dejo el esquema de montaje del control de pH que vamos a construir.

En este caso vamos a conectar las dos bombas dosificadoras a trabes de dos relés que vamos a conectar como Normalmente Abierto, a una fuente de alimentación externa, los pines que activaran las bombas van a ser el pin 4 y el 7 para la bomba de ácido y la de base, respectivamente. El sensor de pH lo vamos alimentar directamente del Arduino vamos a conectar la salida de la señal a una de las entradas analógicas, en este caso lo conectamos en A0.
Una vez visto como se conectan todos los equipos vamos a ver el código que nos va a controlar todo el proceso.
int pH_sensor = A0;
int pH_analog_val;
int acid_pump = 4;
int base_pump = 7;
float pH_value;
float setpoint = 7.0;
float amplitude = 0.5;
void setup() {
pinMode(pH_sensor, INPUT);
pinMode(acid_pump, OUTPUT);
pinMode(base_pump, OUTPUT);
digitalWrite(acid_pump,LOW);
digitalWrite(base_pump, LOW);
Serial.begin(9600);
}
void loop() {
pH_analog_val = analogRead(pH_sensor);
pH_value = (pH_analog_val*5.0/1024)*3.5;
Serial.print("pH: ");
Serial.println(pH_value);
if (pH_value > (setpoint + amplitude)){
digitalWrite(acid_pump, 1);
delay(100);
digitalWrite(acid_pump, 0);
Serial.println("pH Alto");
}
else if (pH_value < (setpoint - amplitude)){
digitalWrite(base_pump, 1);
delay(100);
digitalWrite(base_pump, 0);
Serial.println("pH Bajo");
}
delay(10000);
}
Como es habitual en los scripts de Arduino, en la parte superior vamos a definir todas las variables que se van a utilizar. En este caso para tenerlo todo bien ordenado empacaremos definiendo los valores enteros. Que por orden de aparición serán; el pin de lectura de la señal analógica del sensor, el valor de lectura de dicho pin, el pin que activara la bomba de adición de ácido (para bajar el pH) y la bomba que activara la bomba de adición de base (para subir el pH).
int pH_sensor = A0;
int pH_analog_val;
int acid_pump = 4;
int base_pump = 7;
float pH_value;
float setpoint = 7.0;
float amplitud = 0.5;
A continuación vamos a definir las variables que tienen un valor decimal. Estas son el valor de pH, el valor de pH a la que queremos tener nuestra solución líquida (setpoint), como es muy complicado mantener el pH en un valor fijo y para evitar que las bombas estén constantemente activándose para regular el pH a ese único valor, también definiremos la amplitud del rango que vamos a permitir al sistema, es decir las bombas se activaran cuando el pH este (pH ± amplitud). Dentro de este rango el pH podrá ir fluctuando libremente sin que realizamos ninguna acción.
void setup() {
pinMode(pH_sensor, INPUT);
pinMode(acid_pump, OUTPUT);
pinMode(base_pump, OUTPUT);
digitalWrite(acid_pump,LOW);
digitalWrite(base_pump, LOW);
Serial.begin(9600);
}
En el setup() vamos a definir el comportamiento de todos los pins que vamos a utilizar. En este caso el pin que usamos para la lectura de la señal del sensor de pH (pH_sensor) lo definimos como una entrada. Los dos pins que activan las bombas dosificadoras los configuraremos como salidas (acid_pump y base_pump). Como medida de seguridad vamos a poner las señales de salida de las bombas en LOW (es decir van a iniciarse paradas). Finalmente establecemos la velocidad de transferencia de la señal por el puerto USB por si queremos seguir las lecturas del sensor con un ordenador.
void loop() {
pH_analog_val = analogRead(pH_sensor);
pH_value = (pH_analog_val*5.0/1024)*3.5;
Serial.print("pH: ");
Serial.println(pH_value);
En la primera parte del loop principal vamos a realizar la lectura de la señal enviada por el sensor (pH_analog_val), el valor de dicha variable será un valor digital entre 0-1023, que corresponde a un valor de voltaje de 0 a 5V. Para poder tener el valor del sensor en voltios hacemos una cambio de variable y convertimos el valor digital a voltios, pH_value, finalmente multiplicamos este valor por 3.5 para tenerlo en las unidades correctas. Una vez tenemos el valor de pH detectado por el sensor lo mostramos por pantalla, para poder hacer el seguimiento des del ordenador, con Serial.print.
if (pH_value > (setpoint + amplitude)){
digitalWrite(acid_pump, 1);
delay(100);
digitalWrite(acid_pump, 0);
Serial.println("pH Alto");
}
else if (pH_value < (setpoint - amplitude)){
digitalWrite(base_pump, 1);
delay(100);
digitalWrite(base_pump, 0);
Serial.println("pH Bajo");
}
delay(10000);
Una vez ya tenemos el valor de pH en las unidades deseadas es momento de proceder a realizar el control propiamente dicho. En este caso en la primera parte del if vamos a comparar el valor de pH con el valor más alto de nuestro rango deseado de pH. Si el valor de pH actual está fuera de nuestro rango vamos a ejecutar esta parte del código. En este caso vamos a activar la bomba de adición de ácido. Esta estará activa durante 100 ms y la volveremos a parar, finamente indicaremos por pantalla que el valor de pH estaba por encima del valor deseado.
En la segunda parta (else if) operaremos de manera análoga a la parte anterior, pero en este caso solo actuaremos si el valor de pH se encuentra por debajo del valor deseado. Activando la bomba de base durante 100 ms y volviéndola a parar. Por pantalla indicaremos que el valor de pH era bajo.
Finalmente para no sobrecargar el sistema y evitar que esté midiendo constantemente vamos a hacer una pausa de 10 s, para a continuación volver a empezar con el bucle principal del programa.
Como hemos visto se puede regular de manera mu fácil y sencilla el pH de una solución líquida con el uso de un sensor de pH y un Arduino. Espero que esta entrada os sirva para vuestros proyectos y no dudéis en dejar vuestras opiniones o dudas en los comentarios.
Hasta la próxima aventura!!!
Deja un comentario