Voltímetro Digital con Arduino

Buen día, en Binary Microsystems iniciaremos con un proyecto básico para que heches andar esos componentes que como todo técnico, ingeniero o hobbista de seguro tienes en casa.

Asumiendo que usted tiene un conocimiento básico adecuado de electrónica, de los circuitos digitales y cómo utilizar un Arduino. Ya que el aprendizaje de la electrónica consiste en un proceso paso a paso, que comprende tanto el trabajo con los circuitos electrónicos como la programación. Vamos a necesitar los siguientes componentes:

Una fuente de alimentación que muestre la tensión y la corriente que consume un circuito bajo prueba es sin duda una fuente que nos proporciona unos datos añadidos que hace más fácil nuestro trabajo, lo cual no quiere decir que si no dispone de estos instrumentos no sea una fuente de calidad, en absoluto. Naturalmente que en el caso de disponer de estos elementos de medida, resulta más completa y compensa la diferencia de coste. Así que, este es el motivo de este artículo. Se trata de disponer de una pantalla de bajo costo que no muestre la tensión que esta entregando la fuente de alimentación y además si nos muestra la corriente que consume el circuito, mucho mejor y más completa.

En otro artículo que realicé decía: “Actualmente, gracias a las nuevas tecnologías, tomar una muestra de la tensión en un punto de un circuito, casi no influye en el funcionamiento de éste, ya que la alta impedancia de los circuitos que utilizamos nos hacen fácil este cometido.”

Un voltímetro mide la tensión entre dos puntos de un circuito, y con la electrónica digital actual, podemos realizar un verdadero voltímetro que podemos instalar en nuestra fuente de alimentación. Los voltímetros digitales funcionan mediante la conversión del valor analógico leído, a un valor digital mediante un convertidor analógico a digital (ADC). Nosotros vamos a utilizar un Arduino típico tiene varios de estos convertidores en él, con una precisión que será suficiente para este cometido, en este tutorial veremos cómo leer voltajes de entradas analógicas en Arduino y construir un voltímetro que mide voltajes (DC) en corriente continua.

Por supuesto que lo que nos interesa es medir los parámetros que se generan en la fuente ajustable. Para ser sincero he dudado en qué tipo de pantalla utilizar, ya que una pantalla del tipo Nokia-5110, quedaba pequeña para aplicar en una fuente de alimentación que generalmente está de forma estática en el laboratorio y por lo tanto quizás el tipo Nokia estaría mejor para un voltímetro portátil. Por eso vamos a utilizar una pantalla del tipo LCD de 2 líneas o en mi caso una de 4 líneas como es el LCD2004A que en la actualidad al igual que aquella es muy común.


El esquema.

El esquema es muy sencillo, ya que se reduce a un divisor de tensión básico el cual constituirá en si mismo la impedancia de entrada y cuya salida es la tensión que aplicaremos a un pin analógico. El esquema muestra el divisor ya que el resto no tiene relevancia.

Del esquema podemos extraer unos conceptos importantes para el caso:

  • El divisor de tensión
  • Impedancia de entrada
  • Protección de entrada

Circuito Divisor Tensión.

Las entradas analógicas de un Arduino pueden medir hasta 5V (cuando se utiliza la tensión de referencia analógica incorporada). Incluso cuando sólo se conecta a un circuito de 5V, debe utilizar las resistencias para ayudar a proteger el Arduino de cortocircuitos o sobrecargas de tensión inesperadas.

Se trata de un sencillo circuito divisor de tensión que consta de dos resistencias (R1 y R2) en serie que, se encargan de dividir el voltaje de entrada, para adaptarlo a la ventana de tensiones que pueden leer las entradas analógicas del Arduino (5V).

El divisor entrega una tensión al pin analógico de Arduino que éste convierte en un formato digital que puede ser procesada por el microcontrolador. En este caso, la tensión entrada después de pasar por el divisor de tensión descrito (R1 y R2), se aplica al pin A0 (usted puede utilizar otro pin).

El circuito con los valores mostrados para R1 de 1MΩ en serie con R2 de 100KΩ representa una impedancia de entrada de 1MΩ + 100kΩ = 1’1M, que reduciendo es = 11, factor de división que es adecuado para la medición de voltajes de DC hasta aproximadamente 55V.

El circuito mostrado divide el voltaje de entrada conectado al pin análogo Arduino, equivalente a la tensión de entrada dividido por 11, por lo tanto el máximo es de 55V ÷ 11 = 5V, por seguridad daremos un margen y podemos decir que es un voltímetro para un margen de 0-30V DC.

Principios de funcionamiento.

Impedancia de entrada.

Si un voltímetro tiene una baja impedancia de entrada baja, digamos 10kΩ y se está midiendo un voltaje a extremos de una resistencia de 10kΩ, el multímetro está cambiando efectivamente el valor de la resistencia a 5KΩ ( ya que dos resistencias de 10kΩ en paralelo = resistencia 5kΩ). Por consiguiente, el voltímetro ha cambiado los parámetros del circuito, y realmente, está leyendo una tensión errónea. Esas dos resistencias forman un divisor de potencial que se utiliza para bajar el voltaje que se mide a un nivel que Arduino pueda leer, además de ser la impedancia de entrada.

Un conjunto multímetro digital para medir voltaje DC típicamente tendrá una impedancia de entrada de 10MΩ o superior. Esto significa que la resistencia entre las dos sondas o terminales del multímetro es de 10MΩ o más.

Así pues, es deseable una alta impedancia de entrada para un voltímetro (o multímetro en la escala de voltaje). Cuanto mayor impedancia de entrada, menos probable es que el multímetro influya o cambie lo que esta midiendo del circuito. Al medir (con un multímetro que tiene una impedancia de entrada de 10 millones de ohmios) el voltaje a extremos de un componente en un circuito, es el mismo que la conexión de una resistencia de 10MΩ en paralelo con el circuito; no influye.

Así que, queremos una alta impedancia de entrada en nuestro circuito divisor de tensión, y que la impedancia de este “voltímetro” no vaya a influir en el circuito que se esté bajo prueba.

Sin embargo, como regla general, un dispositivo de alta impedancia de entrada será generalmente propenso a recoger más ruido o interferencias (EMI) que un dispositivo de baja impedancia de entrada, por ese motivo se debe adaptar un filtro de paso alto.

La fórmula para calcular los valores en un divisor de tensión es:

Vout = (R2 / (R1 + R2)) * Vin

Por lo tanto, puesto que Arduino admite un Vmax de 5V en sus entradas analógicas, si el divisor está funcionando correctamente, entonces el Vout será de un máximo de 5V, y para poder calcular la tensión máxima de entrada al circuito usaremos:

Vmax = 5,0 / (R2 / (R1 + R2))

Nota: Si utiliza resistencias de valores diferentes de los sugeridos aquí, debe recordar de ajustar los valores de R1 y R2 en el boceto, las resistencias deben ser del 1% de precisión si es posible o mejor. Usted puede ver una variación de esta expresión utilizada en la rutina de setup() del programa.

Voltímetro con Arduino

Utilizando el monitor Serial para mostrar los valores.

?Descargar download.txt

Con todos los cálculos completados, suba el código al Arduino y ya puede ver en el monitor el resultado. El valor v1 ahora representa la tensión real medida por el circuito, que se envía a la pantalla. Debería ver algo parecido a la imagen siguiente.

Por supuesto que los valores de tensión que muestra, están cambiando de un modo que no se ajusta a lo que desearíamos. Cuando esto ocurre es debido en principio a unos motivos que debemos tener en cuenta: uno es debido al ADC que tiene Arduino por lo que no podemos hacer demasiadas cosas (también existe el factor ±1 dígito), otro motivo son las interferencias, para eso podemos dotar de un condensador cerámico de 10nf a 100nf, y otro motivo que si abordaremos más adelante, es dotar de un filtro de soft que tienda a reducir estos indeseados cambios.

Con el mencionado condensador reduciremos en parte los picos que se aprecian en la imagen anterior. De momento vamos a tener en cuenta los factores que debemos conocer y podemos abordar.

Precauciones.

Debemos tener en cuenta como alimentamos el Arduino, con baterías o por cable USB, es decir, si lo está por baterías u otra fuente aislada o por una una fuente a red, en cuyo caso, ambos deben compartir las tierras, lo que se llama masa común (GND) o una conexión a 0V con el circuito bajo prueba. Si la conexión de GND del Arduino se conecta a cualquier otra parte del circuito bajo prueba excepto GND, entonces esto es lo mismo que hacer un cortocircuito de ese punto del circuito a GND.

El GND del Arduino es como el cable negativo o común (COM) de un multímetro, algo que se debe considerar para ser conectado permanentemente al GND del circuito bajo prueba por seguridad, a menos que el Arduino o el circuito bajo prueba esté completamente aislado y “flotante”.

Protección de entrada.

Los valores de resistencia en el diagrama del circuito anterior proporcionan cierta protección contra sobretensión en la medición de voltajes bajos como 5V, 9V o 12V. Así que, si accidentalmente se mide una tensión de digamos 30V, no va a estallar el pin de entrada analógica de Arduino.

Cualquier tensión superior a aproximadamente 55V puede dañar el Arduino. El punto de la red de resistencias divisoras conectada a la patilla analógica del Arduino es equivalente a la tensión de entrada dividido por 11, por lo que 55V ÷ 11 = 5V. En otras palabras, cuando se miden 55V, el pin analógico de Arduino estará en su máximo voltaje de 5V.

Proporcionar esta protección básica a sobrecarga de tensión es a expensas de no usar el rango completo del ADC de 10-bit de entrada analógica si solamente se van a medir voltajes inferiores, pero todavía se pueden medir los cambios de alrededor de 0.054V. Tener en cuenta que en el circuito, no se muestra ninguna otra protección para los picos de tensión, tensión inversa o voltajes superiores a 55V.

Como se ha mencionado, vamos a procurar un modo de reducir el salto de los valores, por lo que vamos a introducir una suma de valores y sacaremos la media para utilizar este valor como valor de lectura. Este es el programa que usaremos.

Lector de tensión.

Lector de tensión, voltímetro versión 2.

?Descargar download.txt

Cómo funciona el Código.

Para medir la tensión en la rutina loop(), utilizamos la función analógica analogRead(0), para leer la entrada  analógica 0 en este caso. El valor que nos devuelve, es un entero dentro del rango de 0 a 1023, por dicho motivo lo debemos ajustar en la ventana de 0 a 5 que, es el margen de Arduino. Dicho valor leído lo multiplicamos por el nivel real de alimentación y lo dividimos por 1024.

Para una mayor precisión, se toman diez muestras analógicas usando el siguiente código:

while (sample_count <NUM_SAMPLES) {
suma + = analogRead (A0);
sample_count ++;  // incrementa la cuenta
}

El total de los 10 valores sumados, se almacenan en la variable suma. La variable de sample_count sigue la pista del número de muestras. Ambas variables se restablecen después de calcular y mostrar la tensión:

sample_count = 0;
suma = 0;

El número de muestras tomadas puede ser cambiado en la parte superior del boceto, en: #define NUM_SAMPLES 10. Sin embargo, no haga este valor demasiado alto o la suma de dichas muestras será demasiado grande para caber en la variable suma.

La tensión la calculamos de la siguiente forma:

voltaje = ((float) suma / (float) NUM_SAMPLES * 5.01) / 1024,0;

Un valor de calibrado se utiliza en lugar de 5,01 en el boceto de arriba (la calibración se detalla más adelante).

La suma de las 10 muestras se divide por 10 (NUM_SAMPLES) para obtener el valor medio.

Si 5.0 es la tensión de referencia de 5V ADC. El valor 1024.0 es el valor máximo que el ADC puede tener más 1 (1023 + 1 o sea, 2 a la potencia de 10 más 1) también se puede utilizar aquí 1023.0. Esto calcula la tensión dividida, por ejemplo el voltaje en el pin A3.

El voltaje real se calcula multiplicando la tensión leída, por el factor de división de la red del divisor de tensión (parece lioso), mejor con esta expresión:

Serial.print (tensión * 11,0);

La línea de código anterior calcula la tensión real y luego la envía al puerto serie para mostrar en la ventana del monitor de serie. El boceto utiliza un valor calibrado en lugar de 11,0 como se muestra arriba.

Tengamos en cuenta que por diferentes razones, se produce un error de medición en este medio de 1,5%.

Calibración del circuito y Arduino.

Podríamos obtener un voltaje más preciso mediante el uso de un voltaje de referencia de precisión para el ADC y además el uso de resistencias del 1% de tolerancia o mejores. Lo ideal sería un ADC mayor de 10Bits, si está interesado en el tema, puede visitar este sitio.

Veamos como calibrar la tensión ADC de referencia. Tenemos que medir los 5V del regulador del Arduino (que se encuentra en el pin 5V de Arduino). Este voltaje se utiliza para la tensión de referencia ADC de forma predeterminada en Arduino. Cada Arduino tiene un regulador de tensión es probable que sea ligeramente diferente para cada Arduino, debe ser calibrado de forma individual. Ahora pongamos el valor real medido 4.976V en el boceto de la siguiente manera.

voltaje = ((float) suma / (float) NUM_SAMPLES * 4.976) / 1024,0;

En el ejemplo anterior, el voltaje medido en el pin de 5V Arduino era 4.976V.

Otra forma de obtener una lectura más precisa es calibrar el circuito. La calibración se puede realizar midiendo el valor real de la tensión de referencia y los valores reales de las resistencias del divisor de tensión. Estos valores pueden entonces ser utilizados en los cálculos en el código del boceto Arduino.

Conecte una fuente de alimentación estable, tal como una batería de 9V a través de la red de resistencias R1 y R2. Mida el voltaje a extremos de las dos resistencias en conectadas a la batería, es decir, medir el voltaje de la batería. Ahora, mida el voltaje a extremos del resistor (R2) de 100kΩ es decir, entre el pin A0 (en Arduino) y GND.

El factor divisor de tensión se calcula dividiendo la tensión tomada a extremos de R1÷R2 por la tensión en A0 o sea:

factor de división = tensión de entrada ÷ tensión de salida

Por ejemplo, si la entrada de voltaje medido es 10.02V y la salida (voltaje en el pin A0) es 0.91V, entonces el factor de división es:

10.02 ÷ 0.91 = 11,011

Ahora, usaremos este valor en el código del boceto Arduino:

Serial.print (tensión * 11.011);

Si se utiliza la calibración, luego se pueden utilizar resistencias de tolerancia 5%, para el divisor de tensión.

Si cuando comparamos las lecturas de la pantalla LCD con las del Voltímetro digital de laboratorio, éstas no coinciden, no nos inquietemos, tomemos el multímetro digital de precisión y comprobemos la alimentación de 5V entre los pines 5V y GND de la placa Arduino. Podría ser que debido al USB, nos de menos (por ejemplo 4.98V), en ese caso, sustituyamos dicho valor del Vout = (valor * 5.0) / 1024.0 en el código del boceto (es decir, sustituir el valor 5.0, al de la lectura Vcc real, en este caso 4.98V). Además, tratemos siempre de usar resistencias de precisión del 1% de tolerancia para las resistencias R1 y R2.

float v1 = 4.98;  // valor real de la alimentación de Arduino, y no 5V

Como ya se ha dicho, los valores de las resistencias (R1 y R2) en el diagrama del circuito, proporcionan cierta protección contra sobretensiones y puede medir voltajes bajos. Tenga en cuenta que cualquier tensión de entrada superior a aproximadamente 55V podría freír el Arduino. Sin incorporar otro tipo de protección en este circuito contra picos de tensión, tensiones inversas o voltajes más altos.

Mejorar el voltímetro.

El voltímetro que se ha presentado aquí es muy básico lo cual da un amplio margen para mejoras, como pueden ser: varias escalas para diferentes alcances, añadir una pantalla LCD que nos informe de los distintos valores de la tensión que está entregando en un momento dado, otra posibilidad es realizar el mismo proyecto en una pastilla más pequeña en lugar de usar el típico Arduino.

Como se ha dicho son varias las posibilidades de mejora, de modo que aquí sólo veremos alguna de esas opciones. Este es un ejemplo del código que vamos a probar.

Voltímetro DC.

Código de ejemplo para visualizar el voltaje, versión 3.

?Descargar download.txt

Con este ejemplo se ha mejorado algunas cosas, como se describe en el propio listado. Un paso importante es haber puesto a 0 la matriz readings[i], esto es una buena práctica ya que asegura la igualdad de valores. Otro punto es que dentro del loop(), como indica el comentario, se ha reducido una lectura total -= readings[index]; la última del bucle. Y por último, se ha realizado un bucle de 20 pasos para reducir los molestos incrementos de las cuentas hasta que se estabilizan.

En el párrafo anterior se han descrito unas mejoras que han servido para dar un aspecto más acabado a nuestro voltímetro. En los comentarios se da una idea del porque de cada rutina.

fig 6


Voltímetro para AC.

Aunque no vamos a realizar un voltímetro para corriente alterna, si quiero dar una orientación para los que estén interesados en el tema. Para medir AC, en un voltímetro sin grandes pretensiones, como el estudiado más arriba, yo elegiría insertar un diodo entre la unión de las dos resistencias (ánodo) y el cátodo a la entrada de Arduino, con un condensador de bajo valor entre la entrada analógica y tierra, como se aprecia en la imagen que sigue:

Suponiendo que la impedancia de entrada es razonablemente alta, incluso un pequeño condensador de 10nF, permitiría que el pico de voltaje AC a través del condensador pueda alcanzar la tierra. Utilice los cálculos originales R1 / R2 para el rango de tensión apropiado, pero no se olvide de la caída de tensión directa (0.65V) a través del diodo. A ser posible, utilice un diodo Shottky para reducir esta a 0.3V, si está tratando bajos voltajes.

Esto es todo por este momento, espero poder presentar una nuevo artículo más completo pronto.

 Ayúdenos a mantener la comunidad en lo positivo y útil.
 Sobre el tema, sea respetuoso con todas las edades y niveles 
 con la habitual responsabilidad.
 Sea amable y no haga Spam - 
Binary Microsystems

¡Gracias!.

Escribir comentario

Comentarios: 0