Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows Phone
  • Digitalni voltmetar na Arduinu povezan na PC preko serijskog porta. Arduino baziran bluetooth voltmetar

Digitalni voltmetar na Arduinu povezan na PC preko serijskog porta. Arduino baziran bluetooth voltmetar

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 9V.

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

Analogni senzor na Arduino ploči detektuje prisustvo napona na analognom ulazu i pretvara ga u digitalni oblik za dalju obradu od strane mikrokontrolera. Na slici se napon primjenjuje na analogni ulaz (A0) preko jednostavnog djelitelja napona koji se sastoji od otpornika R1 (100 kΩ) i R2 (10 kΩ).

Sa ovim vrijednostima razdjelnika, napon od 0 do
55B. Na ulazu A0 imamo izmjereni napon podijeljen sa 11, odnosno 55V / 11 = 5V. Drugim riječima, kada mjerimo 55V na Arduino ulazu, imamo maksimalnu dozvoljenu 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 ekranu ne poklapaju s očitanjima industrijskog (laboratorijskog) voltmetra, tada je potrebno preciznim instrumentom izmjeriti vrijednost otpora R1 i R2 i umetnuti ove vrijednosti umjesto R1 = 100000,0 i R2 = 10000.0 u programskom kodu. Zatim biste trebali laboratorijskim voltmetrom 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 red 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 digitalnog voltmetra

/*
DC voltmetar
Arduino DVM baziran na konceptu razdjelnika napona
T.K. Hareendran
*/
#include
LiquidCrystal LCD (7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0,0;
float vin = 0,0;
plovak R1 = 100000,0; // otpor R1 (100K) -vidi tekst!
float 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”);
}
void 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);
}

Šematski dijagram Arduino voltmetra

Lista komponenti

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

Uz neke dodatke.

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

Motivacija

Postoji barem najmanje dva razloga za merenje napajanje naponom naš Arduino (Vcc). Jedan od njih je naš projekt na baterije ako želimo pratiti nivo napona baterije. Osim toga, kada snaga baterije (Vcc) ne može biti 5,0 volti (na primjer, napaja se od 3 x 1,5 V ćelije), a želimo da analogna mjerenja učinimo preciznijim, moramo koristiti ili internu referencu od 1,1 V. ili eksternu referentni napon. Zašto?

Obično se pretpostavlja kada se koristi analogRead () da je analogni napon napajanja kontrolera 5,0 volti, dok u stvarnosti to možda uopće nije slučaj (na primjer, napajaju ga 3 elementa od 1,5 V). Službena Arduino dokumentacija bi nas čak mogla dovesti do ove pogrešne pretpostavke. Poenta je da napajanje nije nužno 5,0 volti, bez obzira na trenutni nivo, 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 nekih primjera koda koji ilustruju ovaj problem:

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

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

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

Također možete povezati Vcc na AREF putem dioda: Pad napona na diodi je unaprijed poznat, tako da 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 dobro.

Eksterna referenca napona je najpreciznija, ali zahtijeva dodatni hardver. Interna referenca je stabilna, ali nije tačna +/- 10% odstupanja. Vcc je u većini slučajeva potpuno nepouzdan. Odabir interne reference napona je jeftin i stabilan, ali većinu vremena bismo željeli izmjeriti više od 1,1 V, tako da je korištenje Vcc najpraktičnije, ali potencijalno najmanje precizno. U nekim slučajevima može biti vrlo nepouzdan!

Kako uraditi

Mnogi AVR čipovi uključujući ATmega i ATtiny serije pružaju sredstva za mjerenje internog referentnog napona. Zašto je ovo potrebno? Razlog je jednostavan - mjerenjem unutrašnjeg 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 interni izvor od 1,1 V.
  3. Izračunajte Vcc vrijednost na osnovu mjerenja od 1,1 V koristeći formulu:

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

iz čega proizilazi:

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

Sastaviti sve zajedno 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_) (__ MUX45_) | (MUX0); #elif definiran (__AVR_ATtiny25__) || definiran (__ AVR_ATtiny45__) || definiran (__ AVR_ATtiny85__) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFBV) (REFBV) | MUX2) | _BV (MUX1); #endif kašnjenje (75); // Pričekajte da 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 = (visoka<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Upotreba

Provjera Vcc ili napona baterije

Možete pozvati ovu funkciju readVcc () ako želite da nadgledate Vcc. Primjer bi bio da provjerite nivo baterije. Također ga možete koristiti da odredite jeste li povezani na izvor napajanja ili se napajate iz baterije.

Vcc mjerenje za referentni napon

Također ga možete koristiti da dobijete ispravnu vrijednost Vcc za korištenje sa 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ćava 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 tačnosti analognih mjerenja u slučajevima kada Vcc nije bio sasvim 5,0 volti. Nažalost, ovaj postupak neće dati tačan rezultat. Zašto? Ovo zavisi od tačnosti interne reference napona. Specifikacija daje nominalni napon od 1,1 volta, ali kaže da može varirati i do 10%. Takva mjerenja mogu biti manje precizna od našeg Arduino napajanja!

Poboljšanje tačnosti

Dok velike tolerancije unutrašnjeg napajanja od 1,1 V značajno ograničavaju tačnost mjerenja kada se koristi u serijskoj proizvodnji, možemo postići veću preciznost 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 će biti dobra indikacija 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 funkcijom. Možete koristiti stabilan referentni napon blizu 5.0V, a da zapravo nemate 5.0V na Vcc. Možete izmjeriti napon svoje baterije ili čak vidjeti na koju bateriju radite iz baterije ili iz stacionarnog izvora napajanja.

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

Postoje slučajevi kada želite provjeriti napon ili tačku u strujnom kolu, ali nemate voltmetar ili multimetar pri ruci? Trčati kupiti? Dug je i skup. Prije nego što to učinite, kako bi bilo da sami napravite voltmetar? U stvari, sa jednostavnim komponentama, možete ga napraviti sami.

  • U tutorijalu smo koristili Arduino kompatibilnu ploču - SunFounder Uno / Mars (http://bit.ly/2tkaMba)
  • USB kabl za prenos podataka
  • 2 potenciometra (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Razvojna ploča - http://bit.ly/2slvfrB
  • Višestruki skakači

Prije povezivanja, hajde da prvo pogledamo kako to funkcionira.

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 rotirate potenciometar spojen na Uno ploču, otpornik potenciometra se mijenja, čime se mijenja napon na njemu. Signal napona će se poslati na Uno ploču preko pina A0, a Uno će digitalizirati primljeni analogni signal i pisati na LCD. Tako možete vidjeti vrijednost napona na trenutnom otporu kondenzatora.

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

Pratite tabelu da ih povežete.

Korak 4: spojite potenciometar na LCD1602

Spojite srednji pin potenciometra na Vo pin na LCD1602 i bilo koji od ostalih pinova 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 poziciju znakovi na LCD-u kao red 2, kolona 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 red 1, kolona 6. Odavde će se prikazati znakovi lcd.print (val); // Ispis broja v al na LCD lcd.print ("V"); // Zatim odštampajte jedinicu kao V, skraćeno za napon na LCD kašnjenju (200); // Sačekaj 200ms)

Okrenite potenciometar da provjerite napon na LCD1602 u realnom vremenu.

Evo jedne nezgodne stvari. Nakon što sam pokrenuo kod, na LCD-u su se prikazali simboli. Zatim sam podesio kontrast ekrana (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 vezu drugog potenciometra sa pinom A0 i GND, što znači uklanjanje potenciometra iz kola. Pričvrstite kraj žice A0 na anodu baterije, a GND krug na katodu. NEMOJTE ih ponovo uključivati, inače ćete dobiti kratak spoj na bateriji. Vrijednost 0V je obrnuta veza.

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

PS: Ako imate problema sa ekranom - pogledajte ova FAQ za LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Zdravo, Habr! Danas želim da nastavim temu "ukrštanja" arduina i androida. U prethodnoj publikaciji o kojoj sam govorio, a danas ćemo govoriti o DIY bluetooth voltmetru. Drugi takav uređaj se može nazvati pametnim voltmetrom, "pametnim" voltmetrom ili samo pametnim voltmetrom, bez navodnika. Prezime je netačno sa stanovišta gramatike ruskog jezika, međutim, često se nalazi u medijima. Glasanje 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.


Disclaimer: članak je namijenjen prosječnom arduino hobistu koji obično nije upoznat sa programiranjem za android, stoga ćemo, kao i u prethodnom članku, kreirati aplikaciju za pametni telefon koristeći App Inventor 2 vizualno razvojno okruženje za android aplikacije.
Da bismo napravili DIY bluetooth voltmetar, potrebno je da napišemo dva relativno nezavisna programa: skicu za arduino i aplikaciju za android. Počnimo 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: mjerenje napona do 5 volti. Ovdje su dovoljna jedna ili dvije linije koda, a napon se primjenjuje direktno na pin A0:
int vrijednost = analogRead (0); // čitanje očitanja iz A0
napon = (vrijednost / 1023,0) * 5; // istina samo ako je Vcc = 5,0 volti
Drugi slučaj: Razdjelnik napona se koristi za mjerenje napona preko 5 volti. Šema je vrlo jednostavna, kod također.

Skica

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

Void setup () (
Serial.begin (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 preciznije informacije o naponu, ne morate koristiti napon napajanja kao referentni napon, koji se može neznatno promijeniti kada se napaja iz baterije, na primjer, već napon Arduino unutrašnjeg 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, jer imam stabilno napajanje iz USB porta laptopa.
Tako smo shvatili mjerenje napona, a sada idemo na drugu polovinu projekta: kreiranje android aplikacije. Aplikaciju ćemo napraviti direktno iz pretraživača u okruženju vizuelnog razvoja za android aplikacije App Inventor 2. Idite na web stranicu appinventor.mit.edu/explore, prijavite se sa svojim Google računom, kliknite na dugme kreiraj, novi projekat i jednostavnim povlačenjem i ispuštanjem elemenata kreirajte nešto poput ovog dizajna:

Grafiku sam napravio vrlo jednostavno, ako neko želi zanimljiviju grafiku, da vas podsjetim da za ovo trebate koristiti .png fajlove sa prozirnom pozadinom umjesto .jpeg fajlova.
Sada idite na karticu Blocks i kreirajte logiku aplikacije na sljedeći način:


Ako je sve uspjelo, možete kliknuti na dugme Build i sačuvati .apk na moj računar, 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 uklonim neka od ovih pitanja, napravio sam detaljan video o tome kako napraviti takvu aplikaciju "od nule" (potrebno je otići na YouTube da biste je pogledali):

P.S. Kolekcija 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 punjenja 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, nezavisan od interfejsa, 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, odnosno volt-amper metar. U principu, možete odmah odraziti snagu.
  • Brojanje i prikaz akumuliranog kapaciteta. Amper-sati i najvjerovatnije vat-sati.
  • Prikaz vremena procesa
  • I, najvjerovatnije, prilagodljivi donji i gornji pragovi isključenja napona (granice pražnjenja i punjenja)

Razvoj

Za provođenje proračuna i mjerenja potreban nam je kontroler. Sjetio sam se ove ideje kao dio mog poznanstva sa Arduinom, tako da će kontroler biti jednostavan popularni Atmega328 i biće programiran u okruženju Arduino. Sa inženjerske tačke gledišta, izbor vjerovatno nije najbolji - kontroler je malo debeo za zadatak, a njegov ADC se 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 Kinezi spremni da ih isporuče po cijeni od 1,5 USD u maloprodaji.
  • Display 1602 će se ponašati kao uređaj za prikaz - još 1,5 dolara. Imam varijantu sa I2C interfejs modulom, ali u ovom projektu nije mnogo 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 displej bez I2C potreban je i izbor kontrasta - radi se s promjenjivim otpornikom od 2 - 20 kOhm.
  • Da biste implementirali ampermetar, potreban vam je šant. Kao prva aproksimacija, to bi mogao biti otpornik od 0,1 oma, 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 eksternim napajanjem, očigledno 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 konverter za učitavanje firmvera.
  • Za podešavanje će vam trebati multimetar.

Voltmetar

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

Princip mjerenja ADC-a je upoređivanje napona na analognom ulazu sa referentnim VRef. ADC izlaz je uvijek cijeli broj - 0 odgovara 0V, 1023 odgovara naponu VRef. Merenje se realizuje nizom uzastopnih očitavanja napona i usrednjavanjem tokom perioda između ažuriranja vrednosti na ekranu. 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 sa naponom od 1,1v, inicijalizirajući ga pozivom analogReference (INTERNAL). Zatim ćemo kalibrirati njegovu vrijednost prema očitanjima multimetra.

Na dijagramu lijevo - varijanta sa direktnom kontrolom displeja (jednostavno se kontroliše - pogledajte standardnu ​​skicu LiquidCrystal \ HelloWorld). Desno je I2C varijanta, koju ću dalje koristiti. I2C vam omogućava 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, prvo se mora provjeriti prikaz simbola na modulu i podesiti kontrast - za to je potrebno samo prikazati bilo koji tekst nakon inicijalizacije. Kontrast se podešava otpornikom R1, ili sličnim otpornikom u I2C modulu.

Ulaz je djelitelj 1:19, koji omogućava pri Vref = 1.1 da se dobije maksimalni napon od oko 20V (obično se kondenzator + zener dioda postavlja paralelno sa ulazom radi zaštite, ali to nam još nije važno). Otpornici imaju raširenost, a i referentni Vref kontrolera, 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 offset napon (š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, posebno na matičnoj ploči. Pošto je raspored ploče modula već napravljen i ostaje nam samo da izaberemo pinove. Modul ima nekoliko "uzemljenih" pinova, tako da moramo paziti da napajanje modula dolazi na jedno "uzemljenje", a mjerenje na drugo. U stvari, uvijek koristim pin za uzemljenje najbliži analognim ulazima za promjene.

Za kontrolu I2C koristi se verzija biblioteke LiquidCrystal_I2C - u mom slučaju je naznačena specifična pinout I2C modula (Kinezi proizvode module sa različitim kontrolama). Također napominjem da I2C u Arduinu pretpostavlja korištenje pinova A4, A5 - na Pro Mini ploči oni nisu na rubu, što je nezgodno za prototipiranje na BreadBoard-u.

Izvor

#include #include // Jednostavan voltmetar sa i2c displejom 1602. V 16.11 // Postavke za i2c displej 1602 sa 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 LCDe_define LCD_define #0D5 LCDefine 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 za ažuriranje 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 razdjelnika (Rh + Rl) / Rl. IN<-[ 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 pomoću Mult) Volt = InVolt * VoltMult * VRef / 1023; // Izlaz podataka lcd.setCursor (0, 1); lcd.print (Volt); lcd.print ("V"); )

Top srodni članci