تحلیل کتابخانه

تحلیل و بررسی کتابخانه LowPower.h

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

مدیریت مصرف انرژی در سیستم های اینترنت اشیا، امری بسیار مهم و ضروری تلقی می شود. از آنجاییکه اکثر دستگاه های متصل به شبکه اینترنت اشیا از طریق باتری تغذیه شده و نیاز است تا این دستگاه ها سال ها بدون نیاز به شارژ باتری فعال باشند، لذا مدیریت و کاهش توان مصرفی، از چالش های اساسی در طراحی این نوع از سیستم ها به شمار می رود. در این آموزش به تحلیل و بررسی کتابخانه LowPower.h، مخصوص بردهای آردوینو می پردازیم. به کمک این کتابخانه و به سادگی، می توانیم مدهای مختلف توان مصرفی پایین را برای بردهای آردوینو تعیین نماییم. بدین ترتیب، در حین طراحی پروژه، دغدغه خاطر از حیث طراحی برنامه جهت کنترل توان مصرفی کاسته شده و تمرکز بر رویه اصلی برنامه، قرار خواهد گرفت. در این آموزش نیز مطابق سلسله آموزش های کتابخانه، ابتدا به معرفی الزامات و بردهای مورد پشتیبانی کتابخانه LowPower.h می پردازیم. در ادامه به معرفی توابع پرداخته و در نهایت با ارائه مثالی، به بحث خاتمه می دهیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نصب کتابخانه LowPower.h


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

Analysis and review of LowPower.h library

 

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

Analysis and review of LowPower.h library

 

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

 


بردهای مورد پشتیبانی


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

میکروکنترلرهای AVR که هسته بردهای آردوینو را تشکیل می دهند، دارای مدهای مختلف توان مصرفی هستند. این مدها شامل حالت های idle، Power Down، Power Save و StandBy می شوند. جهت اطلاعات بیشتر در این زمینه، می توانید به دیتاشیت پردازنده مورد نظر مراجعه نمایید.

 


توابع کلیدی کتابخانه LowPower.h


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

تابع ورودی شرح
void    idle(period_t period, adc_t adc, timer2_t timer2,

timer1_t timer1, timer0_t timer0, spi_t spi,

usart0_t usart0, twi_t twi);

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

ورودی دوم: فعال/غیر فعال سازی adc

ورودی سوم: فعال غیر فعال سازی تایمر۲

ورودی چهارم: فعال/غیر فعال سازی تایمر۱

ورودی پنجم : فعال/غیر فعال سازی تایمر۰

ورودی ششم: فعال/غیر فعال سازی SPI

ورودی هفتم: فعال/غیر فعال سازی USART

ورودی هشتم: فعال/غیر فعال سازی ارتباط I2C

 

 

 

این تابع میکروکنترلر را در حالت کم مصرف idle قرار می دهد. ورودی اول مدت زمان قرار گیری در این حالت را تعیین کرده و سایر ورودها، بسته به نیاز در زمان قرارگیری در حالت idle، فعال و یا غیر فعال می شوند. برای این مورد ثوابتی تعیین شده که در جدول بعدی آن را خواهیم دید. همچنین این تابع با میکروکنترلرهای زیر سازگار است:

AVR_ATmega328P(uno)

AVR_ATmega168

AVR_ATmega168P

AVR_ATmega88

 

void     idle(period_t period, adc_t adc, timer5_t timer5, timer4_t timer4, timer3_t timer3, timer2_t timer2,timer1_t timer1, timer0_t timer0, spi_t spi,usart3_t usart3, usart2_t usart2, usart1_t usart1,usart0_t usart0, twi_t twi);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

ورودی دوم فعال/غیرفعال سازی adc

ورودی سوم الی نهم: فعال/غیر فعال سازی تایمر ۵ الی ۰

ورودی دهم: فعال/غیرفعال سازی SPI

ورودی یازدهم الی چهاردهم: فعال/غیرفعال سازی سریال سخت افزاری

ورودی پانزدهم: فعال/غیرفعال سازی I2C

 

این تابع دقیقا مشابه مورد بالا عمل کرده، اما با این تفاوت که برای میکروکنترلر MEG2560 یا همان آردوینو MEGA استفاده می شود.
void     idle(period_t period, adc_t adc, timer4_t timer4,

timer3_t timer3, timer1_t timer1, timer0_t timer0,

spi_t spi, usart1_t usart1, twi_t twi, usb_t usb);

 

 

 

 

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

ورودی دوم فعال/غیرفعال سازی adc

ورودی سوم الی نهم: فعال/غیر فعال سازی تایمر ۵ الی ۰

ورودی دهم: فعال/غیرفعال سازی SPI

ورودی یازدهم الی چهاردهم: فعال/غیرفعال سازی سریال سخت افزاری

ورودی پانزدهم: فعال/غیرفعال سازی I2C

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

ورودی دوم: فعال/غیرفعال سازی adc

ورودی سوم : فعال/ غیر فعال سازی تایمر ۴

ورودی چهارم: فعال/غیرفعال سازی تایمر ۱

ورودی پنجم: فعال/غیرفعال سازی تایمر ۰

ورودی ششم: فعال/غیرفعال سازی spi

ورودی هفتم: فعال/غیرفعال سازی uart

ورودی هشتم: فعال/غیر فعال سازی I2C

 

این تابع دقیقا مشابه موارد قبلیست. این تابع برای میکروکنترلر ATMEGA32U4 که همان آردوینو پرو میکروست، اجرا می شود.
void powerDown(period_t period, adc_t adc, bod_t bod) ورودی اول: مدت زمان

ورودی دوم: فعال/غیرفعال سازی adc

ورودی سوم: فعال یا غیر فعال سازی Brown Out Detection

به کمک این تابع  میکروکنترلر و یا برد آردوینو در حالت powerdown، با مدت زمانیکه در پارامتر اول تنظیم شده، قرار می گیرد. به کمک سایر پارامترها، می توان قابلیت های مختلف را در حین قرار گیری در این مد، فعال و یا غیر فعال نمود.
void powerSave(period_t period, adc_t adc, bod_t bod, timer2_t timer2) ورودی اول: مدت زمان

ورودی دوم: فعال/غیرفعال سازی adc

ورودی سوم: فعال/غیرفعال سازی  Brown Out Detection

ورودی چهارم: فعال/غیرفعال سازی timer2

به کمک این تابع  میکروکنترلر و یا برد آردوینو در حالت powerSave، با مدت زمانیکه در پارامتر اول تنظیم شده، قرار می گیرد. به کمک سایر پارامترها، می توان قابلیت های مختلف را در حین قرار گیری در این مد، فعال و یا غیر فعال نمود.
void            powerStandby(period_t period, adc_t adc, bod_t bod) ورودی اول: مدت زمان

ورودی دوم: فعال/غیرفعال سازی adc

ورودی سوم: فعال یا غیر فعال سازی Brown Out Detection

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

 

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

مدت قرار گیری در مد کم مصرف نام ثابت
۱۵ میلی ثانیه SLEEP_15MS
۳۰میلی ثانیه SLEEP_30MS
۶۰میلی ثانیه SLEEP_60MS
۱۲۰ میلی ثانیه SLEEP_120MS
۲۵۰ میلی ثانیه SLEEP_250MS
۵۰۰ میلی ثانیه SLEEP_500MS
۱ثانیه SLEEP_1S
۲ثانیه SLEEP_2S
۴ثانیه SLEEP_4S
۸ثانیه SLEEP_8S
برای همیشه SLEEP_FOREVER

در ادامه، جدول زیر لیست ثوابت جهت فعال/غیر فعال سازی تایمرها را نمایش می دهد.

نام ثابت شرح
TIMER5_OFF تایمر ۵ در حالت کم مصرف خاموش
TIMER5_ON تایمر ۵ در حالت کم مصرف روشن
TIMER4_OFF تایمر۴ در حالت کم مصرف خاموش
TIMER4_ON تایمر۴ در حالت کم مصرف روشن
TIMER3_OFF تایمر۳ در حالت کم مصرف خاموش
TIMER3_ON تایمر۳ در حالت کم مصرف روشن
TIMER2_OFF تایمر۲در حالت کم مصرف خاموش
TIMER2_ON تایمر۲در حالت کم مصرف روشن
TIMER1_OFF تایمر۱ در حالت کم مصرف خاموش
TIMER1_ON تایمر۱ در حالت کم مصرف روشن
TIMER0_OFF تایمر۰ در حالت کم مصرف خاموش
TIMER0_ON تایمر۰ در حالت کم مصرف روشن

 

در نهایت، جدول زیر ثوابت مربوط به فعال/ غیر سازی امکانات جانبی را نمایش می دهد.

نام ثابت شرح
BOD_OFF خاموش کردن تشخیص Brown Out حین مد کم مصرف
BOD_ON روشن کردن تشخیص Brown Out حین مد کم مصرف
ADC_OFF خاموش کردن ADC حین مد کم مصرف
ADC_ON روشن کردن ADC حین مد کم مصرف
TWI_OFF خاموش کردن I2C حین مد کم مصرف
TWI_ON روشن کردن I2C حین مد کم مصرف
USB_OFF خاموش کردن USB حین مد کم مصرف
USB_ON روشن کردن USB حین مد کم مصرف
SPI_OFF خاموش کردن SPI حین مد کم مصرف
SPI_ON روشن کردن SPI حین مد کم مصرف
USART0_OFF خاموش کردن USART0 حین مد کم مصرف
USART0_ON روشن کردن USART0 حین مد کم مصرف
USART1_OFF خاموش کردن USART1 حین مد کم مصرف
USART1_ON روشن کردن USART1 حین مد کم مصرف
USART2_OFF خاموش کردن USART2 حین مد کم مصرف
USART2_ON روشن کردن USART2 حین مد کم مصرف
USART3_OFF خاموش کردن USART3 حین مد کم مصرف
USART3_ON روشن کردن USART3 حین مد کم مصرف

 


اجرای یک نمونه برنامه


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

#include "LowPower.h"        //افزودن کتابخانه

void setup()
{
 
}

void loop() 
{


  //تابع زیر برای پردازنده ATMEGA328P که هسته برد اردوینو را شامل می شود استفاده می گردد. به کمک این تابع میکروکنترلر در مد IDLE قرار می گیرد. 
  LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, 
                SPI_OFF, USART0_OFF, TWI_OFF);
                //در تابع فوق، برد اردوینو در حالت  idle به مدت ۸ ثانیه قرار می گیرد. همچنین سایر قابلیت های جانبی میکروکنترلر را می توان در این مد، به کمک سایر ورودی ها فعال و غیر فعال نمود.

                //در این قسمت کدهای خود را قرار دهید. بدین ترتیب، پس از اتمام مدت زمان ۸ ثانیه که میکروکنترلر در حالت idle قرار می یگیرد، کدهای شما اجرا خواهد شد. پس از اتمام کدهای شما، مجددا حالت idle برای ۸ ثانیه فعلا شده و پس از طی زمان ۸ ثانیه، کدهای شما اجرا می شوند.
           
}

 


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


 


جمع بندی


در این آموزش به تحلیل و بررسی کتابخانه LowPower.h پرداختیم. از آنجاییکه مدیریت و کنترل توان مصرفی در سیستم های IOT امری ضروریست، لذا به کمک این کتابخانه و به سادگی می توان مصرف باتری را کاهش و عمر سیستم را افزایش داد. بدین ترتیب، دغدغه خاطر توسعه دهنده از بابت کنترل توان مصرفی کاسته شده و تمرکز بر اصل طراحی قرار می گیرد. در این آموزش، ابتدا بردهای مورد پشتیبانی این کتابخانه را مورد بررسی قرار دادیم. در ادامه بحث، به بررسی توابع کلیدی این کتابخانه و ثابت های آن، پرداخته شد. در نهایت با ارائه مثالی از کاربرد، بحث را مورد خاتمه قرار دادیم.

 

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

 

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

معین صابری

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

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

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