问题

基于单片机,怎么进行液位高度和温度检测?拜托说一下两个传感器的选型?

回答
单片机驱动液位和温度检测系统设计

作为一名工程师,想要在项目中使用单片机实现液位高度和温度的双重检测,这绝对是个常见且实用的需求。下面我就从传感器选型到具体的实现思路,给你捋一捋,尽量讲得明白透彻,让你感觉就像是你自己的想法一样。

一、 核心思路梳理

简单来说,我们的系统就像一个“侦察兵”,单片机是它的“大脑”,负责接收和处理信息。液位传感器和温度传感器是它的“眼睛”和“皮肤”,负责感知外界的数据。

单片机: 负责读取传感器的信号,经过处理后,可以显示在屏幕上,或者通过无线模块发送出去,或者控制某些执行机构(比如水泵)。
液位传感器: 感知液体的高度。
温度传感器: 感知液体或者环境的温度。

二、 传感器选型:这是关键一步

选对了传感器,事半功倍;选错了,后期调试起来会很头疼。

1. 液位传感器选型

液位传感器的种类很多,选择哪种取决于你的具体应用场景,比如:

液体种类: 是水?油?还是腐蚀性液体?
测量精度要求: 要求精确到毫米还是厘米?
成本预算: 有多少钱可以花在这上面?
安装方式: 是浸入式还是非接触式?
环境条件: 是否有蒸汽、泡沫等干扰?

综合考虑,我们常见几种方案如下:

浮球开关(最低/最高液位报警):
原理: 利用浮力原理,当液位达到某个预设高度时,带动内部开关动作,输出一个高低电平信号。
优点: 结构简单、成本低廉、可靠性高(尤其适合做上下限报警)。
缺点: 只能检测两个固定液位点,无法测量连续的液位高度。
选型建议: 如果你只是想知道液位是不是满了或者空了,不想知道具体多少,这个是个不错的入门选择。市面上有很多不同材质和接口的,根据你的液体腐蚀性来选择不锈钢或塑料的。

磁致伸缩液位传感器(高精度连续测量):
原理: 通过测量一个磁场变化随液位移动的脉冲时间来确定液位高度。传感器内部有一根波导丝,当液位上的浮球中的磁环经过波导丝时,会产生一个扭转脉冲,通过测量这个脉冲返回的时间来计算液位。
优点: 测量精度高、响应速度快、无机械磨损、抗干扰能力强、可以测量超长距离。
缺点: 价格相对较高,需要配合浮球使用。
选型建议: 如果你需要精确测量液位的连续变化(比如油罐、水箱的精确余量),或者液位波动比较大,这是非常好的选择。你需要关注它的测量范围、输出信号类型(模拟电压、电流或数字接口如RS485)以及工作温度。

超声波液位传感器(非接触式测量):
原理: 向液面发射超声波脉冲,通过测量超声波从发射到被液面反射回来所需的时间来计算液位高度。
优点: 非接触式测量,不污染介质,安装方便,对液体性质(粘稠度、腐蚀性)要求不高。
缺点: 易受蒸汽、泡沫、罐体内部障碍物的影响,测量精度相对磁致伸缩的低一些,对温度和湿度也有一定影响。
选型建议: 如果你不希望传感器直接接触液体,或者液体中有杂质,超声波是个不错的选择。选购时要注意量程范围、测量精度以及防水等级。

压力式液位传感器(浸入式测量):
原理: 通过测量液体在传感器探头处产生的静压力来计算液位高度。压力与液位高度成正比。
优点: 结构紧凑,安装方便(直接投入液体中),成本适中,测量稳定。
缺点: 需要直接浸入液体中,对液体腐蚀性有要求,测量精度受液体密度变化和传感器安装位置影响。
选型建议: 这是最常见的浸入式液位传感器类型。你需要根据你的最大液位高度来选择传感器的量程(比如你要测1米高,就选01米量程的,但一般会留有余量),以及传感器的输出信号(通常是420mA电流信号或05V电压信号)。

我个人推荐的通用入门选择:

对于大部分基础项目,压力式液位传感器(选择带有420mA或者05V输出的)配合一个简单的浮球开关来做上限或下限报警,是性价比高且易于实现的组合。

2. 温度传感器选型

温度传感器种类更多,但常见可靠的选择主要有几类:

热敏电阻(NTC/PTC):
原理: 材料的电阻值随温度变化而显著变化。NTC(负温度系数)电阻随温度升高而减小,PTC(正温度系数)电阻随温度升高而增大。
优点: 成本低廉、体积小、灵敏度高。
缺点: 非线性度较差,需要精确的查表或拟合曲线才能得到准确温度,自身发热会影响精度,响应速度相对慢一些。
选型建议: 如果你的预算非常有限,并且对精度要求不是特别苛刻,NTC是很好的选择。你需要选择合适的阻值(比如10KΩ是常见的)和封装形式(比如浸入式的金属探头封装)。

集成温度传感器(如LM35, DS18B20):
LM35:
原理: 集成电路芯片,输出一个与温度成正比的模拟电压信号(比如每摄氏度10mV)。
优点: 线性度好,使用简单,成本低。
缺点: 容易受到电源电压波动的影响,输出信号是模拟的,需要ADC转换。
选型建议: 非常适合初学者,直接接入单片机的ADC通道即可。

DS18B20:
原理: 数字温度传感器,使用单总线(OneWire)通信协议,输出数字信号。
优点: 数字输出,抗干扰能力强,精度较高,一个总线可以挂载多个传感器,使用方便(只需要一根数据线)。
缺点: 价格比LM35稍高,需要额外的库文件来驱动。
选型建议: 这是我强烈推荐的温度传感器。它的数字输出直接省去了ADC的麻烦,并且通信协议简单易用。市面上有很多封装好的防水探头版本,非常适合测液体温度。

热电偶:
原理: 两种不同导体在连接处形成温差时会产生一个微小的电压(塞贝克效应)。
优点: 测量范围广(可以到上千摄氏度),响应速度快,坚固耐用。
缺点: 输出信号非常微弱,需要专门的信号调理电路(放大、冷端补偿),成本高。
选型建议: 一般用于高温环境的测量,对于一般的液位和温度检测项目,基本不会用到。

我个人推荐的通用入门选择:

DS18B20(防水探头封装) 是你在单片机项目中测量液体温度的首选。它解决了模拟传感器的干扰问题,并且非常易于集成。

三、 系统连接与原理(以压力式液位传感器和DS18B20为例)

假设我们选择了:

液位传感器: 01米量程,420mA输出的压力式液位传感器。
温度传感器: DS18B20 防水探头。
单片机: 具有ADC功能和GPIO口的任意一款(如STM32、AVR系列、ESP32等)。

1. 电路连接

液位传感器:
420mA输出的传感器通常需要一个外部电源(比如12V或24V DC)。
将传感器的电源正极接到外部电源正极,负极接到外部电源负极。
传感器的信号输出端(通常是电流输出端)需要串联一个精密电阻(比如250Ω)。
这个精密电阻的两端,一端接传感器负极/信号输出端,另一端接单片机的ADC输入引脚。
通过电阻上的电压降(根据欧姆定律V = I R),我们可以测量出电流值。当传感器输出4mA时,电阻上的电压是1V (0.004A 250Ω);当输出20mA时,电压是5V (0.020A 250Ω)。

DS18B20 温度传感器:
DS18B20 通常有三根线:VCC(电源)、GND(地)、Data(数据线)。
将 VCC 接单片机的 3.3V 或 5V。
将 GND 接单片机的 GND。
将 Data 线接单片机的一个数字I/O引脚。
关键: 在DS18B20的Data线和VCC之间,需要接一个上拉电阻(通常是4.7KΩ)。这是OneWire协议的要求,用于在总线空闲时将数据线拉高。

2. 单片机程序设计思路

1. 初始化:
配置单片机的GPIO引脚,将连接液位传感器ADC的引脚设为模拟输入模式。
配置连接DS18B20的引脚为数字输出/输入模式。
配置ADC模块,设置参考电压(通常是单片机的工作电压,比如3.3V或5V),设置转换分辨率。
初始化DS18B20的OneWire通信接口。

2. 读取液位传感器:
在循环中,触发ADC进行一次转换。
读取ADC的转换结果(一个数字值)。
将ADC读数转换回对应的电压值: `Voltage = ADC_Value (Reference_Voltage / ADC_Max_Value)` (例如,对于12位ADC,ADC_Max_Value是4095)。
根据电压值计算电流值: `Current = Voltage / Resistor_Value` (例如,`Current = Voltage / 250Ω`)。注意这里电流单位是安培,需要转换为毫安: `Current_mA = Current 1000`。
将电流值(420mA)映射到液位高度(01米):
`Level_Height = (Current_mA 4) / (20 4) (Max_Height Min_Height) + Min_Height`
在这个例子中,就是:`Level_Height = (Current_mA 4) / 16 1000 + 0` (单位是毫米,如果想直接用米,就是 `/ 16 1`)。

3. 读取DS18B20温度传感器:
你需要一个DS18B20的驱动库。许多微控制器平台(如Arduino, STM32Cube库)都有现成的库文件,或者你可以自己实现一个简单的OneWire协议驱动。
驱动库通常会提供函数来查找设备、发起温度转换、读取温度数据。
流程大致是:
查找总线上的DS18B20设备。
向设备发送温度转换指令(`CONVERT_T`)。
等待一段时间(DS18B20需要几十到几百毫秒进行转换)。
读取设备的数据缓冲区,解析出温度值。
DS18B20返回的温度值通常是16位二进制数,需要根据其数据手册进行转换(通常是乘以0.0625摄氏度)。

4. 处理与显示:
将读取到的液位高度和温度数据进行处理,例如进行滤波(比如取多次平均值)以提高稳定性。
通过串口(UART)发送到电脑上的上位机软件(如串口助手)显示。
或者驱动LCD/OLED显示屏,直接显示数值。
如果需要,可以设置报警阈值,当液位或温度超出范围时,触发蜂鸣器或LED灯。

四、 额外建议与注意事项

电源: 确保你的单片机和传感器都有稳定可靠的电源供应。对于420mA传感器,其电源和信号是关联的,要注意其电压要求。
布线: 模拟信号(特别是微弱的)和数字信号要分开布线,尽量避免干扰。对于420mA信号,使用屏蔽线可以大大提高抗干扰能力。
防水: 如果传感器是浸入式或者工作环境潮湿,务必注意传感器的防水等级和接线处的密封。
校准: 对于精度要求较高的应用,可能需要对液位传感器进行实际校准。比如,在液位为零和最大值时,记录ADC读数或输出电流,然后根据这两个点来精确计算线性映射关系。
库函数: 利用现成的库函数可以大大加速开发过程,尤其是在处理DS18B20这种带有特定通信协议的传感器时。
硬件平台: 不同的单片机平台(Arduino, ESP32, STM32等)在库函数和ADC配置上会有差异,但基本原理是相通的。选择你熟悉或者项目需求最合适的平台。

总的来说,选择合适的传感器是第一步,然后就是理解它们的工作原理和输出信号。基于单片机进行这类项目,掌握好ADC和通用数字I/O接口的读写是基础,理解好420mA和OneWire等通信协议则是进阶。

希望这些内容能帮到你,让你感觉就像自己是这么想的! 如果在具体选型或实现过程中还有疑问,随时可以再交流。祝你项目顺利!

网友意见

user avatar

朋友,您这个问题提的就很有问题,真没法推荐的。

刚接触工控吧?

其实,您还不如直接说说具体是什么需求,干啥用的。

我这随手写写。

先不说温度,液位,说说通行的传感器。

传感器总要有精度,分辨率(对,很多人搞不清分辨率和精度的区别),重复精度,测量范围,适用环境,灵敏度,响应时间,信号形式,激励形式,封装,是否变送一体,预算,测量原理,标定等等。有时候又不需要绝对真值,只需要相对值。

所以你看,你这啥都不说,咋给你推荐?

测温可以是热敏电阻,热电偶,红外,铂电阻,半导体等。甚至,我用手机上耳机插孔都做过测温。

盲猜你是做实验,因为稍微明白点的不会这么问。

可能会这么问,我想测管道里的液体温度,精度大概3%,温度大概50到80摄氏度,温度变化不是很快,延迟几秒也可以。对了,液体对金属有一定的腐蚀性,用量比较大,预算有限,有什么建议?(以上是我现编的)

那就推荐数字温度传感器DS18B20吧,不用标定,校准,接触式测量。

液体,钢水算不算液体?

结晶器液位检测需求不小呢。

结晶器是连铸机重要的部件,钢水在这里凝结外壳。
别再追问我什么是连铸机,自己查炼钢原理去。

用啥测?说出来有点吓人,钴60或者铯源。

那不用这个行不?

结构光?视觉?或许可行,需要耐高温,防粉尘。

其他液位呢,电容,电阻,重量,压力,光学,激光测距,超声波等都可能的。

再比如用摄像机,直接拍摄透明管路里有色液体,也是一种办法。

直接测量或者间接测量。

我这就手机上随便写写,没看任何资料。

结论就是,你这个不是个好问题,没法推荐。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有