برد ESP8266 ترفند نمایشگر OLED

پروژه ساخت نمایشگر میزان شارژ باتری لیتیومی با بردهای ESP8266-12E

نوشته شده توسط معین صابری

باتری ها منابع تغذیه در دسترسی هستند که به سادگی می توانند سیستم های مختلف را تغذیه کنند. به کمک باتری ها می توان گجت های هوشمند ساخت، سیستم های قابل حمل تولید نمود و یا در زمان قطعی برق شهری، تغذیه سیستم از طریق باتری ادامه یابد. به عنوان نمونه ای از کاربرد، با کلیک بر روی این لینک، می توانید آموزش طراحی و پیاده سازی مدار باتری بک آپ را مشاهده نمایید. ماژول های ESP8266، یکی از پرکاربردترین ماژول های مخابراتی در زمینه اینترنت اشیا به شمار می روند. به کمک این ماژول، شما می توانید بدون نیاز به میکروکنترلر جانبی، آن را برنامه نویسی کرده و شروع به ارسال و دریافت داده از طریق امواج وای فای نموده و حتی با اتصال به اینترنت، داده ها را با محدودیت فاصله هیچ!، ارسال و دریافت نمایید. از آنجاییکه این ماژول ها را می توان با باتری ها، البته با رعایت الزاماتی که در ادامه به آن می پردازیم، راه اندازی نمود، نیاز است تا وضعیت شارژ باتری ها مانیتور ونمایش داده شود. یا به عبارتی وضعیت سطح شارژ باتری را همواره داشته باشیم. پیشتر در رابطه با کتابخانه Battery.h جهت مانیتورینگ وضعیت باتری، در این لینک صحبت نموده ایم. در این آموزش با استفاده از این کتابخانه، وضعیت شارژ و سطح ولتاژ باتری تغذیه ESP را مانیتور نموده و بر روی نمایشگر OLED نمایش می دهیم. همچنین این پروژه را نیز برای برد آردوینو UNO اجرا خواهیم کرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


باتری های لیتیوم پلیمر


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

باتری لیتیومی قابل شارژ - تشخیص سطح شارژ باتری - دیجی اسپارک

 

یکی از مهم ترین مسایل در کار با باتری ها، چگونگی شارژ آن هاست. برای شارژ باتری های لیتیم پلیمری، ماژول های شارژ تولید شده اند. این ماژول ها دارای سوکت میکرو USB و دو پایه جهت اتصال باتری هستند. بنابراین، به کمک این ماژول ها و به سادگی هر چه تمام تر، می توانید باتری خود را شارژ نمایید. با کلیک بر روی این لینک، می توانید ماژول شارژر مناسب باتری ها را مشاهده نمایید.

کنترل شارژ باتری لیتیومی با ماژول شارژر سه TP4056 - دیجی اسپارک

 


ماژول وای فای ESP8266


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

ماژول وای فای ESP8266-12 با پروگرامر USB - دیجی اسپارک

 

ماژول وای فای ESP8266 از طریق رابط سریال و فرامین AT-Command کنترل می شود. جهت اطلاعات بیشتر در این زمینه، می توانید این لینک را مطالعه نمایید. در کنار این، ماژول های ESP قابلیت پروگرام شدن از طریق نرم افزار آردوینو را در خود جای داده اند. به کمک این قابلیت شما علاوه بر دسترسی به وای فای، می توانید برنامه مورد نظر خود را همانند بردهای آدروینو بر روی این ماژول نوشته و اجرا کنید. بدین ترتیب نیازی به میکروکنترلر اضافی، نخواهید داشت. در این آموزش، ما اطلاعات باتری را از طریق پورت ADC ماژول، برای تشخیص سطح شارژ باتری به کمک کتابخانه Battery.h خوانده و میزان شارژ آن را بر روی نمایشگر OLED نمایش می دهیم. جهت اطلاعات بیشتر در زمینه پروگرام کردن ماژول ESP، مطالعه این لینک توصیه می گردد.

 


برد آردوینو UNO


برد آردوینو UNO یکی از محبوب ترین بردها در پروژه های الکترونیکی است. این برد به قدری کاربردی است که در اکثر پروژه های مربوط به امبدد سیستم ها، می توان ردپای آن را مشاهده کرد. این برد که در حقیقت یک برد توسعه برای میکروکنترلر ATMEGA328P محسوب می شود، راه اندازی، کار و برنامه نویسی با آن را بسیار ساده و البته لذت بخش می کند.

برد آردوینو UNO از طریق کابل USB با تغذیه ۵ ولت و از طریق آداپتور و یا پایه VIN تامین تغذیه می شود. برای تغذیه از طریق آداپتور و یا پایه VIN، ولتاژ اعمالی می بایست در بازه  حدودی ۶ الی ۱۲ ولت باشد. اما از آنجاییکه ولتاژ باتری لیتیم پلیمری در بازه ۳٫۴ الی ۴٫۴ قرار می گیرد، لذا راه اندازی آردوینو از طریق باتری نیازمند رعایت الزاماتی است که با کلیک بر روی این لینک، می توانید آن را مطالعه نمایید.

 


نمایشگر OLED


نمایشگرها، یکی از مهم ترین ابزارها در جهت نمایش خروجی و پارامترهای محاسباتی سیستم ها به شمار می روند. این ابزار مهم و کاربردی در تلفن های همراه، ماشین های لباسشویی، خودروها و…. به وفور استفاده می گردند. یکی از انواع مهم و کاربردی این ابزارها، نمایشگرهای OLED هستند. این نمایشگرها که به وفور در ساعت های هوشمند، گجت های سلامت و …. استفاده می شود، به سادگی با بردهای آردوینو و ESP ارتباط برقرار می نمایند.

ماژول OLED نمایشگر با رابط I2C سایز 0.96 اینچ - دیجی اسپارک

 

همانطور که بیان شد، در این پروژه جهت نمایش سطح شارژ باتری و ولتاژ باتری، از نمایشگر OLED استفاده می نماییم. برای اطلاعات بیشتر در رابطه با این نمایشگر، پیشنهاد می کنم آموزش های منتشر شده در دیجی اسپارک(لینک آموزش ها، کلیک کنید) را به طور کامل مطالعه نمایید.

 


نمایشگر ال سی دی کاراکتری ۲X16


همانطور که پیشتر نیز بیان شد، یکی از مهم ترین ابرازها جهت تعامل با کاربر، نمایشگرها هستند. نمایشگر ها در انواع مختلف و به کمک فناوری های متفاوت، تولید و عرضه می شوند. هم اکنون برای بردهای آردویینو نمایشگر های OLED، لمسی TFT، گرافیکی و کاراکتری نیز وجود دارد. در این پروژه ما برای نمایش میزان شارژ باتری در آردوینو UNO، از نمایشگر ال سی دی کاراکتری استفاده می کنیم. نمایشگرهای کاراکتری به سادگی به بردهای آردویینو متصل شده و جهت راه اندازی و استفاده از آن، کتابخانه نیز، تعبیه و توسعه داده شده است.

یکی از محاسن استفاده از نمایشگرهای کاراکتری، حجم حافظه اشغال شده به مراتب کمتر نسبت به نمایشگر OLED است. این مورد در بردهای همچون UNO که حافظه کمتری نسبت به ESP8266 دارند، حائز اهمیت است.

 


مبدل کاهنده ولتاژ lm2596


مبدل کاهنده LM2596، یک مبدل ولتاژ DC به DC است. به کمک این مبدل می توانید ولتاژ ورودی خود را به ولتاژ دلخواه خود در خروجی، تبدیل نمایید. با توجه به وجود یک مولتی ترن(ولوم) جهت تنظیم ولتاژ، می توان ولتاژ خروجی را بر مبنای نیاز خود، روی ولتاژ های ۳٫۳، ۵، ۳، ۱٫۸ و به طور کلی هر ولتاژی که مد نظر شماست، تنظیم نمایید. راه اندازی و کار با این ماژول بسیار ساده بوده و کافیست در ورودی تغذیه را متصل کرده و با ولوم، خروجی را تنظیم نمایید. این ماژول می تواند تا ۳ آمپر جریان به خروجی، بار دهد.

ماژول مبدل کاهنده LM2596 - دیجی اسپارک

در این آموزش به کمک ماژول کاهنده ولتاژ، ولتاژ باتری را در خروجی ماژول به ۲٫۵ ولت می رسانیم. این ولتاژ، حداقل ولتاژ مورد نیاز ماژول ESP8266 جهت فعالیت است. یکی از کاربردهای تغذیه ماژول ESP8266 با ولتاژ ۲٫۵، اتصال ماژول اکسی متر به آن است. در این رابطه، می توانید آموزش ساخت دستگاه پالس اکسی متر را در این لینک، مطالعه و دنبال نمایید.

 


نصب کتابخانه و ابزارهای مورد نیاز


در این پروژه، جهت اندازه گیری میزان شارژ باتری، از کتابخانه Battery.h استفاده کرده ایم. در رابطه با این کتابخانه و نحوه راه اندازی، پیشتر در آموزشی با این لینک، به طور کامل صحبت کرده ایم. اولین قدم در نصب یک کتابخانه، نصب آن در محیط آردوینو است. برای نصب کتابخانه، دو روش دستی و خودکار وجود دارد. در روش دستی، پس از دانلود فایل های کتابخانه، می بایست آن را در مسیر نصب آردویینو قرار دهید. اما در روش خودکار، تنها با تایپ نام کتابخانه در قسمت مدیریت کتابخانه ها، کتابخانه مورد نظر به صورت خودکار در مخازن آردوینو جستجو شده و پس از یافتن آن، نصب خواهد شد. به همین منظور، ابتدا، در نرم افزار آردوینو، بر روی گزینه Tools و سپس Manage Libraries کلید کنید. با کلیک بر روی گزنیه Manage Libraries، می توانید وضعیت کتابخانه های نصب شده و لیستی از کتابخانه های جدید و بروز را مشاهده کنید. در کادر جستجو، با تایپ نام کتابخانه، می توان آن را یافته و سپس نصب نمود. در اینجا ما عبارت “Battery Sense” را تایپ می کنیم. پس از چند لحظه، کتابخانه زیر نمایش داده می شود. در اینجا با کلیک بر روی عبارت install، کتابخانه نصب خواهد شد.

نصب کتابخانه Battery Sense در نرم افزار آردوینو - دیجی اسپارک

 

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

 

پس از نصب کتابخانه های مورد نیاز، نوبت به اجرای پروژه می رسد. به همین منظور، ابتدا در قسمت بعد، شماتیک پروژه را بررسی کرده و در ادامه به بررسی کد برنامه می پردازیم.

 


شماتیک پروژه میزان شارژ باتری با ESP8266


در این قست به بررسی شماتیک مدار می پردازیم. به همین منظور، تصویر زیر شمای کلی از پروژه را نمایش می دهد.

Monitor and display the battery charge on the ESP8266-12E board

 

برای برقراری اتصالات مدار فوق، ابتدا اتصال نمایشگر راه به برد ESP، به شیوه زیر در پیش بگیرید.

  • اتصال پایه SCL نمایشگر به پایه ۱۲ ESP8266
  • اتصال پایه SDA نمایشگر به پایه ۱۳ ESP8266
  • اتصال پایه GND نمایشگر به پایه خروجی منفی ماژول کاهنده ولتاژ
  • اتصال پایه VCC(مثبت) نمایشگر به پایه خروجی مثبت ماژول کاهنده LM2596

 

در این مدار، ولتاژ ورودی باتری به کمک ماژول کاهنده LM2596، به ۲٫۵ ولت رسیده و خروجی ماژول کاهنده به ماژول ESP8266 متصل می شود. برای این اتصال، خروجی مثبت این ماژول به پایه VCC مثبت ماژول وای فای ESP و خروجی منفی آن به پایه GND منفی ماژول ESP8266 متصل می شود. از آنجاییکه در این پروژه قصد نمایش میزان سطح شارژ باتری را داریم، بنابراین کابل مثبت باتری، با یک تقسیم مقاومتی، به پایه ADC ماژول ESP8266 متصل می شود. در رابطه با تقسیم مقاومتی، پیشنهاد می کنم آموزش آن را که در این لینک قرار دارد، مطالعه نمایید. همچنین اتصالات تقسیم مقاومتی، به شرح  زیر است.

  • اتصال یک پایه مقاومت یک کیلو به زمین
  • اتصال پایه مثبت باتری به یک طرف پایه مقاومت ده کیلو
  • اتصال دو پایه دیگر از هر مقاومت به یکدیگر و اتصال این پایه مشترک به پایه ADC ماژول ESP8266

توجه: جهت افزایش دقت ADC، پیشنهاد می گردد که یک خازن ۲۲ پیکوفاراد با پایه ADC ماژول و GND موازی نمایید.

 


شماتیک نمایش میزان شارژ باتری با آردوینو UNO


در این قسمت به بررسی شماتیک پروژه برای قسمت آردوینو UNO می پردازیم. تصویر زیر، بیان گر فرم کلی اتصالات است.

 

همانطور که پیشتر نیز گفته شد، برای قسمت آردوینو، نمایشگر کاراکتری ۲X16 در نظر گرفته ایم. اتصالات این نمایشگر را به شرح زیر، دنبال کنید.

اتصال پایه RS نمایشگر به پایه GPIO12 آردویینو

اتصال پایه EN نمایشگر به پایه GPIO11 آردویینو

اتصال پایه D4 نمایشگر به پایه GPIO5 آردویینو

اتصال پایه D5 نمایشگر به GPIO4 آردویینو

اتصال پایه D6 نمایشگر به پایه GPIO3 آردویینو

اتصال پایه D7 نمایشگر به پایه GPIO2 آردویینو

اتصال پایه GND نمایشگر به GND آردویینو

اتصال پایه VCC نمایشگر به پایه ۵ ولت آردویینو

اتصال پایه VO نمایشگر به GND

اتصال پایه R/W نمایشگر به پایه GND آردویینو

نمایشگر کاراکتری، دارای دو پایه جهت تنظیم نور زمینه است. برای تنظیم نور زمینه، پایه آند را با یک مقاومت یک کیلو به ۵ ولت آردویینو و پایه کاتد را به GND آردویینو متصل نمایید. با افزایش و کاهش میزان این مقاومت، می توانید نور پس زمینه را کنترل نمایید.  در ادامه، اتصالات باتری را به صورت زیر دنبال نمایید:

اتصال پایه مثبت باتری به کمک یک مقاومت یک کیلو اهمی(به صورت سری) به پایه A0 آردوینو

اتصال پایه منفی باتری به پایه GND آردوینو

توجه۱: برای عملکرد بهتر و خروجی دقیق، قرار دادن یک خازن به صورت موازی با پایه A0 و GND با ظرفیت ۲۲ پیکو فاراد، توصیه می گردد.

توجه۲: در این پروژه تغذیه آردوینو از طریق کابل USB تامین شده، شما می توانید با کلیک بر روی این لینک، آموزش تغذیه آردوینو را از طریق باتری را مشاهده کنید.

توجه۳: مطابق شماتیک فوق، قطب مثبت باتری به کمک یک مقاومت یک کیلو اهمی(به صورت سری) به پایه A0 متصل شده است. از آنجاییکه برد آردوینو توان تغذیه از طریق پایه ها GPIO را نیز دارد، جهت جلوگیری از تداخلات ولتاژی، وجود این مقاومت کاملا ضروریست. همچنین این مقاومت و خازن تشکیل یک فیلتر پایین گذر جهت حذف نویزهای ورودی آنالوگ، می دهند.

 


کد پروژه نمایشگر شارژ باتری با ESP8266-12E


در این قسمت کدهای پروژه مانیتورینگ باتری را مشاهده می نمایید. این کدها برای ماژول ESP8266-12E توسعه یافته اند. این کدها را در نرم افزار آردوینو کپی و سپس بر روی برد آپلود نمایید. در نظر داشته باشید که برای آپلود کد بر روی ماژول، می بایست با طی مراحل زیر، آن را در حالت پروگرام قرار دهید.

  1. پایه GPIO0 ماژول را به GND متصل کنید.
  2. پایه RESET ماژول را برای یک ثانیه به GND مدار متصل کرده و سپس اتصال را جدا سازید.
  3. اتصال پایه GPIO0 را از مین جدا سازید.
  4. ماژول آماده پروگرام است.

پس از آپلود برنامه، یکبار ماژول را خاموش و سپس روشن کرده تا فعالیت آن آغاز گردد. جهت اطلاعات بیشتر در رابطه با پروگرام ماژول ESP8266-12E، می توانید آموزش آن را که در این لینک آمده، مطالعه نمایید.

#include <Wire.h>
#include <U8g2lib.h>  //کتابخانه نمایشگر OLED
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 12, /* data=*/13); //انتخاب پایه ۱۲ برای SCL و پایه ۱۳ برای SDA برای اتصال نمایشگر
#include <Battery.h>  //اضافه کردن کتابخانه باتری
Battery battery(3400, 4200, A0);   //ایجاد یک نمونه شی از کلاس باتری، ورودی اول حداقل ولتاژ، دوم حداکثر و سومی پین آنالوگ جهت خواندن مقدار باتری این مقادیر برای باتری لیتیم یونی و پلیمیری تعیین شده است
void setup() {
  Serial.begin(9600);
  while (!Serial);
  battery.begin(1000, 11.0);   //ورودی اول این تابع ولتاژ مرجع را به میلی ولت تعیین می کند. ورودی دوم نرخ تبدیل تقسیم مقاومتی است. از آنجاییکه تقسیم مقاومتی استفاده شده ورودی را تقسیم بر ۱۱ می کند، بنابراین پارامتر دوم ۱۱ خواهد بود
  u8g2.begin();   //تنظیمات اولیه نمایشکر
  u8g2.setFont(u8g2_font_ncenB18_tr);  //تنظیم فونت نمایشگر
  u8g2.setFontMode(0);
}


void loop() {
  char data_batt[10]; //متغیر جهت نمایش شارژ باتری
  float batt_v = float(battery.voltage());   //دریافت میزان شارژ باتری
  delay(1000);
  float batt_lvl = battery.level();    //دریافت سطح شارژ باتری
  delay(200);
  Serial.print("Battery voltage: ");
  Serial.flush();
  Serial.print(batt_v, 2);  //نمایش ولتآژ باتری
  Serial.flush();
  Serial.print(" (");
  Serial.flush();
  Serial.print(batt_lvl);  //نمایش میزان شارژ باتری
  Serial.println("%)");
  Serial.flush();
  u8g2.firstPage();   //شروع به نمایش داده ها
  u8g2.setCursor(10, 20);  //تنظیم موقعیت جهت نمایش داده
  itoa(batt_lvl, data_batt, 10);   // تبدیل مقدار درصد شارژ باتری به متغیر ارایه ای رشته ای جهت نمایش
  u8g2.drawUTF8(10, 40, data_batt);   //نمایش در صد شارژ باتری در موقعیت ۱۰ و ۴۰
  u8g2.setCursor(40, 40);  //تنظیم موقعیت جهت نمایش داده
  u8g2.print("%");  //نمایش علامت درصد
  delay(2000);
  u8g2.nextPage();   //پایان نمایش داده ها
}

 

 


کد پروژه نمایشگر شارژ باتری با آردوینو UNO


در این قسمت به بررسی کدهای پروژه به کمک برد آردوینو UNO می پردازیم. بنابراین در منوی Tools->Boards، آردوینو UNO را انتخاب کرده و کدهای زیر را بر روی آن آپلود کنید.

#include <Battery.h>  //اضافه کردن کتابخانه باتری
Battery battery(3400, 4200, A0);   //ایجاد یک نمونه شی از کلاس باتری، ورودی اول حداقل ولتاژ، دوم حداکثر و سومی پین آنالوگ جهت خواندن مقدار باتری این مقادیر برای باتری لیتیم یونی و پلیمیری تعیین شده است
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;     //متغیر  های مختلف جهت تنظیم پایه های متصل به نمایشگر
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);   //راه اندازی نمایشگر
void setup() {
  Serial.begin(9600);
  while (!Serial);
  battery.begin(5000, 1.0);  // در این تابع از آنجاییکه ولتاژ مرجع اردوینو ۵ ولت است، مقدار آن به میلی ولت در ووردی اول قرار می گیرد. برای ورودی دوم، از آنجاییکه 
  lcd.begin(16, 2);  //راه اندازی نمایشگر
}
void loop() {
  float batt_v = float(battery.voltage());   //دریافت میزان شارژ باتری
  delay(1000);
  float batt_lvl = battery.level();    //دریافت سطح شارژ باتری
  delay(200);
  Serial.print("Battery voltage: ");
  Serial.flush();
  Serial.print(batt_v, 2);  //نمایش ولتآژ باتری
  Serial.flush();
  Serial.print(" (");
  Serial.flush();
  Serial.print(batt_lvl);  //نمایش میزان شارژ باتری
  Serial.println("%)");
  Serial.flush();
  lcd.setCursor(0, 0);  //تعیین موقعیت جهت نمایش شارژ باتری
  lcd.print("BATT: ");
  lcd.print(batt_lvl);   //نمایش شارژ باتری
  lcd.print("%");

}

 

 


اجرای پروژه سطح شارژ باتری


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

پروژه ساخت نمایشگر سطح شارژ باتری با ESP8266 آردوینو - دیجی اسپارک

 

در ان پروژه، علاوه بر نمایش اطلاعات باتری بر روی نمایشگر OLED، داده های باتری شامل ولتاژ و درصد شارژ، در سریال مانیتور نیز نمایش داده می شوند. همچنین، مطابق تصویر زیر، میزان درصد شارژ باتری را نمایشگر کاراکتری متصل به آردوینو، نمایش می دهد.

 


تحلیل کدهای پروژه


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

 

Battery battery(3400, 4200, A0);

مطابق دستور فوق، از کلاس کتابخانه باتری، یک نمونه شی به نام battery می سازیم. از آنجاییکه حداقل ولتاژ باتری های لیتیمی ۳٫۴ ولت است، این مقدار ۳۴۰۰(میلی ولت) تعیین می شود. به همین منوال، ولتاژ بیشینه ۴۲۰۰ تعیین گردیده است. در نهایت، از آنجاییکه ماژول ESP8266-12E تنها یک کانال ورودی آنالوگ دارد، بنابراین با قرار دادن عبارت A0، ورودی آنالوگ را تعیین می نماییم. برای برد آردوینو نیز با توجه به استفاده از کانال شماره ۰ مبدل آنالوگ، همین رویه برای برد آردوینو برقرار است. در ادامه، به کمک دو تابع زیر، می توانیم ولتاژ و سطح شارژ باتری را به ترتیب، خوانده و در متغیر مورد نظر، ذخیره نماییم.

battery.voltage()
 battery.level()

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

 


لوازم مورد نیاز


  1. ماژول ESP8266
  2. نمایشگر OLED
  3. برد آردوینو UNO
  4. نمایشگر کاراکتری ۲X16
  5. ماژول شارژر باتری
  6. مقاومت یک کیلو اهم
  7. مقاومت ۱۰ کیلو اهم
  8. خازن عدسی ۲۲ پیکوفاراد
  9. مبدل ولتاژ  کاهنده LM2596
  10. ماژول افزاینده ولتاژ XL6009
  11. برد راه انداز ماژول ESP8266
  12. انواع باتری های لیتیم پلیمر

 


جمع بندی


در این آموزش به طراحی و پیاده سازی یک سیستم نمایشگر میزان درصد شارژ باتری به کمک ماژول ESP8266 و برد آردوینو UNO پرداختیم. از آنجاییکه باتری ها یکی از ابزارهای مهم در طراحی سیستم های قابل حمل به شمار می روند، لذا نمایش میزان سطح شارژ آن امری حیاتی است. در این آموزش، جهت اندازه گیری میزان شارژ و ولتاژ باتری، از کتابخانه battery.h استفاده نموده ایم. به کمک این کتابخانه و در عین سادگی، می توانیم میزان شارژ باتری های مختلف را اندازه بگیریم. در نهایت سطح شارژ اندازه گیری شده را بر روی نمایشگر OLED برای ماژول ESP و نمایشگر کاراکتری برای آردوینو UNO، نمایش می دهیم.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۲ دیدگاه

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

    • سلام و متشکرم از شما
      بله، رویه کار دقیقا همین است. البته دیگر نیاز به تقسیم مقاومتی نخواهید داشت و ولتاژ مرجع نیز ۵۰۰۰ باید تعیین شود. برای این مورد، آموزش را بروز رسانی خواهم کرد.

  • سلام
    با تشکر از مطالب عالی که تو سایت آپلود میکنید.
    یه سوال داشتم و اون اینه که من بجای itoa(….) برای تبدیل اعداد به آرایه از
    sprintf(datachar , “%3.1f” , batt_lvl) استفاده کردم . الان مشکلی پیش نمیاد واسه نمایش درصد باتری ؟؟

    • سلام و متشکرم از لطف شما
      این مورد را من تست نکردم اما به نظر می رسد که مشکلی نباشد. چون تابع sprintf شکل توسعه یافته تر تابع itoa به شمار می رود. این مورد را لطفا شما هم تست کنید و در کامنت بعدی لطفا نتیجه را اعلام نمایید.
      سپاس

  • سلام مهندس
    میشه یه پروژه ای بزارید که بشه باهاش ۴ عدد ارمیچر را کنترل کرد
    یعنی در مدار فرستنده یه ولوم باشه که وقتی ولوم را میچرخونم سرعت هر چهار عدد ارمیچر بصورت یکسان کم یا زیاد بشه
    اگه میشه این پروژه را با ماژول nrf و اردوینو بزارید
    چون خودم میخواهم کواد کوپتر بسازم

  • سلام و عرض خسته نباشید خدمت شما
    اگر من از این آموزش روی برد بلو پی stm 32 با هسته اردوینو استفاده کنم مانند esp8266 نیاز به ماژول کاهنده هست یا مثل مثال با برد uno میشه از مقاومت استفاده کرد؟ نحوه استفاده از این پروژه روی stm32 با هسته اردوینو به چه صورته؟
    با تشکر

    • سلام و متشکرم از شما
      ابتدا از تاخیر در پاسخگویی عذرخواهی می کنم.
      این مورد بستگی به رنج ADC قابل اندازه گیری این برد دارد. ولتاژ مرجع ADC چقدر است؟

      • سلام و تشکر بابت مطالب واقعاخوبی که در دیجی اسپارک منتشر می‌کنید حقیقت من هم نمیدونم که رنج ADC قابل اندازه گیری برد بلو پی چقدر هست سرچ هم کردم داخل نت چیزی در این مورد پیدا نکردم فقط می‌دونم ولتاژ کاری MCU ولتاژ ۳.۳ هست و بعضی از پین های GPIO تا ۵ ولت تحمل ولتاژی دارند و بعضی از پین ها هم تا ۳.۳ ولت ولی نمیدونم کدوم پین ها
        راه دیگه ای برای فهمیدن ولتاژ مرجع ADC وجود نداره؟
        با تشکر

        • سلام و از لطف شما بی نهایت سپاسگزارم
          من مورد را بررسی کردم، ولتاژ مرجع ADC برد ۳٫۳ ولت است.

      • فکر کنم ولتاژ مرجع ۳.۳ ولت باشه با توجه به اینکه MCU هم با ۳.۳ ولت کار می‌کنه
        در این صورت آیا میشه به وسیله یک دیود شاتکی با افت ولتاژ مستقیم ۱.۲ ولت ولتاژ باطری رو که در حالت فول شارژ ۴.۲ هست به ولتاژ ۳ولت رسوند و سپس به برد stm 32 وصل کرد؟یا حتما باید از یک ماژول کاهنده استفاده بشه؟
        با تشکر

        • این کار را می توانید انجام دهید. اما به هیچ وجه توصیه نمی کنم. چراکه در رابطه با دیود موارد زیر را باید در نظر داشته باشید:
          ۱- دیود در اثر گذر جریان افت ولتاژی متغیر خواهد داشت.
          ۲- دیود با تغییر دما دفت ولتاژی متغیر خواهد داشت.
          بنابراین حتما از یک ماژول کاهنده یا بهتر رگولاتور LF33 استفاده نمایید. این رگولاتور بهترین کارایی را در برابر کاهنده LM2596 خواهد داشت.
          لینک خرید LF33، کلیک کنید

          • با تشکر تست میکنم نتیجه رو اعلام میکنم
            فقط ورودی رگلاتور به مثبت باطری خروجی رگلاتور به STM 32 و منفی رگلاتور به منفی باطری باد اتصال داده بشه ؟ نیازی به استفاده از مقاومت برای خروجی LF33 به برد STM32 یا نکته دیگه ای نیست؟
            با تشکر

            • از لطف شما ممنونم
              خیر نیازی به اتصال مقاومت نیست. به همین ترتیب اتصال را برقرار کنید. فقط منفی رگولاتور علاوه بر باتری به GND برد نیز باید متصل گردد.

              • یک سوال ایا استفاده ار رگلاتور LF33 برای تبدیل ولتاژ ۳٫۷-۴٫۲ باطری به ولتاز ۳٫۳ جهت تغذیه برد STM32 هستش یا برای کم کردن ولتاژ باطری جهت اتصال به پین ADC جهت خواندن میزان ولتاژ باطری؟
                چون شما برای ESP8266 از روش تقسیم مقاومتی برای کم کردن ولتاژ باطری برای پایه ADC جهت خواندن استفاده کردید
                ایا رگلاتور LF33 جایگزین تقسیم مقاومتی برای پین ADC هستس ?
                با تشکر

                • سلام و ببخشید بابت تاخیر در پاسخگویی
                  خیر، رگولاتور جهت تامین تغذیه برد هست. برای ADC باید از تقسیم مقاومتی استفاده کنید.

                  • تشکر .آیا راه دیگه ای جر تقسیم مقاومتی وجود نداره؟ چون تقسیم مقاومتی در دراز مدت باعث د شارژ باطری میشود

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

  • سلام چرا نمایشگر کاراکتری ۱۶ در دو بنده از هر چیز دوتا نشون میده
    الان رو نمایشگر اینجوری هست
    BATT: 0.00%%%