آردوینو Arduinoپروژه های آردوینو

بررسی ظرفیت باتری لیتیوم با آردوینو (+نمایش ولتاژ و جریان)

با ظهور فناوری ، ابزارها و لوازم الکترونیکی ما با کاربرد های بیشتر ، کوچکتر و کوچکتر می شوند. با افزایش این پیچیدگی ، قدرت مورد نیاز مدار نیز افزایش یافته است بنابراین برای کوچک و قابل حمل کردن دستگاه ما به یک باتری نیاز داریم تا بتوانیم جریان مورد نیاز مدار را تامین کنیم. همچنین مسئله وزن و مدت شارژ نیز مهم است.

از بین انواع مختلف باتری های موجود ، باتری های سرب اسید ، باتری های Ni-Cd و باتری های Ni-MH مناسب نیستند زیرا وزن بیشتری دارند یا نمی توانند جریان مورد نیاز برنامه ما را تأمین کنند. برای پروژه های قابل حمل و نیازمند جریان بالا، باتری های لیتیوم استفاده میشوند.

چرا به تستر باتری نیاز داریم؟

ممکن است برای شما نیز پیش آمده باشد که به طور مثال یک پاوربانک 20 هزار میلی آمپر میخرید اما بعد از استفاده متوجه میشوید که ظرفیت خیلی کمی دارد. بنابراین با استفاده از یک تستر باتری میتوانید از صحت اطلاعات باتری مطمئن شوید و همچنین جریان و ولتاژ آن را بررسی کنید.

ساخت تستر باتری لیتیومی با آردوینو

بنابراین ما می خواهیم یک تستر ظرفیت باتری برای یک Li-Ion 18650 Cell بسازیم که ظرفیت باتری کاملا شارژ شده را از طریق یک مقاومت تخلیه میکند و از این طریق ظرفیت آن محاسبه میشود. اگر ظرفیت ادعا شده دریافت نشود، یعنی آن باتری معیوب است و از کیفیت لازم برخوردار نیست.

برای یادگیری کامل آردوینو ، روی دوره آموزش آردوینو و برای یادگیری کامل الکترونیک، روی دوره آموزش الکترونیک کلیک کنید.

شماتیک مدار تستر باتری با آردوینو

شماتیک مدار کامل تستر ظرفیت باتری 18650 در زیر نشان داده شده است.

شماتیک مدار تستر باتری با آردوینو

در اینجا هر کدام از بخش های مختلف مدار بررسی ظرفیت، ولتاژ و جریان باتری را بررسی خواهیم کرد.

واحد محاسباتی و نمایشگر:

این مدار به دو قسمت تقسیم می شود ، ابتدا یک منبع تغذیه 5 ولت برای آردوینو نانو و ال سی دی کاراکتری استفاده میشود. همچنین شما میتوانید از باتری 12 ولت استفاده کنید و جریان 60-70 میلی آمپر برای تغذیه مناسب خواهد بود.

قسمت آردوینو نانو در مدار تستر باتری

برای پایین آوردن ولتاژ تا 5 ولت ، ما از یک تنظیم کننده ولتاژ خطی استفاده خواهیم کرد که می تواند تا 35 ولت تغذیه شود و 5 ولت تنظیم شده را ارائه دهد. برای جلوگیری از آسیب دیدن رگولاتور ولتاژ 7805، از یک هیت سینک استفاده کنید. همانطور که در تصویر بالا مشاهده میکنید ما ارتباط آردوینو با ال سی دی را از طریق ارتباط 4 بیتی برقرار کرده ایم و همچنین یک پتانسیومتر 10 کیلو اهم برای کنترل کنتراست نمایشگر اضافه کردیم.

مدار جریان بار ثابت:

PWM مبتنی بر مدار بار ثابت جریان است که باعث می شود جریان بار از طریق مقاومت توسط ما قابل کنترل و ثابت باشد تا با کاهش ولتاژ و جریان باتری، خطایی بوجود نیاید.  این مدار از آی سی آپ امپ LM741 و ماسفت IRF540N N کانال تشکیل شده است که با روشن و خاموش کردن MOSFET با توجه به سطح ولتاژ تعیین شده توسط ما ، جریان MOSFET را کنترل می کند.

مطلب پیشنهادی:  پروژه اندازه گیری ولتاژ، جریان و توان با آردوینو (وات، ولت و آمپر متر)

مدار ثابت کردن جریان بار باتری

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

op-amp در حالت مقایسه ای کار می کند ، بنابراین در این حالت هر زمان ولتاژ پین غیر معکوس op-amp از پین معکوس بیشتر باشد ، خروجی بالا خواهد بود. به همین ترتیب ، اگر ولتاژ پین معکوس op-amp بیشتر از پین غیر معکوس باشد ، خروجی op-amp پایین می آید. در مدار داده شده ، سطح ولتاژ پین غیر معکوس توسط پین D9 برد آردوینو نانو کنترل می شود ، که با فرکانس 500 هرتز سوئیچ می شود و سپس از طریق فیلتر مدار کم عبور RC با مقاومت 33kΩ و خازن با ظرفیت 0.47uF عبور می کند. برای ایجاد سیگنال DC تقریباً ثابت در پایه غیر معکوس، پین معکوس به مقاومت بار متصل است که ولتاژ مقاومت و GND مشترک را می خواند. پین خروجی آپ امپ برای روشن یا خاموش کردن آن به ترمینال گیت MOSFET متصل است. آپ امپ با تعویض MOSFET متصل سعی می کند ولتاژ های هر دو ترمینال خود را برابر کند بنابراین جریان عبوری از مقاومت متناسب با مقدار PWM است که شما در پین D9 NANO تنظیم کرده اید. در این پروژه ، حداکثر جریان مدار خود را به 1.3 آمپر محدود کردم زیرا باتری من حداکثر جریان آن 10 آمپر است.

اندازه گیری ولتاژ:

حداکثر ولتاژ یک باتری لیتیومی معمولی در حالت شارژ کامل 4.1V تا 4.3V است که کمتر از حد ولتاژ 5 ولت پین های ورودی آنالوگ Arduino Nano است بنابراین میتوانید بدون نگرانی آن را به پایه های آردوینو نانو متصل کنید.  ما باید جریان عبوری از مقاومت را نیز اندازه گیری کنیم زیرا نمیتوانیم از شنت جریان استفاده کنیم (پیچیدگی مدار را افزایش میدهد) و افزایش مقاومت در مسیر بار، باعث کاهش سرعت تخلیه سلول میشود. استفاده از مقاومت های شنت کوچک به یک مدار تقویت کننده اضافی نیاز دارد تا ولتاژ ناشی از آن برای آردوینو قابل خواندن باشد.

ما باید جریان عبوری از مقاومت را نیز اندازه گیری کنیم زیرا نمی توانیم از شنت جریان استفاده کنیم زیرا پیچیدگی مدار افزایش می یابد و افزایش مقاومت در مسیر بار باعث کاهش سرعت تخلیه سلول می شود. استفاده از مقاومت های شنت کوچکتر به یک مدار تقویت کننده اضافی نیاز دارد تا خوانش ولتاژ ناشی از آن برای آردوینو قابل خواندن باشد.

نمایش جریان و ولتاژ باتری با آردوینو

بنابراین مستقیماً ولتاژ مقاومت بار را می خوانیم و سپس با استفاده از قانون اهم ولتاژ بدست آمده توسط مقاومت بار را تقسیم می کنیم تا جریان عبوری از آن بدست آید. ترمینال منفی مقاومت مستقیماً به GND متصل می شود ، بنابراین می توانیم با اطمینان فرض کنیم ولتاژی که روی مقاومت می خوانیم افت ولتاژ مقاومت است.

قطعات مورد نیاز

  • آردوینو نانو
  • ال سی دی کاراکتری 16*2
  • آپ امپ LM741
  • مقاومت 2.2 اهم 5 وات
  • IC تنظیم کننده ولتاژ مثبت 7805
  • منبع تغذیه 12 ولت
  • پتانسیومتر 10kΩ
  • خازن 0.47uF
  • مقاومت 33kΩ
  • کانکتور جک DC
  • ماسفت N کانال IRF540N
  • هیت سینک

کد آردوینو اندازه گیری ظرفیت باتری

اکنون پس از اتصال کامل مدار ، به سمت برنامه نویسی آردوینو می رویم. ابتدا آخرین نسخه آردوینو را دانلود کنید. کد کامل پروژه در انتهای صفحه قرار داده شده است. در اینجا ما بعضی از قسمت های کد را بررسی میکنیم.

مطلب پیشنهادی:  آموزش ایجاد و آپلود کردن یک پروژه در آردوینو

ما از ال سی دی کاراکتری برای نمایش مقادیر استفاده میکنیم. بنابراین اولین کاری که باید بکنیم، فراخوانی کتابخانه مربوط به ال سی دی است. سپس متغیر ها را تعریف میکنیم.

#include <LiquidCrystal.h>  //کتابخانه ال سی دی کاراکتری
const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 8; //تعریف پین های ال سی دی 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const float BAT_LOW = 3.0;    //تعیین کمترین ولتاژ باتری
const float BAT_HIGH = 4.5;   //تعیین بیشتری ولتاژ باتری
const int MOSFET_Pin=9;
const int PWM_VALUE=150;
unsigned long previousMillis = 0; // زمان پیشین
unsigned long millisPassed = 0;  // زمان فعلی
float Capacity=0;     //متغیر ظرفیت باتری
float Resistor=2.2;   // مقاومت بار
float mA;

اکنون به قسمت void setup می رسیم ، ما میخواهیم به طور کامل آردوینو را به رایانه متصل کنیم و با استفاده از سریال مانیتور آردوینو پیشرفت را کنترل کنیم. بنابراین ارتباط سریال را اغاز میکنیم و همچنین یک پیام خوش آمد گویی نیز روی صفحه نمایش خواهیم داد.

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0); // تعیین موقعیت متن
  lcd.print("Battery Capacity");
  lcd.setCursor(0,1);
  lcd.print("Tester Circuit");
  delay(3000);
  lcd.clear();
}

نیازی نیست که پین ​​PWM را به عنوان Output در دستور AnalogWrite قرار دهیم. مقدار PWM را با توجه به جریان تخلیه مورد نیاز در برنامه خود با دقت انتخاب کنید. مقدار PWM زیاد منجر به جریان زیاد با افت ولتاژ بالا در باتری Li-Ion و مقدار PWM بسیار کم منجر به تخلیه سریع می شود.

زمان استفاده از باتری در void loop ، ولتاژهای پایه های A0 و A1 را خواهیم خواند زیرا Arduino دارای  ADC با وضوح 10 بیت است بنابراین باید مقادیر خروجی دیجیتال را از 0-1023 بدست آوریم که باید مقادیر آن را مجدداً تغییر دهیم. دقت بفرمایید ولتاژ 0 تا 5 ولت در پایه آردوینو به نسبت به عددی بین 0 تا 1023 تبدیل میشود. اگر متوجه نشدید، آنالوگ به دیجیتال در آردوینو را بخوانید.

اکنون برای توضیح منطق کد ، ولتاژ باتری را به طور مداوم اندازه گیری می کنیم و اگر ولتاژ سلول بیش از حد بالا باشد متوجه میشویم که یا مشکلی در مدار وجود دارد یا باتری بیش از حد شارژ شده است. سپس پین گیت MOSFET متوقف میشود تا هیچ جریانی نتواند از طریق مقاومت بار عبور کند. بسیار مهم است که ابتدا باتری خود را قبل از اتصال به برد تستر، به طور کامل شارژ کنید تا بتوانید ظرفیت کل آن را محاسبه کنید.

  analogWrite(MOSFET_Pin, PWM_VALUE);
  // خواندن ورودی در پین آنالوگ 0
  int sensorValue_voltage_Cell = analogRead(A0);
  // تبدیل مقدار
  float voltage = sensorValue_voltage_Cell * (5.08 / 1023.0);
  Serial.print("VOLTAGE: ");
  Serial.println(voltage);      // نمایش ولتاژ در سریال مانیتور
  lcd.setCursor(0, 0); // تعیین موقعیت متن در ال سی دی کاراکتری
  lcd.print("Voltage: "); // نمایش ولتاژ در ال سی دی کاراکتری
  lcd.print(voltage);
 delay(100);
  int sensorValue_Shunt_Resistor= analogRead(A1);
  float voltage1= sensorValue_Shunt_Resistor *(5.08 / 1023.0);
  float current= voltage1/Resistor;
  Serial.print("Current: ");
  Serial.println(current);
  lcd.setCursor(0, 1); //تعیین موقعیت متن
  lcd.print("Current: ");
  lcd.print(current);

اگر ولتاژ باتری در حد ولتاژ بالا و پایین مشخص شده توسط ما باشد ، آردوینو مقدار جریان را با روش مشخص شده در بالا می خواند و آن را با زمان سپری شده در اندازه گیری ها ضرب می کند و در متغیر ظرفیتی که قبلاً تعریف کردیم در واحد mAh ذخیره می کند. در تمام این مدت ، مقادیر جریان و ولتاژ در لحظه بر روی صفحه LCD متصل شده نمایش داده می شوند و در صورت تمایل می توانید آنها را بر روی سریال مانیتور نیز مشاهده کنید. روند تخلیه سلول تا رسیدن ولتاژ سلول به کمتر از حد پایین مشخص شده در برنامه ادامه خواهد یافت و سپس ظرفیت کل سلول بر روی صفحه LCD نمایش داده می شود و LOW کردن دروازه MOSFET انتقال جریان از طریق مقاومت متوقف می شود.

else if(voltage > BAT_LOW && voltage < BAT_HIGH  )
  { // بررسی اینکه ولتاژ در محدوده صحیح است
      millisPassed = millis() - previousMillis;
      mA = current * 1000.0 ;
      Capacity = Capacity + (mA * (millisPassed / 3600000.0)); // تبدیل به واحد میلی آمپر ساعت
      previousMillis = millis();
      delay(1000);
      lcd.clear();
     }

بهبود دقت تستر باتری

به هر حال این روش، یک روش کافی برای خواندن ولتاژ و جریان است ، اما کامل نیست. رابطه بین ولتاژ واقعی و ولتاژ ADC اندازه گیری شده خطی نیست و بنابراین ممکن است خطا وجود داشته باشد.

مطلب پیشنهادی:  آموزش کامل ارتباط آردوینو با لب ویو (اتصال Arduino به Labview)

اگر می خواهید دقت نتیجه را افزایش دهید ، پس باید مقادیر ADC را که از اعمال منابع مختلف ولتاژ شناخته شده بر روی نمودار به دست می آورید رسم کنید و سپس با استفاده از هر روشی که دوست دارید معادله ضرب را از آن تعیین کنید. با این روش دقت بهبود می یابد و شما به نتایج واقعی بسیار نزدیک خواهید شد.

همچنین ، MOSFET مورد استفاده ما MOSFET در سطح منطقی نیست ، بنابراین برای روشن کردن کامل کانال فعلی به بیش از 7 ولت نیاز دارد و اگر 5 ولت مستقیم روی آن اعمال کنیم ، قرائت های فعلی نادرست خواهد بود. اما می توانید از سطح منطقی ماسفت IRL520N N-Channel استفاده کنید تا استفاده از منبع 12 ولت را از بین ببرید و مستقیماً با سطح منطقی 5 ولت که با Arduino دارید کار کنید.

فیلم آزمایش مدار بررسی ظرفیت باتری

پس از اتصال قطعات مختلف و دانستن هدف استفاده از آن ها، میتوانید قطعات را در یک PCB متصل کنید تا کار مرتب تری داشته باشید. تصاویر زیر، تصاویر نهایی پروژه هستند :

ساخت و آزمایش مدار بررسی ظرفیت باینری

این یک آزمایش بسیار اساسی برای محاسبه ظرفیت باتری مورد استفاده شما است و می توان با گرفتن داده ها و ذخیره آنها در یک فایل اکسل ، پردازش داده ها و تجسم داده ها را با استفاده از روش های گرافیکی بهبود بخشید. در دنیای داده محور امروزه ، می توان از منحنی تخلیه باتری برای ساخت مدلهای پیش بینی دقیق باتری برای شبیه سازی و دیدن پاسخ باتری در شرایط بارگیری بدون آزمایش در دنیای واقعی با استفاده از نرم افزارهایی مانند NI LabVIEW ، MATLAB Simulink و غیره استفاده کرد.

موارد موجود در فایل : سورس کامل ، شماتیک کامل

دانلود فایل های پروژه

میخواهید برنامه نویسی STM32 را یاد بگیرید؟

دوره آموزش STM32

میخواهید الکترونیک را یاد بگیرید؟

دوره آموزش الکترونیک
دوره آموزش آردوینو

میخواهید آردوینو را به صورت پروژه محور یاد بگیرید؟ برای مشاهده توضیحات روی دوره مورد نظر کلیک کنید

برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام آیرنکس عضو شوید.

محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید) سعی میکنم تمام نظرات را پاسخ دهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *