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.


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
| Producent | Allegro Microsystems |
|---|---|
| Numer części | ACS712ELCTR-30A-T |
| Napięcie logiczne/IO | 4,5–5,5 V |
| Napięcie zasilania | 5 V |
| Prąd wyjściowy (na kanał) | 30 A |
| Zalecana częstotliwość PWM | Nie dotyczy |
| Progi logiczne wejścia | 0,5 V (napięcie spoczynkowe) |
| Spadek napięcia / RDS(on) / nasycenie | 1,2 mΩ |
| Limity termiczne | 150 °C maks. |
| Obudowa | TO-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

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
/*
*
* 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ć
-
Amazon
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AllegroPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
Zewnętrzny
Pliki📁
Biblioteki Arduino (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
Karta katalogowa (pdf)
-
Allegro ACS712 AC/DC 4A, 20A, 30A Current Sensor Datasheet
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
Plik Fritzing
-
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB -
Allegre ACS712 Current Sensor
Allegreo ACS712 Current Sensor.fzpz0.03 MB