DemoI2C

Indice:

Introducción

Hace poco he recibido dos muestras gratuitas del siguiente sensor de PH para Arduino: Arduino Dormant Labs PH Module V2.

Agradezco a Reza Hussain el detalle de enviarme este par de muestras.

Ya dediqué un artículo a analizar el sensonr de PH del modelo anterior, veasé (CAO-12) Módulo para el uso de Arduino PH Shield, de Dormant Labs.

En dicho artículo, también expliqué los fundamentos teóricos de la medición del PH.

En esta ocasión además de comentar las características de este nuevo producto, comentaré como integrar varios componentes Arduino trabajando todos ellos con el protocolo I2C.

Sobre el protocolo I2C ya hemos hablado en: Librería Wire: También conocida como: Two Wire Interface (TWI/I2C)

Empezaremos comentando algunos detalles más sobre el protocolo I2C que aún no hemos tratado en este Blog.

Direcciones I2C

Recordemos que los dispositivos I2C para Arduino que se manejan con la librería Wire y vienen con una dirección fija de 7 bits.

Puede haber diferentes modelos de dispositivos que compartan una misma dirección I2C, por ejemplo los RTC DS1307 y DS3231. que tienen la dirección 0x68 y también existe un sensor giroscópico (ITG-3200 Integrated Triple-Axis Digital-Output Gyroscope) que sería incompatible con cualquiera de estos dos RTC ya que usa la misma dirección 0x68.

Otros dispositivos podemos encontrarlos en el mercado con direcciones diferentes, dependiendo  del fabricante. Por ejemplo: el display 1602 (2 líneas de 16 caracteres), dependiendo del fabricante necesitará usar la dirección 0x20 o la 0x27.

En otros dispositivos las direcciones son configurables por el mismo usuario. 

Incluso hay dispositivos I2C que tienen más de una dirección. Concretamente, el  Arduino Dormant Labs PH Module V2 dispone de dos direcciones I2C porque en realidad contiene dos sensor. Uno es el sensor de PH y el otro es el sensor de temperatura.

En mi opinión disponer del sensor que necesitas para I2C, es una suerte. Son muy cómodos de usar.

Para los dispositivos I2C comercializados por Adafruit existe una tabla de direcciones I2C. Es solo un ejemplo, hay muchos más.

Cómo se usa un dispositivo I2C en Arduino

Cada dispositivo suele traer una librería a modo de driver. Otras veces se proporcionan ejemplos de uso en los cuales podemos tomar funciones ya diseñadas para facilitar el uso del dispositivo. A la hora de leer estos fuentes nos daremos cuenta de lo fácil que es usar este protocolo con Arduino.

Para mandar un dato a uno de los dispositivos conectados al bus basta hacer:

Wire.beginTransmission(device_address);
Wire.send(0);
Wire.endTransmission();

Para leer tres bytes desde un dispositivo I2C conectado al bus basta hacer:

Wire.requestFrom(device_address, 2);
a = Wire.receive();
b = Wire.receive();

 Previamente conviene asegurarse de que el dispositivo tiene esos tres bytes disponibles, para evitar un bloqueo a la espera de recibir los datos.

if (Wire.available() ==2)

No es complicado de usar. I2C no es un protocolo sencillo, su facilidad de uso en Arduino se debe al uso de la librería Wire.

Arduino Dormant Labs PH Module V2

En comparación con el producto anterior  (Arduino PH Shield) de este mismo fabricante, su nuevo Arduino PH Shield el PH Module V2 presenta significativas diferencias. La novedad más llamativa a simple vista es su menor tamaño y que no está diseñado en forma de shield. Por funcionar con I2C le basta conectarse al Arduino a través de 4 únicos cables (dos de alimentación y 2 de datos).

Recordemos que Arduino PH Shield, al igual que muchos otros sensores de PH para Arduino, se conectaba a través de una entrada analógica, y que esta solo es capaz de trasladar al Arduino valores comprendidos entre 0 y 1023. Es decir, ningún sensor analógico para Arduino trabaja con más de 10 bits de precisión.

El nuevo PH Module V2 es un sensor digital y trabaja con 12 bits de precisión.

A modo de comparación podemos decir que esto equivaldría a trabajar con un rango de (0..4096) frente al tradicional (0..1024).

Por su tamaño y su mayor precisión parece especialmente adecuado para uso en instrumentos portátiles de laboratorio. Estos necesitan mayor precisión. Admite voltajes de 5v como el modelo anterior, pero también puede trabajar a 3.3v, lo cual, en principio le haría compatible con Arduino DUE y con alguna otra placa Arduino, aunque esto personalmente no lo he verificado.

El único inconveniente que presenta frente al modelo anterior es que en caso de necesitar conectar a un mismo Arduino varios sensores de PH (por ejemplo para monitorizar varios acuarios), no podríamos conecta a I2C más que un sensor I2C. El PH Module V2, al igual que otros dispositivos I2C, viene con una dirección prefijada en la rom para el acceso al bus I2C.

Por ello nunca se podría usar el mismo bus I2C para dos de estos dispositivos. En realidad, eso no va afectar a su principal uso como sensor para instrumentos portátiles de laboratorio para medición del PH.

En el modelo anterior podríamos  usar varios PH Shields, aunque no podríamos usar en modo Shield más que uno de ellos.

El bus I2C es una solución más elegante que el uso de una entrada analógica,  simplifica el cableado con otros dispositivos conectados al mismo bus I2C de Arduino y permite mayor precisión que las entradas analógicas.

El código fuente de prueba del nuevo modelo Arduino PH Shield el PH Module V2 puede descargarse desde aquí.

Para calibrarlo debe visitarse Measuring pH using Dormant Labs PH Module V2 and Arduino que ilustra un método de calibrado basado en modificar tres líneas el el código.

float volt4 = 0.95;

float volt7 = 0.67;

float calibrationTempC = 20;

Es un método simple aunque lo elegante es hacerlo de forma que no sea necesario tocar el código fuente. Nada impide usar un sistema de calibración basado en un par de botones conectados a un par de entradas digitales ya que bastaría recurrir a grabar los valores de esas variables en la EEPROM de Arduino como ya hicimos con el PH Shield.

Tenga en cuenta que un código de demo tiene como único objetivo comprobar que el hardware funciona correctamente y su principal cualidad ha de ser su simplicidad. Lo importante es el hardware y el nuevo sensor me ha parecido una maravilla.

Para usar un sistema de calibración mediante dos botones (uno para PH=4.00 y otro para PH=7.00, sugiero estudiar la aplicación desarrollada aquí para (CAO-12) Módulo para el uso de Arduino PH Shield, de Dormant Labs Habría que hacer algo muy similar y parte del código que ya publicamos en su momento podría ser reutilizable.

Para la visualización de los datos, el propio Reza Hussain nos facilita un ejemplo que usa una pantalla LCD muy pequeña y que está bien de precio. La «I2C 0.96» OLED display. Es un LCD con capacidad de 128X64 caracteres y con capacidades gráficas. También usa bus I2C y es compatible igualmente con alimentación 3.3V y 5V. Lo tienen en wide.hk. El ejemplo de uso es este: LCD Display with Dormant Labs PH Module V2. Yo he preferido usar para CAO un Display diferente.

Display LCD de 20×4

Este es un display muy sencillo de usar que admite visualizar cuatro líneas de 20 caracteres de largo, muy adecuado para una gran cantidad de proyectos.

Este display se puede usar con ayuda de la librería LiquidCrystal_I2C.

La documentación sobre las funciones que ofrece esta librería puedes encontrarla en Reference LiquidCrystal Library.

Uso previsto del Display de 20×4 en el sistema CAO:

En nuestro proyecto CAO el display puede ir informando de la hora, temperatura del acuario, Ph del acuario, temperatura de la pantalla de iluminación, condiciones de error o situaciones de alerta, etc.

También puede permitir mostrar menús de opciones para modificar parámetros de funcionamiento y de configuración en el sistema.

 

Reloj de tiempo real (RTC) Dallas DS1307

RTC

Un RTC es un reloj de tiempo real que mantiene la hora pese a los cortes de luz, gracias a que se alimenta con una pila de tipo botón de larga duración.

Para muchos proyectos, incluido CAO, se necesita un reloj interno  para evitar que potenciales cortes de luz provoque reinicios del reloj o que originen desfases horarios por las horas perdidas de fluido eléctrico.

Uso previsto del reloj en el sistema CAO:

En nuestro programa CAO el reloj cumplirá varias funciones importante. Servirá para controlar los horarios relativos a la iluminación.

Para los interesados en las interioridades de RTC existe una página que trata de la  Programación de dispositivos RTC I2C

 Código de demo para estos dispositivos I2C

Para ilustrar todo esto se ofrece un pequeño programa de demo.

Se trata de visualizar en el Display permanentemente la hora, la temperatura del sensor de PH y el valor del PH del sensor.

Por el puerto serie se mostrará más información a modo de trazas.

Puedes descargarlo desde aquí: PRU_I2C .ino