Search Code

Użycie ACS712 do wyświetlania prądu na LCD1602 lub LCD2004 z I2C

Użycie ACS712 do wyświetlania prądu na LCD1602 lub LCD2004 z I2C

W tym samouczku nauczymy się, jak używać czujnika prądu Allegro ACS712 do pomiaru prądu przemiennego i stałego oraz wyświetlania odczytów na wyświetlaczu LCD1602 lub LCD2004 z wykorzystaniem I2C. Ten projekt jest szczególnie przydatny do monitorowania prądu w różnych zastosowaniach, zapewniając wizualny podgląd danych prądu w czasie rzeczywistym. Po zakończeniu będziesz mieć działający układ, który może dokładnie pokazywać odczyty prądu na wyświetlaczu LCD.

LCD1602-I2C display module with 4 wires

Aby wyjaśnić kwestie dotyczące okablowania i kodu, koniecznie obejrzyj film w podanych znacznikach czasu (na filmie o 00:00).

Omówienie sprzętu

Głównym elementem tego projektu jest czujnik prądu ACS712, który może mierzyć poziomy prądu do 30A. Działa on wykorzystując efekt Halla do przekształcania przepływającego przez niego prądu na proporcjonalne napięcie wyjściowe. To napięcie wyjściowe może być odczytane przez Arduino w celu obliczenia poziomu prądu. Czujnik ma trzy piny do podłączenia: VCC do zasilania, GND do masy oraz OUT do sygnału napięciowego.

Wyświetlacz LCD1602 lub LCD2004 łączy się przez I2C, co umożliwia łatwiejsze okablowanie i sterowanie przy użyciu tylko dwóch pinów danych (SDA i SCL) oprócz zasilania i masy. Dzięki temu można prosto wyświetlać odczyty prądu bez zaśmiecania okablowania wieloma połączeniami.

Szczegóły z karty katalogowej

ProducentAllegro Microsystems
Numer częściACS712ELCTR-30A-T
Napięcie logiczne/IO4,5–5,5 V
Napięcie zasilania5 V
Prąd wyjściowy (na kanał)30 A
Zalecana częstotliwość PWMNie dotyczy
Progi logiczne wejścia0,5 V (napięcie spoczynkowe)
Spadek napięcia / RDS(on) / nasycenie1,2 mΩ
Limity termiczne150 °C maks.
ObudowaTO-220

  • Zapewnij odpowiednie odprowadzanie ciepła dla prądów powyżej 20A.
  • Użyj odpowiedniego przekroju przewodu (12 AWG dla 30A), aby uniknąć przegrzania.
  • Podłącz VCC do 5V i GND do masy, aby zapewnić prawidłowe działanie.
  • Upewnij się, że pin OUT jest podłączony do analogowego pinu wejściowego na Arduino (np. A0).
  • Zwracaj uwagę na różnice w czułości dla różnych modeli ACS712.
  • Użyj kondensatorów do odsprzęgania zgodnie z kartą katalogową.

Instrukcje okablowania

Arduino wiring for Allegro ACS712 current sensor with LCD

Aby podłączyć czujnik prądu ACS712 do Arduino i wyświetlacza LCD, zacznij od połączenia pinu VCC czujnika ACS712 z pinem 5V na Arduino. Następnie podłącz pin GND czujnika ACS712 do pinu masy na Arduino. Pin OUT czujnika ACS712 powinien być podłączony do analogowego pinu A0 na Arduino, gdzie będzie odczytywany sygnał napięciowy.

Dla wyświetlacza LCD1602 lub LCD2004 podłącz pin VCC do pinu 5V, a pin GND do masy. Pin SDA wyświetlacza LCD powinien być podłączony do pinu SDA na Arduino (zwykle A4 na UNO), a pin SCL powinien być podłączony do pinu SCL na Arduino (zwykle A5 na UNO). Upewnij się, że wszystkie połączenia są pewne, aby zapewnić prawidłowe działanie.

Przykłady kodu i omówienie

W kodzie definiujemy analogowy pin wejściowy do odczytu wyjścia czujnika za pomocą #define VIN A0. Pozwala nam to łatwo odwoływać się do pinu, do którego podłączony jest czujnik w całym programie.

#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.

Następnie ustawiamy czułość w zależności od modelu używanego ACS712. Wartości czułości są przechowywane w tablicy, co umożliwia łatwy dostęp na podstawie wybranego modelu.

const int model = 2; // wprowadź numer modelu (0, 1 lub 2 dla 5A, 20A lub 30A)
float sensitivity[] = {0.185, 0.100, 0.066}; // wartości czułości dla każdego modelu

W funkcji setup() inicjalizujemy monitor szeregowy i wyświetlacz LCD. Pozwala nam to przeglądać odczyty prądu zarówno na LCD, jak i przez monitor szeregowy do debugowania.

void setup() {
    Serial.begin(9600); // zainicjalizuj monitor szeregowy
    lcd.begin(); // zainicjalizuj LCD
    lcd.backlight(); // włącz podświetlenie
    lcd.print("Robojax ACS712"); // wyświetl tekst początkowy
    delay(2000); // poczekaj 2 sekundy
}

Funkcja loop() odczytuje napięcie z czujnika, oblicza prąd na podstawie czułości i odpowiednio wyświetla wyniki. Jeśli prąd przekracza określony limit odcięcia, wyświetla wartość; w przeciwnym razie wskazuje, że nie wykryto prądu.

Demonstracja / Czego się spodziewać

Po zasileniu układu wyświetlacz LCD powinien pokazać "Robojax ACS712", a następnie "Current: " wraz z zmierzoną wartością prądu w amperach. Jeśli prąd jest poniżej limitu odcięcia, wyświetlacz pokaże "No Current." Zachowaj ostrożność podczas testowania z wysokimi prądami, ponieważ czujnik może się nagrzać (na filmie o 12:00).

Aby przetestować układ, stopniowo zwiększaj prąd przez ACS712 i obserwuj zmiany na LCD oraz monitorze szeregowym. Upewnij się, że prąd nie przekracza dopuszczalnych limitów czujnika, aby uniknąć uszkodzenia.

Obrazy

Allegro ACS712 DC/AC current sensor with LCD1602/LCD2004 I2C and Arduino code
Allegro ACS712 DC/AC Current sensor with LCD1602/LCD2004 I2C with Arduino Code
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
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
Arduino wiring for Allegro ACS712 current sensor with LCD
Arduino wiring for Allegro ACS712 current sensor with LCD
131-Allegro ACS712 DC/AC current sensor with LCD1602/LCD2004 I2C and Arduino code
Język: C++
/*
 * 
 * Arduino Sketch for Allegro ACS712 Current Sensor with LCD1602/LCD2004 with I2C 
 * This sensor can measure current at a range of up to 30A.
 * The current is measured and displayed on LCD1602 or LCD2004.
 * The current is also displayed on the Serial monitor (click Tools->Serial monitor).
 * It operates with 5V.
 * Please watch the video instruction and explanation for this code.
 * 
 * Written by Ahmad Shamshiri on July 14, 2018 at 07:02 in Ajax, Ontario, Canada
 * for Robojax.com
 * View the video instruction at https://youtu.be/kzXouSzvcp8
 * This code has been downloaded from Robojax.com
 
  * You must watch the following two videos before you can understand this:
 * 1- Introduction to ACS712 Current Sensor: https://www.youtube.com/watch?v=DVp9k3xu9IQ
 * 2- LCD1602 with I2C display: https://www.youtube.com/watch?v=q9YC_GVHy5A
 */
#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  
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


// start of settings for LCD1602 with I2C
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C

void setup() {
    //Robojax.com ACS712 Current Sensor 
    Serial.begin(9600);// initialize serial monitor
    Serial.println("Robojax Tutorial");
    Serial.println("ACS712 Current Sensor");
  // initialize the LCD
  lcd.begin();  
  lcd.backlight();
  lcd.print("Robojax ACS712");
  lcd.setCursor(0,1);
  lcd.print("Demo"); 
  delay(2000);     
}

void loop() {
  

  //Robojax.com ACS712 Current Sensor with LCD1601
  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");
    //start of loop Robojax code ACS712 with LCD1602 and I2C
    lcd.clear();
    lcd.setCursor (0,0); // set to line 1, char 0  
    lcd.print("Robojax ACS712");
    lcd.setCursor (0,1); // set to line 1, char 0  
    lcd.print("Current: ");
    lcd.setCursor (9,1); // go to start of 2nd line
    lcd.print(current);
    lcd.setCursor (14,1); // go to start of 2nd line
    lcd.print("A");
 
  }else{
    Serial.println("No Current");
    lcd.clear();
    lcd.setCursor (0,0); // set to line 1, char 0 
    lcd.print("No Current");     
  }
  delay(500);
}

Rzeczy, których możesz potrzebować

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)

Karta katalogowa (pdf)

Plik Fritzing