在上次先容的日历钟的基本上扩展一下:让它具备检测大气温度和湿度的成果,一天24小时不中断运行并按时检测,于是,日历钟就摇身一酿成为一个小小温湿度计啦。固然气象要素许多,不外我们最常用的就是气温和湿度。一个是冷热水平,一个是情况氛围中含水蒸气的几多。一般家用温度计很常见,湿度计就较量少,以前有一种干湿球温度计,可是用起来较量贫苦,精确度也不高。此刻应用电子技能我们就可以做一个可以同时显示温度、湿度、时间的小仪器,放在家里以便随时监测我们的小情况。它的特点如下: 1.在单片机ATMega8L-8PU(以下简称M8)和日历钟电路DS1302的基本上,利用一个在工场颠末紧密校准的数字式温度、湿度传感器AM2301作为探头; 2.当24小时持续事情时,即使事情电流仅为几毫安,也不宜利用纽扣电池供电。这次选用可充电的3.6V聚合物锂电池,使它的安排所在可以不受电源限制,可以在室内,也可以在不受阳光直射和雨水打仗的室外; 3.具有文字和图形界面,可以显示温度和湿度数值,以及12小时内的湿度变革记录曲线,为什么是湿度曲线呢?因为气温的变革纪律一般较量不变,湿度就纷歧样了,我们可以从湿度变革趋势预计一下将来的晴雨大概,这比看燕子飞高飞低要靠谱些吧?两个界面用按键切换; 4.具备锂电池线性充电电路,通过USB接口从外部取得5V电源,一边供应充电,一边维持电路继承事情;
全部元器件安装在一块70mm×90mm的小万用板上,正面、不和外形见图1、图2。正面左边谁人玄色小乌龟壳就是温湿度探头。
图2 电路板不和元器件漫衍和连线
电路道理
电路见图3。图形点阵液晶、单片机M8、时钟电路DS1302和上次小小日历钟基内情同,不再反复。有两点稍稍差异:
1.液晶的节制固然照旧通过M8的PD口,但详细接线有所改变,不再占用两根串口线PD0和PD1,目标是为此后大概和外部通信预留接口。这好办,编程时从头界说即可;
2.因为常用电源是带掩护板的3.6V充电锂电池(图3中GB2),它放完电会自动割断,为了使DS1302继承事情,必需别的利用一片3V纽扣锂电池CR1225(图3中GB1)作为时钟芯片的后备电池。也可用法拉电容,但较贵。
TRH是数字式温湿度传感器 AM2301。它内部有颠末校准的电容式湿度传感器和负温度系数热敏电阻(NTC),以及8位单片机。可丈量温度范畴是-40~+80℃,精度最大±1℃,湿度范畴是0%~100%,常温时精度±3%,判别率都是0.1。温度信号、湿度信号最后都转换为一个40位的二进数串行输出。个中的高16位是湿度,中16位是温度,低8位是校验和,当高16位加中16位便是低8位时,说明丈量功效正确,可以采信。它利用单线总线布局,接线很简朴, 470uf 16v,一共就3根线:图3中的R暗示红线,接电源(3.3~5.5VΩ),Y暗示黄线,是信号线,凭据要求需要外接5kΩ上拉电阻R2,接M8的PC5引脚。B暗示黑线,接地。
轻触按钮S1~S5照旧作校时用,没有变革。
为了给400mAh的锂电池充电,通过USB插头把外部的5V电压加到智能线性充电模块TP4054。别的一个2×2微型自锁开关S6可以选择电池供电,可能电池充电。充电时5V外部电压经稳压器WY1低落为3.3V为VCC供电。
用上蓄电池了,液晶背光也可以“奢侈点”,偶然用它一下。为此,增加了限流电阻R3和轻触按钮S5。
硬件组装
这个温湿度计电路简朴,所需元件不多。除了温湿度传感器和充电模块较量非凡以外,其他都是普通元件。几个电阻和退耦电容都是用的贴片元件,尺寸是 0805,和洞洞板可以很好地共同。虽然也可用普通的引线电阻、电容。集成电路利用双列直插插座反装,这样就有效操作了正面液晶屏占用的面积。详细做法和小小日历钟一样。
温湿度传感器和充电模块我都是从淘宝网上买的,搜一下“DHT21”和“TP4054”就可以找到大把,价值不高。温湿度探头的敏感元件都是装在通风透气的乌龟壳内,胶死了打不开,也就不要试图暴力拆解了,以免污染了敏感元件影响机能。
后面焊装IC插座的步伐是先把引脚向外折平(这样子它更像小蜈蚣了),然后把引脚尖端稍向下弯,在洞洞板后面定位后,用尖头镊子把引脚尖端逐一捅进焊盘洞洞里,外接引线也插入相应洞洞里,一并焊接。
要留意两个锂电池最后安装,安装前必需先查抄已经装好其他元器件和接线的电路板,确认VCC和地端没有短路妨碍。在焊接前电池先不开封,制止不小心正负极短路,以至于“出师未捷身先死”。带引脚的纽扣电池焊好即牢靠了,充电电池则用较厚的双面胶粘接在电路板后面牢靠。落成后四角必然要装上垫柱,制止电路板直接与平面打仗。
其他就没有什么诀窍了,也就不再搞看图识物。7cm×9cm的洞洞板安装全部元件很宽松,实际上要想使这个小玩意事情起来,还要靠“软工夫”。下面一一解析。
编程之一:AM2301的读写时序
前面说过,温湿度探子输出的是40位的二进数。在探头举办丈量并输出数据前,主控单片机M8和探头有个握手进程,步调是:
M8的PC5空闲时一直为高,数据线处于释放状态。要启动丈量,M8就在PC5输出低,使数据线拉低1ms以上(措施顶用的10ms),把PC5转为输入状态,外部上拉电阻R2当纵然数据线升高。在40μs以内探头发出响应:把数据线拉低80μs。M8读到这个低电平,知道探头回话了,接着探头也释放数据线80μs,M8就大白随后就是数据了。数据老是以50μs低电平先导,随后并不是以电平坎坷暗示1、0,而是以高电平脉冲宽度暗示1、0:70μs暗示 1,26~28μs暗示0。为了识别1和0,M8可在读先导低电平完成后,延时35μs再次读数据线,假如为高,就是1,假如为低,就是0。探头持续送出 40个低-高脉冲后,再次拉低数据线50μs,竣事数据送出。脉冲示意图如图4。
实际利用时还要留意,丈量应举办两次:第一次丈量后,过2s再测一次,这次M8读出的数据是两秒前的测试数据。假如持续丈量,隔断2s最好,无论如何不得小于1s。实际上气温和湿度一般也不会变革那么快。此刻做的是每分钟测两次:在0s和2s各测一次,2s读出0s的数据,0s读的是上一分钟的数据,就扬弃了。
编程之二:AM2301的数据名目
假如数据正确(通过查抄和校验),就需要把高16位湿度数据换算成十进位的3位数:000到999。在个位和十位间加上小数点,就是湿度的百分值。譬喻 M8读出的高16位是0B0000001100001101=512+256+8+4+1=781。湿度就是78.1%。温度雷同,可是假如温度最高位为 1,意味着零下温度。
编程之三:奈何画出记录曲线
要画出一段时间的记录曲线,也就是在液晶上面凭据这也就是在液晶上面凭据这段时间顺序记录的数值画出对应的点。
在这块图形液晶画点的根基要领前次已经先容过,就是先配置列坐标x和页坐标y,再写数据,用LCDSetxy(unsigned x,unsigned y)和LCDWriData(unsigned data)两个函数就可以在x列y页点亮任意8个点。可是假如直接用页坐标来画出凡是用垂直坐标(行坐标)暗示的点则很是未便。
要凭据列坐标x和行坐标h(h从0到63共计64行)来画一个点,而这正是画记录曲线的基本,我们可以调动一下,先用h/8算出h地址的页,譬喻h为45,那么它就在45/8即5页。而余数h%8就是h在该页的第几位(此刻是第5位),让一个数unsigned char tmp=0x01;那把它左移5位获得的数值0x20就是用列坐标和页坐标画点时需要给液晶输入的数值。这些数值对付每次仅仅1个点,从低位到高位只能对应于0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80这8个数中的一个。这样我们可以假造一个函数 LCDPutDot(unsigned char x,unsigned h);来在x列,h行画出一个点了,详细代码见后文。形式上用队列坐标参数,实质上照旧页列坐标参数,但却利便多了。此刻再回到奈何画湿度记录曲线。由于液晶像素的限制,程度只能取128点以下。那么假如每6分钟记录一次,12小时就记录120次,把这120次的湿度数值和液晶的垂直偏向点位置(与行坐标成比例)对应起来画一系列点,不就是记录曲线吗?虽然垂直偏向只有64点,那么我们就取51点,0到50暗示0到100。还要提醒的是,液晶的垂直偏向,0点在最上面,这和凡是的习惯相反。那也不要紧,就把(100-h)/2作为垂直坐标就对了,为简朴计,可略去小数。
至此几个编程的要害都说完了。按此在措施中插手了新增的函数:
unsigned char DHT21_ReadByte(void);//读探头串行数据
void DHT21_RHT(void);//提倡检测,读数
void Show_RHT(void);//显示检测值
void LcdPutDot(unsignedcharx,
东莞电解电容厂家,unsignedcharh);//画点
函数详细内容见附件措施。
为了描画12小时的记录曲线,还要设立一个120单位的湿度记录数组unsigned charRH_record[120],亏得M8的数据区有512字节,还很富饶。
每6分钟往内里顺序填入一个记录,记满后又从0单位开始。
整个措施流程和日历钟基内情同,但有改变:
启动→M8初始化→LCD初始化→查抄1302是否已经运行中,如不然要初始化并启动它→读取1302数据→打开显示界面(标题、正文和最下面的显示行)→检测温湿度→延时2秒→给记录数组赋以初值→再次检测温湿度→显示温湿度→进入措施轮回。
措施轮回是配置一个用于软件计数的静态变量:const unsigned int delta=0;在主轮回while(1){}中当delta未到达设定值譬喻3800前它每次递增,到达设定值后再查键→健处理惩罚→假如秒数值改变就刷新日历钟的显示。
有所改变的是假如计时到达1分钟,就开始一次检测温湿度→2秒后再检测并更新温湿度显示→假如是6的整数倍分钟,则还要在湿度记录数组中填入新的湿度记录。
在S4的按键成果触发时就凭据湿度记录数组的数值逐一绘点,形成曲线。个中还包罗程度和垂直标尺的绘制和当前记录位置指针的绘制。
调试
调试进程和小小日历钟雷同,就不反复了。只要元件正常,接线正确,加电后把措施注入M8立即就可以运行。绘制曲线则要比及1小时今后才画出一小段。颠末 12小时曲线完成,你就可以知道已往12小时的湿度变革趋势了。凭据我这里来看(番禺郊区),湿度颠簸照旧蛮大的,晴热时可以低到40%,一下暴雨会升高到80%以上。
假如发明温度、湿度显示都为0,那么查抄探头接线是否有断开。假如溘然不显示了,那么恭喜你!锂电池掩护板发挥了浸染,没电了!赶紧切换S6充电吧!在这个基本上还能进一步改造:找出24小时内的最高温湿度和最低温湿度;设定报警点,实现超限报警以及把信号发送出去等,就靠你啦!
利用
把它充好电,按一下S6,切到电池供电位置就可以了,把它放在桌上、挂在墙上都可以,只要不阳光直射,阴凉通风就可以。充一次电约莫需要90分钟,充好后可以用三天以上。
Copyright 2020© 东莞市立迈电子有限公司 版权所有 粤ICP备2020136922号-1
24小时服务电话:13336555866 邮箱:jimmy@limak.cn
公司地址:广东省东莞市塘厦镇东兴路162号振兴大厦 网站地图