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


وائرنگ اور کوڈ کی وضاحت کے لیے، مخصوص ٹائم اسٹیمپس پر ویڈیو ضرور دیکھیں (ویڈیو میں 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 ماڈلز کے لیے حساسیت کے فرق سے آگاہ رہیں۔
- ڈیٹاشیٹ میں بتائے گئے مطابق ڈیکپلنگ کے لیے کیپیسٹرز استعمال کریں۔
وائرنگ ہدایات

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 اور سیریل مانیٹر پر تبدیلیوں کا مشاہدہ کریں۔ نقصان سے بچنے کے لیے یقینی بنائیں کہ کرنٹ سینسر کی درجہ بند حدود سے تجاوز نہ کرے۔
تصاویر
/*
*
* 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);
}
آپ کو جن چیزوں کی ضرورت ہو سکتی ہے
-
ایمیزون
-
ایمیزونPurchase LCD1602-I2C from Amazonamzn.to
-
ای بےPurchase LCD1602-I2C from eBayebay.us
-
علی ایکسپریسPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
وسائل اور حوالہ جات
-
باہرونی
فائلیں📁
آرڈوینو لائبریریاں (زپ)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
ڈیٹا شیٹ (پی ڈی ایف)
-
Allegro ACS712 AC/DC 4A, 20A, 30A Current Sensor Datasheet
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
فریٹزنگ فائل
-
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB -
Allegre ACS712 Current Sensor
Allegreo ACS712 Current Sensor.fzpz0.03 MB