1.背景
有时候远在他乡,父母在家,不知道家里天气情况;有时候需要做个监控环境情况。还可以作为工作站中的一个站点,进行自动采集天气的数据。正巧,借助参加EEworld这个DIY活动,把有些年头的DIY东西拿出来晒晒太阳,感谢各位捧场。
2.功能
自动监测环境的温度,气压,湿度
多级菜单可以设计采集
可设置报警条件
远程遥控
打开手机或者网站就可以看到数据云端
3,制作作品过程以及相片 方案选择:STC89C51+模拟气压传感器+ADS1100+数字温湿度传感器DHT11本设计课题是基于LAN的自动天气监测的设计,设计的任务是设计一个基于LAN的天气监测显示电路,包括局域网数据传输,基于单片机的利用气压传感器,温湿度传感器的数据采集系统。首先是用气压传感器MAX4100A置于空气中,由其内部的电路对大气压的值转化成电压输出,然后再由ADC--ADS1100对MAX4100A输出电压进行采样,采样的数据传入单片机系统进行出来计算出实时的气压的值,同时用温湿度传感器对空气的温湿度进行采集数据再通过LCD12864显示出来,整个设计电路简洁,界面友好 。
3.1设计原理图以及PCB
我们知道主要是对天气的各个参量的测试和显示。要对天气参量的值的测量就必须考虑到使用传感器,MAX4100A系列的气压传感器是一个利用进气孔式活动薄膜硅片电阻对大气压的变化转变成输出电压的一种线性气压传感器,工作范围在20Kpa~105kpa对于大气压的测量完全可以胜任;DHT11 是广州奥松有限公司生产的一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O 口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA。再有就是数据的显示,把传感器输出的电压值转换成单片机可以出来的数字信号,利用ADC对传感器输出的电压采样通过单片机系统的计算,以及温湿度的数字数据通过识别在LCD上显示出来,同时为了达到数据的自动采集,使用定时器中断,时间到了就再次采集数据更新数据,通过串口传输给网络控制模块传输到局域网上供查询和控制。
原理图
系统框图
PCB
3.2调试
硬件部分(最小系统以及LCD部分不做详细说明了)
3.2.1传感器MPX4100A电路设计
MPX4100A气压传感器是飞思卡尔公司生产的一种集成的气压传感器,在20~105Kpa的情况下输出与气压成正比的电压(0.3~4.9V),MPX4100A的第二管脚为供电正电压5V,第三管脚为电压地,管脚1为传感器电压输出端。其他的三个管脚都没有用到,为了让其稳定工作,都将其通过一个电容接地。MPX4100A传感器硬件电路设计如下图 3.2.2传感器MAX4100A采样ADS1100电路设计 ADS1100是TI公司生产的一款16位具有自动校准的ADC,以其高精度小封装,低电耗深受设计人员喜爱。ADS1100是使用I2C通信协议进行操作的,而I2C接口采用漏极开路机制,器件本书只能输出点低电平,无法主动输出高电平,只能通过外部上拉电阻将信号线拉至高电平,故在SDA和SCK线上来一个1k的电阻,以提高总线上的电平。
3.2.3温湿度传感器DHT11电路设计
DHT11 的供电电压为 3 - 5.5V。传感器上电后,要等待1s以越过不稳定状态在 此间无需发送任何指令。电源引脚( VDD ,GND )之间可增加一个100nF 的电容,用以去滤波。连接线长度短于20米时用 5K上拉电阻,大于 20 米时根据实际情况使用合适的上拉电阻。
软件框图
调试过程与心得
软件调试注意包括对传感器读写数据编程,对LCD显示屏程序控制两个部分。 温湿度传感器DHT11程序调试 因为DHT11使用的是单数据总线,所以在编程的时候对时序要求很高,精确延时要是不合适就会导致读取的数据出现错误。为了在调试阶段判断采集的数据是否正确,使用LCD显示和DHT11数据内部带有的校验位进行判断。要是采集的数据和与校验位的值不对就在LCD上显示“采集数据错误字样”。再有DHT11的延时有us级和ms级的精确延时,所以在进行延时时必须对1ms和3us延时结合起来才可以达到精确延时,才可以准确进行数据线上的高低电平进行判断,而且保证采集的数据的正确性。 ADC ADS1100软件调试 由于ADS1100内部的I2C通信接口具有地址,而且ADS1100的封转极其的微小,使得对其型号确定不了,只能对ADS1100的几个I2C地址逐一尝试,在发送了正确地址以后,器件会反馈一个应答信号,把应答信号单片机的一个I/O口输出,使用用LED做成简易的逻辑板进行判断。其后的像写指令和读指令等都使同样的方法进行调试。 LCD显示调试 以前我也做过一个菜单式显示的例程,所以对使用12862LCD显示还是比较熟悉了的,但是在本次设计中只是用了两个按键控制,同时还有定时器中断等,使得在显示程序的调试时候碰到显示乱码的情况,一开始我还以为是LCD显示地址以及显示空间和是显示数据之间的长度的不对应,但是修改了显示数据的长度和显示区地址还是出现同样问题,调试了老半天想不出到底是哪里出了问题。我就停下来调试,认真理清这个程序的流程,发现如果在显示数据的读写的时候,要是发生了定时器的中断会对显示程序造成毁灭性的破坏,于是我尝试着把定时器中断屏蔽掉,再调试,没想到显示就正常了,于是我决定把显示部分程序和定时更新一起,在定时时间到以后再更新数据以及更新LCD的显示。
部分调试图片
分开模块进行调试,旁边的灯是用来测试软件跑的断点
3.3成品展示
|