arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒



最近在做一个低功耗的设备,发射红外来检测前面1米以内左右的地方是否有人,纽扣电池供电,需要持续工作至少两年,因此,要求设备工作电流在ua级别。

(1)红外发射接收

由于一般的红外发射接收(下图所示)都会比较耗电(几十ma),所以红外发射接收是不能一直打开的,需要每隔一段时间(30s)打开一次,检测是否有人,检测完毕后立即关闭红外发射接收。这样耗电的大户解决了,但是如果单片机一直处于工作状态,也就是循环程序里等待30s来进行红外发射检测的话,本身单片机也会耗电,达到ma的级别,这样的话,纽扣电池几百mah的电量也撑不了太久。​

红外发射接收

(2)单片机休眠

考虑到单片机具有休眠功能,在不需要的时候可以MCU休眠,在唤醒的时候,打开红外并进行检测,检测完成后单片机继续休眠,这样就可以达到要求了,单片机休眠状态下,耗电很低,手册上一般都是几ua,完全符合要求,这里有一个问题就是,单片机的工期唤醒,一般情况下,单片机休眠后可以利用外部中断(电平、上升沿和下降沿)唤醒,但是设备中不存在这样的信号源能够定期(30s)唤醒单片机,因此这里需要单片机自己唤醒,也就是下面提到的看门狗唤醒。​

(3)看门狗唤醒​

AVR单片机的看门狗有三种模式,第一,系统复位,看门狗一般是用来监视程序是否正常运行的,当程序跑飞的时候,没有及时喂狗,看门狗就会强制单片机复位,达到重新运行程序的目的;第二,中断模式,在定时时间到的时候,会进入中断,这个中断会将掉电模式的单片机唤醒;第三,中断与系统复位(综合)。这里需要使用单片机的中断模式​

(4)Arduino​​

Arduino本身是一个集成的开发平台,核心是一个avr单片机,优点在于平台集成了很多库函数,有很多外围器件,使用起来很方便,不需要使用者去了解单片机的寄存器,开发起来更快,但是做产品的话不一定能满足要求,最常用的就是Arduino

Uno了,核心是atmega328,单片机本身资源丰富,考虑到成本等因素,并不需要这么多资源,造成浪费,当然也有其他的型号的低成本的avr单片机,但本质上来说,自己做一块板子,再利用Arduino

IDE

编程,下来bootloader和程序,就不如直接进行单片机开发了。当然前期开发的话,还是适合的,之前的时候,学过一段时间51单片机,对avr还不是很熟悉,因此,这个低功耗设备,最开始还是使用Arduino

Uno

开发的,这个过程中遇到了各种问题,最后直接使用attiny13,进行单片机的开发,抛弃了Arduino。​​​

(5)最终,休眠状态下设备耗电60多ua,达到了要求,后续将使用attiny13直接进行开发。

程序:(转自一个网友的文章,进行了一些注释)

#include

#include​

volatile byte data=0;

int val;

void setup()

{

pinMode(2,OUTPUT);

pinMode(6,INPUT);

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

setup_watchdog(8);//设置看门狗超时时间

// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms

// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec

ACSR=_BV(ACD);//关闭比较器ACD

ADCSRA=0;//关闭模数转换器ADC

Sleep_avr();//进入休眠模式

}

void loop()

{

if(data>=1){

data=0;

digitalWrite(7,HIGH);//红外

delay(50);

val = digitalRead(6);

if(val == LOW)//read led

{

digitalWrite(8,HIGH);//无线

digitalWrite(2,HIGH);//测试led

delay(2);

digitalWrite(2, LOW);//测试LED闪烁一次

delay(2850);

digitalWrite(8,LOW);//关闭无线

digitalWrite(7,LOW);//关闭红外发射器

}

digitalWrite(7,LOW);

Sleep_avr();

}

else

{

Sleep_avr(); //继续睡眠

}

}

//设置看门狗参数,输入参数为定时时间

void setup_watchdog(int ii){

byte bb;

if (ii > 9 ) ii=9;

bb=ii & 7;

if (ii > 7) bb

= (1<<5);

bb

= (1<

p="">

//开始设置看门狗中断

MCUSR &=

~(1<

p="">

WDTCSR

= (1<

p="">

(1<

p="">

//设置新的看门狗超时时间

WDTCSR = bb;

//设置为进入中断

WDTCSR= _BV(WDIE);

//看门狗唤醒后,从之前的程序继续执行

}

//超时后,只有在睡眠模式或空闲模式才会唤醒进入中断中断函数,除此之外,看门狗直接控制单片机复位

ISR(WDT_vect)

{

data++;

//继续执行睡眠之前的程序

}

//睡眠模式

void Sleep_avr()

{

set_sleep_mode(SLEEP_MODE_PWR_DOWN ); //设置睡眠模式

sleep_enable(); //使能睡眠模式

sleep_mode(); //进入睡眠模式,看门唤醒后在这里继续执行

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android-Dialog

Android-AlertView 我的地址&#xff1a;https://github.com/kongqw/Android-AlertView 开源地址&#xff1a;https://github.com/saiwu-bigkoo/Android-AlertView

mysql卸载后重装失败_小筑教育BIM课堂-Revit100问 [第二期] | 软件卸载

1、Revit未卸载干净&#xff0c;导致安装失败&#xff0c;怎么办&#xff1f;答&#xff1a;方法1&#xff1a;利用官方软件卸载工具UninstallTool软件将剩余残留未卸载子程序卸载干净&#xff0c;之后再安装Revit。方法2&#xff1a;如果UninstallTool软件检索不到电脑上还有相…

hdu 5631 Rikka with Graph(图)

n个点最少要n-1条边才能连通&#xff0c;可以删除一条边&#xff0c;最多删除2条边&#xff0c;然后枚举删除的1条边或2条边&#xff0c;用并查集判断是否连通&#xff0c;时间复杂度为O&#xff08;n^3&#xff09; 这边犯了个错误&#xff0c; for(int i0;i<N;i){ fa[i]i;…

电机编码器调零步骤_蒂森电梯编码器整定和主机整定大全

CT 编码器整定操作步骤1. 断开电源&#xff0c;吊起轿厢&#xff0c;空开曳引轮钢丝绳。2. 取出主板 JP5 的 9 与 10.11.13 的线并短接一起。3. 送电后确认 KAS,KAD,继电器吸合&#xff0c;接触器 KM1,KM2,KM3 也吸合&#xff0c;抱闸自动张开。注&#xff1a;保证安全回路 102…

4 曝光_荣耀户外手表GS Pro曝光:超强续航 9月4日发布

8月21日消息&#xff0c;荣耀海外官微今日官宣&#xff0c;荣耀首款主打户外功能的手表&#xff0c;将于9月4日海外发布。从其预热海报来看&#xff0c;这款手表应该就是国内已官宣的荣耀GS Pro。因为两张海报中的手表新品外观一致&#xff0c;均采用三防设计&#xff0c;圆形表…

atitit.atiOrmStoreService 框架的原理与设计 part1  概述与新特性

atitit.atiOrmStoreService 框架的原理与设计 part1 概述与新特性 1. 新特性如下 支持生成sql在无数据库连接的情况下 2. Orm设计 主要的俩个以来service如下 Inject Dsl2sqlService dsl2sqlSvr; Inject DBX dbSvr; 作者:: 绰号:老哇的爪子 &#xff08; 全名&#xff1a;&…

lightgbm 保存模型 过大_机器学习之12—Lightgbm

Lightgbm模型和GBDT以及XGboost一样&#xff0c;都是基于决策树的boosting集成模型&#xff1b;Lightgbm是一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。关于GBDT和XGboost的介绍可以参考&#xff1a;大饼&#xff1a;机器学习——提升算法(A…

python3 装饰器

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # encoding: utf-8 # author: eddy # contact: 278298125qq.com # site: http://my.oschina.net/eddylinux # file: study_deco.py # time: 2016-02-28 12:06 # version: 1.0#基础知识 #### 第一…

判断是否大于_电动车是否属于机动车的辩论要点

现行国家标准GB/T 24158-2009在3.1章节中对电动摩托车与电动轻便摩托车进行了定义,但将要在2019年4月1日实施的新标准却删除了该定义.在09标准中对电动轻便摩托车进行了如下定义:所以说,大于20km/h或大于40kg的电动车为机动车.但是这个标准删除了故对于电动车是否属于机动车不应…

Vim常用按键操作学习

对于Vi的学习&#xff0c;在这里算是做个笔记&#xff0c;对于一些常用的命令记录下&#xff0c;以后在使用起来会更方便&#xff0c;便于以后查阅使用&#xff0c;而不需要再从去搜索。读到这你应该看出&#xff0c;这是一个笔记了&#xff0c;会比较干了。补充一句&#xff0…

c++局部对象是什么_程序员每日一题-GCROOT对象

每天一题&#xff0c;进步一点答案&#xff1a;ABCD解析首先了解一下什么是GCROOT。了解这个概念之前&#xff0c;我们先了解一下垃圾回收。简单来说&#xff0c;JVM中程序的对象都会在堆区占据一定空间&#xff0c;如果不再使用了&#xff0c;JVM就会把它清除掉。那么如何判定…

项目如何用jetty运行_如何用Cloudbase Framework部署一个Vue项目?

Cloudbase Framework 是云开发官方出品的前后端一体化部署工具&#xff0c;无需修改业务代码&#xff0c;就能将 Vue 应用前后端一键托管部署在云开发平台。借助于 Cloudbase Framework&#xff0c;你可以一键部署一个已有的 Vue 项目&#xff0c;也可以快速创建一个新的 Vue 项…

在桌面上创建路径

2019独角兽企业重金招聘Python工程师标准>>> //实例化filemanager NSFileManager*fm[NSFileManager defaultManager]; //获取桌面路径并创建新路径 NSArray*URLs[fm URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask]; if (URLs.count>0) { NSUR…

小米手环无法模拟门卡_颜值与功能得到全面升级,小米手环4 NFC版上手体验

提到国产智能手环&#xff0c;相信不少人第一时间想到的就是小米手环系列&#xff0c;就在前不久的时候&#xff0c;小米米家正式举办了新品发布会&#xff0c;而小米手环4系列也正式登场。与前代产品相比&#xff0c;小米手环4系列在很多方面都进行了全面升级&#xff0c;比如…

[小记]Centos7网络配置DNS配置解决、yum出错解决。

2019独角兽企业重金招聘Python工程师标准>>> Centos7&#xff1a; yum install iptables-services Error List&#xff1a; Loaded plugins: fastestmirror, Error: cannot find a valid baseurl for repo : base/7/x86_64 ... Solutions&#xff1a; a) fastest…

怎么覆盖默认样式_图形设计软件cdr教程:设置默认字体

互联网时代&#xff0c;设计师们现在都是用电脑进行设计&#xff0c;那么对字体的需求就比较多&#xff0c;CorelDRAW作为强大的平面设计软件&#xff0c;怎么在其中设置某字体为默认字体呢&#xff1f;对很多新手朋友来说&#xff0c;可能不是很理解。本文小编介绍在CDR中设置…

LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。...

Guid id new Guid(item.pictureFile); var queryFile dbContext.file_upload.FirstOrDefault(u > u.ID id);转载于:https://www.cnblogs.com/lcyuhe/p/5230921.html

hive map格式转换为字符串_Hive与MySQL的不同之处之类型转换cast和covert函数

Hive&#xff1a;cast(xxx AS 类型)如&#xff1a;cast(tm AS bigint)附上Hive基本数据类型&#xff1a;数据类型所占字节开始支持版本TINYINT1byte&#xff0c;-128 ~ 127SMALLINT2byte&#xff0c;-32,768 ~ 32,767INT4byte,-2,147,483,648 ~ 2,147,483,647BIGINT8byte,-9,22…

LeetCode - 35. Search Insert Position

35. Search Insert Position Problems Link ---------------------------------------------------------------------------- Mean: 给定一个有序数组和一个数k&#xff0c;求k在这个数组中插入的下标. analyse: 二分查找. Time complexity: O(N) view code /*** -----…

的garch预测_随机森林预测

当涉及到预测数据(时间序列或其他类型的序列)时&#xff0c;人们会关注基本回归、ARIMA、ARMA、GARCH&#xff0c;甚至Prophet&#xff0c;但不排除使用随机森林来预测数据。随机森林通常被认为是一种分类技术&#xff0c;但回归问题绝对是随机森林可以处理的。在本文中&#x…