Indholdsfortegnelse:

Arduino Volt Meter (0-100V DC) - Version 2 (bedre): 3 trin
Arduino Volt Meter (0-100V DC) - Version 2 (bedre): 3 trin

Video: Arduino Volt Meter (0-100V DC) - Version 2 (bedre): 3 trin

Video: Arduino Volt Meter (0-100V DC) - Version 2 (bedre): 3 trin
Video: Arduino Precise High Voltage meter(0-100V DC) with an ADS 1115 - 16bit ADC | Code in the description 2024, Juni
Anonim
Image
Image
Trin 1: skemaerne
Trin 1: skemaerne

I denne instruktive har jeg bygget et voltmeter til at måle højspændinger DC (0-100v) med relativ præcision og nøjagtighed ved hjælp af en Arduino Nano og en ADS 1115 ADC.

Dette er en anden version af voltmeteret brugt min tidligere instruerbare her:

De testmålinger, jeg tog, var nøjagtige, for det meste inden for 0,1 v af den faktiske spænding målt med et standard voltmeter (jeg brugte en Astro AI DM6000AR).

Dette er meget bedre og lettere efter min mening end at bruge en ekstern spændingsreference på Arduino.

Forbrugsvarer

1 x Arduino Nano - Link

1 x Oled Display (SSD 1306) - Link

1 x ADS 1115 - 16 bit ADC - Link

1 x 1/4W (jeg foreslår dog at bruge 1W modstande) 1% modstande - 220k ohm - Link

1 x 1/4W (jeg foreslår dog at bruge 1W modstande) 1% modstande - 10k ohm - Link

Brødbræt og ledninger - Link

Astro AI DM6000AR - Link

USB Power Bank - Link

9V batterier - Link

CanadianWinters er deltager i Amazon Services LLC Associates Program, et affilieret annonceringsprogram designet til at give websteder mulighed for at tjene gebyrer ved at linke til Amazon.com og tilknyttede websteder. Ved at bruge disse links tjener jeg som Amazon Associate på kvalificerede køb, selvom du køber noget andet-og det vil ikke koste dig noget.

Trin 1: Trin 1: skemaerne

Trin 1: skemaerne
Trin 1: skemaerne

Jeg forbandt alle delene i henhold til skemaerne ovenfor.

Jeg bandt ADDR -stiften på ADC1115 til jorden. Dette indstiller adressen på ADC til 0x48.

Trin 2: Trin 2: Kode- og modstandsberegningerne

Trin 2: Kode- og modstandsberegningerne
Trin 2: Kode- og modstandsberegningerne

Som i den tidligere instruerbare, er ideen med kredsløbet, at DC -spændingen, der skal måles, går gennem en spændingsmodstand. Den skalerede spænding og kommer derefter ind i den analoge pin på ADC-konverteren, der skal læses, derefter overført til Arduino via I2C og derefter skaleret igen og vist på OLed-displayet.

Jeg brugte ikke nogen gennemsnit eller udjævning i koden i dette tilfælde, da aflæsningerne virker ret præcise og præcise. For at reducere støj kan du tilføje en lille kondensator mellem A0 (på ADC) og jorden. Det var dog ikke påkrævet til min test.

En ting jeg bemærkede, var en smule støj, når der ikke var tilsluttet et batteri (0 volt). Jeg brugte den serielle skærm på Arduino til at vise ADC -værdien og rette/justere den via kode.

Som i den foregående instruerbare, lavede jeg et regneark, der automatiserer beregningerne, hvis du vil bruge forskellige modstandsværdier i spændingsdeleren: Link til Google Sheet

Her er koden, jeg brugte til dette projekt:

#omfatte

#include #include #include Adafruit_ADS1115 annoncer (0x48); // Adresse til ADC U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotation, [reset]) int calib = 7; // Værdi for kalibrering af ADS1115 for at reducere fejl float spænding = 0; // bruges til at gemme spændingsværdi float Radjust = 0,043421905; // Spændingsdelingsfaktor (R2 / R1+R2) float vbat = 0; // slutspænding efter beregninger- spænding af batteriet // variabler til opdatering af skærmen uden forsinkelse uden fortegn lang foregåendeMillis = 0; // vil gemme sidste gang skærmen blev opdateret // konstanter ændres ikke: const langt interval = 250; // interval for opdatering af skærmen (millisekunder) hulrumsopsætning (tomrum) {Serial.begin (9600); u8g2.begin (); ads.begin (); } void loop (void) {int16_t adc0; // 16 bit ADC læsning af input A0 adc0 = ads.readADC_SingleEnded (0); spænding = ((adc0 + kalib) * 0,1875)/1000; usigneret lang strømMillis = millis (); vbat = spænding/Radjust; // Forhindre visning af negativ spænding, når batteriet afbrydes, hvis (vbat = interval) {previousMillis = currentMillis; u8g2.clearBuffer (); // ryd den interne menory // Pack Voltage display - skrifttyper på denne side: https://github.com/olikraus/u8g2/wiki/fntlistall //u8g2.setFont(u8g2_font_fub20_tr); // 20px skrifttype u8g2.setFont (u8g2_font_fub35_tr); // 35px skrifttype u8g2.setCursor (1, 42); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 px skrifttype u8g2.setCursor (1, 60); u8g2.print ("volt"); } u8g2.sendBuffer (); // overfør intern hukommelse til displayforsinkelsen (1); }

Trin 3: Trin 3: Lad os teste det

Trin 3: Lad os teste det!
Trin 3: Lad os teste det!

For at teste dette voltmeter brugte jeg 10x 9v batterier, som jeg fik i en lokal butik. Denne gang kunne jeg måle op til 97 volt! Jeg planlægger at bruge dette voltmeter til at måle spændingen på mine elektriske cykler batteripakker (de har spændinger fra 24-60v med lejlighedsvis 72v).

Når elektronikken er pakket ind i et printkort og en lille æske, vil dette være en flot og bærbar batteripakemåler. Grafikken og skrifttyperne på OLED kan tilpasses dine behov (f.eks. Større skrifttype til let læsning). Mit mål var at have en spændingsaflæsning på Oled/Arduino -måleren ikke for langt fra mit Digital Multi Meter. Jeg sigtede mod +/- 0, 3v max delta.

Som du kan se fra videoen i begyndelsen af Instructable, var jeg i stand til at arkivere dette! De fleste aflæsninger var helt i orden!

Jeg håber, at du nød denne instruks og lad mig vide dine tanker!

Anbefalede: