Inhoudsopgave:

Arduino nauwkeurige en nauwkeurige voltmeter (0-90V DC) - Ajarnpa
Arduino nauwkeurige en nauwkeurige voltmeter (0-90V DC) - Ajarnpa

Video: Arduino nauwkeurige en nauwkeurige voltmeter (0-90V DC) - Ajarnpa

Video: Arduino nauwkeurige en nauwkeurige voltmeter (0-90V DC) - Ajarnpa
Video: Review of 18650 4 channel Lithium Battery Capacity Tester, Charger and Discharge | WattHour 2024, Juli-
Anonim

In deze instructable heb ik een voltmeter gebouwd om hoge spanningen DC (0-90v) te meten met relatieve precisie en nauwkeurigheid met behulp van een Arduino Nano.

De testmetingen die ik nam waren nauwkeurig genoeg, meestal binnen 0.3v van de werkelijke spanning gemeten met een standaard voltmeter (ik gebruikte een Astro AI DM6000AR). Dit is dichtbij genoeg voor mijn beoogde gebruik van het apparaat.

Om dit te archiveren heb ik een spanningsreferentie (4.096v) en spanningsdeler gebruikt.

Aan de codekant heb ik natuurlijk de optie "externe referentie" voor de Arduino Nano en het voorbeeld "Smoothing" in de Arduino-tutorials gebruikt.

Benodigdheden

1 x Arduino Nano - Link

1 x Oled-scherm (SSD 1306) - Link

1 x 1/4W 1% Weerstanden - 1k ohm - Link

1 x 1/4W 1% Weerstanden - 220k ohm - Link

1 x 1/4W 1% Weerstanden - 10k ohm - Link

1 x 4.096v LM4040DIZ-4.1 Spanningsreferentie - Link

Breadboard en kabels - Link

Astro AI DM6000AR - Link

USB Powerbank - Link

9V-batterijen - Link

CanadianWinters neemt deel aan het Amazon Services LLC Associates-programma, een gelieerd advertentieprogramma dat is ontworpen om sites een manier te bieden om vergoedingen te verdienen door te linken naar Amazon.com en gelieerde sites. Door deze links te gebruiken, verdien ik als Amazon Associate met in aanmerking komende aankopen, zelfs als je iets anders koopt - en het kost je niets.

Stap 1: De schema's

de schema's
de schema's
de schema's
de schema's

Ik heb alle onderdelen aangesloten volgens de bovenstaande schema's. In het bijzonder koos ik de 4.096-spanningsreferentie om zo dicht mogelijk bij de 5v-markering te blijven om te voorkomen dat de resolutie verloren gaat.

Volgens de datasheet koos ik een weerstand van 1K ohm voor de spanningsreferentie, hoewel een andere waarde zou kunnen worden gebruikt. De spanning voor de referentie wordt geleverd door de Nano 5v pin.

Het idee van de schakeling is dat de te meten gelijkspanning door een spanningsweerstand gaat. De geschaalde spanning komt dan in de analoge pin van de Arduino om te worden gesampled, afgevlakt, opnieuw geschaald en weergegeven op het OLed-display.

Ik heb geprobeerd het simpel te houden:)

Stap 2: De code- en weerstandsberekeningen

De weerstandswaarden zijn gekozen omdat het raadzaam is (als ik me niet vergis, staat dit op het Arduino/Atmega-gegevensblad) om de impedantie onder de 10k ohm te houden.

Om dingen te vereenvoudigen, heb ik een spreadsheet gemaakt die de berekeningen automatiseert voor het geval je verschillende weerstandswaarden wilt gebruiken: Link naar Google Sheet

Hier is de code die ik voor dit project heb gebruikt:

#erbij betrekken

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotatie, [reset]) float-spanning =0; // gebruikt om spanningswaarde float Radjust = 0.043459459 op te slaan; // Spanningsdelerfactor (R2 / R1+R2) float vbat =0; // eindspanning na calcs- spanning van de batterijvlotter Vref = 4.113; // Spanningsreferentie - gemeten werkelijke waarde. Nominale waarde 4.096v const int numReadings = 50; // aantal leesvoorbeelden - verhoog voor meer afvlakking. Verlaag voor sneller lezen. int lezingen [numReadings]; // de metingen van de analoge ingang int readIndex = 0; // de index van de huidige lezing unsigned long total = 0; // het lopende totaal int gemiddelde = 0; //variabelen voor het verversen van het scherm zonder gebruik te maken van vertraging unsigned long previousMillis = 0; // slaat de laatste keer op dat het scherm werd bijgewerkt // constanten veranderen niet: const long interval = 50; // interval waarmee het scherm moet worden vernieuwd (milliseconden) void setup (void) { analogReference (EXTERNAL); // gebruik AREF voor referentiespanning 4.096. Mijn referentie echte spanning is 4.113v u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // … wikkel rond naar het begin: readIndex = 0; } // bereken het gemiddelde: gemiddelde = (totaal / numReadings); spanning = gemiddeld * (Vref / 1023,0); //4.113 is de Vref vbat = spanning/Radjust; // De vertraging voor het verversen van het scherm instellen met Millis if (currentMillis - previousMillis >= interval) { // sla de laatste keer op dat het scherm is bijgewerkt previousMillis = currentMillis; u8g2.clearBuffer(); // wis het interne geheugen // Pack Voltage-weergave u8g2.setFont (u8g2_font_fub20_tr); // 20px lettertype u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // 10 px lettertype u8g2.setCursor (76, 20); u8g2.print("Volt"); u8g2.setCursor (1, 40); u8g2.print("Canadese Winters'"); u8g2.setCursor (1, 60); u8g2.print ("Precieze spanning"); } u8g2.sendBuffer(); // breng intern geheugen over naar de weergavevertraging (1); }

Let op: ik ben een beetje roestig met Arduino-codering, dus als je een fout vindt of een manier om de code te verbeteren, sta ik open voor suggesties:)

Stap 3: Laten we het uittesten

Laten we het testen!
Laten we het testen!
Laten we het testen!
Laten we het testen!
Laten we het testen!
Laten we het testen!

Om deze voltmeter te testen heb ik 8x 9v batterijen gebruikt die ik bij een plaatselijke winkel kocht. Ik ben van plan deze voltmeter te gebruiken om de spanning op de accu's van mijn elektrische fietsen te meten (ze hebben spanningen variërend van 24-60v met af en toe 72v).

Zodra de elektronica is verpakt in een pcb en een klein doosje, wordt dit een mooie en draagbare batterijmeter. De afbeeldingen en lettertypen op de OLED kunnen worden aangepast aan uw behoeften (bijv. groter lettertype voor gemakkelijk lezen).

Mijn doel was om een spanningsmeting op de Oled/Arduino-meter te hebben, niet te ver van mijn digitale multimeter. Ik mikte op +/-0, 3v max delta. Zoals je in de video kunt zien, heb ik dit kunnen archiveren, behalve aan de bovenkant van de metingen.

Ik hoop dat je genoten hebt van deze Instructable en laat me je gedachten weten!

Aanbevolen: