Voltímetro de cuatro canales 0-50V basado en el kit de Laboratorio Digital NR05

A menudo existe la necesidad de controlar simultáneamente varios voltajes, por ejemplo, los voltajes de salida de una fuente de alimentación de computadora, varias baterías, etc. En la última publicación, examinamos el principio del bloqueo de código, y ahora, en base al kit de expansión del kit de Laboratorio Digital NR05 , ensamblamos un digital de cuatro canales. un voltímetro con una indicación de los resultados en la pantalla integrada en el tablero. El rango de voltajes medidos se puede cambiar usando un divisor externo, y el paso de medición se determina por la resolución del convertidor analógico a digital (ADC) del microcontrolador Atmega 328 utilizado en la placa Arduino y tiene 1024 valores. Luego, en el rango de voltaje 0-50V, el paso de medición de voltaje será de aproximadamente 50 mV, que es suficiente para uso doméstico.



Conectaremos los voltajes medidos a las entradas analógicas libres de la placa. Estas son las entradas A0, A4, A5 y A7 ubicadas en la parte inferior derecha de la placa. Para usar la entrada A0, desconecte temporalmente la resistencia R4 ubicada cerca del conector XP3 en la parte inferior derecha de la placa.



Haremos un divisor externo con conectores para conectar los voltajes medidos y una placa de expansión usando el método LUT (la llamada "tecnología de planchado láser") y grabamos la placa en una solución de cloruro férrico. Utilizamos resistencias SMD, pero si no tiene una impresora láser, puede hacer el divisor dibujando conductores con un rotulador impermeable. En este caso, es mejor usar resistencias de salida, ya que la precisión del tamaño de los conductores resultantes será menor. En detalle, la tecnología de fabricación de placas de circuito impreso mediante grabado en cloruro férrico se puede estudiar comprando un conjunto de NN201 producido por Master Kit.

El tablero divisor terminado se muestra en la foto a continuación.



La placa de expansión tiene una pantalla de cristal líquido de 2 líneas con 16 caracteres en cada línea. En dicho indicador, cuatro lecturas de 0 a 50 voltios con un decimal y los identificadores de canal son bastante cómodos para colocar.

Se recomienda que las mediciones se realicen varias veces en un corto período de tiempo, promediando sus valores. Esto reducirá los errores de medición aleatorios.
También nos damos cuenta en el programa de "congelación" de los resultados cuando hace clic en uno de los botones integrados en el tablero, por ejemplo, el del medio. Una segunda pulsación reanudará las mediciones continuas.

Utilizamos el LED conectado a la salida digital número 13 de Arduino para indicar el proceso de medición.

Basado en lo anterior, haremos un programa para Arduino:

Spoiler
/*--------------------------------------------------------------
0-50, ,
, LCD-
16 , 2 ,


NR05 « »; 4 10
1, 100, A0,A4,A5,A7


5 V_REF
.
-
.

(
)
Vin
.
Vout .
DIV_* Vin/Vout.

startingelectronics.com
--------------------------------------------------------------*/
#include <LiquidCrystal.h>

// ( )
#define LED 13
//
#define NUM_SAMPLES 20
//
#define DIV_1 11.186
#define DIV_2 11.186
#define DIV_3 11.186
#define DIV_4 11.186
//
#define V_REF 4.575
//
#define NUM_KEYS 5
// ( )
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};

LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
unsigned long sum[4] = {0}; //
unsigned char sample_count = 0; //
float voltage[4] = {0.0}; //
int cnt = 0; //
int keyIsPressed = 0; // «»

void setup()
{
lcd.begin(16, 2);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
}

void loop()
{
// 3 , «»
if (get_key() == 3){
keyIsPressed = !keyIsPressed;
delay(500);
}
// (1),
if (keyIsPressed == 0){
digitalWrite(LED, LOW);
//
while (sample_count < NUM_SAMPLES) {
// sample channel A0, A4, A5, A7
sum[0] += analogRead(A0);
sum[1] += analogRead(A4);
sum[2] += analogRead(A5);
sum[3] += analogRead(A7);
sample_count++;
delay(10);
}
digitalWrite(LED, HIGH);
//
for (cnt = 0; cnt < 4; cnt++) {
voltage[cnt] = ((float)sum[cnt] / (float)NUM_SAMPLES * V_REF) / 1024.0;
}
//
lcd.setCursor(0, 0);
lcd.print(«A „);
lcd.print(voltage[0] * DIV_1, 1);
lcd.print(“V „);
// voltage 2 — B (pin A4)
lcd.setCursor(8, 0);
lcd.print(“B „);
lcd.print(voltage[1] * DIV_2, 1);
lcd.print(“V „);
// voltge 3 — C (pin A5)
lcd.setCursor(0, 1);
lcd.print(“C „);
lcd.print(voltage[2] * DIV_3, 1);
lcd.print(“V „);
// voltage 4 — D (pin A7)
lcd.setCursor(8, 1);
lcd.print(“D „);
lcd.print(voltage[3] * DIV_4, 1);
lcd.print(“V „);

//
sample_count = 0;
for (cnt = 0; cnt < 4; cnt++) sum[cnt] = 0;
delay(20);
}
}

//
int get_key()
{
int input = analogRead(A6);
int k;
for (k = 0; k < NUM_KEYS; k++)
if (input < adcKeyVal[k])
return k + 1;
return 0;
}


El programa está equipado con comentarios suficientemente detallados que explican las características de la implementación del algoritmo.

Quizás la característica más importante es el proceso de calibración de las constantes descritas en los comentarios involucrados en el cálculo de los voltajes medidos. Para calibrar el divisor (realizado una vez), use una fuente de voltaje constante estable. Dado que la calibración lleva poco tiempo, puede utilizar con éxito una batería de 9 V "Krona" y un multímetro digital. Un multímetro del "Conjunto de un joven ingeniero electrónico" NR02 es bastante adecuado. Este kit también es ideal para enseñar soldadura y ensamblaje de PCB.

Cabe señalar que cuando cambia el voltaje de suministro que llega a Arduino, los valores de calibración del voltaje de referencia deben cambiarse en consecuencia, cuyos valores relativos se miden.

Para cambiar el rango de medición, es necesario aplicar un divisor con una relación de división diferente del voltaje de entrada.

Source: https://habr.com/ru/post/es393225/


All Articles