打印
[应用方案]

小型气象站(单电池供电)

[复制链接]
1101|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

设备具有一定的防水能力,在室外运行期间,偶有小到中雨天气,但并未对设备造成影响
材料
电源:18650电池1节(2000mah)
主控:N76E003单片机
传感器:BMP180气压传感器、BH1750光照度传感器
无线串口模块:LC12S(2.4G)
LDO:XC6204
外壳:3D打印PLA
开发环境:KEIL4

使用特权

评论回复
沙发
643757107|  楼主 | 2019-6-11 22:08 | 只看该作者

使用特权

评论回复
板凳
643757107|  楼主 | 2019-6-11 22:08 | 只看该作者
其中PPG与PPG1为推挽输出,用于给传感器供电,与对IIC总线提供上拉电源。
其中CS1为无线串口模块休眠控制管脚,设置为开漏输出。(特点见下图)

使用特权

评论回复
地板
643757107|  楼主 | 2019-6-11 22:09 | 只看该作者
对于一些常用外设,如果直接连接到单片机供电回路,当然是不理想的,即便是低功耗器件,哪怕有休眠模式,消耗电流也非常厉害的。怎么办呢?
1分开供电:对一些大功率的外围,比如无线通讯模块,可以用一个mos开关控制是否为外设供电,对一些小功率器件,比如运放,存储器可以结合实际最大消耗电流,可以直接使用i/o口输出高电平为芯片供电,i/o一般可以输出 6-20ma,pp模式。当然别忘串一个很小的电阻,10欧,外设的退偶电容不能很大。一个i/o不够可以过个一起供。
让稳压器的输出电压略高于电池电压,这样有外部电源供电的时候就可以不消耗电池了

使用特权

评论回复
5
643757107|  楼主 | 2019-6-11 22:09 | 只看该作者
运行逻辑
由上图可知,本次DIY没有任何外部供电(本来想用太阳能的,但因为某些众所周知的问题,放弃了),旨在检验N76E003单片机低功耗运行的能力(此前运行了8天,锂电池电压下降0.04V)。

本次实验依然使用N76E003单片机的定时唤醒功能,50s唤醒一次,一小时开启一次外设,并唤醒无线串口模块发送检测数据。发送完成后关闭所有外设,推挽模式置低,无线串口模块进入睡眠模式。

有关N76E003单片机低功耗处理的知识请看这里N76E003 低功耗(掉电模式&定时唤醒)

结构设计
装配图(外壳还在打印,需要大约八个小时,之后再补充成品图)

底座(全部采用M4螺丝孔)

使用特权

评论回复
6
643757107|  楼主 | 2019-6-11 22:10 | 只看该作者
顶盖(两侧凸起为通气孔挡板,防止雨水直接灌入;顶部开孔为BH1750光照传感器用)

下图为装配完成的实物图,底部由四颗铷铁硼提供吸力,目前安装在空调外机上


使用特权

评论回复
7
643757107|  楼主 | 2019-6-11 22:11 | 只看该作者
数据分析

分别是温度,压强,光照强度。通过上面的数据,可以粗略的分析每天的日落日出,以及温度变化。

使用特权

评论回复
8
643757107|  楼主 | 2019-6-11 22:11 | 只看该作者
主程序代码
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "BMP180.h"
#include "BH1750.h"

#define uint unsigned int
#define uchar unsigned  char

uchar abc[17];//串口发送缓冲
uint WktCount=0;
bit WktFlag=0;

sbit CS1=P0^5;//CS睡眠管脚,开漏输出
sbit PPG=P1^7;//供电管脚,推挽输出
sbit PPG1=P3^0;//同上


int main (void)
{
        int i;
        Set_All_GPIO_Quasi_Mode;
        P05_OpenDrain_Mode;//设置为开漏模式
        P13_OpenDrain_Mode;//设置为开漏模式
        P14_OpenDrain_Mode;//设置为开漏模式
        P17_PushPull_Mode;//推挽输出
        P30_PushPull_Mode;
        //----------I/O口配置----------------
                CS1=1;//无线模块睡眠
                PPG=0;//关闭外围器件供电
                PPG1=0;
                 set_P06;
                   set_P07;//初始化串口   
        //---------I/O口初始化------------                
                Init_BH1750();//初始化光照传感器  
                set_ES_1;//开启串口1中断使能
                InitialUART0_Timer1(9600);
        //----------串口1、串口0配置----------------
                WKCON =0x07; //预分频配置2048
                RWK =255-211;//设置为50s定时——72个为一小时
                 set_EWKT;        //使能定时唤醒中断
                set_WKTR;        //运行定时唤醒功能
        //----------WKT配置------------------------               
                EA = 1;//开启总中断
                while(1)
                {
                        if(WktFlag)//判定是否溢出
                        {
                                WktCount++;
                                WktFlag=0;
                                if(WktCount>=72)//1h发送一次
                                {
                                                PPG=1;//推挽输出,给外围器件供电
                                                PPG1=1;
                                                CS1=0;//拉低,接地唤醒无线透传模块
                                                Timer3_Delay100ms(1);

                                                Init_BMP085();//初始化气压计
                                                bmp085Convert();
                                                Timer3_Delay100ms(1);
                                                EC_BH1750();//转化光照度
                                                abc[0]=0x54;//T温度
                                                abc[1]=temperature/100+48;
                                                abc[2]=temperature%100/10+48;
                                                abc[3]=0x2e;
                                                abc[4]=temperature%10+48;
                                               
                                                abc[5]=0x50;//P气压
                                                abc[6]=pressure/10000+48;
                                                abc[7]=pressure%10000/1000+48;
                                                abc[8]=pressure%1000/100+48;
                                               
                                                abc[9]=0x4c;//L光照
                                                abc[10]=(int)BH1750_temp/10000+48;
                                                abc[11]=(int)BH1750_temp%10000/1000+48;
                                                abc[12]=(int)BH1750_temp%1000/100+48;
                                                abc[13]=(int)BH1750_temp%100/10+48;
                                                abc[14]=(int)BH1750_temp%10+48;
                                                for(i=0;i<15;i++)
                                                {
                                                        Send_Data_To_UART0(abc[i]);
                                                }
                                                WktCount=0;
                                        }               
                                ADCCON1 = 0X00;//关闭ADC
                                clr_BODEN;//关闭欠压检测
                                set_PD;// 进入掉电模式
                                PPG=0;//关闭外围器件供电
                                PPG1=0;
                                CS1=1;//无线模块进入睡眠
                        }
                }
        }
//---------定时唤醒中断服务程序--------------
void WakeUp_Timer_ISR (void)   interrupt 17   
{
                WktFlag=1;
          clr_WKTF;//清除WKT溢出标志位  
}

使用特权

评论回复
9
643757107|  楼主 | 2019-6-11 22:12 | 只看该作者
总结
回顾之前那几篇很水的博客(驱动各类传感器的**),可以看出最初我是想把GP2Y1010(灰尘检测)、DHT11(温湿度)、HMC5883(电子罗盘)、光电编码器等都加上去,想测风速与方向(见下图)。后来都因为尺寸和供电问题一一放弃。其次就是缺少一个很好的上位机,接下来的日子重心会放在python和QT的学习上,希望能进入一个新的世界吧。祝大家新年快乐!

使用特权

评论回复
10
643757107|  楼主 | 2019-6-11 22:12 | 只看该作者
以上转载,原地址看图片上。

使用特权

评论回复
11
dongnanxibei| | 2019-6-14 00:00 | 只看该作者
看起来不错。

使用特权

评论回复
12
dongnanxibei| | 2019-6-14 00:00 | 只看该作者
无线是怎么做?

使用特权

评论回复
13
dongnanxibei| | 2019-6-14 00:00 | 只看该作者
那个无线2.4G是啥

使用特权

评论回复
14
dongnanxibei| | 2019-6-14 00:00 | 只看该作者
WIFI还是?

使用特权

评论回复
15
dongnanxibei| | 2019-6-14 00:05 | 只看该作者
作为采集终端非常好。

使用特权

评论回复
16
yiyigirl2014| | 2019-6-14 23:46 | 只看该作者
可以作为本科生毕业设计了。

使用特权

评论回复
17
643757107|  楼主 | 2019-6-18 11:28 | 只看该作者
yiyigirl2014 发表于 2019-6-14 23:46
可以作为本科生毕业设计了。

是的,绝对可以

使用特权

评论回复
18
643757107|  楼主 | 2019-6-18 11:28 | 只看该作者
dongnanxibei 发表于 2019-6-14 00:05
作为采集终端非常好。

对,采集很好。

使用特权

评论回复
19
643757107|  楼主 | 2019-6-18 11:29 | 只看该作者

使用特权

评论回复
20
643757107|  楼主 | 2019-6-18 11:30 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

213

主题

3784

帖子

11

粉丝