Índice:

Medidor de voltagem preciso e preciso Arduino (0-90 V DC): 3 etapas
Medidor de voltagem preciso e preciso Arduino (0-90 V DC): 3 etapas

Vídeo: Medidor de voltagem preciso e preciso Arduino (0-90 V DC): 3 etapas

Vídeo: Medidor de voltagem preciso e preciso Arduino (0-90 V DC): 3 etapas
Vídeo: HX711 Load Cell Arduino | HX711 calibration | Weighing Scale | Strain Gauge 2024, Julho
Anonim

Neste instrutível, construí um voltímetro para medir altas tensões DC (0-90 V) com relativa precisão e exatidão usando um Arduino Nano.

As medições de teste que fiz foram precisas o suficiente, principalmente dentro de 0,3 V da tensão real medida com um voltímetro padrão (usei um Astro AI DM6000AR). Isso é próximo o suficiente para o uso pretendido do dispositivo.

Para arquivar isso, usei uma referência de tensão (4.096v) e um divisor de tensão.

No lado do código, usei, é claro, a opção "referência externa" para o Arduino Nano e o exemplo "Smoothing" nos tutoriais do Arduino.

Suprimentos

1 x Arduino Nano - Link

1 x Display Oled (SSD 1306) - Link

1 x 1 / 4W 1% resistores - 1k ohm - Link

1 x 1 / 4W 1% resistores - 220k ohm - Link

1 x 1 / 4W 1% resistores - 10k ohm - Link

1 x 4.096v LM4040DIZ-4.1 Referência de Tensão - Link

Placa de ensaio e fios - Link

Astro AI DM6000AR - Link

USB Power Bank - Link

Baterias 9V - Link

CanadianWinters é um participante do Programa de Associados da Amazon Services LLC, um programa de publicidade de afiliados desenvolvido para fornecer um meio para os sites ganharem taxas vinculando-se à Amazon.com e sites afiliados. Ao usar esses links, como associado da Amazon, ganho com compras qualificadas, mesmo se você comprar outra coisa - e isso não custará nada.

Etapa 1: os esquemas

Os esquemas
Os esquemas
Os esquemas
Os esquemas

Eu conectei todas as peças de acordo com o esquema acima. Em particular, escolhi a referência de tensão de 4.096 para ficar o mais próximo possível da marca de 5v para evitar perda de resolução.

Seguindo a ficha técnica, escolhi um resistor de 1K ohm para a referência de tensão, embora um valor diferente pudesse ser usado. A tensão para a referência é fornecida pelo pino Nano 5v.

A ideia do circuito é que a tensão DC a ser medida passe por um resistor de tensão. A tensão escalonada e, em seguida, entra no pino analógico do Arduino para ser amostrada, suavizada, redimensionada e exibida no visor OLed.

Tentei manter as coisas simples:)

Etapa 2: o código e os cálculos do resistor

Os valores dos resistores foram escolhidos pois é aconselhável (se não me engano, isso está na folha de dados do Arduino / Atmega) para manter a impedância abaixo de 10k ohm.

Para simplificar, fiz uma planilha que automatiza os cálculos caso você queira usar diferentes valores de resistor: Link para o Planilhas Google

Aqui está o código que usei para este projeto:

#incluir

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotação, [redefinir]) tensão flutuante = 0; // usado para armazenar o valor de tensão float Radjust = 0.043459459; // Fator divisor de tensão (R2 / R1 + R2) float vbat = 0; // tensão final após cálculos - tensão da bateria flutuante Vref = 4.113; // Referência de tensão - valor real medido. Valor nominal 4.096v const int numReadings = 50; // número de amostras de leitura - aumente para mais suavização. Diminua para uma leitura mais rápida. leituras int [numReadings]; // as leituras da entrada analógica int readIndex = 0; // o índice da leitura atual unigned long total = 0; // o total corrente int média = 0; // variáveis para atualizar a tela sem usar atraso unsigned long previousMillis = 0; // armazenará a última vez que a tela foi atualizada // constantes não mudam: const long interval = 50; // intervalo para atualizar a tela (milissegundos) void setup (void) {analogReference (EXTERNAL); // use AREF para tensão de referência 4.096. Minha voltagem real de referência é 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… voltar ao início: readIndex = 0; } // calcula a média: average = (total / numReadings); tensão = média * (Vref / 1023,0); //4,113 é o Vref vbat = voltage / Radjust; // Definir o atraso para a atualização da tela usando Millis if (currentMillis - previousMillis> = interval) {// salvar a última vez que a tela foi atualizada previousMillis = currentMillis; u8g2.clearBuffer (); // limpa o menu interno // Exibição da tensão do pacote u8g2.setFont (u8g2_font_fub20_tr); // Fonte de 20px u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // Fonte de 10 px u8g2.setCursor (76, 20); u8g2.print ("Volts"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Tensão precisa"); } u8g2.sendBuffer (); // transfere a memória interna para o display delay (1); }

Observe que estou um pouco enferrujado com a codificação do Arduino, então se você encontrar algum erro ou uma maneira de melhorar o código, estou aberto a sugestões:)

Etapa 3: Vamos testar

Vamos testar!
Vamos testar!
Vamos testar!
Vamos testar!
Vamos testar!
Vamos testar!

Para testar este voltímetro, usei baterias 8x 9v que comprei em uma loja local. Estou planejando usar este voltímetro para medir a voltagem nas baterias das minhas bicicletas elétricas (elas têm voltagens que variam de 24-60v com as ocasionais de 72v).

Uma vez que os componentes eletrônicos são embalados em uma pcb e uma pequena caixa, isso fará um medidor de bateria portátil e agradável. Os gráficos e fontes no OLED podem ser personalizados para atender às suas necessidades (por exemplo, fonte maior para facilitar a leitura).

Meu objetivo era ter uma leitura de tensão no medidor Oled / Arduino não muito longe do meu multímetro digital. Eu estava apontando para +/- 0, delta máximo de 3v. Como você pode ver no vídeo, consegui arquivar isso, exceto na extremidade superior das medições.

Espero que tenha gostado deste Instructable e deixe-me saber a sua opinião!

Recomendado: