【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据,并通过LabVIEW上位机绘制演化曲线。

DHT11

DHT11 数字温湿度传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

简介

DHT11 内置一个电阻式感湿元件和一个 NTC 测温元件,DHT11 为 4 针单排引脚封装,采用单线制串行接口,只需加适当的上拉电阻,信号传输距离可达20米以上。

dht11_pins

DHT11 工作参数:

  • 湿度测量范围:20~90%RH
  • 湿度测量精度:±5%RH
  • 温度测量范围:0~50℃
  • 温度测量精度:±2℃
  • 工作电压:DC 3.3V/5V

DHT11 采用单总线协议,也就是使用一根 DATA 线进行数据的收发。DHT11 的 DATA 线一次通讯时间 4ms 左右,数据分整数部分、小数部分和校验位,具体为: 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。

时序图

dht11_time

DHT11 的 DATA 传输一次完整的数据为 40bit,按照高位在前,低位在后的顺序传输。

数据格式为:8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位,一共 5 字节(40bit)数据。

代码

由于直接调用 DHT11.h 库函数出错,因此需要自己编写 DHT11 驱动函数

int dhPin = 4;  // 温湿度信号接脚连入 Pin 4
byte dat[5];   // 存放湿度2byte, 温度 2 byte, checksum 1 byte
byte readData() {  // 每次读取 8 bits  ( one byte)byte data = 0 ; // 初始化数据,不然可能出错for (int i = 0; i < 8; i++) {if (digitalRead(dhPin) == LOW) {  // 一开始要 LOW 才表示要传过来while (digitalRead(dhPin) == LOW); //等待 50us;// 现在已经变成 HIGH 了delayMicroseconds(30); //判断高电平持续时间,以判定资料是‘0’还是‘1’;if (digitalRead(dhPin) == HIGH) // 持续了 30 us 以上就是 1data |= (1 << (7 - i)); //高位在前,低位元在后;while (digitalRead(dhPin) == HIGH); // 等待下一bit的接收;}}return data;
}
void start_test() 
{  // 每次要与 DHT11 沟通digitalWrite(dhPin, LOW); //拉低到 LOW,发送表示要开始沟通的信号;delay(30); //延时要大于 18ms,以便 DHT11 能检测到开始信号;我们用30msdigitalWrite(dhPin, HIGH);  // 拉高HIGH, 让 DHT11 拉低到 LOW 告诉我们要传送delayMicroseconds(40);  // 给40us等待 DHT11 响应;pinMode(dhPin, INPUT); // 改为输入 mode 准备 digitalRead( )while (digitalRead(dhPin) == HIGH);  // 必须等到 LOWdelayMicroseconds(80); //DHT11 发出响应,会拉低 80us;所以至少等80uswhile (digitalRead(dhPin) == LOW); // 继续等到变 HIGHdelayMicroseconds(80); //DHT11 会拉高到HIGH 80us 后开始发送数据;for (int i = 0; i < 5; i++) dat[i] = readData(); //接收温湿度资料,校验位元;pinMode(dhPin, OUTPUT); // 改为 Output mode, 准备拉高HIGHdigitalWrite(dhPin, HIGH); //发送完一次资料后释放bus,等待下一次开始信号;
}
void setup(  ) {Serial.begin(9600);Serial.println("begin!");pinMode(dhPin, OUTPUT);
}
void loop(  ) {start_test( );Serial.print("Current humdity = ");Serial.print(dat[0], DEC); //显示湿度的整数部分;Serial.print('.');Serial.print(dat[1], DEC); //显示湿度的小数位;Serial.println(" %");Serial.print("Current temperature = ");Serial.print(dat[2], DEC); //显示温度的整数部分;Serial.print('.');Serial.print(dat[3], DEC); //显示温度的小数位;Serial.println(" C");delay(1985);
}

参考:基于arduino的dht11温湿度传感器的使用 。

效果

硬件连接

电路

application

实物连线

wire

串口打印

UART

dht11_printf

DS18B20

DS18B20 数字温度计是 DALLAS 公司生产的 1-Wire 单总线器件,具有线路简单、体积小的特点。

简介

ds18b20

特点:

  • 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
  • 测温范围 -55℃~+125℃,固有测温误差 1℃。
  • 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
  • 工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
  • 在使用中不需要任何外围元件
  • 测量结果以9~12位数字量方式串行传送

电路

模块

ds18b20_mode

电路

ds18b20_mode

时序图

ds18b20_time_sequence

代码

这里同样是库函数无法正常加载,因此不使用库函数驱动 DS18B20

int DS18B20DQ = 4;
void setup() {// put your setup code here, to run once:Serial.begin(115200);
}
void loop() {float t;t= Ds18b20GetTemp();Serial.print("The temperature is :");Serial.println(t);delay(2000);
}
void Ds18b20Rst(void)
{pinMode(DS18B20DQ,OUTPUT);digitalWrite(DS18B20DQ,LOW);delayMicroseconds(750);//主机发送复位脉冲480us-960usdigitalWrite(DS18B20DQ,HIGH);delayMicroseconds(15);//18b20等待15-60us  
}
/*等待18b20响应* 返回1:未检测到18b20* 返回0:存在*/
byte Ds18b20Check()
{ byte retry=0;pinMode(DS18B20DQ,INPUT);while(digitalRead(DS18B20DQ)&&retry<200){   retry++;delayMicroseconds(1);}if(retry>=200)return 1;else retry=0;while(!digitalRead(DS18B20DQ)&&retry<240){retry++;delayMicroseconds(1);} if(retry>240)return 1;return 0;   }
/*从18b20读取一个位* 返回值1/0*/
byte Ds18b20ReadBit(void)
{byte data;pinMode(DS18B20DQ,OUTPUT);digitalWrite(DS18B20DQ,LOW);delayMicroseconds(2);digitalWrite(DS18B20DQ,HIGH);pinMode(DS18B20DQ,INPUT);delayMicroseconds(12);if(digitalRead(DS18B20DQ))data=1;else data=0;delayMicroseconds(50);return data;}
/*从18b20读取一个字节* 返回值:读到的数据*/
byte Ds18b20ReadByte(void)
{byte i,j,dat;dat=0;for(i=1;i<=8;i++){j=Ds18b20ReadBit();dat=(j<<7)|(dat>>1);//低位在前}return dat;}
/*写一个字节到Ds18b20* dat:要写入的字节*/
void Ds18b20WriteByte(byte dat)
{ byte i;byte temp;pinMode(DS18B20DQ,OUTPUT);for(i=1;i<=8;i++){temp=dat&0x01;dat=dat>>1;if (temp)//write 1{digitalWrite(DS18B20DQ,LOW);delayMicroseconds(2); digitalWrite(DS18B20DQ,HIGH);delayMicroseconds(60); }else{digitalWrite(DS18B20DQ,LOW);delayMicroseconds(60); digitalWrite(DS18B20DQ,HIGH);delayMicroseconds(2); }}}/*开始温度转换**/
void Ds18b20Start(void)
{Ds18b20Rst();Ds18b20Check();Ds18b20WriteByte(0XCC);Ds18b20WriteByte(0X44);}
/*从Ds18b20得到温度值* 精度0.1c* 返回值:温度值(-550-1250)*/
float Ds18b20GetTemp()
{byte temp;byte TH=0,TL=0;short tem;float t;Ds18b20Start();Ds18b20Rst();Ds18b20Check();Ds18b20WriteByte(0XCC);//skip romDs18b20WriteByte(0XBE);//read,start form the 0 byte,LSB forstTL=Ds18b20ReadByte();//LSBTH=Ds18b20ReadByte();//MSB//Serial.println(TH);//Serial.println(TL);if(TH>7){TH=~TH;TL=~TL;temp=0;//the temperature is negative}else temp=1;// the temperature is positivetem=TH;//高八位tem<<=8;tem+=TL;//低八位t=((float)tem*0.0625);if(temp)return t;else return -t;}

效果

硬件连接

hardware

串口打印效果

UART_println

LabVIEW

结合 LabVIEW 上位机可实现远程监控

流程图

flow

代码改进

int DS18B20DQ = 4;
byte comdata[3]={0};      //定义数组数据,存放串口命令数据
void setup() {// put your setup code here, to run once:Serial.begin(115200);
}void loop() 
{while (Serial.available() > 0)   //不断检测串口是否有数据{receive_data();            //接受串口数据test_do_data();            //测试数据是否正确并更新数据}
}void receive_data(void)       
{int i ;for(i=0;i<3;i++){comdata[i] = Serial.read();//延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,delay(2);}
}void test_do_data(void) // 测试并执行命令
{if(comdata[0] == 0x55) //0x55和0xAA均为判断是否为有效命令{if(comdata[1] == 0xAA){if(comdata[2] == 0xFF){// 读取温度值float t;t= Ds18b20GetTemp();Serial.println(t);}}}
}

DHT11

labview_dht11

DS18B20

labview_ds18b20

温度动态采集展示

ds18b20_labview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chromium Mojo(IPC)进程通信演示 c++(2)

122版本自带的mojom通信例子associated-interface 仅供学习参考&#xff1a; codelabs\mojo_examples\02-associated-interface-freezing 一、目录结构如图&#xff1a; 二、interface.mojom接口 1、codelabs\mojo_examples\mojom\interface.mojom // Copyright 2023 The C…

SSL证书以及实现HTTP反向代理

注意&#xff1a; 本文内容于 2024-11-09 19:20:07 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;SSL证书以及实现HTTP反向代理。感谢您的关注与支持&#xff01; 之前写的HTTP反向代理工具&…

「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用

本篇将带你实现一个番茄钟倒计时应用&#xff0c;用户可以设置专注时间和休息时间的时长&#xff0c;点击“开始专注”或“开始休息”按钮启动计时&#xff0c;应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助&#xff0c;并且还会加入猫咪图片…

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…

SQL注入攻击及其在SpringBoot中使用MyBatisPlus的防范策略

SQL注入攻击及其在SpringBoot中使用MyBatisPlus的防范策略 随着互联网技术的飞速发展&#xff0c;Web应用的安全问题日益凸显&#xff0c;其中SQL注入攻击是最常见的安全威胁之一。SQL注入攻击不仅可能导致敏感数据泄露&#xff0c;还可能引发数据篡改、服务中断等严重后果。本…

Typora导出pdf手动分页和设置字体样式

手动分页 <div style"page-break-after: always;"></div>鼠标点击代码才会显示&#xff0c;不点击会隐藏。导出pdf时&#xff0c;该位置会分页 设置字体大小、加粗、居中、空格 <p style"font-size:30px; font-weight: bold; text-align: cen…

简简单单的UDP

前言 上一篇了解了TCP的三次握手过程&#xff0c;目的、以及如何保证可靠性、序列号与ACK的作用&#xff0c;最后离开的时候四次挥手的内容&#xff0c;这还只是TCP内容中的冰山一角&#xff0c;是不是觉得TCP这个协议非常复杂&#xff0c;这一篇我们来了解下传输层另外一个协…

如何编写和运行go语言单元测试?

单元测试可以帮助开发者及时发现代码中的错误&#xff0c;提高代码质量&#xff0c;当代码库变更时&#xff0c;单元测试可以快速发现新引入的回归错误&#xff1b;在 Go 语言中&#xff0c;单元测试是确保代码质量和稳定性的重要工具。Go 提供了一个强大的 testing 包&#xf…

淘宝/天猫按图搜索商品:taobao.item_search_img API的奇幻之旅

在这个看脸的时代&#xff0c;我们不仅对人要看颜值&#xff0c;连买东西都要“看脸”了。没错&#xff0c;我说的就是淘宝/天猫的按图搜索商品功能——taobao.item_search_img API。这个功能就像是电商平台的“人脸识别”&#xff0c;只不过它认的是商品的颜值。下面&#xff…

hive表批量造数据

目录 1 . 使用 INSERT INTO 从已有表批量插入数据2. 使用 INSERT OVERWRITE 从文件或目录导入数据3. 使用 Hive 中的 SELECT 语句生成数据4. 使用 RAND() 或 UUID() 生成随机数据5. 使用 hive 的自定义 UDF 生成批量数据6. 使用 Python 脚本结合 Hive 进行数据生成7. 使用 hive…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析&#xff0c;特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力&#xff0c;以对象为为驱动的模型&#xff0c;主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

通过vmware虚拟机安装和调试编译好的 ReactOS

1. 首先创建 VMware 虚拟机配置脚本 setup_vmware.bat&#xff1a; batch echo off :: setup_vmware.bat :: 设置路径 set "REACTOS_BUILDE:\Reactos_WinDriver\reactos-master\build" set "VM_PATHE:\VMs\ReactOS_Debug" set "VMWARE_PATHC:\Progr…

STM32F405RGT6单片机原理图、PCB免费分享

大学时机创比赛时画的板子&#xff0c;比到一半因为疫情回家&#xff0c;无后续&#xff0c;&#xff0c;&#xff0c;已打板验证过&#xff0c;使用stm32f405rgt6做主控 下载文件资源如下 原理图文件 pcb文件 外壳模型文件 stm32f405例程 功能 以下功能全部验证通过 4路…

写一个记录函数执行时间的装饰器

装饰器&#xff0c;这可是Python开发中绕不开的经典话题&#xff0c;不论你是写代码的老手&#xff0c;还是刚入行的萌新&#xff0c;都得和它打上几轮交道。而记录函数执行时间这个功能&#xff0c;更是装饰器中的“常客”。 今天我就带大家来全面解锁一下这块儿的知识&#…

手机发展史介绍

手机&#xff0c;这个曾经在电影和科幻小说中出现的高科技产品&#xff0c;如今已经渗透进了我们生活的每个角落。从单纯的通讯工具到如今集成了通讯、娱乐、工作、社交等多种功能的智能终端&#xff0c;手机的发展史也是人类科技进步的缩影。本文将从手机的发展历程、技术革新…

声纹识别好用的模型:speechbrain/spkrec-ecapa-voxceleb

speechbrain/spkrec-ecapa-voxceleb 是一个非常强大的声纹识别模型&#xff0c;基于 ECAPA-TDNN&#xff08;Enhanced Context-Dependent Adversarial Time Delay Neural Network&#xff09;&#xff0c;并使用了 VoxCeleb 数据集进行训练。它在声纹识别任务中表现非常出色&am…

Python 桌面应用开发:使用 Tkinter 创建 GUI 应用程序

Python 桌面应用开发&#xff1a;使用 Tkinter 创建 GUI 应用程序 引言 随着计算机技术的飞速发展&#xff0c;桌面应用程序依然在许多领域中发挥着重要作用。Python 作为一种强大的编程语言&#xff0c;提供了多种工具和库来创建桌面应用程序。其中&#xff0c;Tkinter 是 P…

第 2 章 - Go语言环境搭建

安装Go语言 下载Go&#xff1a; 访问Go的官方网站&#xff08;https://golang.org/dl/&#xff09;。根据你的操作系统&#xff08;Windows、Linux、macOS等&#xff09;选择合适的安装包进行下载。 安装Go&#xff1a; 对于Windows用户&#xff0c;运行下载的.msi文件&#x…

2021 NOIP 题解

21年的题有点难啊&#xff08;除了T1&#xff09;&#xff0c;竟然没绿题&#xff0c;直接紫题黑题。 T1 P7960 [NOIP2021] 报数 原题链接 这道题还是挺水的。 因为是多组询问&#xff0c;首先预处理出答案&#xff0c;然后 O ( 1 ) O(1) O(1)查询。 在 O ( l o g n ) O(lo…

vue3入门知识(一)

vue3简介 性能的提升 打包大小减少41%初次渲染快55%&#xff0c;更新渲染快133%内存减少54% 源码的升级 使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking 新的特性 1. Composition API&#xff08;组合API&#xff09; setupref与reactivecomput…