INHOUDSOPGAWE:

Arduino presiese en akkurate voltmeter (0-90V DC): 3 stappe
Arduino presiese en akkurate voltmeter (0-90V DC): 3 stappe

Video: Arduino presiese en akkurate voltmeter (0-90V DC): 3 stappe

Video: Arduino presiese en akkurate voltmeter (0-90V DC): 3 stappe
Video: Review of KWS-DC200-10A 0-200V DC Energy, Power, Capacity Volt Ammeter Calibration 2024, Julie
Anonim

In hierdie instruksies het ek 'n voltmeter gebou om hoë spanning DC (0-90v) relatief akkuraat en akkuraat te meet met behulp van 'n Arduino Nano.

Die toetsmetings wat ek geneem het, was akkuraat genoeg, meestal binne 0.3v van die werklike spanning wat met 'n standaard voltmeter gemeet is (ek het 'n Astro AI DM6000AR gebruik). Dit is naby genoeg vir my beoogde gebruik van die toestel.

Om dit te argiveer, gebruik ek 'n spanningsverwysing (4.096v) en 'n spanningsverdeler.

Aan die kodekant gebruik ek natuurlik die opsie 'eksterne verwysing' vir die Arduino Nano en die 'Smoothing' voorbeeld in die Arduino -tutoriale.

Voorrade

1 x Arduino Nano - skakel

1 x Oled -skerm (SSD 1306) - skakel

1 x 1/4W 1% weerstande - 1k ohm - skakel

1 x 1/4W 1% weerstande - 220k ohm - skakel

1 x 1/4W 1% weerstande - 10k ohm - skakel

1 x 4.096v LM4040DIZ -4.1 Spanningsverwysing - skakel

Broodbord en drade - Skakel

Astro AI DM6000AR - Skakel

USB Power Bank - skakel

9V -batterye - skakel

CanadianWinters is 'n deelnemer aan die Amazon Services LLC Associates Program, 'n geaffilieerde advertensieprogram wat ontwerp is om webwerwe 'n manier te bied om fooie te verdien deur te skakel na Amazon.com en aangeslote webwerwe. Deur hierdie skakels te gebruik, verdien ek as Amazon-medewerker uit kwalifiserende aankope, selfs al koop u iets anders-en dit kos u niks.

Stap 1: Die skemas

Die skematika
Die skematika
Die skematika
Die skematika

Ek het al die dele verbind volgens die skemas hierbo. In die besonder het ek die 4.096 spanningsverwysing gekies om so na as moontlik aan die 5v -merk te bly om die verlies van resolusie te vermy.

Na aanleiding van die datablad het ek 'n 1K ohm -weerstand gekies vir die spanningsverwysing, alhoewel 'n ander waarde gebruik kan word. Die spanning vir die verwysing word verskaf deur die Nano 5v -pen.

Die idee van die stroombaan is dat die GS -spanning wat gemeet moet word, deur 'n spanningsweerstand gaan. Die afgeskaalde spanning kom dan in die analoog pen van die Arduino om te bemonster, glad te word, weer te skaal en op die OLed-skerm te vertoon.

Ek het probeer om dinge eenvoudig te hou:)

Stap 2: Die kode en weerstandberekeninge

Die weerstandswaardes is gekies, aangesien dit raadsaam is (as ek my nie vergis nie, is dit op die Arduino/Atmega -datablad) om die impedansie onder 10k ohm te hou.

Om dinge te vereenvoudig, het ek 'n sigblad gemaak wat die berekeninge outomatiseer indien u verskillende weerstandswaardes wil gebruik: Skakel na Google Sheet

Hier is die kode wat ek vir hierdie projek gebruik het:

#insluit

#sluit U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0) in; // (rotasie, [reset]) dryfspanning = 0; // gebruik om die spanningswaarde vlot op te slaan Radjust = 0.043459459; // Spanningsverdelingsfaktor (R2 /R1+R2) dryf vbat = 0; // eindspanning na berekeninge- spanning van die batteryvlotter Vref = 4.113; // Spanningsverwysing - werklike waarde gemeet. Nominale waarde 4.096v const int numReadings = 50; // aantal leesmonsters - verhoog vir meer gladheid. Verminder vir vinniger lees. int lesings [numReadings]; // die lesings van die analoog invoer int readIndex = 0; // die indeks van die huidige lesing ongetekende lang totaal = 0; // die lopende totale int gemiddelde = 0; // veranderlikes om die skerm te verfris sonder om vertraging te gebruik, ongetekende lang vorigeMillis = 0; // sal die laaste keer stoor dat die skerm opgedateer is // konstantes sal nie verander nie: const lang interval = 50; // interval om die skerm te verfris (millisekondes) leemte -opstelling (leegte) {analogReference (EXTERNAL); // gebruik AREF vir verwysingspanning 4.096. My werklike spanning is 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {// … draai om na die begin: readIndex = 0; } // bereken die gemiddelde: gemiddelde = (totaal / getallesings); spanning = gemiddeld * (Vref / 1023.0); //4.113 is die Vref vbat = spanning/Radjust; // Stel die vertraging vir die skermverfris in met Millis if (currentMillis - previousMillis> = interval) {// stoor die laaste keer dat die skerm opgedateer is previousMillis = currentMillis; u8g2.clearBuffer (); // maak die interne opvatting skoon // Pak spanning skerm u8g2.setFont (u8g2_font_fub20_tr); // 20px lettertipe u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px lettertipe u8g2.setCursor (76, 20); u8g2.print ("Volt"); u8g2.setCursor (1, 40); u8g2.print ("CanadianWinters '"); u8g2.setCursor (1, 60); u8g2.print ("Presiese spanning"); } u8g2.sendBuffer (); // dra interne geheue oor na die vertraging van die vertoning (1); }

Let wel, ek is 'n bietjie verroes met Arduino -kodering, so as u 'n fout vind of 'n manier om die kode te verbeter, is ek oop vir voorstelle:)

Stap 3: Kom ons toets dit

Kom ons toets dit!
Kom ons toets dit!
Kom ons toets dit!
Kom ons toets dit!
Kom ons toets dit!
Kom ons toets dit!

Om hierdie voltmeter te toets, gebruik ek 8x 9v batterye wat ek by 'n plaaslike winkel gekry het. Ek is van plan om hierdie voltmeter te gebruik om die spanning op my elektriese fietse se batterypakke te meet (hulle het spannings wat wissel van 24-60v met soms 72v).

Sodra die elektronika in 'n PCB en 'n klein boks verpak is, sal dit 'n mooi en draagbare batterymeter wees. Die grafika en lettertipes op die OLED kan aangepas word om aan u behoeftes te voldoen (bv. Groter lettertipe om maklik te lees).

My doel was om 'n spanningslesing op die Oled/Arduino -meter te hê, nie te ver van my Digital Multi Meter nie. Ek het gemik op +/- 0, 3v max delta. Soos u uit die video kan sien, kon ek dit argief behalwe aan die bokant van die metings.

Ek hoop dat u hierdie instruksies geniet het en laat my u gedagtes weet!

Aanbeveel: