Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows Phone
  • Digitalni voltmetar na Arduinu spojen na PC preko serijskog porta. Bluetooth voltmetar baziran na Arduinu

Digitalni voltmetar na Arduinu spojen na PC preko serijskog porta. Bluetooth voltmetar baziran na Arduinu

Predstavljen je koristan dijagram za one koji vole eksperimentirati s Arduinom. To je jednostavan digitalni voltmetar koji može pouzdano mjeriti istosmjerni napon u rasponu od 0-30V. Arduino ploča, kao i obično, može se napajati baterijom od 9 V.

Kao što vjerojatno znate, analogni ulazi Arduina mogu se koristiti za mjerenje istosmjernog napona u rasponu od 0 - 5V i taj raspon se može povećati za
koristeći dva otpornika kao djelitelj napona. Razdjelnik će smanjiti izmjereni napon na razinu Arduino analognih ulaza. A zatim će program izračunati stvarnu vrijednost napona.

Analogni senzor na Arduino ploči detektira prisutnost napona na analognom ulazu i pretvara ga u digitalni oblik za daljnju obradu od strane mikrokontrolera. Na slici se napon dovodi na analogni ulaz (A0) kroz jednostavan djelitelj napona koji se sastoji od otpornika R1 (100 kΩ) i R2 (10 kΩ).

S ovim vrijednostima razdjelnika, napon od 0 do
55B. Na ulazu A0 imamo izmjereni napon podijeljen sa 11, tj. 55V / 11 = 5V. Drugim riječima, kada mjerimo 55V na Arduino ulazu, imamo maksimalnu dopuštenu vrijednost od 5V. U praksi je bolje napisati raspon "0 - 30V" na ovom voltmetru tako da ostane
Sigurnosna granica!

Bilješke (uredi)

Ako se očitanja na zaslonu ne poklapaju s očitanjima industrijskog (laboratorijskog) voltmetra, tada je potrebno izmjeriti vrijednost otpora R1 i R2 točnim instrumentom i umetnuti ove vrijednosti umjesto R1 = 100000,0 i R2 = 10000.0 u programskom kodu. Zatim biste laboratorijskim voltmetrom trebali izmjeriti stvarni napon između pinova od 5V i "uzemljenja" Arduino ploče. Rezultat će biti vrijednost manja od 5V, na primjer, ispalo je 4,95V. Ovu stvarnu vrijednost treba umetnuti u redak koda
vout = (vrijednost * 5,0) / 1024,0 umjesto 5,0.
Također, pokušajte koristiti precizne otpornike s tolerancijom od 1%.

Otpornici R1 i R2 pružaju određenu zaštitu od visokih ulaznih napona, međutim, imajte na umu da svaki napon iznad 55V može oštetiti Arduino ploču. Osim toga, ovaj dizajn ne predviđa druge vrste zaštite (od prenapona, od promjene polariteta ili prenapona).

Program za digitalni voltmetar

/*
DC voltmetar
Arduino DVM baziran na konceptu djelitelja napona
T.K. Hareendran
*/
#uključiti
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
int analogni ulaz = 0;
float vout = 0,0;
plutajući vin = 0,0;
plovak R1 = 100000,0; // otpor R1 (100K) -vidi tekst!
plovak R2 = 10000,0; // otpor R2 (10K) - vidi tekst!
int vrijednost = 0;
void setup () (
pinMode (analogni ulaz, INPUT);
lcd.početak (16, 2);
lcd.print (“DC VOLTMETER”);
}
praznina petlja () (
// čitanje vrijednosti na analognom ulazu
vrijednost = analognoČitanje (analogni ulaz);
vout = (vrijednost * 5,0) / 1024,0; // vidi tekst
vin = vout / (R2 / (R1 + R2));
ako (vin<0.09) {
vin = 0,0; // izjava za poništavanje neželjenog čitanja!
}
lcd.setCursor (0, 1);
lcd.print (“INPUT V =“);
lcd.print (vin);
kašnjenje (500);
}

Shematski dijagram Arduino voltmetra

Popis komponenti

Arduino Uno ploča
Otpornik 100 k ohma
10k ohm otpornik
Otpornik 100 ohma
10kΩ Trimer otpornik
LCD zaslon 16 × 2 (Hitachi HD44780)

Uz neke dodatke.

Malo poznata značajka Arduina i mnogih drugih AVR čipova je mogućnost mjerenja interne reference od 1,1 V. Ova funkcija može koristiti za poboljšanje točnosti Arduino funkcije - analogRead korištenjem 5V standardna referenca (na 5V platformama) ili 3,3V (na 3,3V platformama).Također može biti koristi za mjerenje Vcc se dovodi u čip, osigurava kontrolni alat napon baterije bez upotrebe dragocjene analogne igle.

Motivacija

Postoji barem najmanje dva razloga za mjerenje napajanje naponom naš Arduino (Vcc). Jedan od njih je naš projekt na baterije ako želimo pratiti razinu napona baterije. Osim toga, kada snaga baterije (Vcc) ne može biti 5,0 volti (na primjer, napajaju ga 3 ćelije od 1,5 V), a želimo učiniti analogna mjerenja točnijima - moramo koristiti ili internu referencu od 1,1 V ili vanjsku referencu napona . Zašto?

Obično se pretpostavlja kada se koristi analogRead () da je analogni napon napajanja regulatora 5,0 volti, dok u stvarnosti to uopće nije slučaj (na primjer, napajaju ga 3 elementa od 1,5 V). Službena Arduino dokumentacija mogla bi nas čak dovesti do ove pogrešne pretpostavke. Poanta je da napajanje nije nužno 5,0 volti, bez obzira na trenutnu razinu, ova snaga se dovodi do Vcc čipa. Ako naše napajanje nije stabilizirano ili ako se napajamo iz baterije, ovaj napon može prilično varirati. Evo nekoliko primjera koda koji ilustrira ovaj problem:

Dvostruki Vcc = 5,0; // nije nužno istinita vrijednost int = analogRead (0); / pročitajte očitanja s A0 dvostruki volt = (vrijednost / 1023,0) * Vcc; // istinito samo ako je Vcc = 5,0 volti Za točno mjerenje napona potreban je točan referentni napon. Većina AVR čipova nudi tri reference napona:

  • 1,1 V iz internog izvora, u dokumentaciji ide kao bandgap reference (neki od njih su 2,56 V, na primjer ATMega 2560). Odabir se vrši pomoću funkcije analogReference () s INTERNAL parametrom: analogReference (INTERNAL);
  • vanjski referentni napon, AREF potpisan na arduinki. Izbor: analogReference (EXTERNAL);
  • Vcc je napajanje za sam kontroler. Izbor: analogna referenca (ZADANO).

U Arduinu, ne možete jednostavno uzeti i spojiti Vcc na analogni pin izravno - prema zadanim postavkama, AREF je spojen na Vcc i uvijek ćete dobiti maksimalnu vrijednost od 1023, bez obzira s kojeg napona se napajate. Spajanje na AREF izvora napona s prethodno poznatim, stabilnim naponom štedi, ali to je dodatni element u krugu.

Također možete spojiti Vcc na AREF putem dioda: Pad napona na diodi je unaprijed poznat, pa nije teško izračunati Vcc. Međutim, s takvim krugom kroz diodu struja teče stalno, skraćujući vijek trajanja baterije, što također nije baš dobro.

Eksterna referenca napona je najtočnija, ali zahtijeva dodatni hardver. Interna referenca je stabilna, ali nije točna +/- 10% odstupanja. Vcc je u većini slučajeva potpuno nepouzdan. Odabir interne referentne napone je jeftin i stabilan, ali većinu vremena želimo izmjeriti više od 1,1 V, pa je korištenje Vcc najpraktičnije, ali potencijalno najmanje točno. U nekim slučajevima može biti vrlo nepouzdan!

Kako to učiniti

Mnogi AVR čipovi, uključujući serije ATmega i ATtiny, pružaju sredstva za mjerenje internog referentnog napona. Zašto je ovo potrebno? Razlog je jednostavan - mjerenjem unutarnjeg napona možemo odrediti Vcc vrijednost. Evo kako:

  1. Postavite zadani izvor referentnog napona: analogReference (DEFAULT); ... Koristimo Vcc kao izvor.
  2. Uzmite očitanja ADC-a za unutarnji izvor od 1,1 V.
  3. Izračunajte Vcc vrijednost na temelju mjerenja od 1,1 V koristeći formulu:

Vcc * (ADC očitavanje) / 1023 = 1,1 V

iz čega slijedi:

Vcc = 1,1 V * 1023 / (ADC očitavanje)

Sastaviti sve i dobiti kod:

long readVcc () (// Čitaj 1.1V referencu prema AVcc // postavi referencu na Vcc i mjerenje na internu referencu od 1.1V #ako je definirano (__ AVR_ATmega32U4__) || definirano (__ AVR_ATmega1280__) || definirano (__ AVR_ATmega2560__) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif definiran (__AVR_ATtiny24__) || definiran (__ AVR_ATtiny44__) || definiran (__ MUX45_) | (MUX0); #elif definiran (__AVR_ATtiny25__) || definiran (__ AVR_ATtiny45__) || definiran (__ AVR_ATtiny85__) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFBV) (REFBB0) | MUX2) | _BV (MUX1); #endif kašnjenje (75); // Pričekajte da se Vref podmiri ADCSRA | = _BV (ADSC); // Pokreni konverziju dok (bit_is_set (ADCSRA, ADSC)); // mjerenje uint8_t niske = ADCL; // prvo mora pročitati ADCL - onda zaključava ADCH uint8_t high = ADCH; // otključava oba duga rezultata = (high<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Korištenje

Provjera Vcc ili napona baterije

Ovu funkciju možete pozvati readVcc () ako želite pratiti Vcc. Primjer bi bio provjera razine baterije. Također ga možete koristiti da odredite jeste li spojeni na izvor napajanja ili se napajate iz baterije.

Vcc mjerenje za referentni napon

Također ga možete koristiti za dobivanje ispravne vrijednosti Vcc za korištenje s analogRead () kada koristite referentni napon (Vcc). Dok ne koristite regulirano napajanje, ne možete biti sigurni da je Vcc = 5,0 volti. Ova funkcija vam omogućuje da dobijete ispravnu vrijednost. Iako postoji jedno upozorenje...

U jednom od članaka dao sam izjavu da se ova funkcija može koristiti za poboljšanje točnosti analognih mjerenja u slučajevima kada Vcc nije bio sasvim 5,0 volti. Nažalost, ovaj postupak neće dati točan rezultat. Zašto? To ovisi o točnosti interne referentne vrijednosti napona. Specifikacija daje nazivni napon od 1,1 volta, ali kaže da može varirati i do 10%. Takva mjerenja mogu biti manje točna od našeg Arduino napajanja!

Poboljšanje točnosti

Dok velike tolerancije unutarnjeg napajanja od 1,1 V značajno ograničavaju točnost mjerenja kada se koristi u serijskoj proizvodnji, možemo postići veću točnost za pojedinačne projekte. To je lako učiniti jednostavnim mjerenjem Vcc voltmetrom i našom funkcijom readVcc (). Zatim zamjenjujemo konstantu 1125300L novom varijablom:

scale_constant = interni1.1Ref * 1023 * 1000

interni1.1Ref = 1.1 * Vcc1 (očitanja_voltmetra) / Vcc2 (očitavanja_čitanjaVcc ())

Ova kalibrirana vrijednost bit će dobar pokazatelj za mjerenja AVR čipa, ali na nju mogu utjecati promjene temperature. Slobodno eksperimentirajte s vlastitim mjerama.

Zaključak

Mnogo toga možete učiniti s ovom malom značajkom. Možete koristiti stabilan referentni napon blizu 5,0 V, a da zapravo nemate 5,0 V na Vcc. Možete izmjeriti napon svoje baterije ili čak vidjeti na kojoj bateriji radite iz baterije ili iz stacionarnog izvora napajanja.

Konačno, kod će podržavati sve Arduine, uključujući novi Leonardo, kao i ATtinyX4 i ATtinyX5 serije čipova.

Postoje slučajevi kada želite provjeriti napon ili točku u strujnom krugu, ali nemate voltmetar ili multimetar pri ruci? Trčati kupiti? Dugo je i skupo. Prije nego što to učinite, kako bi bilo da sami napravite voltmetar? Zapravo, s jednostavnim komponentama, možete ga napraviti sami.

  • U tutorialu smo koristili Arduino kompatibilnu ploču - SunFounder Uno / Mars (http://bit.ly/2tkaMba)
  • USB podatkovni kabel
  • 2 potenciometra (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Razvojna ploča - http://bit.ly/2slvfrB
  • Više skakača

Prije povezivanja, pogledajmo kako to radi.

Koristite SunFounder Uno ploču za glavni dio obrade podataka voltmetra, LCD1602 kao ekran, potenciometar za podešavanje LCD kontrasta, a drugi za odvajanje napona.

Kada zakrenete potenciometar spojen na Uno ploču, potenciometarski otpornik se mijenja, čime se mijenja napon na njemu. Signal napona će se poslati na Uno ploču kroz pin A0, a Uno će digitalizirati primljeni analogni signal i zapisati na LCD. Tako možete vidjeti vrijednost napona na trenutnom otporu kondenzatora.

LCD1602 ima dva načina rada: 4-bitni i 8-bitni. Kada IO MCU-a nije dovoljan, možete odabrati 4-bitni način rada, koji koristi samo pinove D4 ~ D7.

Slijedite tablicu da ih povežete.

Korak 4: spojite potenciometar na LCD1602

Spojite srednji pin potenciometra na Vo pin na LCD1602 i bilo koji od ostalih iglica na GND.

Spojite srednji pin potenciometra na pin A0 SunFounder Uno i jedan od ostalih na 5V, dok drugi na GND.

Korak 6: Učitajte kod

Kod ovako:

#include / *************************************************** * **** / const int analogIn = A0; // potenciometar priključiti na A0 LiquidCrystal LCD (4, 6, 10, 11, 12, 13); // LCD (RS, E, D4, D5, D6.D7) plutajući val = 0; // definiraj varijablu kao vrijednost = 0 / ********************************* ** **************** / void setup () (Serial.begin (9600); // Inicijalizirajte serijski lcd.begin (16, 2); // postavite položaj znakovi na LCD-u kao redak 2, stupac 16 lcd.print ("Voltage Value:"); // ispis "Voltage Value:") / ******************** *********************************** / void loop () (val = analogRead (A0); // Read vrijednost potenciometra na val val = val / 1024 * 5.0; // Pretvorite podatke u odgovarajuću vrijednost napona na matematički način Serial.print (val); // Ispišite broj val na serijskom monitoru Serial.print ("V"); // ispis jedinice kao V, skraćenica za napon na serijskom monitoru lcd.setCursor (6,1); // Postavite kursor na redak 1, stupac 6. Odavde se trebaju prikazati znakovi lcd.print (val); // Ispiši broj v al na LCD lcd.print ("V"); // Zatim ispišite jedinicu kao V, skraćeno za odgodu napona na LCD-u (200); // Pričekajte 200 ms)

Zakrenite potenciometar kako biste provjerili napon na LCD1602 u stvarnom vremenu.

Evo jedne zeznute stvari. Nakon što sam pokrenuo kod, na LCD-u su se prikazali simboli. Zatim sam podesio kontrast zaslona (fade from black to white) rotirajući potenciometar u smjeru kazaljke na satu ili suprotno od kazaljke na satu dok ekran nije jasno pokazao znakove.

Uzmite dvije baterije da izmjerite njihove napone: 1,5 V i 3,7 V. Odvojite spoj drugog potenciometra s pinom A0 i GND, što znači vađenje potenciometra iz strujnog kruga. Pričvrstite kraj žice A0 na anodu baterije, a GND krug na katodu. NEMOJTE ih ponovno ukopčavati, inače ćete dobiti kratki spoj na bateriji. Vrijednost 0V je obrnuta veza.

Dakle, napon baterije je prikazan na LCD-u. Možda postoji pogreška između vrijednosti i nominalne vrijednosti jer baterija nije potpuno napunjena. I zato moram izmjeriti napon kako bih shvatio mogu li koristiti bateriju ili ne.

P.S: Ako imate problema s zaslonom - pogledajte ovo FAQ za LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Pozdrav, Habr! Danas želim nastaviti temu "križanja" arduina i androida. U prethodnoj publikaciji o kojoj sam govorio, a danas ćemo govoriti o DIY bluetooth voltmetru. Drugi takav uređaj može se nazvati pametni voltmetar, "pametni" voltmetar ili samo pametni voltmetar, bez navodnika. Prezime je netočno s gledišta gramatike ruskog jezika, međutim, često se nalazi u medijima. Glasovanje o ovoj temi bit će na kraju članka, a predlažem da počnete s demonstracijom rada uređaja kako biste razumjeli o čemu će članak biti.


Odricanje od odgovornosti: članak je namijenjen prosječnom arduino hobistu koji obično nije upoznat s programiranjem za android, stoga ćemo, kao i u prethodnom članku, izraditi aplikaciju za pametni telefon koristeći App Inventor 2 vizualno razvojno okruženje za android aplikacije.
Za izradu DIY bluetooth voltmetra trebamo napisati dva relativno nezavisna programa: skicu za arduino i aplikaciju za android. Krenimo sa skicom.
Za početak, trebali biste znati da postoje tri glavne opcije za mjerenje napona pomoću arduina, bez obzira na to gdje trebate prikazati informacije: na com-port, na ekran spojen na arduino ili na pametni telefon.
Prvi slučaj: mjerenja napona do 5 volti. Ovdje je dovoljan jedan ili dva retka koda, a napon se primjenjuje izravno na pin A0:
int vrijednost = analogRead (0); // čitanje očitanja iz A0
napon = (vrijednost / 1023,0) * 5; // istinito samo ako je Vcc = 5,0 volti
Drugi slučaj: djelitelj napona koristi se za mjerenje napona iznad 5 volti. Shema je vrlo jednostavna, kod također.

Skica

int analogni ulaz = A0;
float val = 0,0;
napon plutanja = 0,0;
plovak R1 = 100000,0; // Baterija Vin-> 100K -> A0
plovak R2 = 10000,0; // Baterija Gnd -> Arduino Gnd i Arduino Gnd -> 10K -> A0
int vrijednost = 0;

Void setup () (
Serija.početak (9600);
pinMode (analogni ulaz, INPUT);
}

Void petlja () (
vrijednost = analognoČitanje (analogni ulaz);
val = (vrijednost * 4,7) / 1024,0;
napon = val / (R2 / (R1 + R2));
Serial.println (napon);
kašnjenje (500);
}


Arduino Uno
Bluetooth modul
Treći slučaj. Kada trebate dobiti točnije informacije o naponu kao referentnom naponu, trebate koristiti ne napon napajanja, koji se može neznatno promijeniti kada se napaja iz baterije, na primjer, već napon Arduino unutarnjeg stabilizatora od 1,1 volta. Ovdje je krug isti, ali je kod nešto duži. Ovu opciju neću detaljno analizirati, jer je već dobro opisana u tematskim člancima, a druga metoda mi je sasvim dovoljna, budući da imam stabilno napajanje iz USB priključka prijenosnog računala.
Tako smo shvatili mjerenje napona, a sada prijeđimo na drugu polovicu projekta: stvaranje aplikacije za Android. Aplikaciju ćemo izraditi izravno iz preglednika u okruženju vizualnog razvoja za android aplikacije App Inventor 2. Idite na web stranicu appinventor.mit.edu/explore, prijavite se svojim Google računom, kliknite gumb za kreiranje, novi projekt i jednostavnim povlačenjem i ispuštanjem elemenata stvara se nešto poput ovog dizajna:

Grafiku sam napravio vrlo jednostavno, ako netko želi zanimljiviju grafiku, da vas podsjetim da za to trebate koristiti .png datoteke s prozirnom pozadinom umjesto .jpeg datoteka.
Sada idite na karticu Blokovi i tamo kreirajte logiku aplikacije ovako:


Ako je sve uspjelo, možete kliknuti gumb Build i spremiti .apk na moje računalo, a zatim preuzeti i instalirati aplikaciju na svoj pametni telefon, iako postoje i drugi načini za upload aplikacije. ovdje je svima zgodnije. Kao rezultat, dobio sam sljedeću aplikaciju:


Razumijem da vrlo malo ljudi koristi okruženje za vizualni razvoj App Inventor 2 za android aplikacije u svojim projektima, tako da može biti mnogo pitanja o radu u njemu. Da bih uklonio neka od ovih pitanja, napravio sam detaljan video o tome kako napraviti takvu aplikaciju "od nule" (morate otići na YouTube da biste je pogledali):

p.s. Zbirka od preko 100 Arduino tutorijala za početnike i profesionalce

Ideja

Ideja uređaji za mjerenje napona, struje, kapaciteta, pražnjenja, a možda i naboja nastali su davno i ne samo kod mene. Možete pronaći dosta igračaka pod nazivom USB Tester (Doktor) za testiranje raznih USB uređaja. Zanima me nešto univerzalniji uređaj, neovisan o sučelju, ali jednostavno dizajniran za određene napone i struje. Na primjer, 0 - 20,00 V, 0 - 5,00a, 0 - 99,99 Ah. Što se tiče funkcija, ja to vidim ovako

  • Prikaz trenutnog napona i struje, tj. volt-ampermetar. U principu, možete odmah odraziti moć.
  • Brojanje i prikaz akumuliranog kapaciteta. Amper-sati i najvjerojatnije vat-sati.
  • Prikaz vremena procesa
  • I, najvjerojatnije, prilagodljivi donji i gornji pragovi prekida napona (granice pražnjenja i punjenja)

Razvoj

Za provedbu proračuna i mjerenja potreban nam je kontroler. Sjetio sam se ove ideje u sklopu svog poznanstva s Arduinom, tako da će kontroler biti jednostavan popularni Atmega328 i bit će programiran u okruženju Arduino. S inženjerske točke gledišta, izbor vjerojatno nije najbolji - kontroler je malo debeo za zadatak, a njegov se ADC ne može nazvati mjernim, ali ... pokušat ćemo.

  • Nećemo puno lemiti u ovom projektu. Kao osnovu uzet ćemo gotov Arduino Pro Mini modul, budući da su ih Kinezi spremni isporučiti po cijeni od 1,5 USD.
  • Display 1602 će djelovati kao uređaj za prikaz - još 1,5 dolara. Imam varijantu s I2C modulom sučelja, ali u ovom projektu nije previše potreban (0,7$).
  • Za razvoj nam je potrebna matična ploča. U mom slučaju, ovo je mali BreadBoard od 1 USD.
  • Naravno, trebat će vam žice i brojni otpornici različitih ocjena. Za 1602 zaslon bez I2C potreban je i odabir kontrasta - radi se s promjenjivim otpornikom od 2 - 20 kOhm.
  • Za implementaciju ampermetra potreban vam je šant. Kao prva aproksimacija, to bi mogao biti otpornik od 0,1 ohma, 5 W.
  • Za implementaciju automatskog isključivanja potreban vam je relej s kontaktima dizajniranim za maksimalnu struju uređaja i napon jednak naponu napajanja. Za upravljanje relejem potrebni su NPN tranzistor i zaštitna dioda.
  • Uređaj će se napajati vanjskim napajanjem, očito najmanje 5V. Ako se napajanje jako razlikuje, tada je potreban i integralni stabilizator tipa 7805 - on će odrediti napon releja.
  • Kada Arduino Pro Mini zahtijeva USB-TTL pretvarač za prijenos firmvera.
  • Za postavljanje će vam trebati multimetar.

Voltmetar

Ja implementiram jednostavan voltmetar s jednim rasponom od oko 0 - 20v. Ova napomena je važna, budući da ADC našeg kontrolera ima kapacitet od 10 bita (1024 diskretne vrijednosti), pa će greška biti najmanje 0,02 V (20/1024). Da bismo ga implementirali, potreban nam je analogni ulaz kontrolera, razdjelnik od para otpornika i neka vrsta izlaza (zaslon je gotov, za otklanjanje pogrešaka možete koristiti serijski port).

Princip mjerenja ADC-a je usporedba napona na analognom ulazu s referentnim VRef. Izlaz ADC-a je uvijek cijeli broj - 0 odgovara 0V, 1023 odgovara naponu VRef. Mjerenje se ostvaruje nizom uzastopnih očitanja napona i usrednjavanjem u razdoblju između ažuriranja vrijednosti na zaslonu. Odabir referentnog napona je važan jer je zadani napon napajanja, koji možda nije stabilan. To nam nikako ne odgovara - za osnovu ćemo uzeti stabilan interni referentni izvor s naponom od 1,1v, inicijalizirajući ga pozivom analogReference (INTERNAL). Zatim ćemo kalibrirati njegovu vrijednost prema očitanjima multimetra.

Na dijagramu s lijeve strane - varijanta s izravnom kontrolom zaslona (jednostavno se kontrolira - pogledajte standardnu ​​skicu LiquidCrystal \ HelloWorld). Desno je I2C varijanta koju ću dalje koristiti. I2C vam omogućuje uštedu na žicama (od kojih u uobičajenoj verziji - 10, ne računajući pozadinsko osvjetljenje). Ali to zahtijeva dodatni modul i složeniju inicijalizaciju. U svakom slučaju, najprije se mora provjeriti prikaz simbola na modulu i podesiti kontrast - za to samo trebate prikazati tekst nakon inicijalizacije. Kontrast se podešava otpornikom R1, ili sličnim otpornikom u I2C modulu.

Ulaz je djelitelj 1:19, koji omogućuje pri Vref = 1.1 da se dobije maksimalni napon od oko 20V (obično se kondenzator + zener dioda postavlja paralelno s ulazom radi zaštite, ali to nam još nije važno). Otpornici imaju raširenost, a i referentni Vref regulatora, pa je nakon montaže potrebno izmjeriti napon (barem napajanja) paralelno sa našim uređajem i referentnim multimetrom i odabrati Vref u kodu dok se očitanja ne poklope . Također je vrijedno napomenuti da svaki ADC ima nulti napon pomaka (što kvari očitanja na početku raspona), ali za sada nećemo ulaziti u to.

Također će biti važno odvojiti dovodnu i mjernu "zemlju". Naš ADC ima rezoluciju nešto lošiju od 1mV, što može stvoriti probleme s neispravnim ožičenjem, osobito na matičnoj ploči. Budući da je raspored ploče modula već napravljen i ostaje nam samo odabrati pinove. Modul ima nekoliko "uzemljenih" pinova, tako da moramo paziti da napajanje modula dolazi na jedno "uzemljenje", a mjerenje na drugo. Zapravo, uvijek koristim pin za uzemljenje najbliži analognim ulazima za promjene.

Za upravljanje I2C koristi se verzija biblioteke LiquidCrystal_I2C - u mom slučaju je naznačen specifičan pinout modula I2C (Kinezi proizvode module s različitim kontrolama). Također napominjem da I2C u Arduinu pretpostavlja korištenje pinova A4, A5 - na Pro Mini ploči nisu na rubu, što je nezgodno za izradu prototipa na BreadBoardu.

Izvor

#uključiti #uključiti // Jednostavan voltmetar s i2c zaslonom 1602. V 16.11 // Postavke za i2c zaslon 1602 s nestandardnim pinoutom #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EN 2 #define LCD_RW 1 #define LCD_RW 1 #define LCD_RW 1 #define LCD_RW 1 #define LCD_RW 1 #define LCDe_define LCD_define_D4Define LCDe_RS 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); // Vrijeme ažuriranja očitanja, ms (200-2000) #define REFRESH_TIME 330 // Analogni ulaz #define PIN_VOLT A0 // Interni referentni napon (podizanje) const float VRef = 1,10; // Omjer ulaznog otpornog djelitelja (Rh + Rl) / Rl. U<-[ 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; // Pretvorba u volte (Vrijednost: 0..1023 -> (0..VRef) skalirana s Multom) Volt = InVolt * VoltMult * VRef / 1023; // Izlaz podataka lcd.setCursor (0, 1); lcd.print (Volt); lcd.print ("V"); )

Vrhunski povezani članci