Search Code

Kutumia ACS712 Kuonyesha Mkondo kwenye LCD1602 au LCD2004 yenye I2C

Kutumia ACS712 Kuonyesha Mkondo kwenye LCD1602 au LCD2004 yenye I2C

Katika mafunzo haya, tutajifunza jinsi ya kutumia kihisi cha sasa cha Allegro ACS712 kupima sasa ya AC na DC na kuonyesha usomaji kwenye LCD1602 au LCD2004 kwa kutumia I2C. Mradi huu ni muhimu hasa kwa ufuatiliaji wa sasa katika matumizi mbalimbali, ukitoa onyesho la kuona la data ya sasa ya wakati halisi. Mwishoni, utakuwa na mfumo unaofanya kazi ambao unaweza kuonyesha usomaji wa sasa kwa usahihi kwenye LCD.

LCD1602-I2C display module with 4 wires

Kwa ufafanuzi zaidi kuhusu wiring na msimbo, hakikisha unatazama video kwenye muda uliowekwa (katika video saa 00:00).

Vifaa Vimeelezwa

Kijenzi kikuu cha mradi huu ni kihisi cha sasa cha ACS712, ambacho kinaweza kupima viwango vya sasa hadi 30A. Kinafanya kazi kwa kutumia athari ya Hall kubadilisha sasa inayopita ndani yake kuwa pato la voltage sawia. Pato hili la voltage linaweza kusomwa na Arduino kuhesabu kiwango cha sasa. Kihisi kina pini tatu za kuunganisha: VCC kwa nguvu, GND kwa ardhi, na OUT kwa ishara ya voltage.

Onyesho la LCD1602 au LCD2004 linaunganishwa kupitia I2C, ambalo huruhusu wiring rahisi na udhibiti kwa kutumia pini mbili tu za data (SDA na SCL) pamoja na nguvu na ardhi. Hii inafanya iwe rahisi kuonyesha usomaji wa sasa bila kuchanganya wiring na miunganisho mingi.

Maelezo ya Datasheet

MtengenezajiAllegro Microsystems
Nambari ya sehemuACS712ELCTR-30A-T
Voltage ya Logic/IO4.5–5.5 V
Voltage ya usambazaji5 V
Sasa ya pato (kwa kila chaneli)30 A
Mwongozo wa mzunguko wa PWMN/A
Viwango vya kizingiti cha logic ya kuingiza0.5 V (pato la utulivu)
Kushuka kwa voltage / RDS(on) / kueneza1.2 mΩ
Mipaka ya joto150 °C max
KifurushiTO-220

  • Hakikisha utengaji wa joto sahihi kwa mikondo zaidi ya 20A.
  • Tumia ukubwa sahihi wa waya (12 AWG kwa 30A) kuepuka kupashwa joto kupita kiasi.
  • Unganisha VCC kwa 5V na GND kwa ardhi kwa uendeshaji sahihi.
  • Hakikisha pini ya OUT imeunganishwa kwenye pini ya kuingiza analogi kwenye Arduino (k.m., A0).
  • Jua tofauti za usikivu kwa mifano mbalimbali ya ACS712.
  • Tumia capacitors kwa decoupling kama ilivyoelezwa kwenye datasheet.

Maagizo ya Wiring

Arduino wiring for Allegro ACS712 current sensor with LCD

Kuunganisha kihisi cha sasa cha ACS712 na Arduino na LCD, anza kwa kuunganisha pini ya VCC ya ACS712 kwenye pini ya 5V kwenye Arduino. Ifuatayo, unganisha pini ya GND ya ACS712 kwenye pini ya ardhi kwenye Arduino. Pini ya OUT ya ACS712 inapaswa kuunganishwa kwenye pini ya analogi A0 kwenye Arduino, ambapo ishara ya voltage itasomwa.

Kwa LCD1602 au LCD2004, unganisha pini ya VCC kwenye pini ya 5V na pini ya GND kwenye ardhi. Pini ya SDA ya LCD inapaswa kuunganishwa kwenye pini ya SDA kwenye Arduino (kawaida A4 kwenye UNO), na pini ya SCL inapaswa kuunganishwa kwenye pini ya SCL kwenye Arduino (kawaida A5 kwenye UNO). Hakikisha miunganisho yote ni salama ili kuhakikisha utendaji sahihi.

Mifano ya Msimbo na Maelekezo

Katika msimbo, tunafafanua pini ya kuingiza analogi kwa kusoma pato la kihisi na #define VIN A0. Hii inaturuhusu kurejelea pini ambapo kihisi kimeunganishwa kwa urahisi katika programu nzima.

#define VIN A0 // fafanua pini ya Arduino A0 kama kuingiza voltage (V in)
const float VCC   = 5.0; // voltage ya usambazaji ni kutoka 4.5 hadi 5.5V. Kawaida 5V.

Ifuatayo, tunaweka usikivu kulingana na mfano wa ACS712 tunayotumia. Thamani za usikivu zimehifadhiwa kwenye safu, ikiruhusu ufikiaji rahisi kulingana na uteuzi wa mfano.

const int model = 2; // ingiza nambari ya mfano (0, 1, au 2 kwa 5A, 20A, au 30A)
float sensitivity[] = {0.185, 0.100, 0.066}; // thamani za usikivu kwa kila mfano

Katika kazi ya setup(), tunaanzisha mfuatiliaji wa serial na onyesho la LCD. Hii inaturuhusu kuona usomaji wa sasa kwenye LCD na kupitia mfuatiliaji wa serial kwa utatuzi.

void setup() {
    Serial.begin(9600); // anzisha mfuatiliaji wa serial
    lcd.begin(); // anzisha LCD
    lcd.backlight(); // washa mwanga wa nyuma
    lcd.print("Robojax ACS712"); // onyesha maandishi ya awali
    delay(2000); // subiri kwa sekunde 2
}

Kazi ya loop() inasoma voltage kutoka kwenye kihisi, inahesabu sasa kulingana na usikivu, na inaonyesha matokeo ipasavyo. Ikiwa sasa inazidi kikomo maalum cha kukata, inaonyesha thamani; vinginevyo, inaonyesha kwamba hakuna sasa inayogunduliwa.

Maonyesho / Nini cha Kutarajia

Baada ya kuwasha mzunguko, LCD inapaswa kuonyesha "Robojax ACS712" ikifuatiwa na "Current: " pamoja na thamani ya sasa iliyopimwa katika ampea. Ikiwa sasa iko chini ya kikomo cha kukata, onyesho litaonyesha "No Current." Kuwa makini wakati wa kujaribu na mikondo ya juu, kwani kihisi kinaweza kupata joto (katika video saa 12:00).

Kujaribu mfumo, ongeza sasa kupitia ACS712 hatua kwa hatua na uangalie mabadiliko kwenye LCD na mfuatiliaji wa serial. Hakikisha kwamba sasa haizidi mipaka iliyokadiriwa ya kihisi ili kuepuka uharibifu.

Bilder

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
Språk: 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);
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Arduino-bibliotek (zip)

Datablad (pdf)

Fritzing-fil