Cuprins:

Contor de tensiune precis și precis Arduino (0-90V DC): 3 pași
Contor de tensiune precis și precis Arduino (0-90V DC): 3 pași

Video: Contor de tensiune precis și precis Arduino (0-90V DC): 3 pași

Video: Contor de tensiune precis și precis Arduino (0-90V DC): 3 pași
Video: Cum se măsoară orice tensiune continuă cu Arduino ARDVC-01 2024, Iulie
Anonim

În acest instructable, am construit un voltmetru pentru a măsura tensiuni ridicate de curent continuu (0-90v) cu precizie și precizie relativă folosind un Arduino Nano.

Măsurătorile de testare pe care le-am făcut au fost suficient de precise, mai ales la 0,3v de tensiunea reală măsurată cu un voltmetru standard (am folosit un Astro AI DM6000AR). Acest lucru este suficient de apropiat pentru utilizarea intenționată a dispozitivului.

Pentru a arhiva acest lucru am folosit o referință de tensiune (4.096v) și un divizor de tensiune.

Pe partea de cod, am folosit, desigur, opțiunea „referință externă” pentru Arduino Nano și exemplul „Smoothing” din tutorialele Arduino.

Provizii

1 x Arduino Nano - Link

1 x Afișaj Oled (SSD 1306) - Link

1 x 1 / 4W Rezistențe 1% - 1k ohm - Link

1 x 1 / 4W Rezistențe 1% - 220k ohm - Link

1 x 1 / 4W Rezistențe 1% - 10k ohm - Link

1 x 4.096v LM4040DIZ-4.1 Referință tensiune - Link

Plăci și fire - Link

Astro AI DM6000AR - Link

USB Power Bank - Link

Baterii de 9V - Link

CanadianWinters este participant la Programul Asociaților Amazon Services LLC, un program de publicitate afiliat conceput pentru a oferi site-urilor un mijloc de a câștiga taxe prin conectarea la Amazon.com și site-uri afiliate. Prin utilizarea acestor link-uri, în calitate de asociat Amazon câștig din achiziții eligibile, chiar dacă cumpărați altceva - și nu vă va costa nimic.

Pasul 1: Schemele

Schematica
Schematica
Schematica
Schematica

Am conectat toate piesele conform schemelor de mai sus. În special, am ales referința de tensiune 4.096 pentru a rămâne cât mai aproape de marca 5v pentru a evita pierderea rezoluției.

În urma fișei tehnice, am ales un rezistor de 1K ohm pentru referința de tensiune, chiar dacă ar putea fi utilizată o valoare diferită. Tensiunea pentru referință este furnizată de pinul Nano 5v.

Ideea circuitului este că tensiunea continuă care trebuie măsurată trece printr-un rezistor de tensiune. Tensiunea scalată și apoi intră în pinul analogic al Arduino pentru a fi eșantionat, netezit, redimensionat și afișat pe afișajul OLed.

Am încercat să păstrez lucrurile simple:)

Pasul 2: Codul și calculele rezistenței

Valorile rezistențelor au fost alese, deoarece este recomandabil (dacă nu mă înșel, este în foaia tehnică Arduino / Atmega) pentru a menține impedanța sub 10k ohm.

Pentru a simplifica lucrurile, am realizat o foaie de calcul care automatizează calculele în cazul în care doriți să utilizați diferite valori ale rezistenței: Link către Google Sheet

Iată codul pe care l-am folosit pentru acest proiect:

#include

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2 (U8G2_R0); // (rotație, [resetare]) tensiune de plutire = 0; // folosit pentru a stoca valoarea de tensiune float Radjust = 0,043459459; // Factor divizor de tensiune (R2 / R1 + R2) floare vbat = 0; // tensiunea finală după calc- tensiunea plutitoare a bateriei Vref = 4.113; // Referință de tensiune - valoarea reală măsurată. Valoare nominală 4.096v const int numCitiri = 50; // numărul de probe de citire - crește pentru o mai bună netezire. Reduceți pentru o citire mai rapidă. citiri int [numCitiri]; // citirile din intrarea analogică int readIndex = 0; // indexul citirii curente nesemnate lung total = 0; // media int totală executată = 0; // variabile pentru reîmprospătarea ecranului fără utilizarea întârzierii nesemnate mult timp anteriorMillis = 0; // va stoca ultima dată când ecranul a fost actualizat // constantele nu se vor schimba: const long interval = 50; // interval la care să reîmprospătați ecranul (milisecunde) void setup (void) {analogReference (EXTERNAL); // utilizați AREF pentru tensiunea de referință 4.096. Tensiunea mea reală de referință este 4.113v u8g2.begin (); for (int thisReading = 0; thisReading = numReadings) {// … încheie la început: readIndex = 0; } // calculați media: medie = (total / numCitiri); tensiune = medie * (Vref / 1023.0); //4.113 este Vref vbat = tensiune / Radjust; // Setarea întârzierii pentru reîmprospătarea ecranului folosind Millis if (currentMillis - previousMillis> = interval) {// salvați ultima dată când ecranul a fost actualizat previousMillis = currentMillis; u8g2.clearBuffer (); // ștergeți meniul intern // Afișare tensiune pachet u8g2.setFont (u8g2_font_fub20_tr); // font 20px u8g2.setCursor (1, 20); u8g2.print (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // font 10 px u8g2.setCursor (76, 20); u8g2.print („Volți”); u8g2.setCursor (1, 40); u8g2.print („CanadianWinters”); u8g2.setCursor (1, 60); u8g2.print ("Tensiune precisă"); } u8g2.sendBuffer (); // transferați memoria internă la întârzierea afișajului (1); }

Vă rugăm să rețineți că sunt cam ruginit cu codificarea Arduino, deci dacă găsiți vreo greșeală sau o modalitate de a îmbunătăți codul, sunt deschis la sugestii:)

Pasul 3: Să-l testăm

Să-l testăm!
Să-l testăm!
Să-l testăm!
Să-l testăm!
Să-l testăm!
Să-l testăm!

Pentru a testa acest voltmetru am folosit baterii de 8x 9v pe care le-am obținut la un magazin local. Plănuiesc să folosesc acest voltmetru pentru a măsura tensiunea de pe pachetele de baterii ale bicicletelor mele electrice (au tensiuni cuprinse între 24-60v cu cele ocazionale de 72v).

Odată ce dispozitivele electronice sunt ambalate într-un pcb și o cutie mică, acest lucru va face un contor de baterii frumos și portabil. Grafica și fonturile de pe OLED pot fi personalizate pentru a se potrivi nevoilor dvs. (de exemplu, font mai mare pentru o citire ușoară).

Scopul meu a fost să citesc tensiunea pe contorul Oled / Arduino nu prea departe de multimetrul meu digital. Îmi propuneam +/- 0, 3v max delta. După cum puteți vedea din videoclip, am putut arhiva acest lucru, cu excepția capătului superior al măsurătorilor.

Sper că ți-a plăcut acest Instructable și să-mi spui gândurile!

Recomandat: