Cari Kode

Menggunakan ACS712 untuk Menampilkan Arus pada LCD1602 atau LCD2004 dengan I2C

Menggunakan ACS712 untuk Menampilkan Arus pada LCD1602 atau LCD2004 dengan I2C

Dalam tutorial ini, kita akan mempelajari cara menggunakan sensor arus Allegro ACS712 untuk mengukur arus AC dan DC serta menampilkan pembacaannya pada LCD1602 atau LCD2004 menggunakan I2C. Proyek ini sangat berguna untuk memantau arus dalam berbagai aplikasi, memberikan tampilan visual data arus secara real-time. Pada akhirnya, Anda akan memiliki rangkaian yang berfungsi untuk menampilkan pembacaan arus secara akurat pada LCD.

LCD1602-I2C display module with 4 wires

Untuk klarifikasi mengenai kabel dan kode, pastikan untuk menonton video pada timestamp yang ditentukan (di video pada 00:00).

Penjelasan Perangkat Keras

Komponen utama dari proyek ini adalah sensor arus ACS712, yang dapat mengukur tingkat arus hingga 30A. Sensor ini bekerja dengan memanfaatkan efek Hall untuk mengubah arus yang mengalir melaluinya menjadi keluaran tegangan yang proporsional. Keluaran tegangan ini dapat dibaca oleh Arduino untuk menghitung tingkat arus. Sensor ini memiliki tiga pin untuk koneksi: VCC untuk daya, GND untuk ground, dan OUT untuk sinyal tegangan.

Layar LCD1602 atau LCD2004 terhubung melalui I2C, yang memungkinkan pengkabelan dan kontrol yang lebih mudah hanya dengan menggunakan dua pin data (SDA dan SCL) selain daya dan ground. Ini membuatnya sederhana untuk menampilkan pembacaan arus tanpa mengacaukan kabel dengan banyak koneksi.

Detail Datasheet

ProdusenAllegro Microsystems
Nomor bagianACS712ELCTR-30A-T
Tegangan logika/IO4,5–5,5 V
Tegangan suplai5 V
Arus keluaran (per saluran)30 A
Panduan frekuensi PWMT/A
Ambang logika masukan0,5 V (keluaran diam)
Penurunan tegangan / RDS(on) / saturasi1,2 mΩ
Batas termal150 °C maks
KemasanTO-220

  • Pastikan pembuangan panas yang baik untuk arus di atas 20A.
  • Gunakan ukuran kabel yang sesuai (12 AWG untuk 30A) untuk menghindari panas berlebih.
  • Hubungkan VCC ke 5V dan GND ke ground untuk pengoperasian yang benar.
  • Pastikan pin OUT terhubung ke pin input analog pada Arduino (misalnya, A0).
  • Perhatikan perbedaan sensitivitas untuk berbagai model ACS712.
  • Gunakan kapasitor untuk decoupling sesuai yang ditentukan dalam datasheet.

Instruksi Pengkabelan

Arduino wiring for Allegro ACS712 current sensor with LCD

Untuk menghubungkan sensor arus ACS712 dengan Arduino dan LCD, mulailah dengan menghubungkan pin VCC dari ACS712 ke pin 5V pada Arduino. Selanjutnya, hubungkan pin GND dari ACS712 ke pin ground pada Arduino. Pin OUT dari ACS712 harus dihubungkan ke pin analog A0 pada Arduino, di mana sinyal tegangan akan dibaca.

Untuk LCD1602 atau LCD2004, hubungkan pin VCC ke pin 5V dan pin GND ke ground. Pin SDA dari LCD harus dihubungkan ke pin SDA pada Arduino (biasanya A4 pada UNO), dan pin SCL harus dihubungkan ke pin SCL pada Arduino (biasanya A5 pada UNO). Pastikan semua koneksi aman untuk memastikan fungsionalitas yang benar.

Contoh Kode & Penjelasan

Dalam kode, kita mendefinisikan pin input analog untuk membaca keluaran sensor dengan #define VIN A0. Ini memungkinkan kita untuk dengan mudah merujuk ke pin tempat sensor terhubung di seluruh program.

#define VIN A0 // mendefinisikan pin Arduino A0 sebagai input tegangan (V in)
const float VCC   = 5.0; // tegangan suplai adalah dari 4,5 hingga 5,5V. Biasanya 5V.

Selanjutnya, kita mengatur sensitivitas berdasarkan model ACS712 yang kita gunakan. Nilai sensitivitas disimpan dalam array, memungkinkan akses mudah berdasarkan pemilihan model.

const int model = 2; // masukkan nomor model (0, 1, atau 2 untuk 5A, 20A, atau 30A)
float sensitivity[] = {0.185, 0.100, 0.066}; // nilai sensitivitas untuk setiap model

Dalam fungsi setup(), kita menginisialisasi monitor serial dan layar LCD. Ini memungkinkan kita untuk melihat pembacaan arus baik di LCD maupun melalui monitor serial untuk debugging.

void setup() {
    Serial.begin(9600); // menginisialisasi monitor serial
    lcd.begin(); // menginisialisasi LCD
    lcd.backlight(); // menyalakan lampu latar
    lcd.print("Robojax ACS712"); // menampilkan teks awal
    delay(2000); // menunggu selama 2 detik
}

Fungsi loop() membaca tegangan dari sensor, menghitung arus berdasarkan sensitivitas, dan menampilkan hasilnya sesuai. Jika arus melebihi batas cutoff yang ditentukan, ia menampilkan nilainya; jika tidak, ia menunjukkan bahwa tidak ada arus yang terdeteksi.

Demonstrasi / Apa yang Diharapkan

Saat rangkaian diberi daya, LCD harus menampilkan "Robojax ACS712" diikuti dengan "Current: " beserta nilai arus yang diukur dalam ampere. Jika arus di bawah batas cutoff, tampilan akan menunjukkan "No Current." Berhati-hatilah saat menguji dengan arus tinggi, karena sensor bisa menjadi panas (di video pada 12:00).

Untuk menguji rangkaian, tingkatkan arus melalui ACS712 secara bertahap dan amati perubahan pada LCD dan monitor serial. Pastikan arus tidak melebihi batas yang ditentukan dari sensor untuk menghindari kerusakan.

Gambar

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
Bahasa: 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);
}

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

Pustaka Arduino (zip)

Lembar Data (pdf)

File Fritzing