Përmbajtje:

Matës i saktë dhe i saktë i tensionit Arduino (0-90V DC): 3 hapa
Matës i saktë dhe i saktë i tensionit Arduino (0-90V DC): 3 hapa
Anonim

Në këtë udhëzues, unë kam ndërtuar një voltmetër për të matur tensione të larta DC (0-90v) me saktësi dhe saktësi relative duke përdorur një Arduino Nano.

Matjet e provës që mora ishin mjaft të sakta, kryesisht brenda 0.3v të tensionit aktual të matur me një voltmetër standard (kam përdorur një Astro AI DM6000AR). Kjo është mjaft afër për përdorimin e synuar të pajisjes.

Për të arkivuar këtë kam përdorur një referencë të tensionit (4.096v) dhe ndarës të tensionit.

Nga ana e kodit, natyrisht, kam përdorur opsionin "referenca e jashtme" për Arduino Nano dhe shembullin "Zbutja" në mësimet Arduino.

Furnizimet

1 x Arduino Nano - Lidhje

1 x Ekran me Oled (SSD 1306) - Lidhje

1 x 1/4W 1% Rezistorë - 1k ohm - Lidhje

1 x 1/4W 1% Rezistorë - 220k ohm - Lidhje

1 x 1/4W 1% Rezistorë - 10k ohm - Lidhje

1 x 4.096v LM4040DIZ -4.1 Referenca e Tensionit - Lidhje

Breadboard dhe telat - Lidhje

Astro AI DM6000AR - Lidhje

USB Power Bank - Lidhje

Bateri 9V - Lidhje

CanadianWinters është pjesëmarrës në Programin e Shërbimeve Amazon LLC Associates, një program reklamimi filial i krijuar për të siguruar një mjet për faqet që të fitojnë tarifa duke u lidhur me Amazon.com dhe faqet e lidhura. Duke përdorur këto lidhje, si një Amazon Associate fitoj nga blerjet kualifikuese, edhe nëse blini diçka tjetër-dhe nuk do t'ju kushtojë asgjë.

Hapi 1: Skemat

Skemat
Skemat
Skemat
Skemat

I lidha të gjitha pjesët sipas skemave të mësipërme. Në veçanti zgjodha referencën e tensionit 4.096 për të qëndruar sa më afër shenjës 5v për të shmangur humbjen e rezolucionit.

Duke ndjekur fletën e të dhënave, unë zgjodha një rezistencë 1K ohm për referencën e tensionit edhe pse mund të përdoret një vlerë e ndryshme. Tensioni për referencën furnizohet nga kunja Nano 5v.

Ideja e qarkut është që tensioni DC që do të matet kalon përmes një rezistori të tensionit. Tensioni i shkallëzuar dhe më pas futet në kunjin analog të Arduino për të marrë mostrën, zbutur, ri-shkallëzuar dhe shfaqur në ekranin OLed.

Unë u përpoqa t'i mbaj gjërat të thjeshta:)

Hapi 2: Llogaritjet e Kodit dhe Rezistencës

Vlerat e rezistorëve u zgjodhën ashtu siç është e këshillueshme (nëse nuk gaboj kjo është në fletën e të dhënave Arduino/Atmega) për të mbajtur rezistencën nën 10k ohm.

Për të thjeshtuar gjërat, unë bëra një tabelë që automatizon llogaritjet në rast se dëshironi të përdorni vlera të ndryshme të rezistencës: Lidhje me Google Sheet

Këtu është kodi që kam përdorur për këtë projekt:

#përfshi

#përfshi U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rrotullimi, [rivendosja]) tensioni i notimit = 0; // përdoret për të ruajtur vlerën e tensionit float Radjust = 0.043459459; // Faktori i ndarjes së tensionit (R2 /R1+R2) noton vbat = 0; // tensioni përfundimtar pas llogaritjeve- tensioni i notimit të baterisë Vref = 4.113; // Referenca e tensionit - vlera reale e matur. Vlera nominale 4.096v const int numra Lexime = 50; // numri i mostrave të leximit - rritet për më shumë zbutje. Zvogëloni për lexim më të shpejtë. leximet int [numReadings]; // leximet nga hyrja analoge int readIndex = 0; // indeksi i leximit aktual të përgjithshëm të panënshkruar gjatë = 0; // mesatarja totale e vrapimit int = 0; // ndryshore për rifreskimin e ekranit pa përdorur vonesa të panënshkruara të mëparshmeMillis = 0; // do të ruhet herën e fundit kur ekrani u përditësua // konstantet nuk do të ndryshojnë: interval i gjatë const = 50; // intervali në të cilin do të rifreskoni ekranin (milisekonda) void setup (void) {analogReference (EXTERNAL); // përdorni AREF për tensionin referues 4.096. Tensioni im real referues është 4.113v u8g2.begin (); për (int thisReading = 0; thisReading = numReadings) {// … përfundoni deri në fillim: readIndex = 0; } // llogarisni mesataren: mesatare = (total / numReadings); tension = mesatar * (Vref / 1023.0); //4.113 është Vref vbat = tension/Radjust; // Vendosja e vonesës për rifreskimin e ekranit duke përdorur Millis nëse (currentMillis - previousMillis> = interval) {// ruani herën e fundit kur ekrani është përditësuar previousMillis = currentMillis; u8g2.clearBuffer (); // pastroni menoren e brendshme // Ekrani i tensionit të paketës u8g2.setFont (u8g2_font_fub20_tr); // font 20px u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // font 10 px u8g2.setCursor (76, 20); u8g2.print ("Volt"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Tension i saktë"); } u8g2.sendBuffer (); // transferimi i kujtesës së brendshme në vonesën e shfaqjes (1); }

Ju lutemi vini re se unë jam pak i ndryshkur me kodimin Arduino, kështu që nëse gjeni ndonjë gabim ose një mënyrë për të përmirësuar kodin, unë jam i hapur për sugjerime:)

Hapi 3: Le ta Provojmë

Le ta Provojmë!
Le ta Provojmë!
Le ta Provojmë!
Le ta Provojmë!
Le ta Provojmë!
Le ta Provojmë!

Për të testuar këtë voltmetër kam përdorur bateri 8x 9v që i kam marrë në një dyqan lokal. Unë po planifikoj të përdor këtë voltmetër për të matur tensionin në bateritë e biçikletave të mia elektrike (ato kanë tensione që variojnë nga 24-60v me ato të rastit 72v).

Pasi elektronika të jetë e paketuar në një PCB dhe një kuti të vogël, kjo do të bëjë një matës të bukur dhe të lëvizshëm të paketave të baterive. Grafika dhe fontet në OLED mund të personalizohen për t'iu përshtatur nevojave tuaja (p.sh. font më i madh për lexim të lehtë).

Qëllimi im ishte të kisha një lexim të tensionit në njehsorin Oled/Arduino jo shumë larg nga Digital Multi Meter -i im. Po synoja +/- 0, deltën maksimale 3v. Siç mund ta shihni nga videoja, unë kam qenë në gjendje ta arkivoj këtë, përveç në pjesën e sipërme të matjeve.

Shpresoj se ju ka pëlqyer ky udhëzues dhe më tregoni mendimet tuaja!

Recommended: