
Mõtetesse on jäänud pidama idee robotist, mida tuvastab kui laetud akud on ja vajadusel sõidab end laadima. Siit ka postituse põhjus, et kuidas Arduino UNOga pinget mõõta. Ja kui juba asja kallal oleme, siis mõõdame selle voolu ka juba ära.
Lihtne 5V mõõtmine
Arduino Uno suudab ise mõõta toiteallika kuni 5V (max) pinget. Ühendades positiivse klemmi mõne analoogsisendiga. Näiteks A0.
Analoogsisend teisendab pinge 0-5V osadeks 0-1023. See tähendab, et 5V/1023 teeb ühe ühiku suuruseks 0,00489V. Seega saame võtta mõõdetud väärtuse ja korrutada lõitud suurusega.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* Lihtne voltmeeter */ int moot = 0; float volt = 0; void setup(){ pinMode(A0, INPUT); Serial.begin(9600); } void loop(){ moot = analogRead(A0); volt = (moot * 5.0 ) / 1024.0; Serial.print("M66t: " ); Serial.print(moot); Serial.print("\t Voldid = "); Serial.println(volt,3); delay(500); } |
Mõõtes testriga üle, siis antud meetod valetab 50mV väiksemaks.
Mõõtmistulemuste parandamine ADS1115 abil
Kasutame analoog-digitaal muundurit ADS1115, et näha, kas mõõtmistulemused muutuvad paremaks.
Eelpool vaatasime, et analoogsignaal jagatakse 1024 tükiks. See tuleb sellest, et port on 10-bitine ning 210=1024. Antud seade ADS1115 on aga 16-bitine, mis tähendab, et saame analoogsignaali tükeldada väiksemateks tükkideks (resolutsioon). Tegelikult kasutatakse ühte bitti arvu kuvamiseks positiivsena või negatiivsena. Seega on saame kokku 215=32768 mõõtepunkti.
Ühendame mooduli Arduinoga:
V –> 5V
G –> GND
SCL –> SCL
SDA –> SDA
ADDR –> GND
A0 –> aku/patarei +
A1 –> aku/patarei –
Kasutame arvutamiseks Adafruit ADS1X15 Library’t, mille leiad siit: https://github.com/adafruit/Adafruit_ADS1X15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <Wire.h> #include <Adafruit_ADS1015.h> Adafruit_ADS1115 ads; int16_t m66t; //vaikimisi on ADS1115 mõõteulatus 6.144volti, mis teeb biti väärtuseks 0.1875mV float scalefactor = 0.1875F; float volt = 0.0; void setup(void){ Serial.begin(9600); ads.begin(); } void loop(void){ m66t = ads.readADC_Differential_0_1(); volt = (m66t * scalefactor)/1000.0; Serial.print("M66t: "); Serial.print(m66t); Serial.print("\tVoldid: "); Serial.println(volt, 6); Serial.println(); delay(1000); } |
Antud juhul on tulemus juba palju ligilähedasem testri omale.
Voolu mõõtmine MAX471 mooduliga
Kasutame voolu mõõtmiseks MAX471 kiviga varustatud moodulit. See töötab 3-36V ja mõõdab kuni 3A voolu. Väljundis, ehk mõõtmistulemuseks, antakse pinge, mis vastab voolu väärtusele. Ehk kui vool on 1A, siis väljundis on 1V.
Voolu mõõtmiseks peame selle külge ühendama tarbija:
Sisend
RS+ –> aku +
RS- –> tarbija +
GND –> aku ja tarbija –
Väljund
GND –> Arduino GND
OUT –> Arduino GND
NB! Mootorit kasutades on hea ühendada klemmid omavahel 0,1 µF kondensaatoriga.
Ja mõõtmise kood on samasugune, nagu alguses pinge mõõtmisel kasutasime. Tegelikult ongi ju pinge mõõtmine :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* Lihtne ampmeeter */ int m66t= 0; float vool = 0; void setup(){ pinMode(A0, INPUT); Serial.begin(9600); } void loop(){ m66t = analogRead(A0); Current = (m66t * 5.0 )/ 1024.0; Serial.print("M66t = "); Serial.print(vool,3); Serial.println(" A"); delay(1500); } |
Voolu ja pinge mõõtmine INA219 abil
Viimaseks on mul jäetud moodul INA219, mis suudab mõõta nii voolu (3,2A) kui ka pinget (26V). Ja kui neid kahte saab mõõta, siis leiame ka võimsuse, mille lagi on P=UI=83,2W.
Ühendamine on alguses kenasti arusaadav:
Vcc –> Arduino +5V
Gnd –> Gnd
Scl –> SCL
Sda –> Sda
Vin+ ja Vin- ühendatakse koormus, mille pinget või voolu soovitakse mõõta ning toiteallikas. Vin+ tuleb ühendada toiteallikas ning Vin- tarbija pluss-klemmile. Kõigi maandused on samad.
Kood jaoks pead alla laadima INA219 library: https://github.com/adafruit/Adafruit_INA219.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <Wire.h> #include <Adafruit_INA219.h> Adafruit_INA219 sensor219; void setup(void){ Serial.begin(9600); sensor219.begin(); } void loop(void){ float pinge = 0; float vool = 0; // mA float voimsus = 0; pinge = sensor219.getBusVoltage_V(); vool = sensor219.getCurrent_mA(); voimsus = pinge * (vool/1000); Serial.print("Pinge: "); Serial.print(pinge); Serial.println(" V"); Serial.print("Vool: "); Serial.print(vool); Serial.println(" mA"); Serial.print("V6imsus: "); Serial.print(voimsus); Serial.println(" W"); Serial.println(""); delay(2000); } |
Sama moodulit kasutame hiljem ka päikeseenergia arvutamisel.
0 responses on "Mõõdame pinget ja voolu Arduinoga"