Innehållsförteckning:
Video: Arduino Precise & Accurate Volt Meter (0-90V DC): 3 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
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
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
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:
Arduino Volt Meter (0-100V DC) - Version 2 (bättre): 3 steg
Arduino Volt Meter (0-100V DC)-Version 2 (bättre): I denna instruerbara har jag byggt en voltmeter för att mäta högspänningar DC (0-100v) med relativ precision och noggrannhet med hjälp av en Arduino Nano och en ADS 1115 ADC .Detta är en andra version av voltmätaren som använde min tidigare instruerbara här: https: // ww
Pocket Volt Meter: 6 steg (med bilder)
Pocket Volt Meter: Jag har använt en större version av denna voltmeter ganska länge och det var alltid mycket hjälpsamt så när jag såg Pocket Sized Contest sa jag till mig själv varför inte använda detta tillfälle och dela detta med dig Jag gjorde några designförbättringar under
SnappyXO Precise Mover Robot: 6 steg
SnappyXO Precise Mover Robot: Få din Arduino -robot att gå rakt ett visst avstånd eller vrid till en angiven vinkel med hjälp av PreciseMovement Arduino -biblioteket. Roboten behöver en rullande bollcaster eller motsvarande för att minimera friktion medan den vrider sig. Https: //www.pololu. com/producent
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): 4 steg
One More Arduino Weather Station (ESP-01 & BMP280 & DHT11 & OneWire): Här kan du hitta en iteration av att använda OneWire med de få få stiften på en ESP-01. val (du måste ha meriter …) Samlar in sensoriska data från en BMP280 och en DHT11
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 steg
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: I detta tillfälle kommer vi att integrera vår aktiva effektmätare eller elförbrukning, Pzem-004-Peacefair med IoT Node-RED integrationsplattform som använts i tidigare självstudier, vi kommer att använda en ESP8266 -modul konfigurerad som Modbus TCP / IP -slav, senare