资讯专栏INFORMATION COLUMN

七、【中级篇】传感器DHT11、DHT22、DS18B20

Developer / 2378人阅读

摘要:传感器传感器简介串口与并口单工与半双工上拉电阻是用来供应电流的下拉电阻是用来分担电流的传感器串行接口收发数据分析的读写时序传感器简介智能终端是在感知层如果想要感知采集数据必定需要使用传感器市面上的传感器有很多检测气体的

1.传感器简介

智能终端是在感知层,如果想要感知采集数据必定需要使用传感器

市面上的传感器有很多:
检测气体的 温度 湿度 稀有气体含量(CO CO2 O2 甲醛 乙醇 甲烷 …)
检测液体的 温度 PH值 浑浊 液位
检测固体的 湿度 元素含量
检测人体 温度 血压 心率 血糖…

传感器的接口也有很多:
GPIO接口 串口接口(USART/UART IIC IIS SPI …) 并口接口

数字型传感器 和 模拟型传感器

传感器可以从采集种类、接口种类、采集到的数据种类分为很多种

串口与并口

串口:串行的接口或者串行的通信接口|串行的通讯接口,是指数据按照串行的方式进行传输(是指数据一位一位进行传输)
并口:并行的接口或者并行的通信接口|并行的通讯接口,是指数据按照并行的方式进行传输(是指数据多位多位进行传输)
注意:并不是说并口可以一次发送多位数据就说明并口比串口通信快,实际上正好相反,串口通信速度要比并口快
并口有很多的限制,(数据线与数据线之间会有电平干扰、需要同时发送同时接收)

单工与半双工

单工模式 A–>---->–B
半双工模式 A–>----<–B
全双工模式 ---->-----

略…

上拉电阻:是用来供应电流的

下拉电阻:是用来分担电流的

2.DHT11传感器

从手册中了解DHT11传感器:

  • 是用来采集温度和湿度的传感器
  • 采集到的是数字量
  • 4管脚的封装形式
  • 采集的范围:湿度 : 20% - 90%(误差:±5%),温度 : 0℃ - 50℃(误差:±2℃),
  • 分辨力 : 1(指的是采集的精度<只能采集整数部分>)
  • 连接方式:一个管脚用来接电源,一个管脚用来接地,一个管脚用来接MCU,一个管脚悬空(NC<没有连接>)
  • 串行接口:是指数据按照串行的方式进行传输
  • 单线双向(半双工的工作模式):指的是串行接口的工作模式
    单工模式,半双工模式,全双工模式
  • 一次完整的数据传输为40bit<5个字节>,高位先出
    8bit湿度整数数据+8bit湿度小数数据
    +8bit温度整数数据+8bit温度小数数据
    +8bit校验和
    数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
  • 软件有软件的协议,硬件也有硬件的协议:硬件的协议就是读写时序,读写时序都是官方定义出来的
    例子:DHT11在出产的时候,官方就已经定义好了一套读写时序,MCU想要和DHT11交互数据,就需要让MCU遵守DHT11的读写时序
  • 分析DHT11的读写时序

串行接口收发数据

需要把形参c保存的8bit二进制数据,通过高位先出的方式进行传输
假设:MCU连接了PC9管脚,可以使用位带发数据PCOut(9) 收数据PCIn(9)
数据线低电平代表数据0,数据线高电平代表数据1

/*发送数据*/void func(u8 c)//10111110{	u8 i = 0;//循环变量				for(i = 0; i < 8; i++)	{		if(c & 0x80)			PCOut(9) = 1;		else			PCOut(9) = 0;		c <<= 1;//01111100	}}

需要接收8bit二进制数据,传感器通过高位先出的方式发送数据
假设:MCU连接了PC9管脚,可以使用位带发数据PCOut(9) 收数据PCIn(9)
数据线低电平代表数据0,数据线高电平代表数据1

u8 func(void){	u8 c = 0;//用来接收数据的变量	u8 i = 0;//循环变量	for(i = 0; i < 8; i++)	{		c <<= 1;//c >>= 1;		if(PCIn(9) == 1)			c |= 1;//c |= 0x80;	}}

分析DHT11的读写时序



传输数据之前需要先检测DHT11存不存在|DHT11有没有损坏

void set_dht_output(void)//内部函数,把PC10管脚配置为输出模式{	GPIO_InitTypeDef Gpio_Value;//定义了GPIO初始化结构体类型的变量		Gpio_Value.GPIO_Mode = GPIO_Mode_Out_PP;//选择了推挽的输出模式	Gpio_Value.GPIO_Pin = GPIO_Pin_10;//选择了10号管脚	Gpio_Value.GPIO_Speed = GPIO_Speed_50MHz;//选择了50MHz的输出速率	GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC组的管脚}void set_dht_input(void)//内部函数,把PC10管脚配置为输入模式{	GPIO_InitTypeDef Gpio_Value;//定义了GPIO初始化结构体类型的变量		Gpio_Value.GPIO_Mode = GPIO_Mode_IN_FLOATING;//选择了浮空的输入模式	Gpio_Value.GPIO_Pin = GPIO_Pin_10;//选择了10号管脚	GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC组的管脚}void dht_output_status(int n){	set_dht_output();//先把PC10管脚初始化为输出模式	if(n == 0)		PCOut(10) = 0;	else		PCOut(10) = 1;}int dht_input_status(void){	set_dht_input();//先把PC10管脚初始化为输入模式	return PCIn(10);}void dht_init(void)//DHT11初始化{	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	//通过APB2总线使能GPIOC组的时钟}void get_dht_value(char buf[5])//获取DHT11传感器采集的数据{	u8 flag = 0;//该变量是用来获取PC10管脚的电平高低	u8 time = 0;//该变量是用来计数		dht_output_status(1);//把PC10管脚拉高	dht_output_status(0);//把PC10管脚拉低	delay_ms(20);//延时20ms	dht_output_status(1);//把PC10管脚拉高	//while(dht_input_status());//以死等的方式等待PC10管脚被拉低	do	{		flag = dht_input_status();//获取PC10管脚的电平高低		delay_us(2);//延时2us		time++;//计数自增	}while(flag == 1 && time <= 20);//以超时处理的方式等待PC10管脚被拉低	if(time > 20)//判断是否超时		return ;//提前结束程序	while(!dht_input_status());//以死等的方式等待PC10管脚被拉高	/*开始接收40bit的数据*/	//...............}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123450.html

相关文章

  • MSP430单片机,OLED,独立按键,DS18B20温度感器,继电器,抽风机,LED灯构成的电子

    摘要:当温度感应器感应到设备主体内部的温度高于设定值时,此时温度设定器会控制风机进行启动,对内部进行散热处理,低于设定值时停止。设定的时间间隔温度阈值,当前温度由显示,表示工作状态。为继电器,,,供电。必须手动清除,否则将持续引发中断。 目录 一、 设计要求 二、 总体设计和系统框图 三、设计...

    BingqiChen 评论0 收藏0
  • ESP8266+Blinker 的万物互联(智能家居

    摘要:下面是演示视频物联网文章目录前言一准备二操作步骤配置配置三效果展示总结前言实现万物互联第一步,千里点灯,然后添加你想要的模块就可以了,接下来我们进入正文。 前面学习...

    CntChen 评论0 收藏0
  • 基于蓝牙的超声波无线测距系统

    摘要:设计简介本设计是基于蓝牙的超声波无线测距的设计,主要实现以下功能实现通过测量当前温度值实现通过温差补偿法公式修改超声波在当前空气中的传播速度实现通过超声波传感器测量距离值。 设计简介: 本设计是基于蓝牙的超声波无线测距的设计,主要实现以下功能: ① 实现通过DS18B20测量当前温度值 ② ...

    zxhaaa 评论0 收藏0
  • 51单片机学习笔记001-----51单片机基础构造浅介绍

    摘要:单片机在一片集成电路芯片上集成微处理器存储器接口电路,从而构成了单芯片微型计算机,即单片机。没搞懂专栏咋弄的,慢慢摸索吧,本人纯新手,读书人的事没啥要脸不要脸的,有问题随便指出,随便喷,欢迎来指点 2021-9-25 自己手绘的一张图,算是简单的介绍吧  对照实图看一下        ...

    int64 评论0 收藏0
  • 树莓派利用DHT11上传数据到电脑MySQL上

    摘要:工具树莓派温湿度传感器在开始实验之前,要在电脑上安装,并且建立好一个数据库连接。到这里对电脑配置就结束了,对了,还有如果你们到时运行树莓派代码出现远程连接失败错误码,像下图这是因为,你的防火墙开了,把防火墙关掉就不会报这个错误了。 ...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<