Sommario:

Voltmetro Arduino preciso e accurato (0-90 V CC): 3 passaggi
Voltmetro Arduino preciso e accurato (0-90 V CC): 3 passaggi

Video: Voltmetro Arduino preciso e accurato (0-90 V CC): 3 passaggi

Video: Voltmetro Arduino preciso e accurato (0-90 V CC): 3 passaggi
Video: Точное и точное напряжение Arduino | С КОДОМ 2024, Novembre
Anonim

In questo istruibile, ho costruito un voltmetro per misurare le alte tensioni DC (0-90v) con relativa precisione e accuratezza usando un Arduino Nano.

Le misurazioni di prova che ho effettuato erano abbastanza accurate, per lo più entro 0,3 V dalla tensione effettiva misurata con un voltmetro standard (ho usato un Astro AI DM6000AR). Questo è abbastanza vicino per l'uso previsto del dispositivo.

Per archiviare questo ho usato un riferimento di tensione (4.096v) e un partitore di tensione.

Per quanto riguarda il codice, ho usato, ovviamente, l'opzione "riferimento esterno" per Arduino Nano e l'esempio "Smoothing" nei tutorial di Arduino.

Forniture

1 x Arduino Nano - Collegamento

1 x display Oled (SSD 1306) - Link

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

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

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

1 x 4.096v LM4040DIZ-4.1 Riferimento di tensione - Collegamento

Tagliere e fili - Link

Astro AI DM6000AR - Collegamento

USB Power Bank - Collegamento

Batterie 9V - Link

CanadianWinters partecipa all'Amazon Services LLC Associates Program, un programma pubblicitario di affiliazione progettato per fornire ai siti un mezzo per guadagnare commissioni collegandosi ad Amazon.com e ai siti affiliati. Utilizzando questi link, come Associato Amazon guadagno dagli acquisti idonei, anche se acquisti qualcos'altro, e non ti costerà nulla.

Passaggio 1: gli schemi

Gli schemi
Gli schemi
Gli schemi
Gli schemi

Ho collegato tutte le parti come da schema sopra. In particolare ho scelto il riferimento di tensione 4.096 per stare il più vicino possibile al segno 5v per evitare di perdere risoluzione.

Seguendo la scheda tecnica, ho scelto un resistore da 1K ohm per il riferimento di tensione anche se si poteva usare un valore diverso. La tensione per il riferimento è fornita dal pin Nano 5v.

L'idea del circuito è che la tensione CC da misurare passa attraverso un resistore di tensione. La tensione scalata quindi entra nel pin analogico dell'Arduino per essere campionata, livellata, ridimensionata e visualizzata sul display OLed.

Ho cercato di mantenere le cose semplici:)

Passaggio 2: calcolo del codice e del resistore

I valori dei resistori sono stati scelti in quanto è consigliabile (se non erro questo è sul datasheet di Arduino/Atmega) mantenere l'impedenza al di sotto dei 10k ohm.

Per semplificare le cose, ho realizzato un foglio di calcolo che automatizza i calcoli nel caso in cui si desideri utilizzare valori di resistori diversi: Link a Google Sheet

Ecco il codice che ho usato per questo progetto:

#includere

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotazione, [reset]) float voltage =0; // utilizzato per memorizzare il valore di tensione float Radjust = 0.043459459; //Fattore divisore di tensione (R2 / R1+R2) float vbat =0; //tensione finale dopo i calcoli- tensione del galleggiante della batteria Vref = 4.113; //Riferimento tensione - valore reale misurato. Valore nominale 4.096v const int numReadings = 50; // numero di campioni di lettura - aumenta per un maggiore livellamento. Diminuire per una lettura più veloce. int letture[numLetture]; // le letture dall'ingresso analogico int readIndex = 0; // l'indice della lettura corrente unsigned long total = 0; // il totale parziale int media = 0; //variabili per aggiornare lo schermo senza usare delay unsigned long previousMillis = 0; // memorizzerà l'ultima volta che lo schermo è stato aggiornato // le costanti non cambieranno: const long interval = 50; // intervallo di aggiornamento dello schermo (millisecondi) void setup(void) { analogReference(EXTERNAL); // usa AREF per la tensione di riferimento 4.096. La mia tensione reale di riferimento è 4.113v u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // …torna all'inizio: readIndex = 0; } // calcola la media: media = (totale / numLetture); tensione = media * (Vref / 1023.0); //4.113 è Vref vbat = voltage/Radjust; // Imposta il ritardo per l'aggiornamento dello schermo usando Millis if (currentMillis - previousMillis >= interval) { // salva l'ultima volta che lo schermo è stato aggiornato previousMillis = currentMillis; u8g2.clearBuffer(); // cancella la memoria interna //Visualizza la tensione del pacchetto u8g2.setFont(u8g2_font_fub20_tr); // 20px carattere u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // Carattere di 10 px u8g2.setCursor (76, 20); u8g2.print("Volt"); u8g2.setCursore (1, 40); u8g2.print("Inverni canadesi"); u8g2.setCursore (1, 60); u8g2.print("Tensione precisa"); } u8g2.sendBuffer(); // trasferisce la memoria interna al display delay(1); }

Nota che sono un po' arrugginito con la codifica Arduino, quindi se trovi qualche errore o un modo per migliorare il codice, sono aperto a suggerimenti:)

Passaggio 3: testiamolo

Mettiamolo alla prova!
Mettiamolo alla prova!
Mettiamolo alla prova!
Mettiamolo alla prova!
Mettiamolo alla prova!
Mettiamolo alla prova!

Per testare questo voltmetro ho usato batterie 8x 9v che ho acquistato in un negozio locale. Sto progettando di utilizzare questo voltmetro per misurare la tensione sui pacchi batteria delle mie biciclette elettriche (hanno tensioni che vanno da 24 a 60 V con quelle occasionali di 72 V).

Una volta che l'elettronica è confezionata in un pcb e una piccola scatola, questo farà un bel misuratore di batterie portatile. La grafica e i caratteri sull'OLED possono essere personalizzati in base alle proprie esigenze (ad es. caratteri più grandi per una facile lettura).

Il mio obiettivo era quello di avere una lettura della tensione sul misuratore Oled/Arduino non troppo lontano dal mio multimetro digitale. Stavo mirando a +/-0, 3v max delta. Come puoi vedere dal video, sono stato in grado di archiviarlo tranne nella parte superiore delle misurazioni.

Spero che questo Instructable ti sia piaciuto e fammi sapere i tuoi pensieri!

Consigliato: