Kazalo:

Arduino natančen in natančen voltmeter (0-90V DC): 3 koraki
Arduino natančen in natančen voltmeter (0-90V DC): 3 koraki

Video: Arduino natančen in natančen voltmeter (0-90V DC): 3 koraki

Video: Arduino natančen in natančen voltmeter (0-90V DC): 3 koraki
Video: Review of 18650 4 channel Lithium Battery Capacity Tester, Charger and Discharge | WattHour 2024, November
Anonim

V tem navodilu sem izdelal voltmeter za merjenje visokih napetosti DC (0-90v) z relativno natančnostjo in natančnostjo z uporabo Arduino Nano.

Testne meritve, ki sem jih opravil, so bile dovolj natančne, večinoma znotraj 0,3v dejanske napetosti, izmerjene s standardnim voltmetrom (uporabil sem Astro AI DM6000AR). To je dovolj blizu za predvideno uporabo naprave.

Za arhiviranje sem uporabil referenčno napetost (4.096v) in delilnik napetosti.

Na strani kode sem seveda uporabil možnost "zunanje reference" za Arduino Nano in primer "Smoothing" v vadnicah Arduino.

Zaloge

1 x Arduino Nano - povezava

1 x Oled zaslon (SSD 1306) - Povezava

1 x 1/4W 1% upori - 1 k ohm - povezava

1 x 1/4W 1% upori - 220k ohm - povezava

1 x 1/4W 1% upori - 10k ohm - povezava

1 x 4.096v LM4040DIZ -4.1 Referenčna napetost - povezava

Ogledna plošča in žice - Povezava

Astro AI DM6000AR - Povezava

USB Power Bank - Povezava

9V baterije - povezava

CanadianWinters je udeleženec programa Amazon Services LLC Associates Program, programa oglaševalskega partnerja, namenjenega spletnim mestom, da zaslužijo pristojbine s povezovanjem na Amazon.com in povezana mesta. Z uporabo teh povezav kot sodelavec pri Amazonu zaslužim s kvalificiranimi nakupi, tudi če kupite kaj drugega-in to vas ne bo stalo nič.

1. korak: Sheme

Sheme
Sheme
Sheme
Sheme

Vse dele sem povezal po zgornjih shemah. Zlasti sem se odločil, da referenčna napetost 4.096 ostane čim bližje oznaki 5v, da se izogne izgubi ločljivosti.

Po podatkovnem listu sem za referenco napetosti izbral 1K ohmski upor, čeprav bi lahko uporabili drugačno vrednost. Referenčna napetost se napaja iz zatiča Nano 5v.

Ideja vezja je, da enosmerna napetost, ki jo je treba izmeriti, poteka skozi napetostni upor. Prilagojena napetost in nato pride v analogni zatič Arduina, da se vzorči, zgladi, ponovno poveča in prikaže na zaslonu OLed.

Poskušal sem stvari poenostaviti:)

2. korak: Izračuni kode in upora

Vrednosti uporov so bile izbrane, kot je priporočljivo (če se ne motim, to je na podatkovnem listu Arduino/Atmega), da impedanca ostane pod 10 k ohm.

Za poenostavitev sem naredil preglednico, ki avtomatizira izračune, če želite uporabiti različne vrednosti upora: Povezava do Google Sheet

Tu je koda, ki sem jo uporabil za ta projekt:

#vključi

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (vrtenje, [ponastavitev]) plavajoča napetost = 0; // uporablja se za shranjevanje vrednosti napetosti float Radjust = 0,043459459; // faktor delilnika napetosti (R2 /R1+R2) plavajoči vbat = 0; // končna napetost po kalcih- napetost plovca akumulatorja Vref = 4.113; // Referenčna napetost - izmerjena dejanska vrednost. Nominalna vrednost 4.096v const int numReadings = 50; // število vzorcev branja - povečajte za bolj gladko. Zmanjšajte za hitrejše branje. int odčitki [numReadings]; // odčitki iz analognega vhoda int readIndex = 0; // indeks trenutnega branja unsigned long total = 0; // tekoče skupno int povprečje = 0; // spremenljivke za osveževanje zaslona brez uporabe zamude brez podpisa dolga previousMillis = 0; // shrani zadnjič, ko je bil zaslon posodobljen // konstante se ne bodo spremenile: const long interval = 50; // interval, v katerem je treba osvežiti zaslon (v milisekundah) void setup (void) {analogReference (EXTERNAL); // uporabite AREF za referenčno napetost 4.096. Moja referenčna dejanska napetost je 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {//… zavijte na začetek: readIndex = 0; } // izračunamo povprečje: average = (total / numReadings); napetost = povprečje * (Vref / 1023,0); //4.113 je Vref vbat = napetost/Radjust; // Nastavitev zakasnitve za osvežitev zaslona z uporabo Millisa if (currentMillis - previousMillis> = interval) {// shranimo zadnjo posodobitev zaslona previousMillis = currentMillis; u8g2.clearBuffer (); // počisti notranji meni // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // pisava 20px u8g2.setCursor (1, 20); u8g2.tisk (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // pisava 10 px u8g2.setCursor (76, 20); u8g2.print ("Volti"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Natančna napetost"); } u8g2.sendBuffer (); // prenos notranjega pomnilnika na zakasnitev prikaza (1); }

Prosimo, upoštevajte, da sem nekoliko zarjavel s kodiranjem Arduino, zato, če najdete kakšno napako ali način za izboljšanje kode, sem odprt za predloge:)

3. korak: Preizkusimo

Preizkusimo!
Preizkusimo!
Preizkusimo!
Preizkusimo!
Preizkusimo!
Preizkusimo!

Za preizkus tega voltmetra sem uporabil 8x 9v baterije, ki sem jih dobil v lokalni trgovini. Nameravam uporabiti ta voltmeter za merjenje napetosti na mojih akumulatorskih paketih za električna kolesa (imajo napetosti od 24 do 60 V z občasnimi 72 V).

Ko je elektronika zapakirana v tiskani vezje in majhno škatlo, bo to lep in prenosljiv merilnik baterije. Grafiko in pisave na OLED -u lahko prilagodite svojim potrebam (npr. Večja pisava za enostavno branje).

Moj cilj je bil odčitati napetost na merilniku Oled/Arduino nedaleč od mojega digitalnega multimetra. Cilj sem bil +/- 0, 3v max delta. Kot lahko vidite iz videoposnetka, sem to lahko arhiviral, razen na zgornjem koncu meritev.

Upam, da ste uživali v tem navodilu in mi sporočite svoje misli!

Priporočena: