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

حالت Sleep آردوینو و کاهش مصرف انرژی

حالت Sleep آردوینو و کاهش مصرف انرژی

حالت Sleep آردوینو و کاهش مصرف انرژی

حالت Sleep آردوینو و کاهش مصرف انرژی

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

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

حالت خواب با خاموش کردن ماژول استفاده نشده ، دستگاه را در حالت کم مصرف قرار می دهد.

امروز ما با حالت های خواب آردوینو آشنا خواهیم شد و با استفاده از Ammeter میزان مصرف برق را نشان خواهیم داد.

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

بخوانید : پروگرام آردوینو با بلوتوث

حالت های خواب آردوینو

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

Arduino UNO ، Arduino Nano و Pro-mini همراه با ATmega328P است و دارای یک آشکارساز قهوه ای (BOD) است که ولتاژ تغذیه را در زمان حالت خواب کنترل می کند.

در ATmega328P شش حالت خواب وجود دارد:

حالت Sleep آردوینو و کاهش مصرف انرژی

برای ورود به هر حالت خواب ما باید بیت خواب را در ثبت نام کنترل حالت خواب (SMCR.SE) فعال کنیم.

سپس بیت های حالت خواب ، حالت خواب را در حالت Idle ، کاهش سر و صدا ADC ، Power-Down ، Power-Save ، Standby و Extend Standby خارجی انتخاب می کنند.

یک آردوینو داخلی یا خارجی قطع می شود یا یک تنظیم مجدد می تواند آردوینو را از حالت خواب بیدار کند.

بخوانید : ساخت رسیور IR با استفاده از آردوینو

 

حالت آماده به کار

برای ورود به حالت خواب بیکار ، بیت های SM 2،0 کنترل کننده write 000 را بنویسید.

این حالت CPU را متوقف می کند اما به SPI ، رابط سریال 2 سیمه ، USART ، Watchdog ، شمارنده ها ، مقایسه کننده آنالوگ اجازه می دهد تا کار کند.

حالت بیکار اساساً CLKCPU و CLKFLASH را متوقف می کند.

با استفاده از وقفه داخلی یا داخلی می توان آردوینو را در هر زمان بیدار کرد.

بخوانید : کنترل ماتریس 8×8 با آردوینو


کد آردوینو برای حالت خواب بیکار:



		

LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);

 

بخوانید : کنترل موتور سروو با استفاده از آردوینو

یک کتابخانه برای تنظیم حالتهای مختلف کم مصرف در آردوینو وجود دارد.

بنابراین ابتدا کتابخانه را از لینک داده شده بارگیری و نصب کنید و از کد بالا برای قرار دادن Arduino در حالت خواب بیکار استفاده کنید.

با استفاده از کد بالا ، آردوینو هشت ثانیه به خواب می رود و به طور خودکار بیدار می شود.

همانطور که در کد مشاهده می کنید حالت بیکار تمام تایمرها ، SPI ، USART و TWI (رابط 2 سیم) را خاموش می کند.

رای استفاده از این حالت خواب بیت SM 2،0 را روی to 001 بنویسید.

این حالت CPU را متوقف می کند اما به ADC ، وقفه خارجی ، USART ، رابط سریال 2 سیم ، Watchdog و شمارنده ها اجازه می دهد تا کار کنند.

حالت ADC Noise Reduction در اصل CLKCPU ، CLKI / O و CLKFLASH را متوقف می کند.

با استفاده از روش های زیر می توانیم کنترلر را از حالت کاهش نویز ADC بیدار کنیم:

  • تنظیم مجدد خارجی
  • بازنشانی سیستم دیده بان
  • وقفه نگهبان
  • تنظیم مجدد قهوه ای
  • 2-آدرس آدرس سریال رابط سریال
  • قطع سطح خارجی در INT
  • وقفه تغییر پین
  • وقفه تایمر / شمارنده
  • وقفه آماده SPM / EEPROM

 

بخوانید : آشکارساز حرکت با استفاده از سنسور PIR

 

Power-Down Mode

حالت خاموش کردن تمام ساعتهای تولید شده را متوقف می کند و فقط کارکرد ماژول های ناهمزمان را امکان پذیر می کند.

با نوشتن بیت های SM 2،0تا ‘010» می توان آن را فعال کرد.

در این حالت ، اسیلاتور خارجی خاموش می شود ، اما رابط سریال 2 سیمه ، ناظر و وقفه خارجی به کار خود ادامه می دهند.

فقط با یکی از روش های زیر می توان آن را غیرفعال کرد:

  • تنظیم مجدد خارجی
  • بازنشانی سیستم دیده بان
  • وقفه نگهبان
  • تنظیم مجدد قهوه ای
  • 2-آدرس آدرس سریال رابط سریال
  • قطع سطح خارجی در INT
  • وقفه تغییر پین
  • کد آردوینو برای حالت دوره ای خاموش شدن:

بخوانید : ساخت اعلام حریق با سنسور شعله

LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 

از کد برای روشن کردن حالت خاموش شدن استفاده می شود.

با استفاده از کد بالا ، آردوینو هشت ثانیه به خواب می رود و به طور خودکار بیدار می شود.

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

کد آردوینو برای حالت قطع جریان خاموش:

void loop()
{
    // Allow wake up pin to trigger interrupt on low.
    attachInterrupt(0, wakeUp, LOW);

    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
    // Disable external pin interrupt on wake up pin.

    detachInterrupt(0);

    // Do something here
}

Power-Save Mode

حالت Sleep آردوینو

برای ورود به حالت صرفه جویی در مصرف انرژی ، باید پین SM 2،0 را روی011 بنویسیم.

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

با استفاده از سرریز تایمر می توان دستگاه را از خواب بیدار کرد.

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

Standby Mode

حالت آماده به کار یکسان با حالت Power-Down است ، تنها تفاوت موجود در آنها نوسانگر خارجی است که در این حالت کار می کند. ب

رای فعال کردن این حالت ، پین SM 2،0 را به «110» بنویسید.

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

Extended Standby Mode

 

این حالت فقط با یک استثنا که اسیلاتور همچنان در حال کار است شبیه حالت صرفه جویی در مصرف برق است.

وقتی پین SM 2،0 را روی ‘111 بنویسیم ، دستگاه وارد حالت آماده به کار تمدید می شود.

برای بیدار شدن از حالت آماده به کار طولانی ، دستگاه شش چرخه ساعت طول خواهد کشید.

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

با استفاده از Arduino IDE کد حالت خواب را در آردوینو بارگذاری کنید.

آردوینو وارد حالت خواب بیکار می شود.

سپس میزان مصرف جریان را در آمپرمتر USB بررسی کنید.

در غیر این صورت ، می توانید از یک گیره متر برای همان استفاده کنید.

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

سخت افزار :

 

حالت Sleep آردوینو و کاهش مصرف انرژی

در تنظیمات بالا برای نشان دادن حالت های خواب عمیق آردوینو ، آردوینو به آمپرمتر USB متصل است.

سپس آمپرمتر USB به درگاه USB لپ تاپ متصل می شود. پین داده سنسور DHT11 به پایه D2 آردوینو متصل است.

توضیح کد حالت Sleep آردوینو

کد کامل پروژه  در پایان آورده شده است.

کد با درج کتابخانه برای سنسور DHT11 و کتابخانه LowPower شروع می شود.

برای بارگیری کتابخانه Low Power پیوند را دنبال کنید.

سپس شماره پین ​​آردوینو را که پین ​​داده DHT11 به آن متصل است تعریف کرده و یک شی DH DHT ایجاد کرده ایم.

#include <dht.h>
#include <LowPower.h>

#define dataPin 2
dht DHT;

آردوینو و کاهش مصرف انرژی

در تابع void setup ، ما با استفاده از serial.begin 9600 ارتباط سریال را آغاز کرده ایم ، در اینجا 9600 نرخ باود است.

ما از LED داخلی Arduino به عنوان شاخصی برای حالت خواب استفاده می کنیم.

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

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN,OUTPUT);
  digitalWrite(LED_BUILTIN,LOW);
}

در عملکرد حالت Sleep آردوینو

حلقه خالی ، ما در حال ساخت LED HIGH ساخته شده و داده های دما و رطوبت را از سنسور می خوانیم.

در اینجا ، DHT.read11 دستور خواندن داده ها از حسگر است.

پس از محاسبه داده ها ، می توانیم مقادیر را با ذخیره آن در هر متغیری بررسی کنیم.

در اینجا ، ما دو متغیر نوع float “t” و “h” را گرفته ایم.

از این رو ، داده های دما و رطوبت به صورت سریال بر روی مانیتور سریال چاپ می شوند

void loop() {
  Serial.println("Get Data From DHT11");
  delay(1000);
  digitalWrite(LED_BUILTIN,HIGH);
  int readData = DHT.read11(dataPin); // DHT11

  float t = DHT.temperature;
  float h = DHT.humidity;

  Serial.print("Temperature = ");
  Serial.print(t);
  Serial.print(" C | ");

  Serial.print("Humidity = ");
  Serial.print(h);
  Serial.println(" % ");

  delay(2000);

حالت Sleep آردوینو و کاهش مصرف انرژی

قبل از فعال کردن حالت خواب ، ما در حال چاپ “Arduino: – I am going for a Nap” و ساخت داخلی LED Low هستیم.

پس از آن حالت خواب آردوینو با استفاده از دستور ذکر شده در زیر در کد فعال می شود.

کد زیر حالت خواب دوره ای بیکار Arduino را فعال می کند و یک خواب هشت ثانیه ای دارد.

رابط 2 سیمه ADC ، Timers ، SPI ، USART ، را به حالت خاموش تبدیل می کند.

سپس بعد از 8 ثانیه به طور خودکار آردوینو را از خواب بیدار می کند و روی آن “Arduino: – Hey I just Wake up” چاپ می شود.

Serial.println("Arduino:- I am going for a Nap");
  delay(1000);
  digitalWrite(LED_BUILTIN,LOW);
  LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,
                 SPI_OFF, USART0_OFF, TWI_OFF);
  Serial.println("Arduino:- Hey I just Woke up");
  Serial.println("");
  delay(2000);
}

بنابراین با استفاده از این کد Arduino فقط 24 دقیقه در یک دقیقه بیدار می شود و برای مدت زمان 36 ثانیه در حالت خواب باقی می ماند که باعث کاهش قابل ملاحظه ای در مصرف برق ایستگاه هواشناسی Arduino می شود.

بنابراین ، اگر از Arduino با حالت خواب استفاده کنیم ، می توانیم تقریباً زمان کارکرد دستگاه را دو برابر کنیم.

کد کامل برنامه

Arduino Weather Station with Sleep Mode

#include <dht.h>
#include <LowPower.h>

#define dataPin 2
dht DHT;

void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN,OUTPUT);
digitalWrite(LED_BUILTIN,LOW);
}

void loop() {
Serial.println(“Get Data From DHT11”);
delay(1000);
digitalWrite(LED_BUILTIN,HIGH);
int readData = DHT.read11(dataPin); // DHT11

  float t = DHT.temperature;
float h = DHT.humidity;

Serial.print(“Temperature = “);
Serial.print(t);
Serial.print(” C | “);

  Serial.print(“Humidity = “);
Serial.print(h);
Serial.println(” % “);

  delay(2000);
Serial.println(“Arduino:- I am going for a Nap”);
delay(200);
digitalWrite(LED_BUILTIN,LOW);
LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,
SPI_OFF, USART0_OFF, TWI_OFF);
Serial.println(“Arduino:- Hey I just Woke up”);
Serial.println(“”);
delay(2000);
}

Arduino Weather Station without Sleep Mode

#include <dht.h>

#define dataPin 2
dht DHT;

void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN,OUTPUT);
digitalWrite(LED_BUILTIN,LOW);
}

void loop() {

  digitalWrite(LED_BUILTIN,HIGH);
int readData = DHT.read11(dataPin); // DHT11

  float t = DHT.temperature;
float h = DHT.humidity;

Serial.print(“Temperature = “);
Serial.print(t);
Serial.print(” C | “);

  Serial.print(“Humidity = “);
Serial.print(h);
Serial.println(” % “);

  delay(2000);

}

این پروژه توسط گروه وی تات انجام شده wetat.ir

کپی با دکر منبع بلامانع است

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

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