צריכת חשמל היא נושא קריטי למכשיר הפועל ברציפות לאורך זמן מבלי לכבות אותו. אז כדי להתגבר על בעיה זו כמעט כל בקר מגיע עם מצב שינה, המסייע למפתחים לעצב גאדג'טים אלקטרוניים לצריכת חשמל מיטבית. מצב שינה מעביר את המכשיר למצב חיסכון בחשמל על ידי כיבוי המודול שאינו בשימוש.
מוקדם יותר הסברנו על מצב שינה עמוקה ב- ESP8266 לחיסכון בחשמל. היום נלמד על מצבי שינה של Arduino ונדגים את צריכת החשמל באמצעות מד זרם. מצב שינה של Arduino מכונה גם מצב חיסכון בחשמל Arduino או מצב המתנה של Arduino.
מצבי שינה של ארדואינו
מצבי שינה מאפשרים למשתמש לעצור או לכבות את המודולים שאינם בשימוש במיקרו-בקר אשר מפחיתים משמעותית את צריכת החשמל. Arduino UNO, Arduino Nano ו- Pro-mini מגיעים עם ATmega328P ויש לו גלאי חום (BOD) העוקב אחר מתח האספקה בזמן מצב שינה.
ישנם שישה מצבי שינה ב- ATmega328P:
כדי להיכנס לכל אחד ממצבי השינה עלינו לאפשר את סיבית השינה במרשם בקרת מצב שינה (SMCR.SE). ואז ביטים לבחירת מצב שינה בוחרים את מצב השינה בין סרק, הפחתת רעש ADC, הפעלה למטה, צריכת חשמל, המתנה והמתנה חיצונית.
הפרעות ארדואינו פנימיות או חיצוניות או איפוס יכול להעיר את הארדואינו ממצב שינה.
מצב אידיאלי
כדי להיכנס למצב שינה סרק, כתוב את סיביות ה- SM של הבקר '000'. מצב זה עוצר את המעבד אך מאפשר לפעול לממשק SPI, ממשק 2-חוטים, USART, Watchdog, מונים, משווה אנלוגי. מצב סרק בעצם עוצר את מעבד CLK ו- CLK FLASH. ניתן להעיר את Arduino בכל עת באמצעות הפרעה חיצונית או פנימית.
קוד Arduino למצב שינה סרק:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
קיימת ספרייה להגדרת מצבי צריכת חשמל נמוכים שונים בארדואינו. אז ראשית הורד והתקן את הספרייה מהקישור הנתון והשתמש בקוד שלעיל כדי להכניס את Arduino למצב שינה סרק. על ידי שימוש בקוד לעיל, הארדואינו יעבור לשינה של שמונה שניות ויתעורר אוטומטית. כפי שניתן לראות בקוד שמצב המתנה מכבה את כל הטיימרים, SPI, USART ו- TWI (ממשק דו חוטי).
מצב הפחתת רעש ADC
כדי להשתמש במצב שינה זה כתוב את סיבית ה- SM ל '001'. המצב מפסיק את המעבד אך מאפשר לפעול ל- ADC, להפסקה חיצונית, ל- USART, לממשק סדרתי דו חוטי, לכלב ולמונים. מצב הפחתת רעש ADC בעצם מפסיק את מעבד CLK, CLK I / O ו- CLK FLASH. אנו יכולים להעיר את הבקר ממצב הפחתת רעש ADC בשיטות הבאות:
- איפוס חיצוני
- איפוס מערכת כלב השמירה
- כלב שמירה קוטע
- איפוס חום-החוצה
- התאמת כתובת דו-חוטית של ממשק סידורי
- הפרעה ברמה החיצונית ב- INT
- הפסקת שינוי הסיכה
- הפסקת טיימר / מונה
- הפרעה מוכנה ל- SPM / EEPROM
מצב כיבוי
מצב הפעלה-למטה עוצר את כל השעונים שנוצרו ומאפשר רק הפעלת מודולים אסינכרוניים. ניתן להפעיל אותו על ידי כתיבת סיביות ה- SM ל '010'. במצב זה, המתנד החיצוני נכבה, אך הממשק הטורי בעל 2 החוטים, כלב השמירה והפרעה חיצונית ממשיכים לפעול. ניתן להשבית אותו רק באמצעות אחת מהשיטות הבאות:
- איפוס חיצוני
- איפוס מערכת כלב השמירה
- כלב שמירה קוטע
- איפוס חום-החוצה
- התאמת כתובת דו-חוטית של ממשק סידורי
- הפרעה ברמה החיצונית ב- INT
- הפסקת שינוי הסיכה
קוד ארדואינו למצב תקופתי לכיבוי:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
הקוד משמש להפעלת מצב ההפעלה. על ידי שימוש בקוד לעיל, הארדואינו יעבור לשינה של שמונה שניות ויתעורר אוטומטית.
אנו יכולים להשתמש גם במצב הכיבוי עם הפסקה, כאשר הארדואינו ייכנס למצב שינה אך רק מתעורר כאשר ניתנת הפרעה חיצונית או פנימית.
קוד Arduino למצב הפסקת הפעלה למטה:
void loop () { // אפשר לסיכת השכמה להפעיל הפרעה נמוכה. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // השבת הפרעה לסיכה חיצונית בסיכת השכמה. detachInterrupt (0); // עשה משהו כאן }
מצב חיסכון בחשמל
כדי להיכנס למצב חיסכון בחשמל עלינו לכתוב את סיכת ה- SM ל '011'. מצב שינה זה דומה למצב הכיבוי, רק למעט חריג אחד כלומר אם הטיימר / מונה מופעל, הוא יישאר במצב פועל גם בזמן השינה. ניתן להעיר את המכשיר באמצעות הצפת הטיימר.
אם אינך משתמש בזמן / הדלפק, מומלץ להשתמש במצב כיבוי במקום במקום חיסכון בחשמל.
מצב המתנה
מצב המתנה זהה למצב Power-Down, ההבדל היחיד ביניהם הוא המתנד החיצוני המשיך לפעול במצב זה. להפעלת מצב זה כתוב את סיכת ה- SM ל '110'.
מצב המתנה מורחב
מצב זה דומה למצב חיסכון בחשמל רק למעט אחד שהמתנד ממשיך לפעול. המכשיר יעבור למצב המתנה מורחב כאשר אנו כותבים את סיכת ה- SM ל- '111'. המכשיר ייקח שישה מחזורי שעון להתעורר ממצב המתנה המורחב.
להלן הדרישות לפרויקט זה, לאחר חיבור המעגל לפי דיאגרמת המעגל. העלה את קוד מצב שינה ל- Arduino באמצעות Arduino IDE. Arduino יעבור למצב שינה סרק. ואז בדוק את הצריכה הנוכחית במד זרם ה- USB. אחרת, אתה יכול גם להשתמש במד מהדק עבור אותו.
רכיבים נדרשים
- ארדואינו UNO
- חיישן טמפרטורה ולחות DHT11
- מד זרם USB
- קרש לחם
- חוטי חיבור
למידע נוסף על השימוש ב- DHT11 עם Arduino, עקוב אחר הקישור. כאן אנו משתמשים במד זרם USB למדידת המתח הנצרך על ידי ארדואינו במצב שינה.
מד זרם USB
מד זרם USB הוא מכשיר Plug and Play המשמש למדידת המתח והזרם מכל יציאת USB. הדונגל מתחבר בין ספק הכוח USB (יציאת USB למחשב) והתקן USB (Arduino). למכשיר זה יש נגד 0.05ohm בקו אחד עם סיכת החשמל דרכו הוא מודד את ערך הזרם הנמשך. המכשיר מגיע עם ארבע תצוגות בעלות שבע קטעים, המציגות באופן מיידי את ערכי הזרם והמתח הנצרכים על ידי המכשיר המחובר. ערכים אלה מתהפכים במרווח של כל שלוש שניות.
מִפרָט:
- טווח מתח הפעלה: 3.5V עד 7V
- דירוג זרם מרבי: 3A
- גודל קומפקטי, קל לנשיאה
- אין צורך באספקה חיצונית
יישום:
- בדיקת התקני USB
- בדיקת רמות עומס
- ניפוי באגים במטענים לסוללות
- מפעלים, מוצרי אלקטרוניקה ושימוש אישי
תרשים מעגל
בהתקנה שלעיל כדי להדגים מצבי שינה עמוקים של Arduino, ה- Arduino מחובר למד זרם ה- USB. ואז מד זרם ה- USB מחובר ליציאת ה- USB של המחשב הנייד. סיכת נתונים של חיישן DHT11 מחוברת לסיכת D2 של הארדואינו.
הסבר קוד
הקוד השלם לפרויקט עם סרטון ניתן בסוף.
הקוד מתחיל בהכללת הספרייה של חיישן DHT11 וספריית LowPower . להורדת ספריית צריכת החשמל הנמוכה לחץ על הקישור. לאחר מכן הגדרנו את מספר הסיכה של Arduino אליו מחובר סיכת הנתונים של ה- DHT11 ויצרנו אובייקט DHT.
#לִכלוֹל
ב התקנת חלל הפונקציה, יש לנו יזמנו את התקשורת טורית באמצעות serial.begin (9600), וכאן 9600 הוא קצב השידור. אנו משתמשים ב- LED המובנה של Arduino כאינדיקטור למצב השינה. אז הגדרנו את הסיכה כפלט, וכתיבה דיגיטלית נמוכה.
הגדרת חלל () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
ב לולאת חלל הפונקציה, אנו עושים המובנה LED גבוהה קריאת נתון הטמפרטורה ולחות מהחיישן. כאן, DHT.read11 (); הפקודה היא קריאת הנתונים מהחיישן. לאחר חישוב הנתונים, אנו יכולים לבדוק את הערכים על ידי שמירתם בכל משתנה. הנה, לקחנו שני משתנים מסוג ' צף ' ו- 'h' . לפיכך, נתוני הטמפרטורה והלחות מודפסים באופן סדרתי על הצג הסדרתי.
loop void () { Serial.println ("קבל נתונים מ- DHT11"); עיכוב (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 לצוף t = DHT. טמפרטורה; לצוף h = DHT. לחות; Serial.print ("טמפרטורה ="); סידורי.דפוס (t); Serial.print ("C -"); Serial.print ("לחות ="); Serial.print (h); Serial.println ("%"); עיכוב (2000);
לפני הפעלת מצב השינה אנו מדפיסים את "Arduino: - I am go for a Nap" והופכים את ה- LED המובנה לנמוך. לאחר מכן מצב שינה של Arduino מופעל באמצעות הפקודה המוזכרת להלן בקוד.
הקוד שלמטה מאפשר מצב שינה תקופתי במצב סרק של הארדואינו ונותן שינה של שמונה שניות. זה הופך את ממשק ADC, טיימרים, SPI, USART, דו חוטים למצב OFF.
ואז זה מעיר אוטומטית את ארדואינו מהשינה אחרי 8 שניות ומדפיס "ארדואינו: - היי פשוט התעוררתי".
Serial.println ("ארדואינו: - אני הולך לנאפה"); עיכוב (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 ("ארדואינו: - היי פשוט התעוררתי"); Serial.println (""); עיכוב (2000); }
אז על ידי שימוש בקוד זה ארדואינו יתעורר רק למשך 24 שניות בדקה ויישאר במצב שינה למשך שארית 36 השניות, מה שמפחית משמעותית את הכוח הנצרך על ידי תחנת מזג האוויר בארדואינו.
לכן, אם נשתמש בארדואינו עם מצב שינה, נוכל להכפיל את זמן הריצה של המכשיר.