当前位置:网站首页>Arduino 超级省电之休眠模式用1节18650电池工作17年
Arduino 超级省电之休眠模式用1节18650电池工作17年
2022-07-24 07:35:00 【lihaMIMI】
Arduino的外围元件模块非常丰富,自己想做个温度报警器,却发现电池供电撑不了几天,于是乎就折腾了一段时间,终于将待机时间延长到了俺退休后^-^,现将过程共享给大家。
首先我们要知道电池供电待机时间的计算公式。通常电池都会标明容量为毫安时(mAH)。7号电池容量为1.5V700mAH左右. 而18650电池可以轻松做到3.7V3500mAH。假如我们选择1节18650 3500mAH的电池来供Arduino工作,最长可以待机多久呢?假设Arduino的平均工作电流为30mA,那么3500/30=117小时=4.88天,显然离我们的目标17年差太远。那么如果要实现17年待机的目标,则电流需控制在 3500/17年/365天/24小时=0.0235mA=23.5uA(为简化计算,本文均不考虑电池自放电、电压变化和温度影响)。
好了,有了目标,就想办法把待机电流控制在23.5uA吧!
1.首选8Mhz主频的Arduino板子,因为绝大多数单片机程序对于8M主频跑起来都是绰绰有余的了,但8M功耗相比16M却能大幅度降低,大家可以亲自用分频代码测试在不同工作频率下的功耗。
2.首选2.7V~5.5V 供电的板子。因为18650电池电压范围为2.7~4.2V,三节7号电池在3V~4.8V,要想把电池的电量使用完,单片机必须能在最低2.7V的电压下稳定工作。
3.精简外围电路,主要是USB转TTL电路,5V转3.3VLDEO电路等。
结合以上三点,建议直接使用CC Nano Pro 开发板,某宝有售。此款板子正是具有TYPE-C接口的pro Mini 8MHz 328P芯片的开发板,更重要的是其专门设计了个外围电路断开焊点,上传程序后断开焊点即可断开LDO和USB电路。如图

4.剩下就是代码优化了,直接上代码,思路就是让Arduino开机进入 SLEEP_MODE_PWR_DOWN 休眠模式,实测此时电流顺利降低到了23uA。当然啥事不做也不行啊,开启看门狗中断,每秒钟唤醒一次,执行看门狗计数。唤醒后会进入loop循环,然后在循环中判断已经过了多少秒,根据需要执行自己需要的功能操作。
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#define LED_PIN (13)
void OFFACDDC() {//关闭ACD和ADC
ACSR |=_BV(ACD);
ADCSRA=0;
}
void ONACDDC() {//开启ACD和ADC
ACSR &= ~_BV(ACIE);
ACSR &= ~_BV(ACD);
ADCSRA |= _BV(ADEN);
ADCSRA |= _BV(ADIF);
}
volatile int f_wdt = 1; //看门狗计数
ISR(WDT_vect) { //看门狗唤醒执行函数
f_wdt++;
}
void enterSleep(void) { //进入睡眠状态
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
power_all_enable();
}
void setup() {
pinMode(LED_PIN , OUTPUT);
digitalWrite(LED_PIN , LOW);
OFFACDDC();
/*** 设置看门狗 ***/
MCUSR &= ~(1 << WDRF); /* 清除复位标志. */
WDTCSR |= (1 << WDCE) | (1 << WDE);
//* 设置新的看门狗超时时间
WDTCSR = 1<<WDP1 | 1<<WDP2;// 每1秒看门狗超时1次,也就能执行一次唤醒后函数 ISR
WDTCSR |= _BV(WDIE); /* 设置为定时中断而不是复位 */
}
void loop() {
if (f_wdt >= 5) { //唤醒后是会运行loop的,这时候检查唤醒达到5次了,也就5秒了,闪烁一下
ONACDDC();//开启ADC,这样模拟输入IO口才可以恢复使用
digitalWrite(LED_PIN, HIGH);
delay(20);
digitalWrite(LED_PIN, LOW);
f_wdt = 0;
OFFACDDC();
}
enterSleep();//继续休眠
}5.实际应用中,对于一些简单低功耗的传感器如LM35,可以直接用数字IO口接其VCC引脚,这样就可以实现唤醒后用IO口控制LM35供电,工作完毕休眠前又断开其供电了。如果是WIFI模块等耗电较大的,可以外接个小功率固态继电器,如211EH,也能实现唤醒才供电的要求。另外功耗降下来了,其实还可以外加个5V小太阳能电池板(串几个二极管,确保电流不倒灌且最强光线下不超过电池最高充电电压),配合可充电电池,实现无限续航。
PS:3节7号电池串联,在24uA电流下可以工作700/0.024/24/365= 3.3年。
边栏推荐
- C language to achieve mine sweeping game
- Jackson parsing JSON detailed tutorial
- Kali installing PIP and pip source changing
- AMD64 (x86_64) architecture ABI document: upper
- UNI-APP_ Playback and pause of background music of applet or H5 page
- cookie_ session
- R language handwritten numeral recognition
- Advanced part of C language IV. detailed explanation of user-defined types
- 中国三氯氢硅市场预测及战略研究报告(2022版)
- [word] how to generate the index directory on the left
猜你喜欢
![[sequential logic circuit] - register](/img/a5/c92e0404c6a970a62595bc7a3b68cd.gif)
[sequential logic circuit] - register

Win10 sound icon has no sound

From the perspective of CIA, common network attacks (blasting, PE, traffic attacks)

C language to achieve mine sweeping game

Unable to auto assemble, bean of type "redistemplate" not found

Oauth2==sso three protocols. Oauth2 four modes

php 转义字符串
![[leetcode simple] 20. Valid brackets stack](/img/49/b3dce4ee0987c98f195e0f7f558d8f.png)
[leetcode simple] 20. Valid brackets stack

Development system selection route

服务漏洞&FTP&RDP&SSH&rsync
随机推荐
AMD64 (x86_64) architecture ABI document: upper
Give a string ① please count the number of times each letter appears ② please print the pair with the most letters
JS的DOM操作——style的操作
Li Kou, niuke.com - > linked list related topics (Article 1) (C language)
numpy.inf
Jenkins 详细部署
Game three piece chess
Win10 sound icon has no sound
Bookkeeping app: xiaoha bookkeeping 2 - production of registration page
Vulnhub DC1
学习笔记-分布式事务理论
24. Global event bus
Jackson 解析 JSON 详细教程
23.组件自定义事件
Vulnhub DC1
中国三氯氢硅市场预测及战略研究报告(2022版)
Log in to the server using the fortress machine (springboard machine)
Induction, generalization, deduction
A great hymn
Chapter007 FPGA learning IIC bus EEPROM reading