medir-voltajes-de-hasta-25v-con-arduino-y-fz0430

Medir voltajes de hasta 25V con Arduino y FZ0430

¿Qué es el FZ0430?

El FZ0430 es un módulo comercial que nos permite medir tensiones de hasta 25V de forma sencilla con un procesador como Arduino.

Como muchos imaginaréis, en realidad el FZ0430 es un simple divisor de tensión con resistencias de 30kOhm y 7.5kOhm, lo que supone que la tensión percibida tras el módulo sea de divida por un factor de 5 (7.5/(30+7.5))

Por tanto, la tensión máxima que podemos medir será 25V para un procesador de tensión de alimentación Vcc 5V, y 16.5V para un procesador de Vcc 3.3V. Superar esta tensión en el input del FZ0430 dañará el pin analógico de Arduino.

Por supuesto, esta ampliación del rango de medición tiene una consecuencia negativa en la precisión de la medición. En los modelos de Arduino que incorporan un ADC de 10 bits alimentados a 5V, la resolución normal es de 4.88mV. Tras el FZ0430 la resolución de la medición es de 24.41mV.

En caso de emplear una carga de 25V, la corriente que atraviesa el divisor es de 0.7mA, y las pérdidas del divisor 16.67mW.

Por supuesto, podemos construir nosotros mismos un divisor de tensión por un muy precio muy inferior, y donde ajustemos los valores de las resistencias empleadas a nuestro proyecto para minimizar la pérdida de precisión.

Sin embargo, este módulo incorpora clemas de conexión y terminales para conectar de forma sencilla y rápida a Arduino, por lo que podría ser interesante tener algún módulo para realizar una medición rápida y de baja precisión.

Por ejemplo, puede ser útil para medir el estado de una batería, o comprobar la alimentación de un dispositivo de 12V o 24V, como una tira LED, un electroimán, un ventilador, o una placa Peltier.

También puede ser interesante en combinación con un ADS 16 bits, que dispone de medición diferencial para realizar mediciones analógicas en corriente alterna. Con 15 bits dedicados + 1 para el signo, tenemos una precisión de 0.15mV, que tras el FZ0430 queda una precisión final de 0.76mV.

Podemos, por ejemplo, combinarlo con un transformador de 220V/12V para realizar mediciones de tensión alterna a 220V de forma sencilla, para hacer un monitor de energía.

Precio

El módulo de medición de 25V FZ0430 es un dispositivo barato. Podemos encontrarlo por 0.75€ en vendedores internacionales de eBay o AliExpress.

Como hemos dicho, resulta más barato montar un divisor de tensión. La principal ventaja que nos aporta es la comodidad de uso. Si tenemos en cuenta el coste de la clema de conexión, la placa, los terminales Dupont y el montaje, seguramente al final es más barato comprarlo que hacerlo.

No obstante, en un montaje definitivo normalmente sustituiremos este módulo por un divisor de tensión integrado en nuestro montaje, no sólo por el coste, si no por el espacio ocupado y la posibilidad de ajustar la precisión convenientemente.

arduino-tension-25v-fz0430-componente

Esquema de montaje

El esquema de conexión es muy sencillo. Por un lado, conectamos la tensión que queremos conectar a la clema de conexión, respetando la polaridad.

Por otro lado, conectamos la electrónica del módulo a Arduino mediante los terminales disponibles. Conectando Gnd y SIG del FZ0430, respectivamente, a Gnd y una entrada analógica cualquiera de Arduino.

arduino-tension-25v-fz0430-esquema

El terminal Vcc no hace falta conectarlo. De hecho, no hace absolutamente nada. 

La conexión, vista desde Arduino, sería la siguiente.

arduino-tension-25v-FZ0430-conexion

Si quisiéramos hacer lo mismo haciendo nosotros mismos el divisor de tensión, el esquema sería el siguiente.

arduino-tension-25v-FZ0430-funcionamiento

Ejemplos de código

El código es igualmente sencillo, ya que es idéntico al que emplearíamos para leer una entrada analógica, simplemente modificando el valor de 5.0V por 25.0V.

const int sensorPin = A0;   // seleccionar la entrada para el sensor
int sensorValue;      // variable que almacena el valor raw (0 a 1023)
float value;        // variable que almacena el voltaje (0.0 a 25.0)

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);        // realizar la lectura
  value = fmap(sensorValue, 0, 1023, 0.0, 25.0);   // cambiar escala a 0.0 - 25.0

  Serial.println(value);              // mostrar el valor por serial
  delay(1000);
}

// cambio de escala entre floats
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full