Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

Medidor de PH con pantalla gráfica JLX12864.

La Pantalla LCD 128x64 JLX12864G-086 es una una estupenda pantalla con pines para una interfaz SPI.
Este modelo cuenta con un regulador de voltaje integrado lo que permite conectarla directamente a 5 Voltios.
La pantalla LCD 128x64 JLX12864G-086 es una gran opción para ser utilizada en lugar de la pantalla del Nokia 5110.
Entre sus principales características destaca su diseño sencillo, compacto y estando integrado en una placa que dispone de 4 perforaciones para su fijación, con todos los componentes necesarios para su funcionamiento.
Dispone de LED (backlight) que facilita la visualización de datos, contribuyendo así a la mejora de los proyectos realizados por los diseñadores. Para poder usar esta pantalla necesitamos la biblioteca U8glib que se puede descargar de distintos lugares en Internet y tenemos las siguientes conexiones para este ejemplo.
CS :   8

RST : 9
RS :   10
SPI_SDA : 18 
SPI_SCK : 19
VDD :   3v3 
LEDA : 5v  

También vamos a usar el sensor PHE201 - BNC y la interfaz PL4502 para vincular este sensor a una placa Arduino. 
Recordemos que el pH es una medida de acidez o alcalinidad de una disolución, la escala de pH varía de 0 a 14. 
El pH indica la concentración de iones hidrógeno [H]+ presentes en determinadas disoluciones. Se puede cuantificar de forma precisa mediante un sensor que mide la diferencia de potencial entre dos electrodos, un electrodo de referencia (de plata/cloruro de plata) y un electrodo de vidrio que es sensible al ion de hidrógeno.
Esto es lo que formará la sonda PHE201, la interfaz PL4502 es el circuito electrónico para acondicionar la señal y poder conectarla a un microcontrolador como Arduino.
Los sensores para medir ph son delicados (además de costosos) es por esto que debemos tener especial cuidado al usarlos y sobre todo cuando dejamos de usarlos asegurar que la sonda de vidrio este correctamente limpia con agua destilada.
Si bien este sensor no califica como un sensor "profesional" su precisión en la medición no le envidia nada a un sensor de laboratorio. Si lo vamos a usar de manera continua, por ejemplo sumergido constantemente en el agua de un acuario la vida útil del electrodo sera de unos cuatro años.
Para conectarnos con el microcontrolador la interfaz ofrece los siguientes pines de control:

  • To: Temperatura.
  • Do: Señal del limite de ph
  • Po: Valor de ph en voltios (conectado A0 en el ejemplo)
  • G:  Masa del circuito analogico.
  • G:  Masa del circuito digital.
  • V+: Alimentación de 5V.

La interfaz que vincula el sensor al Arduino tiene dos pre-set, el que esta mas próximo al conector BNC será el que se usa para calibrar el sensor (no viene calibrado). La medición del sensor es lineal y para ajustarlo necesitamos dos buffers que generalmente vienen con el propio sensor, uno de ph 4.01 y otro de ph 6.86. 
Considerando que el sensor es lineal con estos dos buffers podemos usar un poco de matemática para convertir el voltaje medido en cada uno de estos dos puntos de ph.
La formula general sería A = MX + B, por lo que tenemos tenemos que calcular M y B ya que X sería el voltaje y  A el ph.
El resultado es  A = -5.70x + 21.34, en nuestro caso usamos un medidor de ph comercial para ajustar el sensor bajo prueba.

Como se puede ver en la imagen la exactitud del sensor respecto de uno comercial es muy buena, en realidad la única diferencia que encontramos de este sensor con sus referentes comerciales es la duración en un uso intensivo y continuo.
Otra cosa a tener en cuenta es que es recomendable montar la interfaz de tal forma de tener acceso al pre-set de calibración ya que si el sensor pasa mucho tiempo sin uso seguramente sera necesario hacer algún ajuste de calibración par volver a usarlo.
El segundo pre-set sirve para fijar el umbral de disparo de una alarma a un determinado nivel de ph, la interfaz tiene dos led's, uno verde que indica que está funcionando y uno rojo para avisar el disparo de la alarma de ph.
El resultado mostrado en la imagen anterior se obtuvo con el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/********************************************************************
 * Descripción: Medición del PH con sensor PHE201 + Interfaz PL4502.
 *              Datos mostrados en pantalla LCD JLX12864G.           
 * Placa Arduino: NANO
 * Arduino IDE: 1.8.15
 *
 * www.firtec.com.ar
********************************************************************/
#include "U8glib.h"  // Biblioteca para el control de pantalla
const int analogInPin = A0; 
int sensorValue = 0; 
unsigned long int conversor; 
float b;
int buf[10],temp;
char buffer[20] = "0";
U8GLIB_NHD_C12864 u8g(19, 18, 8, 10, 9);    // Arduino NANO
//U8GLIB_NHD_C12864 u8g(13, 11, 8, 10, 9);  // Arduino UNO 
 
void Medir_PH(void);
 
void draw(void) {
  u8g.setFont(u8g_font_10x20r);
  u8g.drawStr( 8, 17, "Nivel de PH");
  u8g.drawHLine(0,0, 128);    // Linea horizontal superior
  u8g.drawHLine(0,63, 128);   // Linea horizontal inferior
  u8g.drawVLine(0, 1, 64);    // Linea vertical izquierda
  u8g.drawVLine(127, 1, 64);  // Linea vertical derecha
  u8g.setFont(u8g_font_6x12);
  u8g.setFont(u8g_font_osb21);
  u8g.drawStr( 43, 46, buffer);
  u8g.setFont(u8g_font_6x12r);
  u8g.drawStr(10, 60, "Control Hidroponia");
}
/************************************************
**  Configuración del hardware
************************************************/
void setup(void) {
  u8g.setContrast(0); // Configura el contraste
  u8g.setRot180();    // Rota la pantalla (si fuera necesario)
}
/************************************************
**  Bucle principal del programa
************************************************/
void loop(void) {
  u8g.firstPage();  // Muestra la pagina principal
  do {
    draw();
  } 
  while( u8g.nextPage() );
  Medir_PH();       // Obtiene el valor del PH
}
/************************************************
**  Función encargada de medir el PH
**  Sensor:   PHE201 - BNC
**  Inerface: PL4502
************************************************/
void Medir_PH(void){
   for(int i=0;i<10;i++) 
 { 
  buf[i]=analogRead(analogInPin);
  delay(10);
 }
 for(int i=0;i<9;i++)
 {
  for(int j=i+1;j<10;j++)
  {
   if(buf[i]>buf[j])
   {
    temp=buf[i];
    buf[i]=buf[j];
    buf[j]=temp;
   }
  }
 }
 conversor=0;
 for(int i=2;i<8;i++)
 conversor+=buf[i];
 float pHVol=(float)conversor*5.0/1024/6;
 float Valor_PH = -5.70 * pHVol + 21.34;
 dtostrf(Valor_PH, 1, 1, buffer);
 delay(100);
}
//*************** Fin del archivo Firtec Argentina ********************

El código en si es bastante simple quedando bajo el control de la correspondiente biblioteca todo el control de la pantalla LCD.
Desde este link podemos ver como configurar muchas otras fuentes para mostrar los mensajes, también en este otro link tenemos información de otras funciones de la biblioteca U8glib.

[MATERIAL EXTRAÍDO DE UNO DE NUESTROS LIBROS PARA ARDUINO]

Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.