Pomiar Napięcia za pomocą Arduino

By | Czerwiec 20, 2020

Słów kilka na temat arduino i dzielnika napięcia. Prosty przykład dla nie zaawansowanych.

Chcąc wykonać pomiar napięcia za pomocą arduino należy zadbać by napięcie zasilające układ było jak najbardziej stabilne. Jeśli jednak nie mamy takiej  możliwości możemy użyć wewnętrznego napięcia odniesienia dla komparatora. Napięcie które będziemy mierzyć musimy obniżyć za pomocą dzielnika napięć na dwóch rezystorach w taki sposób by maksymalna jego wartość mieściła się w zakresie do 1,1V.

Ok więc zróbmy prosty przykład. Układ zasilam z akumulatora 18650. Napięcie z baterii za pomocą dwóch oporników podaję na wejście A0 arduino, jak na schemacie poniżej. Kondensator w tym układzie ma za zadanie wygładzać odczyt.

Napięcie dla ogniwa 18650 wynosi maksymalnie 4,2V bateria jest w pełni naładowana. Musimy dobrać wartość R1 i R2 w taki sposób by napięcie wejściowe zostało zmniejszone do poziomu mniejsze lub równe 1,1V.
Z poniższego wzoru wyliczymy napięcie wyjściowe dzielnika podstawiamy do Uwe = 7,4 i dobieramy wartości R1 i R2 by ich suma była powyżej 1MOhm (tak by prąd płynący między akumulatorem a masą układu był jak najmniejszy, nie chcemy rozładować akumulatora tylko dlatego że sprawdzamy jego napięcie), a wartość Uwy była mniejsza lub równa 1,1V

Możemy też przeliczyć to nieco inaczej, czyli wiemy że zakres pomiarowy wejścia na arduino skonfigurowaliśmy do napięcia 1,1V więc używając poniższego wzoru możemy obliczyć jakie maksymalne napięcie zmierzy nasz układ wyposażony w dzielnik napięcia.

Po obliczeniu wartości rezystorów podłączamy arduino do komputera, podłączamy ogniwo 18650 do arduino poprzez dzielnik napięcia.

I po wgraniu prostego programu możemy zobaczyć co się dzieje.

void setup(){
Serial.begin(115200);
pinMode(A0,INPUT);
}

void loop(){
int adc_val = analogRead(A0);
Serial.println(adc_val);
delay(1000);
}

Po uruchomieniu programu, dzięki funkcji „analogRead” powinniśmy zobaczyć odczyt wartości z przetwornika ADC do którego podłączony jest akumulator.

Oczywiście jest to wartość z przetwornika analogowo cyfrowego. Procesor Atmega 328, który jest sercem arduino jest wyposażony w przetwornik 10bitowy oznacza to że każda wartość napięcia jaka tam trafia jest przedstawiana w postaci liczby w zakresie od 0 do 1023.
A to dlatego że za pomocą 10 bitów możemy zapisać 1024 kombinacji liczbowych (2^10 = 1024, zakres 0 – 1023).

Kolejny krok to kalibracja pomiaru, mierzymy za pomocą omomierza nasze rezystory, gdyż każdy zawsze posiada jakąś odchyłkę od parametru nominalnego. Odchyłki te są zależne od wielu czynników, a zwłaszcza też od temperatury otoczenia.

Moje rezystory mają wartośći:
R1 = 1756KOhm
R2 = 471KOhm

Korzystając ze wzorów powyżej wyliczam sobie jakie maksymalne napięcie wejściowe jestem w stanie zmierzyć

Uwe-max = 1,1 * (R1 + R2) / R2
Uwe-max = 1,1 * (1756 + 471) / 471
Uwe-max = 5,2010615711

Teraz mogę przeliczyć jaką wartość napięcia przypada na jeden bit przetwornika

Ubit = Uwe-max / Ubit-max
Ubit = 5,2010615711 / 1023
Ubit = 0,0050841267

Teraz wystarczy w programie arduino na bieżąco przeliczać wartość z przetwornika ADC na napięcie, poniżej zmodyfikowany program.

void setup(){
Serial.begin(115200);
pinMode(A0,INPUT);
}

void loop(){
int adc_val = analogRead(A0);
float Ubat = adc_val * 0.0050841267;
Serial.print(adc_val);
Serial.print(" - ");
Serial.print(Ubat);
Serial.println("V");
delay(1000);
}

Po uruchomieniu programu zobaczymy coś takiego jak poniżej.

Prawda że proste?

R.