Search Code

ACS712 استعمال کر کے LCD1602 یا LCD2004 پر I2C کے ساتھ کرنٹ ظاہر کرنا

ACS712 استعمال کر کے LCD1602 یا LCD2004 پر I2C کے ساتھ کرنٹ ظاہر کرنا

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ Allegro ACS712 کرنٹ سینسر کو کیسے استعمال کریں تاکہ AC اور DC دونوں کرنٹ کی پیمائش کی جا سکے اور ریڈنگز کو I2C کے ذریعے LCD1602 یا LCD2004 پر ڈسپلے کیا جا سکے۔ یہ پروجیکٹ مختلف ایپلیکیشنز میں کرنٹ کی نگرانی کے لیے خاص طور پر مفید ہے، جو ریئل ٹائم کرنٹ ڈیٹا کا بصری ڈسپلے فراہم کرتا ہے۔ آخر تک، آپ کے پاس ایک کام کرنے والا سیٹ اپ ہوگا جو LCD پر کرنٹ کی ریڈنگز درست طریقے سے دکھا سکتا ہے۔

LCD1602-I2C display module with 4 wires

وائرنگ اور کوڈ کی وضاحت کے لیے، مخصوص ٹائم اسٹیمپس پر ویڈیو ضرور دیکھیں (ویڈیو میں 00:00 پر)۔

ہارڈویئر کی وضاحت

اس پروجیکٹ کا مرکزی جزو ACS712 کرنٹ سینسر ہے، جو 30A تک کرنٹ کی سطح کی پیمائش کر سکتا ہے۔ یہ ہال اثر استعمال کرکے اس میں سے گزرنے والے کرنٹ کو متناسب وولٹیج آؤٹ پٹ میں تبدیل کرتا ہے۔ اس وولٹیج آؤٹ پٹ کو Arduino پڑھ کر کرنٹ کی سطح کا حساب لگا سکتا ہے۔ سینسر میں کنکشن کے لیے تین پن ہیں: VCC پاور کے لیے، GND گراؤنڈ کے لیے، اور OUT وولٹیج سگنل کے لیے۔

LCD1602 یا LCD2004 ڈسپلے I2C کے ذریعے جڑتا ہے، جو پاور اور گراؤنڈ کے علاوہ صرف دو ڈیٹا پن (SDA اور SCL) استعمال کرکے آسان وائرنگ اور کنٹرول کی اجازت دیتا ہے۔ یہ متعدد کنکشنز سے وائرنگ کو بے ترتیب کیے بغیر کرنٹ کی ریڈنگز دکھانا آسان بناتا ہے۔

ڈیٹاشیٹ کی تفصیلات

مینوفیکچررAllegro Microsystems
پارٹ نمبرACS712ELCTR-30A-T
لاجک/IO وولٹیج4.5–5.5 V
سپلائی وولٹیج5 V
آؤٹ پٹ کرنٹ (فی چینل)30 A
PWM فریکوئنسی رہنمائیN/A
ان پٹ لاجک تھریشولڈز0.5 V (کوئیسنٹ آؤٹ پٹ)
وولٹیج ڈراپ / RDS(on) / سیچوریشن1.2 mΩ
تھرمل حدود150 °C زیادہ سے زیادہ
پیکیجTO-220

  • 20A سے زیادہ کرنٹ کے لیے مناسب گرمی کی کھپت کو یقینی بنائیں۔
  • زیادہ گرمی سے بچنے کے لیے مناسب تار گیج (30A کے لیے 12 AWG) استعمال کریں۔
  • مناسب آپریشن کے لیے VCC کو 5V اور GND کو گراؤنڈ سے جوڑیں۔
  • یقینی بنائیں کہ OUT پن Arduino کے اینالاگ ان پٹ پن (مثلاً A0) سے جڑا ہوا ہے۔
  • مختلف ACS712 ماڈلز کے لیے حساسیت کے فرق سے آگاہ رہیں۔
  • ڈیٹاشیٹ میں بتائے گئے مطابق ڈیکپلنگ کے لیے کیپیسٹرز استعمال کریں۔

وائرنگ ہدایات

Arduino wiring for Allegro ACS712 current sensor with LCD

ACS712 کرنٹ سینسر کو Arduino اور LCD کے ساتھ وائر کرنے کے لیے، پہلے ACS712 کے VCC پن کو Arduino کے 5V پن سے جوڑیں۔ اگلا، ACS712 کے GND پن کو Arduino کے گراؤنڈ پن سے جوڑیں۔ ACS712 کا OUT پن Arduino کے اینالاگ پن A0 سے جڑا ہونا چاہیے، جہاں وولٹیج سگنل پڑھا جائے گا۔

LCD1602 یا LCD2004 کے لیے، VCC پن کو 5V پن سے اور GND پن کو گراؤنڈ سے جوڑیں۔ LCD کا SDA پن Arduino کے SDA پن سے جڑا ہونا چاہیے (عام طور پر UNO پر A4)، اور SCL پن Arduino کے SCL پن سے جڑا ہونا چاہیے (عام طور پر UNO پر A5)۔ مناسب فعالیت کو یقینی بنانے کے لیے تمام کنکشنز مضبوط ہونے چاہئیں۔

کوڈ مثالیں اور واک تھرو

کوڈ میں، ہم سینسر آؤٹ پٹ پڑھنے کے لیے اینالاگ ان پٹ پن کی وضاحت #define VIN A0 سے کرتے ہیں۔ یہ ہمیں پروگرام میں سینسر کے جڑے ہوئے پن کو آسانی سے حوالہ دینے کی اجازت دیتا ہے۔

#define VIN A0 // Arduino پن A0 کو وولٹیج ان پٹ (V in) کے طور پر ڈیفائن کریں
const float VCC   = 5.0; // سپلائی وولٹیج 4.5 سے 5.5V ہے۔ عام طور پر 5V۔

اگلا، ہم استعمال شدہ ACS712 کے ماڈل کی بنیاد پر حساسیت سیٹ کرتے ہیں۔ حساسیت کی قدریں ایک اری میں محفوظ ہیں، جو ماڈل کے انتخاب کی بنیاد پر آسان رسائی کی اجازت دیتی ہیں۔

const int model = 2; // ماڈل نمبر درج کریں (5A، 20A، یا 30A کے لیے 0، 1، یا 2)
float sensitivity[] = {0.185, 0.100, 0.066}; // ہر ماڈل کے لیے حساسیت کی قدریں

setup() فنکشن میں، ہم سیریل مانیٹر اور LCD ڈسپلے کو انیشیالائز کرتے ہیں۔ یہ ہمیں ڈیبگنگ کے لیے LCD اور سیریل مانیٹر دونوں پر کرنٹ کی ریڈنگز دیکھنے کی اجازت دیتا ہے۔

void setup() {
    Serial.begin(9600); // سیریل مانیٹر انیشیالائز کریں
    lcd.begin(); // LCD انیشیالائز کریں
    lcd.backlight(); // بیک لائٹ آن کریں
    lcd.print("Robojax ACS712"); // ابتدائی متن ڈسپلے کریں
    delay(2000); // 2 سیکنڈ انتظار کریں
}

loop() فنکشن سینسر سے وولٹیج پڑھتا ہے، حساسیت کی بنیاد پر کرنٹ کا حساب لگاتا ہے، اور نتائج کو اس کے مطابق ڈسپلے کرتا ہے۔ اگر کرنٹ مخصوص کٹ آف حد سے تجاوز کرتا ہے، تو یہ قدر دکھاتا ہے؛ بصورت دیگر، یہ اشارہ کرتا ہے کہ کوئی کرنٹ نہیں ملا۔

ڈیموسٹریشن / کیا توقع کریں

سرکٹ کو پاور کرنے پر، LCD پر "Robojax ACS712" اور پھر "Current: " کے ساتھ ایمپئرز میں ماپا گیا کرنٹ کی قدر دکھائی دینی چاہیے۔ اگر کرنٹ کٹ آف حد سے کم ہے، تو ڈسپلے "No Current" دکھائے گا۔ زیادہ کرنٹ کے ساتھ جانچ کرتے وقت محتاط رہیں، کیونکہ سینسر گرم ہو سکتا ہے (ویڈیو میں 12:00 پر)۔

سیٹ اپ کو جانچنے کے لیے، ACS712 کے ذریعے کرنٹ کو آہستہ آہستہ بڑھائیں اور LCD اور سیریل مانیٹر پر تبدیلیوں کا مشاہدہ کریں۔ نقصان سے بچنے کے لیے یقینی بنائیں کہ کرنٹ سینسر کی درجہ بند حدود سے تجاوز نہ کرے۔

تصاویر

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
زبان: 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);
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

آرڈوینو لائبریریاں (زپ)

ڈیٹا شیٹ (پی ڈی ایف)

فریٹزنگ فائل