Pomiar prądu DC z Arduino
Istnieje wiele powodów, dla których musimy mierzyć prąd DC za pomocą Arduino. Możemy sprawdzić, ile bieżących Arduino i inne urządzenia peryferyjne używają lub mierzyć prąd ładowania i rozładowywania akumulatora.
Większość płyt i mikrokontrolerów Arduino ma wbudowane ADC, więc najpierw musimy zmierzyć napięcie DC, które można odczytać za pomocą analogowych wejściowych Arduino, później za pomocą Współczynnik skali Podczas programowania konwertujemy tę wartość napięcia ADC na prąd.
Do pomiaru prądu DC za pomocą Arduino różne czujniki i moduły są dostępne na rynku. Jednym z najpopularniejszych i niedrogich czujników dostępnych na rynku jest ACS712 czujnik efektu Hall.
Czujnik efektu ACS712 Halla
Obydwa AC I DC Prąd można zmierzyć za pomocą czujnika efektu Halla ACS712. Dzisiaj skupimy się tylko na pomiarze prądu DC. ACS712 działa ponad 5 V, generuje napięcie wyjściowe w Vout pin czujnika proporcjonalnego do wartości mierzonej prądu.
Trzy różne odmiany tego czujnika są dostępne zgodnie z bieżącą wartością, którą mierzy:
ACS712-5A: Czujnik 5A może mierzyć prąd między -5A do 5A. 185 mV to współczynnik skali lub czułość czujnika, który pokazuje 185mv zmiana napięcia początkowego reprezentuje zmianę wejścia prądu 1A.
ACS712-20A: Czujnik 20A może mierzyć prąd między -20A do 20A. 100mv to współczynnik skali lub czułość czujnika, który pokazuje 100mv zmiana napięcia początkowego reprezentuje zmianę wejścia prądu 1A.
ACS712-30A: Czujnik 30A może mierzyć prąd między -30a do 30A. 66MV to współczynnik skali lub czułość czujnika, który pokazuje 66MV zmiana napięcia początkowego reprezentuje zmianę wejścia prądu 1A.
Czujnik wychodzi 2.5 V Gdy nie wykryto prądu, napięcie poniżej reprezentuje prąd ujemny, podczas gdy napięcie powyżej 2.5v pokazuje dodatni prąd.
Współczynnik skali:
5a | 20a | 30a |
---|---|---|
185mv/amp | 100mv/amp | 66mv/amp |
Wzór do pomiaru prądu
Aby sprawdzić współczynnik skali, spójrz na układ ACS712 na czujniku efektu Hall, jak pokazano poniżej na schemacie. Tutaj w naszym przypadku będziemy używać wersji 20A.
Schemat obwodu
Upewnij się, że podczas łączenia czujników efektu Halla z obciążeniem zawsze łączą się szeregowo, ponieważ prąd pozostaje stały w szeregu. Łączenie czujnika równolegle może uszkodzić płytę Arduino lub ACS712. Połącz czujnik Poniżej wspomniany konfiguracja:
PIN Arduino | Pin ACS712 |
---|---|
5v | VCC |
GND | GND |
Pin analogowy | Na zewnątrz |
Symulacja
Kod
/*Zdefiniowane dwie zmienne dla czujnika vout i zmierzony prąd obciążenia*/
Double SensorVout = 0;
podwójny motorCurrent = 0;
/*Stałe dla współczynnika skali w v*/
/*Dla czujnika 5A Weź scala_factor = 0.185;*/
const Double Scale_Factor = 0.1; /*Dla czujnika 20A*/
/*Dla czujnika 30A Weź scale_factor = 0.066;*/
/* Zmienne zdefiniowane w celu przekonwertowania danych analogowych na cyfrowe, ponieważ Arduino ma 10 -bitowe ADC, więc maksymalne możliwe wartości to 1024*/
/ * Napięcie odniesienia wynosi 5 V */
/* Domyślna wartość napięcia dla czujnika to połowa napięcia odniesienia, które wynosi 2.5v*/
const double refvolt = 5.00;
const Double AdcreSolution = 1024;
podwójne adcvalue = refvolt/adcresolution;
Double DefaultSensorVout = refvolt/2;
void setup ()
Seryjny.rozpocząć (9600);
void Loop ()
/* 1000 odczytów, aby uzyskać większą precyzję*/
dla (int i = 0; i < 1000; i++)
Sensorvout = (sensorvout + (adcValue * analogread (a0)));
opóźnienie (1);
// vout w MV
Sensorvout = sensorvout /1000;
/* Za pomocą bieżącej wzoru przekonwertuj vout z czujnika na prąd obciążenia*/
MotorCurrent = (sensorvout - defaultSensorVout)/ scale_factor;
Seryjny.print („sensorvout =”); /*Wydrukuje czujnik vout na monitor szeregowych*/
Seryjny.druk (sensorvout, 2);
Seryjny.druk („wolty”);
Seryjny.print („\ t MotorCurrent =”); /*Wydrukuje zmierzony prąd DC*/
Seryjny.wydruku (prąd motoryzacji, 2);
Seryjny.println („amps”);
opóźnienie (1000); /*Opóźnienie 1 sekund jest podane*/
Tutaj w powyższym kodzie inicjalizowane są dwie zmienne Sensorvout I Prąd samochodowy, Obie te zmienne będą przechowywać wartości odpowiednio jako napięcie i prąd. Nowa skala jest ustawiona na 0.1 V (100 mV) zgodnie z czujnikiem 20A-ACS712. Napięcie odniesienia jest ustawione na 5 V, a w celu przekonwertowania wejścia analogowego na rozdzielczość ADC cyfrową jest inicjowana na 1024. Ponieważ Arduino ma 10-bitowe ADC, co oznacza, że maksimum, które może przechowywać, to 1024 wartości.
Jak wyjaśniono powyżej Współczynnik skali odbędzie się odczyt w zależności od całkowitej odchylonej napięcia od 2.5v. Więc 0.1 V Zmiana czujnika Vout będzie równa 1a prądu wejściowego.
Następnie w pętla sekcja A dla pętli jest inicjowany w celu uzyskania 1000 odczytów, aby uzyskać dokładniejszą wartość prądu wyjściowego. Czujnik Vout jest podzielony przez 1000, aby przekonwertować wartości na MV. Za pomocą wzoru prądu silnika ustaliliśmy nasz prąd obciążenia. Ostatnia sekcja kodu wydrukuje zarówno napięcia czujnika, jak i mierzone prąd.
Wyjście
Tutaj w czujniku wyjściowym vout jest mniejszy niż 2.5 V, więc prąd silnika mierzony wyjście jest ujemny. Prąd wyjściowy jest ujemny z powodu odwrotnej polaryzacji silnika prądu stałego.
Wniosek
Pomiar prądu prądu DC za pomocą Arduino wymagał jakiegoś zewnętrznego czujnika lub modułu. Jednym z powszechnie stosowanych czujników efektu Halla jest ACS712, który ma nie tylko duży zakres pomiaru prądu dla prądu DC, a także prądu prądu przemiennego. Korzystając z tego czujnika, zmierzyliśmy prąd stał.