Bluetooth voltmetar baziran na arduinu. Digitalni voltmetar na Arduinu sa vezom na PC preko serijskog porta Arduino voltmetar sa izlazom podataka na kompjuter

Multifunkcionalni Arduino sklopovi su od velikog interesa za ljubitelje kućnih elektronski programabilnih uređaja, omogućavajući im da ožive zanimljive ideje.

Glavna prednost gotovih Arduino kola je jedinstveni blok-modularni princip: svakoj ploči može se dodati dodatna sučelja, beskonačno proširujući mogućnosti za kreiranje različitih projekata.

Arduino moduli izgrađeni su na univerzalnom mikrokontroleru sa sopstvenim bootloaderom, što olakšava flešovanje potrebnim programskim kodom, bez upotrebe dodatnih uređaja. Programiranje se izvodi u standardnom C++ jeziku.

Jedan od najjednostavnijih primjera korištenja Arduina može biti implementacija, na osnovu ovog sklopa, visokopreciznog DC voltmetra s mjernim opsegom od 0 do 30 V.

Arduino analogni ulazi dizajnirani su za konstantan napon ne veći od pet volti, stoga je njihova upotreba na naponima koji prelaze ovu vrijednost moguća uz djelitelj napona.


Shema povezivanja Areduina preko razdjelnika napona

Razdjelnik napona sastoji se od dva serijski spojena otpornika. Izračunava se pomoću formule:

Eksterni USB konektor u auto radiju

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

Kao što vjerovatno znate, Arduino analogni ulazi se mogu koristiti za mjerenje istosmjernog napona u rasponu od 0 - 5V i ovaj raspon se može povećati,
koristeći dva otpornika kao djelitelj napona. Razdjelnik će smanjiti izmjereni napon na nivo Arduino analognih ulaza. A onda ć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 dovodi na analogni ulaz (A0) preko jednostavnog djelitelja napona koji se sastoji od otpornika R1 (100 kOhm) i R2 (10 kOhm).

Sa ovim vrijednostima razdjelnika, Arduino ploča se može napajati naponom od 0 do
55V. Na ulazu A0 imamo izmjereni napon podijeljen sa 11, tj. 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

Ako se očitanja na displeju ne poklapaju sa očitanjima industrijskog (laboratorijskog) voltmetra, tada je potrebno preciznim instrumentom izmjeriti vrijednost otpora R1 i R2 i uneti ove vrijednosti umjesto R1=100000,0 i R2=10000,0 u programskom kodu. Zatim biste trebali izmjeriti stvarni napon između 5V i “Ground” pinova Arduino ploče pomoću laboratorijskog voltmetra. Rezultat će biti vrijednost manja od 5V, na primjer, bit će 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 povećanih ulaznih napona.Međutim, zapamtite da svaki napon iznad 55V može oštetiti Arduino ploču. Osim toga, ovaj dizajn ne pruža druge vrste zaštite (od napona, 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.begin(16, 2);
lcd.print(“DC VOLTMETER”);
}
void loop()
// čitanje vrijednosti na analognom ulazu
vrijednost = analognoRead(analogInput);
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
100 kOhm otpornik
10 kOhm otpornik
100 ohm otpornik
10kOhm trimer otpornik
LCD ekran 16?2 (Hitachi HD44780)

Šematski dijagram domaćeg bipolarnog voltmetra na Arduino Uno i sa 1602A displejom. U članku “Dvostruki voltmetar na ARDUINO UNO” (L.1) autor je predložio opis voltmetra i program za istovremeno mjerenje i indikaciju dva konstantna napona. Što je vrlo zgodno ako trebate istovremeno izmjeriti dva konstantna napona i uporediti ih.

Ovo može biti potrebno, na primjer, prilikom popravke ili postavljanja stabilizatora jednosmjernog napona kako bi se izmjerio napon na njegovom ulazu i izlazu, ili u drugim slučajevima.

Međutim, postoje krugovi s bipolarnim napajanjem, kada napon u nekom trenutku u krugu u odnosu na zajedničku "nulu" može biti pozitivan ili negativan.

Shematski dijagram

Ovdje opisujemo modifikaciju kola i programa tako da uređaj može mjeriti i pokazivati ​​i pozitivan i negativan napon.

Za početak, izmjereni naponi se dovode na dva analogna ulaza A1 i A2. Ukupno ima šest analognih ulaza, A0-A5, možete odabrati bilo koja dva od njih. U ovom slučaju se biraju A1 i A2. Napon na analognim portovima može biti samo pozitivan i to samo u rasponu od nule do napona napajanja mikrokontrolera, odnosno nominalno do 5V.

Izlaz analognog porta se pretvara u digitalni oblik pomoću ADC mikrokontrolera. Da biste dobili rezultat u jedinicama volti, trebate ga pomnožiti sa 5 (referentnim naponom, odnosno naponom napajanja mikrokontrolera) i podijeliti sa 1024.

Rice. 1. Šematski dijagram bipolarnog voltmetra na Arduino Uno i 1602A.

Da biste mogli izmjeriti napone veće od 5V, odnosno veće od napona napajanja mikrokontrolera, jer se stvarni napon na izlazu 5-voltnog stabilizatora na ARDUINO UNO ploči može razlikovati od 5V, a obično malo niže, morate koristiti konvencionalne otporne razdjelnike na ulazu.

Ovo su razdjelnici napona na otpornicima R1, R3 i R2, R4. Ali šta ako napon treba izmjeriti manjim od nule? U ovom slučaju postoji samo jedan izlaz iz situacije - podići nivo ulazne nule. U idealnom slučaju, potrebna vam je polovina napona napajanja, odnosno do 2,5V. U ovom slučaju, podaci od 2,5V će biti dodati ulaznom naponu.

Zatim, programski, jednostavno oduzmite ovaj napon od izmjerenog. Ali, to će zahtijevati dodatni izvor ovog napona. U principu, to nije teško učiniti, ali postoji jednostavnije rješenje.

Pored stabilizatora napona od 5V, ARDUINO UNO ploča ima izvor napona od 3,3V. Tako da se može koristiti kao "virtuelna nula" za unos.

Promjene u kolu su vidljive na slici 1. U poređenju sa prvom opcijom, ulazna “nula” je jednostavno preuređena sa zajedničke nule na +Z.ZV izvor. Dakle, kada je ulazni napon pozitivan, na ulazu je veći od 3,3V (ali ne više od 5V - ovo je gornja granica mjerenja), a kada je negativan - manji od 3,3V (ali ne manje od OV - ovo je donja granica mjerenja).

Povećanje mjernih granica (modulo) postiže se otpornim djeliteljem, a indikacija stvarnog ulaznog napona koji se dovodi na X2 i X3 postiže se softverskim oduzimanjem vrijednosti od 3,3V od napona na ulazima mikrokontrolera.

Program je prikazan u tabeli 1. To se vidi u redovima:

volt=(vout*5.0/1024.0-3.3)/0.048 ;

voltl=(voutl*5.0/1024.0-3.3)/0.048;

Broj 3.3 je upravo taj napon ulaza "virtuelne nule".

U ovim redovima, broj 5.0 je napon na izlazu stabilizatora ARDUINO UNO ploče. U idealnom slučaju, trebalo bi da bude 5V, ali da bi voltmetar radio tačno, ovaj napon se prvo mora izmeriti. Povežite izvor napajanja i izmjerite +5V napon na POWER konektoru ploče sa prilično preciznim voltmetrom.

Šta se desi, onda unesite ove linije umjesto 5.0.Isto vrijedi i za napon +3.3V - potrebno ga je izmjeriti na konektoru ploče, jer se u stvari može neznatno razlikovati od 3.3V. Na primjer, ako je "5V" zapravo 4,85V, a "3,3V" je zapravo 3,32V, linije bi izgledale ovako:

volt=(vout*4,85/1024,0-3,32)/0,048;

voltl=(voutl*4.85/1024.0-3.32)/0.048;

U sljedećoj fazi, morat ćete izmjeriti stvarne otpore otpornika R1-R4 i odrediti K koeficijente (označene kao 0,048) za ove linije koristeći formule:

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

Recimo da je K1 = 0,046, a K2 = 0,051, pa pišemo:

volt=(vout*4,85/1024,0-3,32)/0,046;

voltl=(voutl*4,85/1024,0-3,32)/0,051;

Dakle, potrebno je izvršiti promjene u tekstu programa prema stvarnom naponu na izlazu 5-voltnih i 3,3-voltnih stabilizatora ARDUINO UNO ploče, te prema stvarnim koeficijentima podjele otpornih razdjelnika.

Nakon toga, uređaj će raditi ispravno i neće zahtijevati nikakvo podešavanje ili kalibraciju. Prilikom mjerenja negativnog napona na LCD indikatoru, ispred vrijednosti napona u odgovarajućoj liniji će biti znak minus. Prilikom mjerenja pozitivnog napona nema znaka.

Promjenom koeficijenata podjele otpornih razdjelnika (i, shodno tome, “K” koeficijenata), možete napraviti druge granice mjerenja, a ne nužno iste za oba ulaza.

Želio bih da vas podsjetim da je H1 tip 1602A modul displeja s tekućim kristalima povezan na digitalne portove D2-D7 ARDUINO UNO ploče. LCD indikator napaja 5V stabilizator napona koji se nalazi na ploči stabilizatora napona od 5V.

Da bi indikator bio u interakciji sa ARDUINO UNO, potrebno je učitati potprogram u program da ga kontroliše. Takve rutine se nazivaju "biblioteke", a postoji mnogo različitih "biblioteka" u softverskom paketu ARDUINO UNO. Za rad sa LCD indikatorom zasnovanim na HD44780 potrebna vam je biblioteka LiquidCrystal. Stoga program (Tabela 1) počinje učitavanjem ove biblioteke:

Ova linija daje naredbu za učitavanje ove biblioteke u ARDUINO UNO. Zatim morate dodijeliti ARDUINO UNO portove koji će raditi sa LCD indikatorom. Odabrao sam portove D2 do D7. Možete birati druge. Ovi portovi su dodijeljeni linijom:

LiquidCrystal led (2, 3, 4, 5, 6, 7);

Nakon toga, program prelazi na stvarni rad voltmetra.

Karavkin V. RK-06-17.

Literatura: 1. Karavkin V. - Dvostruki voltmetar na ARDUINO UNO. RK-01-17.

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 mnoge igračke 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

  • Prikazuje trenutni napon i struju, odnosno volt-amper metar. U principu, možete odmah odraziti snagu.
  • Brojanje i prikaz akumuliranog kapaciteta. U amper satima i najvjerovatnije u vat satima.
  • Prikaz vremena procesa
  • I, najvjerovatnije, podesivi 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 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šaćemo.

  • Nećemo puno lemiti u ovom projektu. Za osnovu ćemo uzeti gotov Arduino Pro Mini modul, jer su Kinezi spremni da ih isporuče za 1,5 USD u maloprodaji.
  • Uređaj za prikaz će biti 1602 displej - još 1,5 dolara. Imam opciju sa I2C interfejs modulom, ali u ovom projektu nije baš potreban (0,7$).
  • Za razvoj nam je potrebna matična ploča. U mom slučaju, ovo je mali Breadboard za 1 dolar.
  • Naravno, trebat će vam žice i brojni otpornici različitih vrijednosti. Za 1602 displej bez I2C, također morate odabrati kontrast - to se radi s promjenjivim otpornikom od 2 - 20 kOhm.
  • Za implementaciju ampermetra trebat će vam šant. U prvoj aproksimaciji, to bi mogao biti otpornik od 0,1 Ohma, 5 W.
  • Za implementaciju automatskog isključivanja trebat će vam relej s kontaktima dizajniranim za maksimalnu struju uređaja i napon jednak naponu napajanja. Za upravljanje relejem potrebni su vam NPN tranzistor i zaštitna dioda.
  • Uređaj će se napajati iz vanjskog izvora napajanja, očito najmanje 5 V. Ako se napajanje jako razlikuje, tada će biti potreban i integrirani 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 približno 0 - 20V. Ova napomena je važna jer ADC našeg kontrolera ima 10-bitni kapacitet (1024 diskretne vrijednosti), pa će greška biti najmanje 0,02 V (20/1024). Za implementaciju hardvera potreban nam je analogni ulaz kontrolera, razdjelnik napravljen od para otpornika i neka vrsta izlaza (displej u gotovoj verziji, serijski port se može koristiti za otklanjanje grešaka).

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

Dijagram lijevo prikazuje varijantu sa direktnom kontrolom displeja (jednostavno se kontroliše - vidi standardnu ​​skicu LiquidCrystal\HelloWorld). Desno je I2C opcija, koju ću dalje koristiti. I2C vam omogućava uštedu na žicama (kojih u uobičajenoj verziji ima 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 znakova na modulu i podesiti kontrast - da biste to učinili, jednostavno morate prikazati bilo koji tekst nakon inicijalizacije. Kontrast se podešava otpornikom R1, ili sličnim otpornikom I2C modula.

Ulaz je djelitelj 1:19, koji vam omogućava da dobijete maksimalni napon od oko 20V na Vref = 1,1 (obično se kondenzator + zener dioda postavlja paralelno sa ulazom radi zaštite, ali to nam za sada nije važno ). Otpornici imaju raširenost, pa tako i referentni Vref kontrolera, tako da nakon sklapanja trebamo izmjeriti napon (barem napajanje) 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 razdvojiti dovodno i mjerno tlo. Naš ADC ima rezoluciju nešto lošiju od 1mV, što može stvoriti probleme ako je ožičenje neispravno, posebno na matičnoj ploči. Pošto je raspored ploče modula već urađen i ostaje nam samo da izaberemo pinove. Modul ima nekoliko "uzemljenih" pinova, tako da moramo biti sigurni da struja ulazi u modul kroz jedno "uzemljenje", a mjerenje kroz drugo. Zapravo, da bih napravio promjene, uvijek koristim pin za uzemljenje najbliži analognim ulazima.

Za kontrolu I2C koristi se verzija biblioteke LiquidCrystal_I2C - u mom slučaju je naznačen specifičan pinout I2C modula (Kinezi proizvode module sa različitim kontrolama). Također napominjem da I2C u Arduinu zahtijeva upotrebu pinova A4 i A5 - na Pro Mini ploči oni se ne nalaze 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 LCDe_RS5 #Ddefine LCDe_RS 5 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); // Vrijeme ažuriranja očitavanja, ms (200-2000) #define REFRESH_TIME 330 // Analogni ulaz #define PIN_VOLT A0 // Interni referentni napon (odabir) const float VRef = 1.10; // Koeficijent ulaznog otpornog djelitelja (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; // Pretvori u volte (Vrijednost: 0..1023 -> (0..VRef) skalirana pomoću Multa) Volt = InVolt * VoltMult * VRef / 1023; // Izlazni podaci lcd.setCursor (0, 1); lcd.print(Volt); lcd.print("V"); )

Ovaj članak pruža zanimljiv dijagram za one koji vole eksperimentirati i Arduino. Poseduje jednostavan digitalni voltmetar koji može bezbedno da meri DC napon između 0 i 30 V. Sama Arduino ploča se može napajati standardnim napajanjem od 9 V.



Kao što znate, pomoću Arduino analognog ulaza možete mjeriti napon od 0 do 5 V (sa standardnim referentnim naponom od 5 V). Ali ovaj raspon se može proširiti korištenjem djelitelja napona.


Razdjelnik smanjuje izmjereni napon na nivo prihvatljiv za analogni ulaz. Zatim posebno napisani kod izračunava stvarni napon.



Analogni senzor u Arduinu detektuje napon na analognom ulazu i pretvara ga u digitalni format koji mikrokontroler može čitati. Na analogni ulaz A0 povezujemo djelitelj napona formiran od otpora R1 (100K) i R2 (10K). Sa ovim vrijednostima otpora Arduino se može napajati do 55 V, jer je koeficijent podjele u ovom slučaju 11, dakle 55V/11 = 5V. Kako biste bili sigurni da su mjerenja sigurna za ploču, bolje je mjeriti napon u rasponu od 0 do 30 V.



Ako očitanja na ekranu ne odgovaraju potvrđenim očitanjima voltmetra, upotrijebite precizni digitalni multimetar da biste pronašli točne vrijednosti R1 i R2. U ovom slučaju, u kodu ćete morati zamijeniti R1=100000.0 i R2=10000.0 vlastitim vrijednostima. Zatim biste trebali provjeriti napajanje mjerenjem napona na ploči između 5V i GND. Napon može biti 4,95 V. Tada u kodu vout = (vrijednost * 5,0) / 1024,0 trebate zamijeniti 5,0 sa 4,95. Preporučljivo je koristiti precizne otpornike s greškom ne većom od 1%. Zapamtite da napon iznad 55V može oštetiti Arduino ploču!



#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) float R2 = 10000.0; // otpor R2 (10K) int vrijednost = 0; void setup())( pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print("DC VOLTMETER"); ) void loop())( // čitanje analogne vrijednosti vrijednost = analogRead(analogInput) ); vout = (vrijednost * 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); }


Korišteni elementi:


Arduino Uno ploča
Otpornik 100 KOhm
Otpornik 10 KOhm
100 ohm otpornik
Potenciometar 10KOhm
LCD displej 16×2