要防止仓储保存的物品变质, 对仓库环境温度和湿度的控制显得极为重要。本系统采用单片机联合上位机对温度、湿度进行实时检测、数字显示、和实时控制。考虑到仓库的容积较大, 一般需要多个检测点, 而且检测点的位置应随着货物的堆放位置、类型以及货物的堆放高度等实际情况发生改变。为了使感应头能更灵活地放置, 同时又能方便的采集检测数据, 作者采用了无线数据传输模块进行主、从机之间的数据传输。用多台“从”单片机负责温湿度采集, 控制排气扇的步进电机、窗口的步进电机、除湿机等, 再通过每一个“从”单片机上的无线收发模块将采集到的温度湿度等数据发往一台装有无线收发模块的“主”单片机, “从”单片机接通过“主”单片机收上位机发来的控制命令;上位机采用PC机。主单片机作为系统的主机, 所有的“从”单片机和上位机 (PC机) 都通过主机接收和发送数据。
图1 从单片机电路原理图 下载原图
“从”机上的电路原理图如图1, 温度检测采用DS18B20单总线温度传感器, 可以根据需要串联安装多个传感器。每一个传感器上带有唯一的串行号, 将它们存在EEPROM AT24C08串行存储器中 (见图1) 。湿度传感器HIH-4000是美国Honeywell公司的相对湿度传感器, 由于HIH-4000提供的是数据电压DC放大线性输出, 所以采用ADC0809进行D/A转换。电风扇或除湿机的开关采用继电器控制。窗子的开关采用步进电机控制。无线收发模块 (nRF401) 和单片机的串行口连接。上位机根据从机采集的温度和湿度数据, 判断两者有否超出用户预先在上位机设置上限值, 超过则通过“主”单片机发出命令给相应的“从”单片机, 要求打开窗口、排气扇或除湿机等降低温湿度, 同时PC机发出警报信号通知工作人员。待到的温度和湿度数据低于用户预先设置下限值时关闭以上设备, 并撤消报警。系统可以实现自动地将温度和湿度控制在一个合理的范围内。在PC机上可以用数据库保存历史数据, 供查询和分析[1,2,3]。
系统采用的DS1820数字温度传感器, 是一种单总线器件, 只有三个引脚:数据脚, 接地脚, 电源脚。它的数据位是9位, 温度值测量范围-55~+125℃, 以0.5℃递增。在中央微处理器和DS1820之间仅需要一条连接线 (外加公共线) 用于读写。DS1820的电源可以从数据线本身获得, 无需外部电源。限于篇幅, 有关这种器件的读写方法和程序笔者就不在这里多叙述, 读者可以参考有关的资料[1,2]。
每个DS1820都有一个唯一的片序列号, 可以将多只DS1820串接在一个单线总线上 (图一AT89S52的P3.4) , 这样只要用一位单片机的并行口线就可实现多点温度采集。节省了单片机的I/O引脚资源。但是温度传感器共用同一条总线, 在读写数据时要用传感器片内的序列号来把他们区别开来, 这个序列号要事先读出来并把它写在主程序中才能实现多个温度传感器共用一条总线的多点温度采集。当用户在更换温度传感器时, 也要重新更换单片机的程序。为了解决这个问题, 本系统采用即插即用技术。在单片机的主程序中读出温度传感器的片内序列号, 将它们存到IIC-EEPROM芯片AT24C08中, 并标记已经读过序列号, 以后就不再读。每次单片机要读写一个温度传感器的数据时, 要先从AT24C08中取出一个序列号串行送到单总线, 温度传感器读后将自己的序列号与之比对, 符合的则将数据串行送到单总线, 让单片机读取, 如此进行温度采集。如果有温度传感器坏了要更换, 先把坏的温度传感器拔下来, 插上新的温度传感器, 让单片机再读出并记下新温度传感器的片内序列号。系统程序核对原有的系列号, 并把旧温度传感器的序列号从AT24C08芯片中删除, 如此系统又可以重新正常工作了。
系统采用的无线通信模块是RF401, 它是国外最新推出的单片无线收发一体芯片, 它在一个20脚的芯片中包括了高频发射、高频接收、PLL合成、FSK调制、FSK 解调、多频道切换等功能, 是目前集成度最高的无线数传产品。以往设计无线数传产品往往需要相当的无线电专业知识和价格高昂的专业设备, 传统的电路方案不是电路繁琐就是调试困难, 因而影响了用户的使用和新产品的开发, RF401的出现使人们摆脱了无线产品设计的困难。RF401采用具有较强抗干扰能力的FSK调制方式, 工作频率稳定可靠, 外围元件少, 便于设计生产, 功耗极低, 适合于便携式及手持式产品的设计, 由于采用了低发射功率和高接收灵敏度的设计, 因而可满足无线管制要求, 无需使用许可证, 开阔地的使用距离最远可达1000米。是目前低功率无线数传的理想选择, 可广泛用于遥控、遥测、小型无线网络、机器人控制等系统[4]。
nRF401收发模块 (见图2) 的引脚:PW-UP是电源控制脚, 为0表示模块电源关, 进入节电模式;为1表示打开电源。TXEN引脚是收发控制脚, 为0表示接收数据;为1表示发送数据。
图2 PC
机与无线收发模块连接图 下载原图
在设计程序时, 要注意各状态转换的时延。nRF401的通讯速率最高为20kbit/s, 发送数据之前需将电路置于发射模式;接收模式转换为发射模式的转换时间至少为1ms;可以发送任意长度的数据;发射模式转换为接收模式的转换时间至少为3ms。在待机模式时, 电路进入待机状态, 电路不接收和发射数据。待机模式转换为发射模式的转换时间至少为4ms;待机模式转换为接收模式的转换时间至少为5.0ms。
图3 节点分布 下载原图
图2是nRF401无线收发模块与主单片机和PC机的连接图。以一片51系列单片机作为串行通信的主机, 主机上安装有无线通信模块, 上位机 (PC机) 在通信上作为主单片机的从机。各从机间的数据传输都要经过主机转发 (见图3) 。采用这种形式是因为单片机便于控制无线模块的工作。为了实现51系列单片机与无线模块和PC机三者间的通信, 有的设计者加入8251芯片扩展串行口, 有的设计者用并行口模拟串行口。前者要加入一个时钟芯片产生8251芯片的时钟脉冲, 硬件的开销显著增加;后者, 要用软件模拟串行通信, 使软件的复杂度增加。经过仔细思考后, 用主单片机的串行口直接挂接到无线模块nRF401串行通信引脚及PC机的串行口 (图2) , 利用不同的地址来区分通信对象。充分利用单片机的串行口, 将硬件和软件的开销都做到最优。“从”单片机只有收到主机的查询命令后, 才能向主机发送数据[5]。
表1 通信指令 导出到EXCEL
指 令格 式 |
指 令 功 能 |
字节1 |
字节2 |
字节3 |
字节4 |
字节5 |
F0 |
从单片机地址 |
温度数值 |
湿度数值 |
F1 (结束) |
从单片机发送数据到主单片机 |
F2 |
从单片机地址 |
设备号 (0~FF) |
关闭 (00) /打开 (FF) 设备 |
F1 (结束) |
主单片机发给从单片机的设备操作命令 |
F3 |
从单片机地址 |
FF |
FF |
F1 (结束) |
主单片机发给从单片机的查询命令。 |
F4 |
从单片机地址 |
温度数值 |
湿度数值 |
F1 (结束) |
主单片机传送数据给PC机 |
F5 |
从单片机地址 |
设备号 (0~FF) |
关闭 (00) /打开 (FF) 设备 |
F1 (结束) |
PC机传送命令给主机 |
图4 “主”单片机的程序框图 下载原图
当主单片机的串行口输出一个字节的数据时, PC机和每一台从单片机都能收到来自主单片机的数据。从单片机和PC机平时都处于接收状态, 收到的5字节的指令字 (见表1) 后, PC机和每一台从单片机根据第一个字节判断是否是自己应收的指令。“从”单片机再根据第二个字节的地址, 判断是否为主机给自己的指令, 不是就放弃收到的指令字。“从机”收到的指令字有两种, 查询命令和设备操作命令。主机每隔一段时间向每一个从机发出查询温度和湿度命令。收到查询命令后“从”单片机向主机发出以“F0”开头的5个字节采集数据。主单片机收到从单片机发来的数据后, 将第一个字节F0改为F4转变成主机传送数据给PC机的指令字。PC机收到这个指令字后, 保存并判断收到的温度和湿度数据是否超限, 再发出设备操作命令给主单片机, 主单片机收到此命令后将第一个字节F5改为F2, 变成为“从”单片机的设备操作指令字, 转发给“从”单片机。如此使各个模块都可以根据第一和第二字节判断接收到的数据是否为自己的数据, 避免数据冲突。图4是“主”单片机的程序框图。
现场安装时, 从单片机并不都有窗子和电扇需要控制, 可让某些“从”机只负责温度和湿度的监测。可以让某些“从”机只负责窗子和电扇的控制, 不进行和湿度的监测。使系统有更好的现场适应性及扩展性。
上位机通过串行口得到系统的工作情况后, 通过用户界面反映出来, 同时根据设置的参数通过主单片机指示各个“从”机做出反应, 控制仓库排气扇打开关闭、窗口打开大小。上位机主要使用Visual C++提供的串行通讯控件MSComm来实现微机与单片机之间的通讯。在上位机上利用数据库保存各点的温度和温度。[6]
另外, 考虑到系统的安全可靠, 设置了一个软件看门狗, 用T0做定时器在主程序运行一定时间后初始化T0的值, 在T0的中断地址处写一个跳转到主程序第一条命令。当主程序进入死循环或程序跑飞, 引起超时, 使T0产生中断, 程序又转回到第一条命令运行。
本系统结合单片机及相关器件, 实现仓库的温度的采集和控制, 本系统还可以稍加更改可应用在其他的领域。