首页 > 其他分享 >湿度传感器 - 从零开始认识各种传感器【第二期】

湿度传感器 - 从零开始认识各种传感器【第二期】

时间:2024-07-15 14:58:52浏览次数:16  
标签:第二期 humidity 湿敏 从零开始 传感器 湿度 data display

本篇来学习湿度传感器。我们将介绍到湿度传感器的工作原理、常见种类,如何查找和购买,以及通过MCU实际演示对于湿度传感器数据的读取过程。

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="aya3ZtHG-1721023092254" src="https://player.bilibili.com/player.html?aid=240373423"></iframe>

湿度传感器|从零开始认识各种传感器

1. 什么是湿度传感器

湿度传感器是一种用于测量空气中相对湿度的设备。它广泛应用于多个领域,如气象、建筑、农业、医学、食品加工等。它测量的是被测环境中的相对含水量。以我们在家用常见的温湿度计(图1)读到的数值为例,它是一个百分比数。如果把空气中水蒸气饱和状态下的湿度定义为100,那么读数是55则表示当前空气中含有的水蒸气含量是饱和状态下的55%。所以它表示的是相对湿度。

图1 温湿度计

我们知道“相对湿度” 与当前温度是密切相关的,当空气受温度影响而收缩或膨胀时,相对湿度会发生变化,比如温度下降时,空气体积减小,但是含有的水蒸气不变,所以相对湿度上升了, 反之如果温度上升,空气体积膨胀,水蒸气含量不变,会造成相对湿度下降。 而绝对湿度的表示是用重量比来衡量的,不受温度变化影响。我们通常在仪表上看到的都是相对湿度。

图2 温湿度相关性

2. 湿度传感器是如何工作的

常见的湿度传感器的工作原理是基于材料的吸湿性质,如湿敏电阻,湿敏电容等。因为水分子具有极性,当材料受到湿气的影响时,它的电导率会随之变化,从而影响器件的阻值或者容值,那么相应的就可以测量出对应的湿度度变化。

图3 湿度传感器工作原理

另一种方式是利用物理量在不同湿度空气中传播速度和损耗的差异来测量湿度。比如利用潮湿空气和干燥空气的热传导速度的差异,可以制成热敏电阻式湿度传感器。它将一个参考NTC放在密封的干燥金属盒中,而测量NTC放在开孔金属盒中与潮湿空气接触,由于潮湿空气和干燥空气热传导性质的差异,会使得两个NTC的阻值产生差异,从而导致测量电压Vm的变化,这样就可以测量出湿度。

图4 热敏电阻湿度传感器

另外利用微波,超声波或者红外线在含水蒸汽的空气中传播产生损耗的原理来 ,可以制成微波,超声波以及红外线湿度传感器。

图5 其他湿度传感器

3. 常见的湿度传感器的种类

3.1 湿敏电阻

湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。湿敏电阻的优点是灵敏度高,缺点则是线性度 较差。湿敏电阻的种类很多,例如金属氧化物湿敏电阻、硅湿敏电阻、陶瓷湿敏电阻等。

图6 湿敏电阻

3.2 湿敏电容

湿敏电容一般由高分子薄膜电容制成。当环境湿度发生改变时,湿敏电容式传感器的介电常数发生变化,使其电容量也发生变化,其电容变化量与相对湿度成正比。湿敏电容式传感器的主要优点是灵敏度高、响应速度快、容易实现小型化和集成化。

图7 湿敏电容及其等效形式

3.3 湿敏电容和湿敏电阻的对比

图8 湿敏电容和湿敏电阻的对比

3.4 半导体及IC湿度传感器

另外还有二极管湿敏器件和MOSFET湿度敏感器件等。其特点是易于和半导体电路集成在一起。比如这款在得捷电子网站上搜索到的温湿度传感器IC【SHTC3-TR-10KS】,它具有封装小,响应速度快,精度高的特点。值得一提的是,由于温度和湿度的相关性,市面上的IC类的传感器一般都是同时提供了温度和湿度的测量数据。

图9 IC湿度传感器

4. 湿度传感器的应用和设计注意事项

湿度传感器是非密封性的,为保护测量的准确度和稳定性,应尽量避免在酸性、碱性,粉尘,及含有机溶剂的环境中使用。为正确反映测试空间的湿度,还应避免将传感器安放在离墙壁太近或空气不流通的死角处。在设计PCB时,要注意湿度传感器附近空气流通的通道。

5. 湿度传感器实验演示

图10  树莓派读取湿度传感器过程展示

主控板卡:基于RP2040的带屏调试助手

以下是完整程序:

from breakout_colourlcd240x240 import BreakoutColourLCD240x240
from machine import ADC, Pin, Timer, PWM,I2C
from utime import sleep
import time, math,array
#------------------------------------------------------------------

######################################################################

# 定义连接到 DHT22 数据线的引脚
data_pin=Pin(20, Pin.IN,Pin.PULL_UP)

def readdata():
    # 向 DHT22 传感器发送启动信号
    data_pin.init(Pin.OUT)
    data_pin.low()
    time.sleep_ms(20)#微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过30ms)
    data_pin.high()
    data_pin.init(Pin.IN, Pin.PULL_UP)
    # 等待 DHT22 传感器响应
    while data_pin.value() == 1:
        pass
    while data_pin.value() == 0:
        pass
    while data_pin.value() == 1:
        pass
    data_pro = []
    j=0
    k=0
    while j < 40:
        k = 0
        while data_pin.value() == 0:
            pass
        while data_pin.value() == 1:
            k += 1
            if k > 100:
                break
        if k < 3:
            data_pro.append(0)
        else:
            data_pro.append(1)
        j += 1
    return data_pro

def read():
    # 读取传感器数据并验证校验和
    data=[]
    data = readdata()
    humidity_bit=data[0:8]
    humidity_point_bit=data[8:16]
    temperature_bit=data[16:24]
    temperature_point_bit=data[24:32]
    check_bit=data[32:40]
    humidity=0
    humidity_point=0
    temperature=0
    temperature_point=0
    check=0
    #温度、湿度、校验位计算
    for i in range(8):
        #湿度计算
        humidity+=humidity_bit[i]*2**(7-i)
        humidity_point+=humidity_point_bit[i]*2**(7-i)
        #温度计算
        temperature+=temperature_bit[i]*2**(7-i)
        temperature_point+=temperature_point_bit[i]*2**(7-i)
        #校验位计算
        check+=check_bit[i]*2**(7-i)
    tmp=humidity+humidity_point+temperature+temperature_point
    return temperature, humidity

######################################################################    
#初始化
width = BreakoutColourLCD240x240.WIDTH
height = BreakoutColourLCD240x240.HEIGHT
display_buffer = bytearray(width * height*2)
display = BreakoutColourLCD240x240(display_buffer)

timer1 = Timer()                    #定时器1

stemp = ADC(2)                  
current_temp = 0         
#-------------------------------------------------------------------
def display_init():  
  
    display.set_pen(0,255,0)
    display.rectangle(58,30,13,160)
    display.circle(64,190,10)
    display.set_pen(255,0,0)
    display.text("current", 150, 20, 194, 2)
    display.text("humidity", 150, 35, 194, 2)

    display.update()
  
    for i in range(6):
        display.set_pen(0,200,0)
        display.pixel_span(80,27 + i*30,10)
        display.text(str(100 - i *20), 100, 20+i*30, 194, 2)
        display.set_pen(0,0,220)
        if i < 5:
            for j in range(4):
                display.pixel_span(80,33 + j*6 + i * 30,5)
        display.update()

    display.update()
#---------------------------------------------------------------------
def display_change(temp, color):
    global current_temp
    current_temp = temp
    #print(temp)
    display.set_pen(color[0], color[1], color[2])
    display.rectangle(58,30,13,160)
    display.circle(64,190,10)
    display.set_pen(0,0,150)
    display.rectangle(58,20,13,7+int((50-temp/2)/2)*6)
    display.set_pen(0,0,0)
    display.rectangle(150,50,90,40)
    display.set_pen(0,255,0)
    display.text(str(temp)+"%", 150, 50, 5, 5)
    display.update()
#----------------------------------------------------------------------

def get_temp():
    # 尝试从DHT22传感器读取温度和湿度数据
    temperature, humidity = read()
    time.sleep(0.5)  # 等待 2 秒,然后进行下一次读数
    return humidity

#-----------------------------------------------------------------------

def main():
    
    color = [0,255,0]      
    timer1 = Timer()
  
    display_init()
    
    #timer1初始化
    timer1.init(freq=5,mode=Timer.PERIODIC, callback=lambda t:display_change(round(get_temp(),1), color))

    while True:
      sleep(0.1) 
main()

标签:第二期,humidity,湿敏,从零开始,传感器,湿度,data,display
From: https://blog.csdn.net/m0_61036291/article/details/140436942

相关文章

  • 从零开始备战蓝桥杯——一天一个小算法第一天(排序篇)
    今天使我们学习算法的第一天,算法内容为冒泡排序和选择排序。冒泡排序思想:两两相邻数字排序,小的放在前面大的放在后面。从左往右遍历,不断重复第一步,这样可以永远保证大的在最后面重复上述操作,可以得到一个数组从小到大的排序。事例:假设我们有n个数字。第一次比较遍历全......
  • Datawhale2024年AI夏令营第二期:CV图像--学习笔记
       Deepfake攻防--图像赛道是该夏令营第二期的学习活动(“CV图像”方向),是于蚂蚁集团举办的“外滩大会-全球Deepfake攻防挑战赛”开展的实践学习——适合想入门、了解并实践,关于深度学习和计算机视觉方向的学习者参与。此次学习活动的速通手册如下:从零入门CV图像竞赛(Deepf......
  • Datawhale AI夏令营第二期——机器学习 电力需求预测挑战赛
    #AI夏令营#Datawhale夏令营一种基于LSTM的电力暴力预测1.赛事简介随着全球经济的快速发展和城市化进程的加速,电力系统面临着越来越大的挑战。电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。然而,电力需求受到多种因素的影响,为了提高......
  • 【嵌入式DIY实例-ESP8266篇】-LCD1602显示DS1621传感器数据
    LCD1602显示DS1621传感器数据文章目录LCD1602显示DS1621传感器数据1、DS1621介绍2、硬件准备与接线3、代码实现在本文中,介绍如何将ESP8266NodeMCU板(ESP-12E)与DS1621数字温度传感器连接,其中温度值(摄氏度和华氏度)打印在1602LCD屏幕上。本项目......
  • 【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示BME280传感器数据
    LCDST7735显示BME280传感器数据文章目录LCDST7735显示BME280传感器数据1、硬件准备与接线2、代码实现本文中将介绍如何使用ESP8266NodeMCU板(ESP12-E模块)和BME280气压、温度和湿度传感器构建气象站。NodeMCU微控制器(ESP8266EX)从BME280传感......
  • 手把手教你:从零开始创建Gradle项目
    手把手教你:从零开始创建Gradle项目在当今快速发展的软件开发领域,自动化构建工具成为了提高开发效率和质量的关键。Gradle,以其灵活的配置和强大的依赖管理功能,成为了Java和其他语言项目的首选构建工具。本文将带领你一步步创建一个新的Gradle项目,让你快速上手这个强大的自动......
  • 廉价平替esphome水浸 雨水传感器diy
    esp8266nodemcu+雨水传感器diy厨房水浸传感器首先在esphome中添加设备esp8266nodemcu+雨水传感器diy厨房水浸传感器esphome配置编写#8266平台配置esp8266:board:nodemcuv2#水浸雨水传感器binary_sensor:-platform:gpiopin:number:GP......
  • 温湿度传感器
    前言&常见型号类型:DS18B20、DHT11DHT11概述相关文档:DHT11数据手册.pdfDHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件......
  • stm32-时序图学习-温度传感器-DHT11
    目录温度传感器-DHT111.单总线协议:只有一条数据线,数据只能以比特流的方式传输,所以就会涉及到MSB(高位先出)还是LSB(低位先出),传输方向是半双工通信2.时序图主从机应答信号时序图第一步主机发送启动信号第二步从机发送响应信号DHT11发送的数据0的形式DHT11发送的数据1的形式......
  • 温湿度传感器的学习及基于串口和逻辑分析仪的验证
    目录温湿度传感器温湿度传感器的基本概述测量精度硬件接线时序分析接收数据分析代码全局变量配置DHT11为输出模式配置DHT11为输入模式配置初始化DHT11发送开始信号判断DHT11温湿度传感器是否应答接收一位数据接收一个字节的数据接收DHT11传输的数据串口USART1的初始化利用串口发送......