Taula de continguts:

Arduino Volt Meter (0-100V DC) - Versió 2 (millor): 3 passos
Arduino Volt Meter (0-100V DC) - Versió 2 (millor): 3 passos

Vídeo: Arduino Volt Meter (0-100V DC) - Versió 2 (millor): 3 passos

Vídeo: Arduino Volt Meter (0-100V DC) - Versió 2 (millor): 3 passos
Vídeo: How to use Digit Voltmeter 0V-100V DC 3wire? 2024, De novembre
Anonim
Image
Image
Pas 1: els esquemes
Pas 1: els esquemes

En aquesta instrucció, he construït un voltímetre per mesurar tensions altes de corrent continu (0-100v) amb una precisió i precisió relativa mitjançant un Arduino Nano i un ADS 1115 ADC.

Aquesta és una segona versió del voltímetre que he utilitzat aquí:

Les mesures de prova que vaig fer van ser precises, sobretot a 0,1 v de la tensió real mesurada amb un voltímetre estàndard (vaig utilitzar un Astro AI DM6000AR).

Al meu entendre, això és molt millor i és més fàcil que utilitzar una referència de tensió externa a l'Arduino.

Subministraments

1 x Arduino Nano - Link

1 x pantalla Oled (SSD 1306): enllaç

1 x ADS 1115 - ADC de 16 bits: enllaç

1 x 1 / 4W (recomano utilitzar resistències de 1W) 1% de resistències - 220k ohm - Enllaç

1 x 1 / 4W (recomano utilitzar resistències de 1W) 1% de resistències - 10k ohm - Enllaç

Taula de pa i cables - Enllaç

Astro AI DM6000AR - Enllaç

Banc d'alimentació USB: enllaç

Bateries de 9V: enllaç

CanadianWinters participa al Programa Associats d'Amazon Services LLC, un programa de publicitat afiliada dissenyat per proporcionar un mitjà perquè els llocs guanyin tarifes mitjançant l'enllaç a Amazon.com i llocs afiliats. Mitjançant l’ús d’aquests enllaços, com a associat d’Amazon, guanyo amb les compres que compleixin els requisits, fins i tot si compreu una altra cosa, i no us costarà res.

Pas 1: Pas 1: els esquemes

Pas 1: els esquemes
Pas 1: els esquemes

He connectat totes les parts segons els esquemes anteriors.

Vaig lligar el pin ADDR de l'ADC1115 a terra. Això defineix l'adreça de l'ADC a 0x48.

Pas 2: Pas 2: els càlculs de codi i resistència

Pas 2: els càlculs de codi i resistència
Pas 2: els càlculs de codi i resistència

Com a la instrucció anterior, la idea del circuit és que la tensió CC a mesurar passa per una resistència de tensió. El voltatge escalat i després entra al pin analògic del convertidor ADC per llegir-lo, després es passa a l'Arduino mitjançant I2C i, a continuació, torna a escalar i es mostra a la pantalla OLed.

En aquest cas no he utilitzat cap mitjà ni suavització del codi, ja que les lectures semblen bastant precises. Per reduir el soroll, és possible que vulgueu afegir un condensador petit entre A0 (a l'ADC) i terra. Tot i així, no era necessari per a la meva prova.

Una cosa que vaig notar va ser una mica de soroll quan no hi havia cap bateria connectada (0 volts). He utilitzat el monitor sèrie de l'Arduino per mostrar el valor ADC i corregir-lo / ajustar-lo mitjançant el codi.

Com a la instrucció anterior, vaig fer un full de càlcul que automatitza els càlculs per si voleu utilitzar diferents valors de resistència al divisor de voltatge: enllaç a Google Sheet

Aquí teniu el codi que he utilitzat per a aquest projecte:

#incloure

#include #include #include Adafruit_ADS1115 ads (0x48); // Adreça de l'ADC U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotació, [restabliment]) int calib = 7; // Valor de calibratge de l'ADS1115 per reduir la tensió flotant d'error = 0; // s’utilitza per emmagatzemar el valor de tensió float Radjust = 0,043421905; // Factor divisor de tensió (R2 / R1 + R2) flotant vbat = 0; // tensió final després de calcs- tensió de la bateria // variables per actualitzar la pantalla sense fer servir retards sense signar llarg anteriorMillis = 0; // emmagatzemarà la darrera vegada que es va actualitzar la pantalla // les constants no canviaran: const long interval = 250; // interval per actualitzar la pantalla (mil·lisegons) void setup (void) {Serial.begin (9600); u8g2.begin (); ads.begin (); } bucle buit (buit) {int16_t adc0; // Lectura ADC de 16 bits de l'entrada A0 adc0 = ads.readADC_SingleEnded (0); voltatge = ((adc0 + calib) * 0,1875) / 1000; corrent llarg sense signar Millis = millis (); vbat = voltatge / Radjust; // Eviteu que es mostri voltatge negatiu quan la bateria està desconnectada si (vbat = interval) {anteriorMillis = currentMillis; u8g2.clearBuffer (); // esborreu el menú intern // Visualització de la tensió del paquet: tipus de lletra en aquesta pàgina: https://github.com/olikraus/u8g2/wiki/fntlistall //u8g2.setFont(u8g2_font_fub20_tr); // font de 20px u8g2.setFont (u8g2_font_fub35_tr); // font 35px u8g2.setCursor (1, 42); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // font de 10 px u8g2.setCursor (1, 60); u8g2.print ("Volts"); } u8g2.sendBuffer (); // transferir memòria interna al retard de visualització (1); }

Pas 3: Pas 3: Provem-ho

Pas 3: provem-ho!
Pas 3: provem-ho!

Per provar aquest voltímetre vaig fer servir bateries de 10x 9v que vaig aconseguir en una botiga local. Aquesta vegada he pogut mesurar fins a 97 volts! Tinc previst utilitzar aquest voltímetre per mesurar el voltatge de les bateries de les meves bicicletes elèctriques (tenen tensions que oscil·len entre els 24 i els 60 v amb els ocasionals de 72 v).

Una vegada que l’electrònica s’envasi en un pcb i una petita caixa, es convertirà en un bon mesurador de bateries portàtil. Els gràfics i tipus de lletra de l'OLED es poden personalitzar per adaptar-se a les vostres necessitats (per exemple, tipus de lletra més gran per facilitar la lectura). El meu objectiu era tenir una lectura de voltatge al comptador Oled / Arduino no gaire lluny del meu multímetre digital. Jo pretenia +/- 0, 3v màxim delta.

Com podeu veure al vídeo al començament de l’Instruible, he pogut arxivar-lo. La majoria de lectures van ser perfectes.

Espero que us hagi agradat aquest instructiu i feu-me saber els vostres pensaments.

Recomanat: