Sử dụng ACS712 để hiển thị dòng điện trên LCD1602 hoặc LCD2004 với I2C
Trong hướng dẫn này, chúng ta sẽ học cách sử dụng cảm biến dòng điện Allegro ACS712 để đo cả dòng điện xoay chiều (AC) và một chiều (DC) và hiển thị số đọc trên LCD1602 hoặc LCD2004 sử dụng I2C. Dự án này đặc biệt hữu ích để giám sát dòng điện trong nhiều ứng dụng khác nhau, cung cấp màn hình hiển thị trực quan dữ liệu dòng điện theo thời gian thực. Đến cuối bài, bạn sẽ có một thiết lập hoạt động có thể hiển thị chính xác số đọc dòng điện trên màn hình LCD.


Để làm rõ về cách đấu dây và mã, hãy xem video tại các mốc thời gian được chỉ định (trong video tại 00:00).
Phần cứng được giải thích
Thành phần chính của dự án này là cảm biến dòng điện ACS712, có thể đo mức dòng điện lên đến 30A. Nó hoạt động bằng cách sử dụng hiệu ứng Hall để chuyển đổi dòng điện chạy qua nó thành điện áp đầu ra tỷ lệ thuận. Điện áp đầu ra này có thể được đọc bởi Arduino để tính toán mức dòng điện. Cảm biến có ba chân để kết nối: VCC cho nguồn, GND cho đất và OUT cho tín hiệu điện áp.
Màn hình LCD1602 hoặc LCD2004 kết nối qua I2C, cho phép đấu dây và điều khiển dễ dàng hơn chỉ bằng hai chân dữ liệu (SDA và SCL) ngoài nguồn và đất. Điều này giúp hiển thị số đọc dòng điện một cách đơn giản mà không làm rối mắt việc đấu dây với nhiều kết nối.
Chi tiết từ bảng dữ liệu
| Nhà sản xuất | Allegro Microsystems |
|---|---|
| Số bộ phận | ACS712ELCTR-30A-T |
| Điện áp logic/IO | 4,5–5,5 V |
| Điện áp cung cấp | 5 V |
| Dòng điện đầu ra (mỗi kênh) | 30 A |
| Hướng dẫn tần số PWM | Không áp dụng |
| Ngưỡng logic đầu vào | 0,5 V (đầu ra tĩnh) |
| Sụt áp / RDS(on) / bão hòa | 1,2 mΩ |
| Giới hạn nhiệt | 150 °C tối đa |
| Kiểu đóng gói | TO-220 |
- Đảm bảo tản nhiệt thích hợp cho dòng điện trên 20A.
- Sử dụng cỡ dây phù hợp (12 AWG cho 30A) để tránh quá nhiệt.
- Kết nối VCC với 5V và GND với đất để hoạt động đúng.
- Đảm bảo chân OUT được kết nối với chân đầu vào analog trên Arduino (ví dụ: A0).
- Lưu ý sự khác biệt về độ nhạy của các mẫu ACS712 khác nhau.
- Sử dụng tụ điện để tách rời như được chỉ định trong bảng dữ liệu.
Hướng dẫn đấu dây

Để đấu dây cảm biến dòng điện ACS712 với Arduino và LCD, bắt đầu bằng cách kết nối chân VCC của ACS712 với chân 5V trên Arduino. Tiếp theo, kết nối chân GND của ACS712 với chân đất trên Arduino. Chân OUT của ACS712 nên được kết nối với chân analog A0 trên Arduino, nơi tín hiệu điện áp sẽ được đọc.
Đối với LCD1602 hoặc LCD2004, kết nối chân VCC với chân 5V và chân GND với đất. Chân SDA của LCD nên được kết nối với chân SDA trên Arduino (thường là A4 trên UNO), và chân SCL nên được kết nối với chân SCL trên Arduino (thường là A5 trên UNO). Đảm bảo tất cả các kết nối đều chắc chắn để đảm bảo hoạt động đúng.
Ví dụ mã và hướng dẫn chi tiết
Trong mã, chúng ta định nghĩa chân đầu vào analog để đọc đầu ra cảm biến với #define VIN A0. Điều này cho phép chúng ta dễ dàng tham chiếu đến chân nơi cảm biến được kết nối trong suốt chương trình.
#define VIN A0 // định nghĩa chân A0 của Arduino là đầu vào điện áp (V in)
const float VCC = 5.0; // điện áp cung cấp từ 4,5 đến 5,5V. Thông thường là 5V.
Tiếp theo, chúng ta thiết lập độ nhạy dựa trên mẫu ACS712 đang sử dụng. Các giá trị độ nhạy được lưu trong một mảng, cho phép truy cập dễ dàng dựa trên lựa chọn mẫu.

const int model = 2; // nhập số mẫu (0, 1 hoặc 2 cho 5A, 20A hoặc 30A)
float sensitivity[] = {0.185, 0.100, 0.066}; // giá trị độ nhạy cho mỗi mẫu
Trong hàm setup(), chúng ta khởi tạo màn hình nối tiếp và màn hình LCD. Điều này cho phép chúng ta xem số đọc dòng điện cả trên LCD và qua màn hình nối tiếp để gỡ lỗi.
void setup() {
Serial.begin(9600); // khởi tạo màn hình nối tiếp
lcd.begin(); // khởi tạo LCD
lcd.backlight(); // bật đèn nền
lcd.print("Robojax ACS712"); // hiển thị văn bản ban đầu
delay(2000); // chờ 2 giây
}
Hàm loop() đọc điện áp từ cảm biến, tính toán dòng điện dựa trên độ nhạy và hiển thị kết quả tương ứng. Nếu dòng điện vượt quá giới hạn cắt được chỉ định, nó hiển thị giá trị; nếu không, nó chỉ ra rằng không có dòng điện được phát hiện.
Trình diễn / Điều gì sẽ xảy ra
Khi cấp nguồn cho mạch, LCD sẽ hiển thị "Robojax ACS712" tiếp theo là "Current: " cùng với giá trị dòng điện đo được tính bằng ampe. Nếu dòng điện dưới giới hạn cắt, màn hình sẽ hiển thị "No Current." Hãy cẩn thận khi thử nghiệm với dòng điện cao, vì cảm biến có thể nóng lên (trong video tại 12:00).
Để kiểm tra thiết lập, tăng dần dòng điện qua ACS712 và quan sát các thay đổi trên LCD và màn hình nối tiếp. Đảm bảo rằng dòng điện không vượt quá giới hạn định mức của cảm biến để tránh hư hỏng.
Hình ảnh
/*
*
* 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);
}
Nghĩ bạn có thể cần
-
Amazon
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Tài nguyên & tài liệu tham khảo
-
Bên ngoài
Tập tin📁
Thư viện Arduino (tệp nén)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
Bảng dữ liệu (pdf)
-
Allegro ACS712 AC/DC 4A, 20A, 30A Current Sensor Datasheet
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
Tập tin Fritzing
-
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB -
Allegre ACS712 Current Sensor
Allegreo ACS712 Current Sensor.fzpz0.03 MB