Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
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
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!