Szukaj kodu

Używanie czujnika prądu stałego/przemiennego Allegro ACS712 z kodem Arduino

Używanie czujnika prądu stałego/przemiennego Allegro ACS712 z kodem Arduino

W tym samouczku nauczymy się, jak używać czujnika prądu Allegro ACS712 do pomiaru prądu przemiennego i stałego z Arduino. Czujnik ACS712 generuje napięcie proporcjonalne do prądu przepływającego przez niego, co pozwala nam łatwo odczytywać i wyświetlać wartości prądu na monitorze szeregowym Arduino. Ten projekt jest idealny dla osób chcących monitorować prąd w różnych zastosowaniach, takich jak zasilacze czy systemy bateryjne.

Zbudujemy prosty obwód łączący czujnik ACS712 z Arduino, a następnie napiszemy program do odczytu wyjścia czujnika. Oczekiwanym rezultatem są odczyty prądu w czasie rzeczywistym wyświetlane na monitorze szeregowym. Aby wyjaśnić implementację, koniecznie sprawdź wideo (na wideo o 02:00).

Wyjaśnienie Sprzętu

Czujnik prądu Allegro ACS712 to kompaktowy moduł, który może mierzyć prądy do 30A, w zależności od wybranej wersji. Ma trzy piny: VCC do zasilania, GND do masy oraz pin wyjściowy, który dostarcza napięcie odpowiadające mierzonemu prądowi. Czujnik wykorzystuje zasadę efektu Halla, gdzie prąd przepływający przez przewodnik generuje pole magnetyczne. To pole jest wykrywane i przekształcane na napięcie, które następnie jest wysyłane do Arduino.

Moduł jest dostępny w różnych zakresach prądowych (5A, 20A i 30A) i generuje poziomy napięcia odpowiednio 185 mV/A, 100 mV/A i 66 mV/A. Oznacza to, że dla każdego ampera prądu przepływającego przez czujnik otrzymasz odpowiednie napięcie wyjściowe, które możesz odczytać i przetworzyć. Ta cecha czyni go wszechstronnym do różnych zastosowań.

Szczegóły z Karty Katalogowej

ProducentAllegro Microsystems
Numer częściACS712ELCTR-30A-T
Napięcie logiki/IO4,5–5,5 V
Napięcie zasilania5 V
Prąd wyjściowy (na kanał)30 A maks.
Zalecana częstotliwość PWMN/D
Progi logiczne wejściaN/D
Spadek napięcia / RDS(on) / nasycenie1,2 mΩ
Limity termiczne150 °C maks.
ObudowaTO-220
Uwagi / wariantyDostępny w wersjach 5A, 20A i 30A

  • Zapewnij prawidłowe okablowanie, aby uniknąć zwarć.
  • Użyj przewodu o odpowiednim przekroju dla wartości prądu (12 AWG dla 30A).
  • Monitoruj temperaturę modułu podczas pracy.
  • Rozważ dodanie radiatora do zastosowań z wyższym prądem.
  • Skalibruj wyjście czujnika zgodnie z konkretnym zastosowaniem.

Instrukcje Okablowania

Arduino wiring for Allegro ACS712 current sensor

Aby podłączyć czujnik Allegro ACS712 do Arduino, zacznij od połączenia pinu VCC czujnika ACS712 z pinem 5V na Arduino. Następnie podłącz pin GND czujnika do jednego z pinów GND na Arduino. Pin wyjściowy ACS712 należy podłączyć do analogowego pinu wejściowego A0 na Arduino.

Do pomiaru prądu podłącz obciążenie szeregowo z czujnikiem. Oznacza to, że dodatni przewód ze źródła zasilania powinien wejść do jednego z zacisków wejściowych czujnika prądu, podczas gdy drugi zacisk łączy się z obciążeniem. Druga strona obciążenia powinna wracać do źródła zasilania, zamykając obwód. Upewnij się, że używasz przewodu o odpowiednim przekroju dla mierzonego prądu, aby uniknąć przegrzania.

Przykłady Kodów i Omówienie

Poniższy fragment kodu inicjalizuje pin analogowy i konfiguruje monitor szeregowy:

#define VIN A0 // zdefiniuj pin Arduino A0 jako wejście napięciowe (V in)
const float VCC = 5.0; // napięcie zasilania wynosi od 4,5 do 5,5V. Zwykle 5V.

Tutaj definiujemy VIN jako analogowy pin wejściowy, do którego podłączone jest wyjście czujnika. Ustawiamy również napięcie zasilania VCC na 5V.

W funkcji pętli odczytujemy napięcie z czujnika ACS712 i obliczamy prąd:

float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Odczytaj napięcie z czujnika
float current = voltage / sensitivity[model]; // Oblicz prąd na podstawie czułości

Tutaj odczytujemy surowe napięcie z czujnika i przeliczamy je na rzeczywisty prąd za pomocą tablicy czułości w zależności od modelu używanego czujnika.

Na koniec wyświetlamy odczyty prądu na monitorze szeregowym:

if (abs(current) > cutOffLimit) {
    Serial.print("V: ");
    Serial.print(voltage, 3); // wyświetl napięcie z 3 miejscami po przecinku
    Serial.print("V, I: ");
    Serial.print(current, 2); // wyświetl prąd z 2 miejscami po przecinku
    Serial.println("A");
} else {
    Serial.println("Brak prądu");
}

Ta sekcja sprawdza, czy prąd przekracza zdefiniowany limit odcięcia, i wyświetla odczyty napięcia i prądu na monitorze szeregowym. Jeśli prąd jest poniżej progu, wypisuje "Brak prądu".

Pełny kod znajdziesz w kodzie załadowanym poniżej artykułu.

Demonstracja / Czego Się Spodziewać

Po uruchomieniu kodu i zasileniu obwodu powinieneś zobaczyć odczyty prądu wyświetlane na monitorze szeregowym. Podczas regulacji obciążenia odczyty powinny się odpowiednio zmieniać, pod warunkiem że prąd przekracza limit odcięcia. Zachowaj ostrożność co do temperatury czujnika, zwłaszcza podczas pracy w pobliżu jego maksymalnych wartości znamionowych.

Obrazy

Arduino wiring for Allegro ACS712 current sensor
Arduino wiring for Allegro ACS712 current sensor
ACS712_in_series_with_load
ACS712_in_series_with_load
allegro_ACS712_module-1
allegro_ACS712_module-1
allegro_ACS712_module-2
allegro_ACS712_module-2
allegro_ACS712_module-4
allegro_ACS712_module-4
allegro_ACS712_module-0
allegro_ACS712_module-0
130-Allegro ACS712 DC/AC current sensor with Arduino code
Język: C++
/*
 * 
 * Arduino Sketch for Allegro ACS712 Current Sensor 
 * This sensor can measure current at a range of up to 30A.
 * It operates with 5V.
 * Please watch the video instruction and explanation for this code.
 * 
 * Written by Ahmad Shamshiri on Sunday, June 17, 2018 at 22:06 in Ajax, Ontario, Canada
 * for Robojax.com
 * View the video instruction at https://youtu.be/DVp9k3xu9IQ
 * This code has been downloaded from Robojax.com
 */
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC   = 5.0;// supply voltage is from 4.5 to 5.5V. Normally 5V.
const int model = 2;   // enter the model number (see below)

float cutOffLimit = 1.01;// set the current which, below that value, doesn't matter. Or set 0.5

/*
          "ACS712ELCTR-05B-T",// for model use 0
          "ACS712ELCTR-20A-T",// for model use 1
          "ACS712ELCTR-30A-T"// for model use 2  
The sensitivity array is holding the sensitivity of the ACS712
current sensors. Do not change. All values are from page 5 of the data sheet          
*/
float sensitivity[] ={
          0.185,// for ACS712ELCTR-05B-T
          0.100,// for ACS712ELCTR-20A-T
          0.066// for ACS712ELCTR-30A-T
     
         }; 


const float QOV =   0.5 * VCC;// set quiescent Output voltage of 0.5V
float voltage;// internal variable for voltage

void setup() {
    //Robojax.com ACS712 Current Sensor 
    Serial.begin(9600);// initialize serial monitor
    Serial.println("Robojax Tutorial");
    Serial.println("ACS712 Current Sensor");
}

void loop() {
  

  //Robojax.com ACS712 Current Sensor 
  float voltage_raw =   (5.0 / 1023.0)* analogRead(VIN);// Read the voltage from sensor
  voltage =  voltage_raw - QOV + 0.012 ;// 0.000 is a value to make voltage zero when there is no current
  float current = voltage / sensitivity[model];
 
  if(abs(current) > cutOffLimit ){
    Serial.print("V: ");
    Serial.print(voltage,3);// print voltage with 3 decimal places
    Serial.print("V, I: ");
    Serial.print(current,2); // print the current with 2 decimal places
    Serial.println("A");
  }else{
    Serial.println("No Current");
  }
  delay(500);
}

Zasoby i odniesienia

Brak zasobów.

Pliki📁

Karta katalogowa (pdf)

Plik Fritzing