Arduino通过RXTX联通JAVA实现数字温度计案例

该项目使用Arduino结合DHT11传感器,通过RXTX库实现实时温度湿度数据传输到Java应用,数据存储于数据库,支持温湿度阈值报警。系统采用IIC通信,数据每秒更新一次,便于数据分析。
摘要由CSDN通过智能技术生成

相关项目已经上传到个人博客项目中,供学习使用
代码资源链接如下:https://download.csdn.net/download/qq_41662881/12917318

关键词

  1. OLED显示
  2. RXTX、IIC通信
  3. 数据库连接存储
  4. 实时检测(1s/次)
  5. 数据分析
  6. 任意温湿度上下限报警
  7. Arduino u8glib、DHT库使用

该设计研究数字电子温度计的设计与实现,并采用javaRXTX实时传输数据到数据库中,使得数据分析成为可能,让我们的温湿度数字化更加具体可行。
采用IIC的通信方式将数据显示在OLED数码显示器上,随着技术的发展,一些环境比较恶劣的场合中也能觉得数字温度计的踪迹,在本设计中,主要从功能组合,硬件组合,软件算法等几个方面探讨温度计的设计。数字温度计在现代测温应用方面具有诸多优势,值得进一步学习和研究.

系统概述

系统的结构
本设计使用DHT11传感器作为功能实现的主要数据采集方,通过Arduino作为下位机读取转换数据并显示到OLED屏上,并通过RXTX进行串口通讯,将数据实时采集到上位机电脑数据库中,以实现数据的监测读取存储,使得后面对温湿度数据的数据分析变得方便简单。

总结构:

在这里插入图片描述

DHT11模块:
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。

DHT11设计原理:
在这里插入图片描述

DHT11由电阻式感湿元件和NTC测阻元件组成进行测量后,传输到微控制单元(MCU)进行转换(被测量转换由OTP存储器写入的固定的电阻值-电量值相应转变程序完成)然后传输到DATA口输出到单片机进行显示。
其中,电阻式感湿元件原理:电阻式湿度传感器是利用湿敏元件的电气特性,随湿度的变化而变化的原理进行湿度测量的传感器,湿敏元件一般是在绝缘物上浸渍吸湿性物质,或通过蒸发、涂覆等工艺之隔一层金属、半导体、高分子薄膜和粉末状颗粒而制作的,在湿敏元件的吸湿和脱湿过程中,水分子分解出的离子H+的传导状态发生变化, 从而使元件的电阻值随湿度而变化。
与环境相对湿度(RH)和环境温度(t)之间,呈现指数函数关系 ,公式可表示为R=Roexpα(Φ-Φ0)-Rtexpβ(t-t0) Ro为起始电阻,α为湿度常数,Rt为起始电阻,β为温度常数。
NTC测阻元件原理:NTC是Negative Temperature Coefficient 的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件,所谓NTC热敏电阻器就是负温度系数热敏电阻器。它是以锰、钴、镍和铜等金属氧化物为主要材料,采用陶瓷工艺制造而成的。这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。
热敏电阻的电阻-温度特性可近似地用式1表示。
(式1) R=Ro exp {B(I/T-I/To)}
R : 温度T(K)时的电阻值
Ro : 温度T0(K)时的电阻值
B : B 值
*T(K)= t(ºC)+273.15为官方给出的温度-被测量转换公式。
在这里插入图片描述

接入系统后,因dht11为应变式传感器,故在2脚加入稳定的Vcc电源3~5V并用电阻减小电量输入已达到不干扰DATA数据输入的测量值正确性又可提供稳定电源的前提下将被传输过来的物理量转换为需要显示的数据。

串行接口 (单线双向)
DATA 用于单片机与 DHT11之间的通讯和同步
采用单总线数据格式
一次通讯时间4ms左右
数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零。
数据传输格式:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据 + 8bit湿度小数数据 + 8bit 温度整数数据 + 8bit温度小数数据 + 8bit校验和

传输方式:

总线空闲状态为高电平
需采集数据时,主机把总线拉低等待DHT11响应(须大于18毫秒,保证DHT11能检测到起始信号。)
DHT11接收到主机的开始信号后,等待主机开始信号结束。
主机发送开始信号结束后,转为输入模式(即拉高电平)延时等待20-40us。
主机读取DHT11的响应信号,若总线处于低电平,表示DHT11开始响应。
DHT11开始响应80us后拉高总线80us
然后开始传输0_1信号
接线口:
在这里插入图片描述

系统硬件设计:
在这里插入图片描述

系统上位机设计:
在这里插入图片描述

系统的功能

通过DHT11采集数据到Arduino后实时显示到OLED屏上以进行实时查看,然后将数据通过RXTX上传到PC端后使用JDBC存储数据到数据库中,以通过Origin软件或者Excel做成数据表可以进行数据分析,进而对直接所处环境温湿度进行改进至自己适合的温度。
开发环境

  1. Arduino:作为下位机负责数据采集显示以及串口上传。
    (1) Arduino.U8glib:用于SSD1306 128x64 OLED屏的字符变量显示以及与屏幕间的IIC通信
    (2) Arduino.DHT:用于DHT11采集数据的通用库
  2. Eclipse(java):作为上位机负责数据收集整理存储入数据库。
    (1) Java.RXTX:RXTX.jar用于串口通讯,将Arduino的数据传输到串口中上传到java程序中。
    (2) Java.JDBC:JDBC.jar用于连接java端数据与数据库端的存储。
  3. MySql:用于存储温湿度采集数据。

传感器技术

DHT11传感器模块:
DHT11设计原理:
在这里插入图片描述

DHT11由电阻式感湿元件和NTC测阻元件组成进行测量后,传输到微控制单元(MCU)进行转换(被测量转换由OTP存储器写入的固定的电阻值-电量值相应转变程序完成)然后传输到DATA口输出到单片机进行显示。
电阻式感湿元件原理:电阻式湿度传感器是利用湿敏元件的电气特性,随湿度的变化而变化的原理进行湿度测量的传感器,湿敏元件一般是在绝缘物上浸渍吸湿性物质,或通过蒸发、涂覆等工艺之隔一层金属、半导体、高分子薄膜和粉末状颗粒而制作的,在湿敏元件的吸湿和脱湿过程中,水分子分解出的离子H+的传导状态发生变化, 从而使元件的电阻值随湿度而变化。
与环境相对湿度(RH)和环境温度(t)之间,呈现指数函数关系 ,公式可表示为R=Roexpα(Φ-Φ0)-Rtexpβ(t-t0) Ro为起始电阻,α为湿度常数,Rt为起始电阻,β为温度常数。
NTC测阻元件原理:NTC是Negative Temperature Coefficient 的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件,所谓NTC热敏电阻器就是负温度系数热敏电阻器。它是以锰、钴、镍和铜等金属氧化物为主要材料,采用陶瓷工艺制造而成的。这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。
热敏电阻的电阻-温度特性可近似地用式1表示。
(式1) R=Ro exp {B(I/T-I/To)} R : 温度T(K)时的电阻值 Ro : 温度T0(K)时的电阻值 B : B 值
*T(K)= t(ºC)+273.15为官方给出的温度-被测量转换公式。

接入系统后,因dht11为应变式传感器,故在2脚加入稳定的Vcc电源3~5V并用电阻减小电量输入已达到不干扰DATA数据输入的测量值正确性又可提供稳定电源的前提下将被传输过来的物理量转换为需要显示的数据。
在这里插入图片描述

该段代码用于对采集到的数据进行转换以实现输出数据;
在这里插入图片描述

Arduino端的数据接收,用于分离转换成2个数组后的温度和湿度;最后一句用于设定蜂鸣器报警的上下限。

Arduino有内部的lCD/LED屏幕库u8glib,使用IIC/SPI通信使得数据变量能够显示在屏幕上。
在这里插入图片描述

用于启动IIC通信
在这里插入图片描述

用于点亮屏幕的128x64数码管
在这里插入图片描述

该函数用于数据显示的位置定位以及数据传输
在这里插入图片描述

使用Arduino启动OLED屏时需要do…while…函数方可进行数据显示

其它相关技术

IIC通信: 在这里插入图片描述

RXTX通信:
在这里插入图片描述
为java提供的rxtx数据连接dll文件;
在这里插入图片描述

调用RXTX.jar包用于打开关闭指定串口;

在这里插入图片描述

用于显示所有可打开的串口
在这里插入图片描述

用于打开指定的串口
在这里插入图片描述

用于设置串口通信的信息
在这里插入图片描述

用于进行通信,将串口得到的数据进行转换为可识别的GBK基本显示标准后读取显示于上层软件端。
在这里插入图片描述

用于事件触发监听打开串口
在这里插入图片描述

用于转码显示串口读到的信息并转化成字符串赋值给t显示出来
在这里插入图片描述

用于获取数据采集时候的系统时间并计入数据库中,以达到实时计入效果

JDBC通信:
DBUtil.java用于JDBC编程调用MySql数据库增删改查数据
在这里插入图片描述

用于设定基础的数据库连接信息,调用驱动
在这里插入图片描述

用于查询操作
在这里插入图片描述

用于增删查改操作
在这里插入图片描述

该系统中使用 语句将数据传输入数据库,其中使用 将传输过来的温度湿度
在这里插入图片描述

使用split函数分离成2个数组后分别存放。

硬件实现

在这里插入图片描述

OLED接线:A5SCL
A4SDA
VCC3.3V
GNDReset/GND

DHT11接线:DATD2
GNDGND
VCC3.3V
蜂鸣器接线:SD6
GNDGND
VCC3.3V

Arduino代码实现

#include <dht11.h>
#include <U8glib.h>
  U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 
//U8GLIB_SSD1306_128X64 u8g(10, 9);
dht11 DHT11;
#define DHT11PIN 2

//float temp=0;//温度显示


void setup() {
   
//temp
  Serial.begin(9600);
  //Serial.println("begin!");

//!
  pinMode(6,OUTPUT);
 
//oled显示
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
   
    u8g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值