Sommario:

Voltmetro Arduino (0-100 V CC) - Versione 2 (migliore): 3 passaggi
Voltmetro Arduino (0-100 V CC) - Versione 2 (migliore): 3 passaggi

Video: Voltmetro Arduino (0-100 V CC) - Versione 2 (migliore): 3 passaggi

Video: Voltmetro Arduino (0-100 V CC) - Versione 2 (migliore): 3 passaggi
Video: The Terminator 2: All Bike Scenes - Harley-Davidson - FAT BOY - Schwarzenegger 2024, Novembre
Anonim
Image
Image
Fase 1: gli schemi
Fase 1: gli schemi

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

Questa è una seconda versione del voltmetro utilizzata dal mio precedente istruibile qui:

Le misurazioni di prova che ho effettuato erano accurate, per lo più entro 0,1 V della tensione effettiva misurata con un voltmetro standard (ho usato un Astro AI DM6000AR).

Questo è molto meglio e più facile secondo me rispetto all'utilizzo di un riferimento di tensione esterno su Arduino.

Forniture

1 x Arduino Nano - Collegamento

1 x display Oled (SSD 1306) - Link

1 x ADS 1115 - ADC a 16 bit - Collegamento

1 x 1/4W (suggerisco di usare resistori da 1W però) 1% Resistori - 220k ohm - Link

1 x 1/4W (suggerisco di usare resistori da 1W però) 1% Resistori - 10k ohm - Link

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: Passaggio 1: gli schemi

Fase 1: gli schemi
Fase 1: gli schemi

Ho collegato tutte le parti come da schema sopra.

Ho collegato a massa il pin ADDR dell'ADC1115. Questo imposta l'indirizzo dell'ADC su 0x48.

Passaggio 2: Passaggio 2: il calcolo del codice e della resistenza

Passaggio 2: il calcolo del codice e della resistenza
Passaggio 2: il calcolo del codice e della resistenza

Come nell'istruzione precedente, l'idea del circuito è che la tensione CC da misurare passa attraverso un resistore di tensione. La tensione scalata quindi entra nel pin analogico del convertitore ADC per essere letta, quindi passata ad Arduino tramite I2C e quindi ridimensionata e visualizzata sul display OLed.

Non ho usato alcuna media o smoothing nel codice in questo caso, poiché le letture sembrano abbastanza accurate e precise. Per ridurre il rumore, potresti voler aggiungere un piccolo condensatore tra A0 (sull'ADC) e terra. Non era richiesto per il mio test però.

Una cosa che ho notato è stato un po' di rumore quando non c'era la batteria collegata (0 volt). Ho usato il monitor seriale dell'Arduino per visualizzare il valore ADC e correggerlo/regolarlo tramite codice.

Come nell'istruzione precedente, ho creato un foglio di calcolo che automatizza i calcoli nel caso in cui si desideri utilizzare diversi valori di resistenza nel partitore di tensione: Link a Google Sheet

Ecco il codice che ho usato per questo progetto:

#includere

#include #include #include Adafruit_ADS1115 annunci(0x48); //Indirizzo dell'ADC U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotazione, [reset]) int calib = 7; // Valore di calibrazione di ADS1115 per ridurre la tensione di float di errore = 0; // utilizzato per memorizzare il valore di tensione float Radjust = 0.043421905; // Fattore divisore di tensione (R2 / R1+R2) float vbat = 0; //tensione finale dopo i calcoli- tensione della batteria //variabili per aggiornare lo schermo senza utilizzare il ritardo unsigned long previousMillis = 0; // memorizzerà l'ultima volta che lo schermo è stato aggiornato // le costanti non cambieranno: const long interval = 250; // intervallo di aggiornamento dello schermo (millisecondi) void setup(void) { Serial.begin(9600); u8g2.begin(); annunci.begin(); } loop void(void) { int16_t adc0; // Lettura ADC a 16 bit dell'ingresso A0 adc0 = ads.readADC_SingleEnded(0); tensione = ((adc0 + calib) * 0,1875)/1000; unsigned long currentMillis = millis(); vbat = tensione/regolazione; // Impedisce la visualizzazione di una tensione negativa quando la batteria è scollegata if (vbat = interval) { previousMillis = currentMillis; u8g2.clearBuffer(); // cancella la memoria interna //Visualizzazione Pack Voltage - Font in questa pagina: https://github.com/olikraus/u8g2/wiki/fntlistall //u8g2.setFont(u8g2_font_fub20_tr); // 20px carattere u8g2.setFont(u8g2_font_fub35_tr); // Carattere 35px u8g2.setCursor (1, 42); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // 10 px carattere u8g2.setCursor (1, 60); u8g2.print("Volt"); } u8g2.sendBuffer(); // trasferisce la memoria interna al display delay(1); }

Passaggio 3: Passaggio 3: testiamolo

Passaggio 3: testiamolo!
Passaggio 3: testiamolo!

Per testare questo voltmetro ho usato batterie 10x 9v che ho acquistato in un negozio locale. Questa volta ho potuto misurare fino a 97 volt! 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 all'inizio di Instructable, sono riuscito ad archiviarlo! La maggior parte delle letture erano esatte!

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

Consigliato: