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

Arduino এবং LCD-এর সাথে ACS712 কারেন্ট সেন্সর ওয়্যার করতে, প্রথমে 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 ডিসপ্লে initialize করি। এটি আমাদের LCD-তে এবং ডিবাগিংয়ের জন্য সিরিয়াল মনিটরের মাধ্যমে উভয়ই কারেন্ট রিডিং দেখতে দেয়।

void setup() {
    Serial.begin(9600); // সিরিয়াল মনিটর initialize করুন
    lcd.begin(); // LCD initialize করুন
    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);
}

আপনাকে যা প্রয়োজন হতে পারে

সম্পদ ও রেফারেন্সসমূহ

ফাইলসমূহ📁

আর্ডুইনো লাইব্রেরি (জিপ)

ডেটাশিট (পিডিএফ)

ফ্রিটজিং ফাইল