Voltmetru digital pe Arduino cu conectare la un PC printr-un port serial. Voltmetru Bluetooth bazat pe arduino

Cu câteva completări.

O caracteristică puțin cunoscută a Arduino și a multor alte cipuri AVR este capacitatea de a măsura tensiunea de referință internă de 1,1 V. Această funcție poate fi folosit pentru creşterea preciziei Funcții Arduino - AnalogRead la utilizare tensiune de referință standard de 5 V (pe platforme cu o tensiune de alimentare de 5 V) sau 3,3 V (pe platforme cu o tensiune de alimentare de 3,3 V).Poate fi și ea folosit pentru a măsura Vcc aplicat la cip, furnizând mijloace de control tensiunea bateriei fără a folosi pini analogi prețioase.

Motivația

Cel puțin există cel putin doua motive pentru măsurare tensiune de alimentare Arduino nostru (Vcc). Unul dintre ele este proiectul nostru alimentat de baterii dacă vrem să fim cu ochii pe nivelul de tensiune a bateriei. De asemenea, atunci când puterea bateriei (Vcc) nu poate fi de 5,0 volți (de exemplu o sursă de alimentare cu 3 celule de 1,5 V) și dorim să facem măsurătorile analogice mai precise - trebuie să folosim fie o tensiune de referință internă de 1,1 V, fie sursă externă tensiune de referință. De ce?

Presupunerea obișnuită atunci când se utilizează analogRead() este aceea că tensiune analogică Sursa de alimentare a controlerului este de 5,0 volți, când în realitate este posibil să nu fie deloc cazul (de exemplu, putere de la 3 elemente de 1,5 V). Documentația oficială Arduino ne poate conduce chiar la această presupunere incorectă. Faptul este că puterea nu este neapărat de 5,0 volți, indiferent de nivelul de curent, această putere este furnizată la Vcc al cipului. Dacă sursa noastră de alimentare nu este stabilizată sau dacă funcționăm pe baterie, această tensiune poate varia destul de mult. Iată un exemplu de cod care ilustrează această problemă:

Vcc dublu = 5,0; // nu neapărat adevărată valoare int = analogRead(0); / citiți citirile de la A0 dublu volt = (valoare / 1023,0) * Vcc; // adevărat numai dacă Vcc = 5,0 volți Pentru a măsura cu precizie tensiunea, este necesară o tensiune de referință precisă. Majoritatea cipurilor AVR oferă trei referințe de tensiune:

  • 1,1 in de la sursă internă, în documentație trece ca referință bandgap (unele dintre ele sunt de 2,56 V, de exemplu ATMega 2560). Selectia se face prin functia analogReference() cu parametrul INTERNAL: analogReference(INTERNAL) ;
  • sursă externă de tensiune de referință, etichetată AREF pe arduino. Selectați: analogReference(EXTERNAL);
  • Vcc este sursa de alimentare a controlerului în sine. Selectați: analogReference(DEFAULT).

În Arduino nu puteți conecta direct Vcc la pinul analogic - în mod implicit, AREF este conectat la Vcc și veți obține întotdeauna o valoare maximă de 1023, indiferent de tensiunea pe care o utilizați. Conectarea la AREF a unei surse de tensiune cu un curent cunoscut anterior, tensiune stabilă, dar asta este element suplimentarîn diagramă.

De asemenea, puteți conecta Vcc la AREF prin diodă: Căderea de tensiune pe diodă este cunoscută dinainte, deci calcularea Vcc nu este dificilă. Cu toate acestea, cu un astfel de circuit printr-o diodă curentul curge constant, scurtând durata de viață a bateriei, care, de asemenea, nu este foarte bună.

O referință externă de tensiune este cea mai precisă, dar necesită hardware suplimentar. ION intern este stabil, dar nu este precis deviația de +/- 10%. Vcc este complet nesigur în majoritatea cazurilor. Selectarea unei referințe interne de tensiune este ieftină și stabilă, dar de cele mai multe ori, am dori să măsurăm mai multă tensiune decât 1,1 V, așa că utilizarea Vcc este cea mai practică, dar potențial cea mai puțin precisă. În unele cazuri, poate fi foarte nesigur!

Cum se face

Multe cipuri AVR, inclusiv seriile ATmega și ATtiny, oferă un mijloc de măsurare a tensiunii de referință internă. De ce este necesar acest lucru? Motivul este simplu - prin măsurarea tensiunii interne, putem determina valoarea lui Vcc. Iată cum:

  1. Setați referința implicită de tensiune: analogReference(DEFAULT); . Folosim Vcc ca sursă.
  2. Faceți citiri ADC pentru sursa internă de 1,1 V.
  3. Calculați valoarea Vcc pe baza măsurării de 1,1 V folosind formula:

Vcc * (citire ADC) / 1023 = 1,1 V

Ce urmează:

Vcc = 1,1 V * 1023 / (citire ADC)

Punând totul împreună și obținem codul:

long readVcc() ( // Citiți referința de 1.1V față de AVcc // setați referința la Vcc și măsurarea la referința internă de 1.1V #dacă este definit(__AVR_ATmega32U4__) || definit(__AVR_ATmega1280__) || definit(__AVR_ATmega2560___)V ADMUX =__) (REFS0) |. _BV(MUX1); ); # else ADMUX = _BV(MUX3) |. _BV(MUX1); Așteaptă Vref pentru a deconta ADCSRA |= _BV(ADSC); // Începe conversia în timp ce (bit_is_set(ADCSRA,ADSC)); // măsurarea uint8_t low = ADCL; // trebuie să citească mai întâi ADCL - apoi blochează ADCH uint8_t high = ADCH; // deblochează ambele rezultate lungi = (high<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Utilizare

Verificarea Vcc sau a tensiunii bateriei

Puteți apela această funcție readVcc() dacă doriți să monitorizați Vcc. Un exemplu ar fi verificarea nivelului de încărcare a bateriei. De asemenea, îl puteți utiliza pentru a determina dacă sunteți conectat la o sursă de alimentare sau dacă funcționați pe baterie.

Măsurarea Vcc pentru tensiunea de referință

De asemenea, îl puteți folosi pentru a obține valoarea corectă a Vcc pentru utilizare cu analogRead() atunci când utilizați tensiunea de referință (Vcc). Dacă nu utilizați o sursă de alimentare reglată, nu puteți fi sigur că Vcc = 5,0 volți. Această funcție vă permite să obțineți valoarea corectă. Există totuși un avertisment...

Într-unul dintre articole am făcut o declarație că această funcție ar putea fi folosită pentru a îmbunătăți acuratețea măsurătorilor analogice în cazurile în care Vcc nu era chiar de 5,0 volți. Din păcate, această procedură nu va da un rezultat precis. De ce? Aceasta depinde de precizia referinței interne de tensiune. Specificația oferă o tensiune nominală de 1,1 volți, dar spune că poate varia cu până la 10%. Asemenea măsurători pot fi mai puțin precise decât sursa noastră de alimentare Arduino!

Creșterea preciziei

În timp ce toleranțele mari ale sursei de alimentare interne de 1,1 V limitează semnificativ acuratețea măsurătorilor atunci când sunt utilizate în producția de masă, pentru proiecte individuale putem obține o precizie mai mare. Acest lucru este ușor de făcut prin simpla măsurare a Vcc folosind un voltmetru și funcția noastră readVcc(). Apoi, înlocuiți constanta 1125300L cu o nouă variabilă:

scale_constant = intern1.1Ref * 1023 * 1000

intern1.1Ref = 1,1 * Vcc1 (citiri_voltmetru) / Vcc2 (citire_funcție_Vcc)

Această valoare calibrată va fi un indicator bun pentru măsurătorile cu cip AVR, dar poate fi afectată de schimbările de temperatură. Simțiți-vă liber să experimentați cu propriile măsurători.

Concluzie

Puteți face multe cu această mică funcție. Puteți utiliza o tensiune de referință stabilă aproape de 5,0 V fără a avea de fapt 5,0 V pe Vcc. Puteți măsura tensiunea bateriei sau chiar puteți vedea dacă sunteți pe baterie sau staționar.

În cele din urmă, codul va suporta toate Arduinos, inclusiv noul Leonardo, precum și cipurile din seriile ATtinyX4 și ATtinyX5.

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. Va fi un vot pe acest subiect 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 va fi articolul.


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 value = analogRead(0); // citește citirile din 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ţa

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 păstrat grafica foarte simplă dacă vrea cineva mai mult grafică interesantă, permiteți-mi să vă reamintesc că pentru aceasta trebuie să utilizaț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

A fost descris modul de asamblare a unui voltmetru dublu de casă bazat pe platformă Arduino UNO folosind afișajul LCD 1602A. În unele cazuri, este necesar să măsurați două tensiuni constante simultan și să le comparați. Acest lucru poate fi necesar, de exemplu, la repararea sau reglarea stabilizatorului tensiune DC pentru a măsura tensiunea la intrare și la ieșire sau în alte cazuri.

Diagrama schematică

Folosind un microcontroler universal modulul ARDUINO UNO și un afișaj LCD cu două linii de tip 1602A (bazat pe controlerul HD44780) pot realiza cu ușurință un astfel de dispozitiv. Într-o linie va afișa tensiunea U1, în cealaltă - tensiunea U2.

Orez. 1. Diagrama schematică voltmetru dual cu display 1602A pe Arduino UNO.

Dar, în primul rând, vreau să vă reamintesc că ARDUINO UNO este un modul gata făcut relativ ieftin - un mic PCB, pe care se află microcontrolerul ATMEGA328, precum și tot „hamul” necesar pentru funcționarea acestuia, inclusiv un programator USB și sursă de alimentare.

Pentru cei care nu sunt familiarizați cu ARDUINO UNO, vă sfătuiesc să citiți mai întâi articolele L.1 și L.2. Circuitul unui voltmetru dublu este prezentat în Fig. 1. Este conceput pentru a măsura două tensiuni de la 0 la 100V (practic până la 90V).

După cum se vede din diagramă, la porturile digitale D2-D7 placi ARDUINO UNO este conectat la modulul de afișare cu cristale lichide H1 tip 1602A. Indicatorul LCD este alimentat de un stabilizator de tensiune de 5V situat pe placa stabilizatoare de tensiune de 5V.

Tensiunile măsurate sunt furnizate la două intrări analogice A1 și A2. Există șase intrări analogice în total, A0-A5, puteți selecta oricare două dintre ele. ÎN în acest caz,, A1 și A2 sunt selectate. Tensiunea pe porturile analogice poate fi numai pozitivă și numai în intervalul de la zero la tensiunea de alimentare a microcontrolerului, adică nominal, până la 5V.

Ieșirea portului analogic este convertită în formă digitală de către ADC-ul microcontrolerului. Pentru a obține rezultatul în unități de volți, trebuie să îl înmulțiți cu 5 (cu tensiunea de referință, adică cu tensiunea de alimentare a microcontrolerului) și să împărțiți la 1024.

Pentru a putea măsura tensiuni mai mari de 5V, sau mai degrabă, mai mari decât tensiunea de alimentare a microcontrolerului, deoarece tensiunea reală la ieșirea stabilizatorului de 5 volți de pe placa ARDUINO UNO poate diferi de 5V și, de obicei, un puțin mai jos, trebuie să utilizați divizoare rezistive convenționale la intrare. Aici acestea sunt divizoare de tensiune între rezistențele R1, R3 și R2, R4.

În același timp, pentru a aduce citirile instrumentului la valoare reală tensiunea de intrare, trebuie să setați în program împărțirea rezultatului măsurării cu coeficientul de divizare al divizorului rezistiv. Și coeficientul de divizare, să-l notăm „K”, poate fi calculat folosind următoarea formulă:

K = R3 / (R1+R3) sau K = R4 / (R2+R4),

respectiv pentru intrari diferite voltmetru dublu.

Este foarte interesant că rezistențele din divizoare nu trebuie neapărat să fie de înaltă precizie. Puteți lua rezistențe obișnuite, apoi măsurați rezistența lor reală cu un ohmmetru precis și înlocuiți aceste valori măsurate în formulă. Veți obține valoarea „K” pentru un anumit divizor, care va trebui înlocuit în formulă.

Programul voltmetrului

Programul C++ este prezentat în Figura 2.

Orez. 2. Cod sursă programe.

Pentru a controla indicatorul LCD, s-a decis să se utilizeze porturile D2 la D7 ale plăcii ARDUINO UNO. În principiu, sunt posibile și alte porturi, dar așa am decis să le folosesc.

Pentru ca indicatorul să interacționeze cu ARDUINO UNO, trebuie să încărcați o subrutină în program pentru a-l controla. Astfel de rutine sunt numite „biblioteci” și există multe „biblioteci” diferite în suita de software ARDUINO UNO. Pentru a lucra cu un indicator LCD bazat pe HD44780, aveți nevoie de biblioteca LiquidCrystal. Prin urmare, programul (Tabelul 1) începe prin încărcarea acestei biblioteci:

Această linie oferă comanda de încărcare în ARDUINO UNO această bibliotecă. Apoi trebuie să atribuiți porturi ARDUINO UNO, care va funcționa cu indicatorul LCD. Am ales porturile D2 prin D7. Poți să alegi pe alții. Aceste porturi sunt alocate de linia:

LED cristal lichid (2, 3, 4, 5, 6, 7);

După care, programul trece la funcționarea efectivă a voltmetrului. Pentru măsurarea tensiunii, s-a decis să se utilizeze intrările analogice A1 și A2. Aceste intrări sunt date pe liniile:

int analogInput=1;

int analogInput1=2;

Pentru a citi date din porturile analogice, utilizați funcția analogRead. Citirea datelor de la porturile analogice are loc în liniile:

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

Apoi, tensiunea reală este calculată luând în considerare raportul de divizare al divizorului de tensiune de intrare:

volt=vout*5,0/1024,0/0,048;

volt1=vout1*5,0/1024,0/0,048;

În aceste linii, numărul 5.0 este tensiunea la ieșirea stabilizatorului plăcii ARDUINO UNO. Ideal ar fi 5V, dar pt lucru precis Folosind un voltmetru, această tensiune trebuie mai întâi măsurată. Conectați sursa de alimentare și măsurați tensiunea de +5V la conectorul POWER al plăcii cu un voltmetru destul de precis. Ce se întâmplă, atunci introduceți în aceste linii în loc de 5.0, de exemplu, dacă există 4.85V, liniile vor arăta astfel:

volt=vout*4,85/1024,0/0,048;

volt1=vout1*4,85/1024,0/0,048;

În etapa următoare, va trebui să măsurați rezistențele reale ale rezistențelor R1-R4 și să determinați coeficienții K (indicați ca 0,048) pentru aceste linii folosind formulele:

K1 = R3 / (R1+R3) și K2 = R4 / (R2+R4)

Să presupunem că K1 = 0,046 și K2 = 0,051, deci scriem:

volt=vout*4,85/1024,0/0,046;

volt1=vout1*4,85/1024,0/0,051;

Astfel, trebuie făcute modificări textului programului în funcție de tensiunea reală la ieșirea stabilizatorului de 5 volți al plăcii ARDUINO UNO și în funcție de coeficienții de divizare efectivi ai divizoarelor rezistive. După aceasta, dispozitivul va funcționa cu precizie și nu va necesita nicio ajustare sau calibrare.

Prin modificarea coeficienților de divizare a divizoarelor rezistive (și, în consecință, a coeficienților „K”), puteți face alte limite de măsurare și nu neapărat aceleași pentru ambele intrări.

Karavkin V. RK-2017-01.

Literatură:

  1. Karavkin V. - Flasher pentru brad de Crăciun pe ARDUINO ca remediu pentru frica de microcontrolere. RK-11-2016.
  2. Karavkin V. - Frecvențămetru pe ARDUINO. RK-12-2016.

Acest articol arată cum să interfațați Arduino cu PC-ul și să transferați date de la ADC la PC. Programul pentru Windows este scris folosind Visual C++ 2008 Express. Programul voltmetru 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:

  • Preluarea citirilor de la ADC începe atunci când computerul trimite comenzile Arduino 0xAC și 0x1y. la– numărul canalului ADC (0-2);
  • Luarea citirilor se oprește după primind Arduino comenzi 0xAC și 0×00;
  • 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ă aveți deja cunoștințe de bază despre 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 port serial de la bara de instrumente la forma inferioară. 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 evenimentului:

Listă derulantă când dublu clic„Date primite”.

Codul evenimentului este generat automat:

Dacă primul octet a sosit pe port serial 0xAB dacă aceasta înseamnă că octeții rămași transportă 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 engleză(traducere: Alexandru Kasyanov pentru site-ul cxem.net)

Bună, Habr! Astăzi vreau să continui subiectul „încrucișării” arduino și android. În publicația anterioară am vorbit, 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. Va fi un vot pe acest subiect 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 va fi articolul.


Disclaimer: articolul este destinat pasionatului mediu de arduino care de obicei nu este familiarizat cu programarea Android, prin urmare, ca și în articolul precedent, vom crea o aplicație pentru un smartphone folosind mediul de dezvoltare vizuală App Inventor 2 pentru aplicațiile Android.
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 value = analogRead(0); // citește citirile din 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ţa

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 creați, proiect nou și prin pur și simplu trăgând și plasând elemente, vom crea 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 răspunde unora dintre aceste întrebări, am realizat un videoclip 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