论文部分内容阅读
【摘 要】本文以Arduino UNO为控制单元,以基于I2C总线的HDC1080为温湿度测量单元,并通過1602显示模块实现数据显示,设计了一款数字式温湿度计,可实现对温度、湿度信息的数字化采集,文章给出了系统的整体设计方案和原理框图,并从硬件和软件两方面对温湿度检测系统的设计做了详细说明。该温湿度检测系统精度高、功耗低、体积小、成本低。
【关键词】Arduino UNO;I2C总线;HDC1080;温湿度
温度与湿度与人们的生活息息相关。尤其是在工农业生产、气象、科研等部门,必须精确的对环境温度进行检测。传统的干湿球温度计的显示方法,不仅复杂,测量精度也不高,响应速度慢,已不能满足工农业生产和人们生活需求。而选用单片机和专用温湿度数字芯片对温湿度进行检测,可以大大提高温湿度检测的精度。用显示屏显示温度和湿度值,看起来也更直观。本文设计了一种基于I2C总线数字式温湿度芯片的温湿度计。该温湿度计采用一种新型的数字式温湿度传感器HDC1080,对温湿度信号进行采集,并采用单片机Arduino UNO和1602液晶显示屏组成电路,不需要复杂的A/D转换电路就能直接完成数据采集,实现方便、精度高,可根据不同需要应用于各种场合。
1.系统结构
本系统主要由单片机系统模块、数字式温湿度采集芯片、LCD显示模块、报警模块、电源模块、通信模块以及上位机系统组成。本系统设计的原理方框图如图1所示,由传感器HDC1080与单片机Arduino UNO通过I2C总线连接组成测量电路,能够实时检测周围环境的温度和湿度,并把采集数据显示在LCD1602液晶显示屏上,当检测温度或湿度超过所设定的数值时报警模块报警。同时,上位机对数据进行保存及发布。
2.I2C总线工作原理
I2C总线是由数据线SDA和时钟线SCL构成可发送和接收数据的串行总线,SCL时钟线用于控制数据传输速率,SDA用于收发数据及寻址,可进行双向传送,最高传送速率可达400kbps。所有被控电路均并联在总线上,每个电路和模块都有唯一的地址,需要通过SDA发送的地址信号寻址。根据I2C串行总线规范,本文中HDC1080温湿度传感器的地址码为0x40,LCD1604 I2C模块的地址码为0x27。
在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的开始信号,它标志着一次数据传输的开始。在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的结束信号,它标志着一次数据传输的终止。I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位,表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位,一般表示接收器接收该字节没有成功。起始和停止信号图如图2所示。
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应,即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态。逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压VDD(当使用独立电源时)。数据位的传输是边沿触发。时序图如图3所示。
采用I2C总线传输的电路结构简单,编程容易,通信速率高,易于实现用户系统软硬件的模块化和标准化。基于I2C总线的优点,本文采用I2C总线的元器件对温湿度值进行读取及显示,并且该设计方案可在I2C总线上挂多只传感器,便于组网应用。
3.系统硬件设计
3.1 温湿度测量电路
单片机是整个检测系统的核心,它可以接收传感器采集到的数据,将这些数据与程序中设定的温湿度的范围进行比较,得出温湿度值。如果在这个范围内,则会显示环境中的温湿度值,方便使用用户进行观测;但是,如果超出其安全范围,则会触发报警电路,告知用户采取有效措施降低环境中温湿度,保持环境中温湿度的稳定。本设计采用Arduino UNO单片机作为控制器。Arduino单片机具有丰富的接口,有数字I/O口,模拟I/O口,同时支持I2C串口通信。并且能通过各种各样的传感器来感知环境,具有简便的编程环境IDE,极大的自由度,可拓展性能也非常高。
温湿度测量模块采用HDC1080传感器。HDC1080是一款使用I2C协议的数字式温湿度传感器,该传感器将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其内部结构如图4所示。HDC1080中的两个敏感元件分别将温度和湿度转换成电信号,该电信号首先进入信号放大器进行放大,然后进入A/D转换器,最后经过二线串行总线接口输出数字信号。此外,校准系数存储在寄存器中,在测量过程中,校准系数会自动校准来自传感器的信号。
该传感器不需要其他外加电路,直接输出数字量,可直接与Arduino单片机连接,具有线路简单、性能稳定、体积小的特点。并且该传感器拥有±2%的典型湿度测量精度和±0.2℃的典型温度测量精度,支持较宽的工作电源电压范围,以超低功耗提供出色的测量精度,具有低成本和低功耗的优势。温湿度传感器HDC1080的I2C总线串行数据接口线SDA和串行时钟接口线SCL是由单片机进行控制,以单片机作为主机,HDC1080作为从机并支持I2C总线协议的读/写操作命令。一条I2C总线可连接多个HDC1080,可实现多点的温度测量系统。由于Arduino UNO单片机接口较少,可连接扩展板增加接口。
3.2 LCD显示电路
目前,常见的显示器分别为LED数码管和LCD液晶显示器。相比LCD显示质量高,功耗低。因此,本设计采用液晶显示器。考虑到该款数字式温湿度计涉及温度和湿度两类数据,故本设计采用双行显示的1602字符型LCD。 3.3 报警电路
报警电路采用最简单的嗡鸣方式,构造简单,经济实用性强,当检测数值超过设定的安全的范围值时,报警电路就会启动,提醒用户采取措施来调节温湿度。
4.系统软件设计
4.1主程序
首先,单片机通过I2C总线读写程序将温湿度数据从HDC1080中读取出来。然后,根据温湿度补偿公式计算出当前温湿度值并送到LCD1602显示。接着,单片机将温湿度上下限与当前温湿度值进行比较,若当前温湿度值超出限值,单片机驱动蜂鸣器开始报警。
4.2温湿度采集子程序
HDC1080上電时是无法主动测量的,要先对HDC1080进行初始化设置。设置HDC1080将先执行温度测量,后进行湿度测量。首先,在寄存器地址0x02中配置采集参数,将位[12]设置为1,使采集模式设置为测量温度和湿度,再设置所需的温度和湿度测量分辨率。其次,通过执行指针写入事务并将地址指针设置为0x00来触发测量,将地址指针设置为0x00进行温度测量,设置为0x01进行湿度测量。根据转换时间等待测量完成,可读取输出数据。
本设计中单片机首先对连接在总线上的元器件进行地址识别。如果地址匹配,单片机向HDC1080发出启动传输命令,然后通过写总线子程序将温度测量指令和湿度测量指令写入HDC1080。HDC1080正确接收到温湿度测量命令后,就会进行数据采集。等到测量完成,HDC1080向单片机传送两字节测量数据(MSB和LSB),单片机则通过读总线子程序将温湿度数据读取出来。
4.3温湿度显示子程序
本设计采用1602液晶显示温湿度值,当刚开始上电时1602液晶不显示任何数据,等待HDC1080的监测数据,双行显示在1602液晶上。第一行显示:Temperature:--’C,第二行显示:Humidity:-- %(子程序流程图略)。
5.结语
为了实现对所处环境中温湿度的测量,经过研究设计出了以Arduino单片机为中心处理系统的温湿度检测系统,实现了单片机与各个I2C接口元器件的数据传输,并给出了相应的子程序。此系统以数字式温湿度传感器HDC1080为检测器件,电路结构简单、运行可靠,能够准确进行温湿度的测量,测量数据准确性高。由于单片机程序只要载入就可以一直工作下去,测量周期长,使用寿命久,能够一直实现对温湿度的检测。并且本设计在现有的基础上可以根据用户的需求在单片机模块中增加数据存储模块、通信接口等,实现数据保存和上位计算机实现数据交换,作为智能仪表运用于工业生产和家用电器中,如洗衣机、烘干机等中。还可以连接Arduino扩展板增加检测传感器,从而提高系统应用的广泛性。
参考文献:
[1]李光忠.基于单片机的温湿度检测系统的设计[D].山东大学,2007.
[2]李群林.基于多传感器的温湿度检测系统[J].中国仪器仪表,2006,11.
[3]赵娜等.基于51单片机的温度测量系统[J].微计算机信息,2007,11.
作者简介:
李政庭(1998.11-),男,汉族,江苏省泰州市人,嘉兴学院南湖学院本科在读,主要研究方向:电气工程及其自动化。
基金项目:
嘉兴学院南湖学院大学生创新项目(编号:NH85179202)。
(作者单位:嘉兴学院南湖学院)
【关键词】Arduino UNO;I2C总线;HDC1080;温湿度
温度与湿度与人们的生活息息相关。尤其是在工农业生产、气象、科研等部门,必须精确的对环境温度进行检测。传统的干湿球温度计的显示方法,不仅复杂,测量精度也不高,响应速度慢,已不能满足工农业生产和人们生活需求。而选用单片机和专用温湿度数字芯片对温湿度进行检测,可以大大提高温湿度检测的精度。用显示屏显示温度和湿度值,看起来也更直观。本文设计了一种基于I2C总线数字式温湿度芯片的温湿度计。该温湿度计采用一种新型的数字式温湿度传感器HDC1080,对温湿度信号进行采集,并采用单片机Arduino UNO和1602液晶显示屏组成电路,不需要复杂的A/D转换电路就能直接完成数据采集,实现方便、精度高,可根据不同需要应用于各种场合。
1.系统结构
本系统主要由单片机系统模块、数字式温湿度采集芯片、LCD显示模块、报警模块、电源模块、通信模块以及上位机系统组成。本系统设计的原理方框图如图1所示,由传感器HDC1080与单片机Arduino UNO通过I2C总线连接组成测量电路,能够实时检测周围环境的温度和湿度,并把采集数据显示在LCD1602液晶显示屏上,当检测温度或湿度超过所设定的数值时报警模块报警。同时,上位机对数据进行保存及发布。
2.I2C总线工作原理
I2C总线是由数据线SDA和时钟线SCL构成可发送和接收数据的串行总线,SCL时钟线用于控制数据传输速率,SDA用于收发数据及寻址,可进行双向传送,最高传送速率可达400kbps。所有被控电路均并联在总线上,每个电路和模块都有唯一的地址,需要通过SDA发送的地址信号寻址。根据I2C串行总线规范,本文中HDC1080温湿度传感器的地址码为0x40,LCD1604 I2C模块的地址码为0x27。
在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的开始信号,它标志着一次数据传输的开始。在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的结束信号,它标志着一次数据传输的终止。I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位,表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位,一般表示接收器接收该字节没有成功。起始和停止信号图如图2所示。
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应,即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态。逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压VDD(当使用独立电源时)。数据位的传输是边沿触发。时序图如图3所示。
采用I2C总线传输的电路结构简单,编程容易,通信速率高,易于实现用户系统软硬件的模块化和标准化。基于I2C总线的优点,本文采用I2C总线的元器件对温湿度值进行读取及显示,并且该设计方案可在I2C总线上挂多只传感器,便于组网应用。
3.系统硬件设计
3.1 温湿度测量电路
单片机是整个检测系统的核心,它可以接收传感器采集到的数据,将这些数据与程序中设定的温湿度的范围进行比较,得出温湿度值。如果在这个范围内,则会显示环境中的温湿度值,方便使用用户进行观测;但是,如果超出其安全范围,则会触发报警电路,告知用户采取有效措施降低环境中温湿度,保持环境中温湿度的稳定。本设计采用Arduino UNO单片机作为控制器。Arduino单片机具有丰富的接口,有数字I/O口,模拟I/O口,同时支持I2C串口通信。并且能通过各种各样的传感器来感知环境,具有简便的编程环境IDE,极大的自由度,可拓展性能也非常高。
温湿度测量模块采用HDC1080传感器。HDC1080是一款使用I2C协议的数字式温湿度传感器,该传感器将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其内部结构如图4所示。HDC1080中的两个敏感元件分别将温度和湿度转换成电信号,该电信号首先进入信号放大器进行放大,然后进入A/D转换器,最后经过二线串行总线接口输出数字信号。此外,校准系数存储在寄存器中,在测量过程中,校准系数会自动校准来自传感器的信号。
该传感器不需要其他外加电路,直接输出数字量,可直接与Arduino单片机连接,具有线路简单、性能稳定、体积小的特点。并且该传感器拥有±2%的典型湿度测量精度和±0.2℃的典型温度测量精度,支持较宽的工作电源电压范围,以超低功耗提供出色的测量精度,具有低成本和低功耗的优势。温湿度传感器HDC1080的I2C总线串行数据接口线SDA和串行时钟接口线SCL是由单片机进行控制,以单片机作为主机,HDC1080作为从机并支持I2C总线协议的读/写操作命令。一条I2C总线可连接多个HDC1080,可实现多点的温度测量系统。由于Arduino UNO单片机接口较少,可连接扩展板增加接口。
3.2 LCD显示电路
目前,常见的显示器分别为LED数码管和LCD液晶显示器。相比LCD显示质量高,功耗低。因此,本设计采用液晶显示器。考虑到该款数字式温湿度计涉及温度和湿度两类数据,故本设计采用双行显示的1602字符型LCD。 3.3 报警电路
报警电路采用最简单的嗡鸣方式,构造简单,经济实用性强,当检测数值超过设定的安全的范围值时,报警电路就会启动,提醒用户采取措施来调节温湿度。
4.系统软件设计
4.1主程序
首先,单片机通过I2C总线读写程序将温湿度数据从HDC1080中读取出来。然后,根据温湿度补偿公式计算出当前温湿度值并送到LCD1602显示。接着,单片机将温湿度上下限与当前温湿度值进行比较,若当前温湿度值超出限值,单片机驱动蜂鸣器开始报警。
4.2温湿度采集子程序
HDC1080上電时是无法主动测量的,要先对HDC1080进行初始化设置。设置HDC1080将先执行温度测量,后进行湿度测量。首先,在寄存器地址0x02中配置采集参数,将位[12]设置为1,使采集模式设置为测量温度和湿度,再设置所需的温度和湿度测量分辨率。其次,通过执行指针写入事务并将地址指针设置为0x00来触发测量,将地址指针设置为0x00进行温度测量,设置为0x01进行湿度测量。根据转换时间等待测量完成,可读取输出数据。
本设计中单片机首先对连接在总线上的元器件进行地址识别。如果地址匹配,单片机向HDC1080发出启动传输命令,然后通过写总线子程序将温度测量指令和湿度测量指令写入HDC1080。HDC1080正确接收到温湿度测量命令后,就会进行数据采集。等到测量完成,HDC1080向单片机传送两字节测量数据(MSB和LSB),单片机则通过读总线子程序将温湿度数据读取出来。
4.3温湿度显示子程序
本设计采用1602液晶显示温湿度值,当刚开始上电时1602液晶不显示任何数据,等待HDC1080的监测数据,双行显示在1602液晶上。第一行显示:Temperature:--’C,第二行显示:Humidity:-- %(子程序流程图略)。
5.结语
为了实现对所处环境中温湿度的测量,经过研究设计出了以Arduino单片机为中心处理系统的温湿度检测系统,实现了单片机与各个I2C接口元器件的数据传输,并给出了相应的子程序。此系统以数字式温湿度传感器HDC1080为检测器件,电路结构简单、运行可靠,能够准确进行温湿度的测量,测量数据准确性高。由于单片机程序只要载入就可以一直工作下去,测量周期长,使用寿命久,能够一直实现对温湿度的检测。并且本设计在现有的基础上可以根据用户的需求在单片机模块中增加数据存储模块、通信接口等,实现数据保存和上位计算机实现数据交换,作为智能仪表运用于工业生产和家用电器中,如洗衣机、烘干机等中。还可以连接Arduino扩展板增加检测传感器,从而提高系统应用的广泛性。
参考文献:
[1]李光忠.基于单片机的温湿度检测系统的设计[D].山东大学,2007.
[2]李群林.基于多传感器的温湿度检测系统[J].中国仪器仪表,2006,11.
[3]赵娜等.基于51单片机的温度测量系统[J].微计算机信息,2007,11.
作者简介:
李政庭(1998.11-),男,汉族,江苏省泰州市人,嘉兴学院南湖学院本科在读,主要研究方向:电气工程及其自动化。
基金项目:
嘉兴学院南湖学院大学生创新项目(编号:NH85179202)。
(作者单位:嘉兴学院南湖学院)