Innehållsförteckning:

Arduino Precise & Accurate Volt Meter (0-90V DC): 3 steg
Arduino Precise & Accurate Volt Meter (0-90V DC): 3 steg

Video: Arduino Precise & Accurate Volt Meter (0-90V DC): 3 steg

Video: Arduino Precise & Accurate Volt Meter (0-90V DC): 3 steg
Video: Waveshare E-ink Display Precise voltmeter (0-90v DC) with Arduino Nano - Code included 2024, Juli
Anonim

I denna instruerbara har jag byggt en voltmeter för att mäta högspänningar DC (0-90v) med relativ precision och noggrannhet med en Arduino Nano.

De testmätningar jag tog var tillräckligt noggranna, mestadels inom 0,3v från den faktiska spänningen som mättes med en vanlig voltmeter (jag använde en Astro AI DM6000AR). Detta är tillräckligt nära för min avsedda användning av enheten.

För att arkivera detta använde jag en spänningsreferens (4.096v) och spänningsdelare.

På kodsidan använde jag naturligtvis alternativet "extern referens" för Arduino Nano och exemplet "Utjämning" i Arduino -självstudierna.

Tillbehör

1 x Arduino Nano - länk

1 x Oled Display (SSD 1306) - Länk

1 x 1/4W 1% motstånd - 1k ohm - Länk

1 x 1/4W 1% motstånd - 220k ohm - Länk

1 x 1/4W 1% motstånd - 10k ohm - Länk

1 x 4.096v LM4040DIZ -4.1 Spänningsreferens - länk

Brödbräda och trådar - Länk

Astro AI DM6000AR - Länk

USB Power Bank - länk

9V batterier - länk

CanadianWinters är en deltagare i Amazon Services LLC Associates Program, ett affiliate -annonsprogram som är utformat för att ge webbplatser möjlighet att tjäna avgifter genom att länka till Amazon.com och anslutna webbplatser. Genom att använda dessa länkar tjänar jag som Amazon Associate på kvalificerade köp, även om du köper något annat-och det kommer inte att kosta dig någonting.

Steg 1: Schemat

Schemat
Schemat
Schemat
Schemat

Jag kopplade alla delar enligt schemat ovan. I synnerhet valde jag 4.096 spänningsreferensen för att hålla mig så nära 5v -märket som möjligt för att undvika att förlora upplösning.

Efter databladet valde jag ett 1K ohm -motstånd för spänningsreferensen trots att ett annat värde kunde användas. Spänningen för referensen levereras från Nano 5v -stiftet.

Tanken med kretsen är att likspänningen som ska mätas går genom ett spänningsmotstånd. Den skalade spänningen och kommer sedan in i den analoga stiftet på Arduino för att samplas, jämnas ut, skalas om och visas på OLed-skärmen.

Jag försökte hålla det enkelt:)

Steg 2: Kod- och motståndsberäkningarna

Motståndsvärdena valdes eftersom det är lämpligt (om jag inte har fel så finns det på Arduino/Atmega -databladet) för att hålla impedansen under 10k ohm.

För att förenkla saker gjorde jag ett kalkylblad som automatiserar beräkningarna om du vill använda olika motståndsvärden: Länk till Google Sheet

Här är koden jag använde för detta projekt:

#omfatta

#inkludera U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotation, [återställning]) flottörspänning = 0; // används för att lagra spänningsvärdesflöde Radjust = 0,043459459; // Spänningsdelningsfaktor (R2 /R1+R2) float vbat = 0; // slutspänning efter beräkningar- spänning av batteriflåten Vref = 4.113; // Spänningsreferens - uppmätt verkligt värde. Nominellt värde 4.096v const int numReadings = 50; // antal avläsningsprover - öka för mer utjämning. Minska för snabbare läsning. int avläsningar [numReadings]; // avläsningarna från den analoga ingången int readIndex = 0; // indexet för den aktuella avläsningen osignerad lång summa = 0; // det löpande totala int -genomsnittet = 0; // variabler för att uppdatera skärmen utan att använda fördröjning osignerad long previousMillis = 0; // kommer att lagra förra gången skärmen uppdaterades // konstanter ändras inte: const långt intervall = 50; // intervall för att uppdatera skärmen (millisekunder) void setup (void) {analogReference (EXTERNAL); // använd AREF för referensspänning 4.096. Min verkliga referensspänning är 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {// … linda till början: readIndex = 0; } // beräkna genomsnittet: genomsnitt = (total / numReadings); spänning = genomsnitt * (Vref / 1023.0); //4.113 är Vref vbat = spänning/Radjust; // Ställa in fördröjning för skärmuppdatering med Millis if (currentMillis - previousMillis> = intervall) {// spara senaste gången skärmen uppdaterades previousMillis = currentMillis; u8g2.clearBuffer (); // rensa den interna menyn // Pack Voltage display u8g2.setFont (u8g2_font_fub20_tr); // 20px teckensnitt u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px teckensnitt u8g2.setCursor (76, 20); u8g2.print ("volt"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Exakt spänning"); } u8g2.sendBuffer (); // överför internt minne till displayfördröjningen (1); }

Observera att jag är lite rostig med Arduino -kodning, så om du hittar något misstag eller ett sätt att förbättra koden är jag öppen för förslag:)

Steg 3: Låt oss testa det

Låt oss testa det!
Låt oss testa det!
Låt oss testa det!
Låt oss testa det!
Låt oss testa det!
Låt oss testa det!

För att testa denna voltmeter använde jag 8x 9v batterier som jag fick i en lokal butik. Jag planerar att använda denna voltmeter för att mäta spänningen på mina elcyklar batteripaket (de har spänningar från 24-60v med enstaka 72v).

När elektroniken väl har förpackats i ett kretskort och en liten låda blir detta en trevlig och bärbar batterimätare. Grafiken och teckensnitt på OLED kan anpassas efter dina behov (t.ex. större teckensnitt för enkel läsning).

Mitt mål var att ha en spänningsavläsning på Oled/Arduino -mätaren inte så långt från min Digital Multi Meter. Jag siktade på +/- 0, 3v max delta. Som du kan se från videon kunde jag arkivera detta utom i den övre änden av mätningarna.

Jag hoppas att du tyckte om denna instruktionsbara och låt mig veta dina tankar!

Rekommenderad: