Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Programe
  • Voltmetru digital pe Arduino cu conectare la un PC printr-un port serial. Voltmetru secret în Arduino - măsurarea tensiunii bateriei folosind un microcontroler

Voltmetru digital pe Arduino cu conectare la un PC printr-un port serial. Voltmetru secret în Arduino - măsurarea tensiunii bateriei folosind un microcontroler

Bună, Habr! Astăzi vreau să continui subiectul „încrucișării” arduino și android. ÎN publicația anterioară Am vorbit despre un aparat bluetooth, iar astăzi vom vorbi despre un voltmetru bluetooth DIY. Un alt astfel de dispozitiv poate fi numit un voltmetru inteligent, un voltmetru „inteligent” sau doar un voltmetru inteligent, fără ghilimele. Numele de familie este incorect din punctul de vedere al gramaticii ruse, cu toate acestea, este adesea găsit în mass-media. Votarea acestui subiect va fi la sfârșitul articolului, dar vă sugerez să începeți cu o demonstrație a funcționării dispozitivului pentru a înțelege despre ce este vorba. vom vorbi in articol.


Disclaimer: articolul este destinat pasionatului mediu de arduino care de obicei nu este familiarizat cu programarea pentru Android, prin urmare, ca și în articolul precedent, vom crea o aplicație pentru un smartphone folosind un mediu de dezvoltare vizuală aplicații Android Inventatorul 2.
Pentru a face un voltmetru bluetooth DIY, trebuie să scriem două programe relativ independente: o schiță pentru Arduino și o aplicație pentru Android. Să începem cu o schiță.
În primul rând, ar trebui să știți că există trei opțiuni principale pentru măsurarea tensiunii folosind Arduino, indiferent de locul în care trebuie să scoateți informațiile: către portul com, pe un ecran conectat la Arduino sau la un smartphone.
Primul caz: măsurători de tensiune până la 5 volți. Aici, una sau două linii de cod sunt suficiente, iar tensiunea este furnizată direct pinului A0:
int valoare = analogRead(0); // citește citirile de la A0
tensiune = (valoare / 1023,0) * 5; // adevărat numai dacă Vcc = 5,0 volți
Al doilea caz: pentru a măsura tensiuni mai mari de 5 volți, se folosește un divizor de tensiune. Circuitul este foarte simplu, la fel și codul.

Schiță

int analogInput = A0;
val float = 0,0;
tensiune float = 0,0;
float R1 = 100000,0; //Bateria Vin-> 100K -> A0
float R2 = 10000,0; //Battery Gnd -> Arduino Gnd și Arduino Gnd -> 10K -> A0
valoare int = 0;

Void setup() (
Serial.begin(9600);
pinMode(analogInput, INPUT);
}

Void loop() (
valoare = analogRead(analogInput);
val = (valoare * 4,7) / 1024,0;
tensiune = val / (R2/(R1+R2));
Serial.println(tensiune);
întârziere (500);
}


Arduino Uno
modul Bluetooth
Al treilea caz. Când trebuie să obțineți informații mai precise despre tensiune, ar trebui să utilizați ca tensiune de referință nu tensiunea de alimentare, care poate varia ușor atunci când este alimentată de o baterie, de exemplu, ci tensiunea stabilizatorului intern Arduino de 1,1 volți. circuitul este același aici, dar codul este puțin mai lung. Nu voi analiza în detaliu această opțiune, deoarece este deja bine descrisă în articolele tematice, dar a doua metodă îmi este destul de suficientă, deoarece sursa mea de alimentare este stabilă, de la portul USB al laptopului.
Deci am rezolvat măsurarea tensiunii, acum să trecem la a doua jumătate a proiectului: crearea unei aplicații Android. Vom crea aplicația direct din browser în mediul de dezvoltare vizuală pentru aplicațiile Android App Inventor 2. Accesați site-ul web appinventor.mit.edu/explore, conectați-vă folosind contul dvs. Google, faceți clic pe butonul de creare, proiect nou și prin simplu drag and drop elementele pe care le creăm ceva de genul acesta:

Am făcut grafica foarte simplă, dacă cineva dorește o grafică mai interesantă, permiteți-mi să vă reamintesc că pentru aceasta trebuie să folosiți fișiere .png cu fundal transparent în loc de fișiere .jpeg.
Acum accesați fila Blocuri și creați logica aplicației acolo ceva de genul acesta:


Dacă totul merge bine, puteți să faceți clic pe butonul Build și să salvați .apk pe computerul meu, apoi să descărcați și să instalați aplicația pe smartphone, deși există și alte modalități de a încărca aplicația. aici este mai convenabil pentru oricine. Ca rezultat, am ajuns cu această aplicație:


Înțeleg că puțini oameni folosesc mediul de dezvoltare vizuală App Inventor 2 pentru aplicațiile Android în proiectele lor, așa că pot apărea multe întrebări despre lucrul în el. Pentru a elimina unele dintre aceste întrebări, am făcut-o video detaliat, despre cum să faci o astfel de aplicație „de la zero” (pentru a o vizualiza trebuie să mergi pe YouTube):

P.S. O colecție de peste 100 de materiale educaționale despre Arduino pentru începători și profesioniști

Acest articol arată cum să interfațați Arduino cu PC-ul și să transferați date de la ADC la PC. Programul Windows este scris cu folosind Visual C++ 2008 Express. Programul voltmetrului este foarte simplu și are mult loc de îmbunătățire. Scopul său principal a fost să arate cum să lucrezi cu un port COM și să schimbi date între un computer și Arduino.

Comunicarea dintre Arduino și PC:

  • Citirile ADC încep când computerul trimite Comenzi Arduino s 0xAC și 0x1y. la– numărul canalului ADC (0-2);
  • Citirea se oprește după ce Arduino primește comenzile 0xAC și 0x00;
  • La efectuarea citirilor, Arduino trimite la computer comenzile 0xAB 0xaa 0xbb la fiecare 50 ms, unde aa și bb sunt rezultatele maxime și minime ale măsurătorilor.

Program pentru Arduino

Puteți citi mai multe despre comunicarea serială la arduino.cc. Programul este destul de simplu, cea mai mare parte este cheltuită lucrând cu port paralel. După ce am terminat de citit datele de la ADC, primim o valoare a tensiunii de 10 biți (0x0000 – 0x0400) sub formă de variabile de 16 biți (INT). Portul serial (RS-232) permite transmiterea datelor în pachete de 8 biți. Este necesar să se împartă variabilele de 16 biți în 2 părți de 8 biți.

Serial.print(tensiune>>8,BYTE);

Serial.print(tensiune%256,BYTE);

Deplasăm octeții variabilei 8 biți la dreapta și apoi împărțim la 256 și trimitem rezultatul la computer.

Puteți descărca codul sursă complet pentru software-ul Arduino

Visual C++

Presupun că ai deja cunostinte de bazaîn programarea C++ pentru Windows, dacă nu, atunci utilizați Google. Internetul este plin de tutoriale pentru începători.

Primul lucru de făcut este să adăugați portul serial din bara de instrumente în formularul de jos. Acest lucru va schimba unii parametri importanti Port serial: numele portului, viteza de transmisie, adâncimea de biți. Acest lucru este util pentru adăugarea de controale la o fereastră de aplicație, modificând aceste setări în orice moment, fără a recompila programul. Am folosit doar opțiunea de selecție a portului.

După căutarea porturilor seriale disponibile, primul port este selectat implicit. Cum se face:

matrice< String ^>^ serialPorts = nullptr;

serialPorts = serialPort1->GetPortNames();

this->comboBox1->Items->AddRange(serialPorts);

this->comboBox1->SelectedIndex=0;

Portul serial de pe un PC poate fi folosit doar de o aplicație la un moment dat, așa că portul trebuie să fie deschis înainte de utilizare și nu închis. Comenzi simple pentru aceasta:

serialPort1->Open();

serialPort1->Close();

Pentru a citi corect datele de pe un port serial, trebuie să utilizați evenimente (în cazul nostru, o întrerupere). Selectați tipul de eveniment:

Listă derulantă când dublu click"Date primite".

Codul evenimentului este generat automat:

Dacă primul octet sosit pe portul serial este 0xAB, dacă asta înseamnă că octeții rămași poartă date de tensiune.

privat: System::Void serialPort1_DataReceived(System::Object^ expeditor, System::IO::Ports::SerialDataReceivedEventArgs^ e) (

unsigned char data0, data1;

dacă (serialPort1->ReadByte()==0xAB) (

data0=serialPort1->ReadByte();

data1=serialPort1->ReadByte();

voltage=Math::Round((float(data0*256+data1)/1024*5.00),2);

data_count++;

serialPort1->ReadByte();

Scrieți și citiți datele portului serial

O mică problemă pentru mine a fost trimiterea de date RAW hexadecimale prin portul serial. S-a folosit comanda Write(); dar cu trei argumente: matrice, număr de octeți de pornire, număr de octeți de scris.

privat: System::Void button2_Click_1(System::Object^ expeditor, System::EventArgs^ e) (

canal de caracter nesemnat=0;

channel=this->listBox1->SelectedIndex;

matrice^start =(0xAC,(0x10+canal));

matrice^stop =(0xAC,0x00);

serialPort1->Write(start,0,2);

this->button2->Text="Stop";

) altfel (

serialPort1->Write(stop,0,2);

this->button2->Text="Start";

Asta e tot!

Articol original pe Limba engleză(traducere: Alexandru Kasyanov pentru site-ul cxem.net)

Acest articol oferă o diagramă interesantă pentru cei cărora le place să experimenteze și Arduino. Dispune de un voltmetru digital simplu care poate măsura în siguranță presiune constantăîn intervalul de la 0 la 30 V. Placa Arduino în sine poate fi alimentată de la o sursă standard de 9 V.



După cum știți, folosind intrarea analogică Arduino puteți măsura tensiunea de la 0 la 5 V (cu o tensiune de referință standard de 5 V). Dar această gamă poate fi extinsă folosind un divizor de tensiune.


Divizorul reduce tensiunea măsurată la un nivel acceptabil pentru intrarea analogică. Apoi, codul special scris calculează tensiunea reală.



Senzorul analogic din Arduino detectează tensiunea la intrarea analogică și o convertește în format digital, perceput de microcontroler. LA intrare analogică A0 conectăm un divizor de tensiune format din rezistențele R1 (100K) și R2 (10K). Cu aceste valori de rezistență, Arduino poate fi furnizat până la 55 V, deoarece coeficientul de divizare este în acest caz, rezultă 11, deci 55V/11=5V. Pentru a fi sigur că măsurătorile sunt sigure pentru placă, este mai bine să măsurați tensiunea în intervalul de la 0 la 30 V.



Dacă citirile de pe afișaj nu corespund citirilor unui voltmetru verificat, ar trebui să utilizați o precizie multimetru digital pentru a găsi valorile exacte ale lui R1 și R2. În acest caz, în cod va trebui să înlocuiți R1=100000.0 și R2=10000.0 cu propriile valori. Apoi ar trebui să verificați sursa de alimentare măsurând tensiunea de pe placă între 5V și GND. Tensiunea poate fi de 4,95 V. Apoi, în codul vout = (valoare * 5,0) / 1024,0 trebuie să înlocuiți 5,0 cu 4,95. Este recomandabil să folosiți rezistențe de precizie cu o eroare de cel mult 1%. Vă rugăm să rețineți că tensiunile peste 55V pot cauza Placa Arduino Defect!



#include LiquidCrystal lcd (7, 8, 9, 10, 11, 12); int analogInput = 0; float vout = 0,0; float vin = 0,0; float R1 = 100000,0; // rezistența R1 (100K) float R2 = 10000,0; // rezistența R2 (10K) int valoare = 0; void setup())( pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print("DC VOLTMETER"); ) void loop())( // citește valoarea analogică = analogRead(analogInput) ); vout = (valoare * 5,0) / 1024,0; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }


Elemente folosite:


Placa Arduino Uno
Rezistor 100 KOhm
Rezistor 10 KOhm
rezistor de 100 ohmi
Potențiometru 10KOhm
Display LCD 16×2

Există momente în care doriți să verificați tensiunea sau un anumit punct dintr-un circuit, dar nu aveți un voltmetru sau un multimetru la îndemână? Fugi să cumperi? Este lung și scump. Înainte să faci asta, ce zici de a construi singur un voltmetru? De fapt, cu ingrediente simple o poți face singur.

  • În lecție am folosit o placă compatibilă cu Arduino - SunFounder Uno/Mars (http://bit.ly/2tkaMba)
  • cablu de date USB
  • 2 potențiometre (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Placă de dezvoltare - http://bit.ly/2slvfrB
  • Mai multe săritori

Înainte de a vă conecta, să vedem mai întâi cum funcționează.

Utilizați placa SunFounder Uno pentru partea principală a procesării datelor voltmetrului, LCD1602 ca ecran, un potențiometru pentru a regla contrastul LCD și altul pentru a împărți tensiunea.

Când rotiți potențiometrul conectat la placa Uno, rezistența potențiometrului se schimbă, modificând astfel tensiunea pe el. Semnalul de tensiune va fi trimis la placa Uno prin pinul A0, iar Uno va converti semnalul analog primit în formă digitală și va înregistra pe LCD. În acest fel, puteți vedea valoarea tensiunii la rezistența capacității curente.

LCD1602 are două moduri de operare: 4 biți și 8 biți. Când MCU IO este insuficient, puteți alege modul pe 4 biți, care utilizează doar pinii D4 ~ D7.

Urmați tabelul pentru a le conecta.

Pasul 4: Conectați potențiometrul la LCD1602

Conectați pinul din mijloc al potențiometrului la pinul Vo de pe LCD1602 și oricare dintre ceilalți pini la GND.

Conectați pinul din mijloc al potențiometrului la pinul A0 de la SunFounder Uno și unul dintre ceilalți la 5V, în timp ce celălalt la GND.

Pasul 6: Încărcați codul

Acest cod:

#include /*********************************************** ******* *****/ const int analogIn = A0;//potențiometrul atașat la A0 LiquidCrystal lcd(4, 6, 10, 11, 12, 13);//lcd(RS,E,D4) ,D5,D6.D7) float val = 0;// definiți variabila ca valoare=0 /**************************** ******* *****************/ void setup() ( Serial.begin(9600);//Inițializați seria lcd.begin(16, 2) ;//setează poziția caracterelor de pe LCD ca linia 2, coloana 16 lcd.print("Valoarea tensiunii:");//printează "Valoarea tensiunii:" ) /*********** ******* **********************************/ bucla void() ( val = analogRead (A0);//Citiți valoarea potențiometrului la val val = val/1024*5.0;// Convertiți datele la valoarea tensiunii corespunzătoare într-un mod matematic Serial.print(val);//Imprimați numărul de val pe monitorul serial Serial.print ("V"); // tipăriți unitatea ca V, prescurtare pentru tensiune pe monitorul serial lcd.setCursor(6,1);//Plasați cursorul la linia 1, coloana 6. Din aici caracterele vor fi afișate lcd.print(val);//Tipărește numărul de val pe LCD lcd.print("V");//Apoi imprimă unitatea ca V, scurt pentru tensiune pe LCD delay( 200); //Așteptați 200 ms)

Rotiți potențiometrul pentru a verifica tensiunea de pe LCD1602 în timp real.

Iată un lucru complicat. După ce am rulat codul, ecranul LCD arăta caractere. Am ajustat apoi contrastul ecranului (modificare treptată de la negru la alb) rotind potențiometrul în sensul acelor de ceasornic sau în sens invers acelor de ceasornic până când ecranul a afișat clar caracterele.

Luați două baterii pentru a le măsura tensiunea: 1,5 V și 3,7 V. Decuplați conexiunea celui de-al doilea potențiometru la pinul A0 și GND, ceea ce înseamnă scoaterea potențiometrului din circuit. Fixați capătul firului A0 la anodul bateriei și circuitul GND la catod. NU le reconectați sau veți scurtcircuita bateria. O valoare de 0V este o conexiune inversă.

Deci, tensiunea bateriei este afișată pe afișajul LCD. Este posibil să existe o eroare între valoare și valoarea nominală, deoarece bateria nu este încărcată complet. Și de aceea trebuie să măsoare tensiunea pentru a înțelege dacă pot folosi bateria sau nu.

PS: Dacă aveți probleme cu afișarea pe afișaj - consultați această Întrebări frecvente pentru afișajele LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Idee

Idee aparatele de masurare a tensiunii, curentului, capacitatii, descarcarii si poate incarcarea au aparut cu mult timp in urma si nu numai pentru mine. Puteți găsi multe jucării numite USB Tester (Doctor) pentru testarea diferitelor dispozitive USB. Sunt interesat de un dispozitiv ceva mai universal, independent de interfață, dar conceput pur și simplu pentru anumite tensiuni și curenți. De exemplu, 0 - 20.00v, 0 - 5.00a, 0 - 99.99Ah. Cât despre funcții, eu văd așa

  • Afișează tensiunea și curentul curent, adică un volt-ampermetru. În principiu, puteți reflecta imediat puterea.
  • Numărarea și afișarea capacității acumulate. În amperi oră și cel mai probabil în wați oră.
  • Afișarea timpului procesului
  • Și, cel mai probabil, praguri reglabile de întrerupere a tensiunii inferioare și superioare (limite de descărcare și încărcare)

Dezvoltare

Pentru a implementa calcule și măsurători avem nevoie de un controler. Mi-am amintit această idee ca parte din cunoștințele mele cu Arduino, așa că controlerul va fi un simplu Atmega328 popular și va fi programat în mediu Arduino. Din punct de vedere ingineresc, probabil că alegerea nu este cea mai bună - controlerul este puțin gras pentru sarcină, iar ADC-ul său nu poate fi numit măsurare, dar... vom încerca.

  • Nu vom lipi prea mult în acest proiect. Ca bază, vom lua un modul Arduino Pro Mini gata făcut, deoarece chinezii sunt gata să le furnizeze cu amănuntul de 1,5 USD.
  • Dispozitivul de afișare va fi un afișaj 1602 - încă 1,5 USD. Am o opțiune cu un modul de interfață I2C, dar în acest proiect nu este cu adevărat necesar (0,7 USD).
  • Pentru dezvoltare avem nevoie de un breadboard. În cazul meu, acesta este un Breadboard mic pentru 1 USD.
  • Desigur, veți avea nevoie de fire și o serie de rezistențe de diferite valori. Pentru un afișaj 1602 fără I2C, trebuie să selectați și contrastul - acest lucru se face cu un rezistor variabil de 2 - 20 kOhm.
  • Pentru a implementa un ampermetru veți avea nevoie de un șunt. La o primă aproximare, ar putea fi un rezistor de 0,1 Ohm, 5 W.
  • Pentru a implementa oprirea automată, veți avea nevoie de un releu cu contacte proiectate pentru curentul maxim al dispozitivului și o tensiune egală cu tensiunea de alimentare. Pentru a controla releul aveți nevoie de un tranzistor NPN și o diodă de protecție.
  • Dispozitivul va fi alimentat de la o sursă de alimentare externă, evident de cel puțin 5 V. Dacă sursa de alimentare variază foarte mult, atunci va fi necesar și un stabilizator integrat tip 7805 - acesta va determina tensiunea releului.
  • Când Arduino Pro Mini necesită un convertor USB-TTL pentru a încărca firmware-ul.
  • Pentru configurare veți avea nevoie de un multimetru.

Voltmetru

Implementez un voltmetru simplu cu un interval de aproximativ 0 - 20V. Această notă este importantă deoarece ADC-ul controlerului nostru are o capacitate de 10 biți (1024 de valori discrete), deci eroarea va fi de cel puțin 0,02 V (20 / 1024). Pentru a implementa hardware-ul, avem nevoie de o intrare analogică a controlerului, un divizor format dintr-o pereche de rezistențe și un fel de ieșire (un afișaj în versiunea finită, un port serial poate fi folosit pentru depanare).

Principiul măsurării ADC este de a compara tensiunea la intrarea analogică cu referința VRef. Ieșirea ADC este întotdeauna întreagă - 0 corespunde cu 0V, 1023 corespunde tensiunii VRef. Măsurarea este implementată printr-o serie de citiri secvențiale ale tensiunii și o medie pe perioada dintre actualizările valorii de pe ecran. Alegerea tensiunii de referință este importantă deoarece este implicită la tensiunea de alimentare, care poate să nu fie stabilă. Acest lucru nu ne convine deloc - vom lua ca bază o sursă de referință internă stabilă cu o tensiune de 1.1V, inițialând-o apelând analogReference(INTERNAL). Apoi îi vom calibra valoarea utilizând citirile multimetrului.

Diagrama din stânga prezintă o variantă cu control direct al afișajului (este controlat simplu - vezi schița standard LiquidCrystal\HelloWorld). În dreapta este opțiunea I2C, pe care o voi folosi în continuare. I2C vă permite să economisiți fire (dintre care există 10 în versiunea obișnuită, fără a număra lumina de fundal). Dar acest lucru necesită un modul suplimentar și o inițializare mai complexă. În orice caz, afișarea caracterelor pe modul trebuie mai întâi verificată și contrastul ajustat - pentru a face acest lucru, trebuie pur și simplu să afișați orice text după inițializare. Contrastul este reglat de rezistența R1 sau de un rezistor similar al modulului I2C.

Intrarea este un divizor 1:19, care vă permite să obțineți o tensiune maximă de aproximativ 20V la Vref = 1,1 (de obicei un condensator + o diodă zener sunt plasate paralel cu intrarea pentru protecție, dar acest lucru nu este important pentru noi deocamdată ). Rezistoarele au o răspândire, la fel și referința Vref a controlerului, așa că după asamblare trebuie să măsurăm tensiunea (cel puțin sursa) în paralel cu dispozitivul nostru și un multimetru de referință și să selectăm Vref în cod până când citirile se potrivesc. De asemenea, merită remarcat faptul că orice ADC are o tensiune de compensare zero (care strica citirile de la începutul intervalului), dar nu vom intra în asta deocamdată.

De asemenea, va fi important să separați terenul de alimentare și de măsurare. ADC-ul nostru are o rezoluție puțin mai slabă decât 1mV, ceea ce poate crea probleme dacă cablarea este incorectă, în special pe o placă de breadboard. Deoarece aspectul plăcii modulului a fost deja făcut și trebuie doar să selectăm pinii. Modulul are mai mulți pini de „împământare”, așa că trebuie să ne asigurăm că puterea intră în modul printr-un „împământare”, iar măsurătorile prin celălalt. De fapt, pentru a face modificări, folosesc întotdeauna pinul de masă cel mai apropiat de intrările analogice.

Pentru a controla I2C, se folosește o versiune a bibliotecii LiquidCrystal_I2C - în cazul meu, este indicată pinout-ul specific al modulului I2C (chinezii produc module cu controale diferite). De asemenea, observ că I2C în Arduino necesită utilizarea pinii A4 și A5 - pe placa Pro Mini nu sunt amplasați pe margine, ceea ce este incomod pentru prototiparea pe BreadBoard.

Sursă

#include #include // Voltmetru simplu cu afișaj i2c 1602. V 16.11 // Setări pentru afișaj i2c 1602 cu pinout non-standard #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EN 2 #define LCD_RW 1 #define LCD_RS 0 #define LCD_D4 #define LCD_D4 5 #define LCD_D6 6 #define LCD_D7 7 LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Timp de actualizare citire, ms (200-2000) #define REFRESH_TIME 330 // Intrare analogică #define PIN_VOLT A0 // Tensiune de referință internă (selectare) const float VRef = 1,10; // Coeficient divizor rezistiv de intrare (Rh + Rl) / Rl. ÎN<-[ Rh ]--(analogInPin)--[ Rl ]--|GND const float VoltMult = (180.0 + 10.0) / 10.0; float InVolt, Volt; void setup() { analogReference(INTERNAL); // Инициализация дисплея lcd.begin (16, 2); lcd.setBacklightPin(BACKLIGHT, POSITIVE); lcd.setBacklight(HIGH); // включить подсветку lcd.clear(); // очистить дисплей lcd.print("Voltage"); } void loop() { unsigned long CalcStart = millis(); int ReadCnt = 0; InVolt = 0; // Чтение из порта с усреднением while ((millis() - CalcStart) < REFRESH_TIME) { InVolt += analogRead(PIN_VOLT); ReadCnt++; } InVolt = InVolt / ReadCnt; // Смещение 0 для конкретного ADC (подобрать или отключить) if (InVolt >0,2) InVolt += 3; // Convertiți în volți (Valoare: 0..1023 -> (0..VRef) scalat de Mult) Volt = InVolt * VoltMult * VRef / 1023; // Date de ieșire lcd.setCursor (0, 1); lcd.print (Volt); lcd.print("V"); )

Cele mai bune articole pe această temă