Search Code

Korištenje ACS712 za prikaz struje na LCD1602 ili LCD2004 sa I2C

Korištenje ACS712 za prikaz struje na LCD1602 ili LCD2004 sa I2C

U ovom tutorijalu naučit ćemo kako koristiti Allegro ACS712 senzor struje za mjerenje i AC i DC struje te prikazati očitanja na LCD1602 ili LCD2004 pomoću I2C-a. Ovaj projekat je posebno koristan za praćenje struje u različitim aplikacijama, pružajući vizualni prikaz podataka o struji u realnom vremenu. Na kraju ćete imati funkcionalnu postavku koja može precizno prikazati očitanja struje na LCD-u.

LCD1602-I2C display module with 4 wires

Za pojašnjenje ožičenja i koda, svakako pogledajte video na navedenim vremenskim oznakama (u videu na 00:00).

Objašnjenje hardvera

Glavna komponenta ovog projekta je ACS712 senzor struje, koji može mjeriti nivoe struje do 30A. Radi koristeći Hallov efekat za pretvaranje struje koja prolazi kroz njega u proporcionalni naponski izlaz. Ovaj naponski izlaz može očitati Arduino za izračunavanje nivoa struje. Senzor ima tri pina za povezivanje: VCC za napajanje, GND za uzemljenje i OUT za naponski signal.

LCD1602 ili LCD2004 ekran se povezuje putem I2C-a, što omogućava lakše ožičenje i upravljanje koristeći samo dva podatkovna pina (SDA i SCL) pored napajanja i uzemljenja. Ovo čini prikaz očitanja struje jednostavnim bez zatrpavanja ožičenja s višestrukim vezama.

Detalji iz tehničke dokumentacije

ProizvođačAllegro Microsystems
Broj dijelaACS712ELCTR-30A-T
Logički/IO napon4.5–5.5 V
Napon napajanja5 V
Izlazna struja (po kanalu)30 A
Smjernice za PWM frekvencijuN/A
Ulazni logički pragovi0.5 V (mirni izlaz)
Pad napona / RDS(on) / zasićenje1.2 mΩ
Termalna ograničenja150 °C max
PaketTO-220

  • Osigurajte pravilno odvođenje topline za struje iznad 20A.
  • Koristite odgovarajući presjek žice (12 AWG za 30A) kako biste izbjegli pregrijavanje.
  • Spojite VCC na 5V i GND na uzemljenje za pravilan rad.
  • Osigurajte da je OUT pin spojen na analogni ulazni pin na Arduinu (npr. A0).
  • Budite svjesni razlika u osjetljivosti za različite ACS712 modele.
  • Koristite kondenzatore za razdvajanje prema specifikacijama iz tehničke dokumentacije.

Upute za ožičenje

Arduino wiring for Allegro ACS712 current sensor with LCD

Za povezivanje ACS712 senzora struje s Arduinom i LCD-om, počnite spajanjem VCC pina ACS712 na 5V pin na Arduinu. Zatim spojite GND pin ACS712 na pin za uzemljenje na Arduinu. OUT pin ACS712 treba spojiti na analogni pin A0 na Arduinu, gdje će se očitavati naponski signal.

Za LCD1602 ili LCD2004, spojite VCC pin na 5V pin i GND pin na uzemljenje. SDA pin LCD-a treba spojiti na SDA pin na Arduinu (obično A4 na UNO), a SCL pin treba spojiti na SCL pin na Arduinu (obično A5 na UNO). Provjerite da su sve veze sigurne kako biste osigurali pravilnu funkcionalnost.

Primjeri koda i objašnjenje

U kodu definiramo analogni ulazni pin za očitavanje izlaza senzora s #define VIN A0. Ovo nam omogućava da lako referenciramo pin na koji je senzor spojen kroz cijeli program.

#define VIN A0 // definiraj Arduino pin A0 kao naponski ulaz (V in)
const float VCC   = 5.0; // napon napajanja je od 4.5 do 5.5V. Normalno 5V.

Zatim postavljamo osjetljivost na osnovu modela ACS712 koji koristimo. Vrijednosti osjetljivosti su pohranjene u nizu, što omogućava lak pristup na osnovu odabira modela.

const int model = 2; // unesite broj modela (0, 1 ili 2 za 5A, 20A ili 30A)
float sensitivity[] = {0.185, 0.100, 0.066}; // vrijednosti osjetljivosti za svaki model

U setup() funkciji inicijaliziramo serijski monitor i LCD ekran. Ovo nam omogućava da vidimo očitanja struje i na LCD-u i putem serijskog monitora za otklanjanje grešaka.

void setup() {
    Serial.begin(9600); // inicijaliziraj serijski monitor
    lcd.begin(); // inicijaliziraj LCD
    lcd.backlight(); // uključi pozadinsko osvjetljenje
    lcd.print("Robojax ACS712"); // prikaži početni tekst
    delay(2000); // čekaj 2 sekunde
}

loop() funkcija očitava napon sa senzora, izračunava struju na osnovu osjetljivosti i prikazuje rezultate u skladu s tim. Ako struja premaši specificiranu granicu isključenja, prikazuje vrijednost; u suprotnom, označava da nema detektovane struje.

Demonstracija / Šta očekivati

Nakon uključivanja strujnog kruga, LCD bi trebao prikazati "Robojax ACS712" nakon čega slijedi "Current: " zajedno s izmjerenom vrijednošću struje u amperima. Ako je struja ispod granice isključenja, ekran će prikazati "No Current." Budite oprezni prilikom testiranja s visokim strujama, jer se senzor može zagrijati (u videu na 12:00).

Za testiranje postavke, postepeno povećavajte struju kroz ACS712 i promatrajte promjene na LCD-u i serijskom monitoru. Osigurajte da struja ne premaši nazivna ograničenja senzora kako biste izbjegli oštećenje.

Images

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

Things you might need

Resources & references

Files📁

Arduino Libraries (zip)

Datasheet (pdf)

Fritzing File