原文链接/详细资料:https://f1829ryac0m.feishu.cn/wiki/ZIzEwqYH0iT7mbkV5opc6biunPe?from=from_copylink
引言
在蒸烤箱水箱、扫地机基站、咖啡机等消费场景,或是城市内涝、工业设备等户外场景,液位检测的稳定性与精准度,直接影响设备的使用体验与安全。但传统的浮子式、光电式液位方案,始终摆脱不了 “易卡滞、易误判、易腐蚀” 的痛点,让设备的液位控制频频 “掉链子”。
传统液位方案各有局限:浮子式易被水垢粘连卡滞,仅支持单点液位检测;光电式易被污渍、水汽遮挡,误判率高且成本较高;接触式电极易受水质影响,腐蚀后数据漂移严重。而电容式方案凭借非接触设计、连续液位检测、结构简单、成本低的核心优势,完美适配各类场景:无需接触液体,不会被水垢污染;可实现从空到满的连续液位监测,支持精细化水量控制;模组结构简单,可直接贴装在容器外壁,安装便捷,同时成本远低于光电式方案,是消费级与工业级液位检测的优选方案。
在城市内涝、隧道积水、地下水水位监测等户外场景中,该模组可作为非接触式液位检测单元,配合雨量计实现降雨 - 积水 - 排水的全流程监测。它不受水体杂质、光照变化影响,能在复杂的户外环境下稳定工作,输出精准的液位数据,为城市内涝预警、排水调度提供可靠的数据支持,助力提升城市防汛管理的智能化水平。
在家电水箱场景中,传感器可直接贴装在水箱外壁,隔着容器壁完成液位检测,无需与液体接触,彻底避免水垢、油污对传感器的腐蚀或粘连。在蒸烤箱、扫地机基站、咖啡机等设备的水箱中,它能稳定输出连续液位数据,让设备精准判断水量,避免干烧或溢水;即便隔着 3mm 左右的容器壁与空气间隙,也能保持高灵敏度,完美适配家电的防水结构设计,为设备提供可靠的水量控制依据。
在宠物智能设备场景中,它不仅能用于饮水机的水箱液位检测,还可拓展至猫砂盆的接近感知、喂食器的余量检测。非接触的安装方式不会被宠物饮水的污渍污染,连续液位检测能精准反馈水量变化,低功耗设计也适配宠物设备的长续航需求,为宠物智能设备提供稳定、可靠的感知方案,让宠物饮水与喂食更智能。
一、模块简介
敏源 MER-MCP1081-260-26 电子水尺液位传感器,是一款基于电容式非接触测量原理的智能液位检测模组。它搭载自研的 MCP1081S 十通道多模式宽频数字电容处理芯片,通过感知液体介电常数的变化实现液位检测,无需与液体直接接触,更可隔着塑料、玻璃等非金属容器壁完成测量,彻底解决了接触式传感器易腐蚀、浮子式易卡滞、光电式易遮挡的行业难题。内置的温度补偿与抗干扰算法,能有效滤除水垢、水汽、温差带来的干扰,输出稳定的连续液位数据,为各类场景提供可靠的液位感知方案。
该图展示了 MER 电子水尺液位传感器的产品简介、外观及核心特性说明。
- 可测量连续/分段液位变化,传感器电极面外侧标有刻度,可随时与实测值比较;添加温度补偿,补偿范围 0℃~+50℃;一体化可级联、易于多节点组网;添加校准参数寄存器,方便用户自行校准;安装简便,成本低。
二、主要芯片介绍
2.1 芯片概述
MER-MCP1081-260-26 采用十通道多模式宽频数字电容处理器芯片 MCP1081S,集电容测量、采集、温度感知与补偿、微处理器算法和接口通信于一体,可对非金属容器内部液位进行非接触式连续检测。
2.2 引脚定义
该图给出了 MER 模组与传感器的接口定义,可用于区分 UART、RS485 和电源引脚。
2.3 功能框图
无。
2.4 性能参数
该图列出了 MER 模块的技术参数,包括量程、精度、供电和接口形式等信息。
2.5 参考电路
无。
2.6 芯片配置
无。
2.7 通信接口和相关协议
该图展示了 MER 模块采用的 Modbus-RTU 通信协议及基本串口参数。
2.8 寄存器定义
展示寄存器与校准点配置内容,适合高精度液位标定时参考。
三、电路工程
3.1 电路源工程
获取电路源工程,请查看下面链接:
https://mysentech.com/productinfo/162716.html
3.2 模块使用说明
3.2.1 模块测试环境搭建和注意事项
拿到模块时候,我们首先需要按照下面要求搭建测试环境:
可直接隔着透明塑料杯装水模拟液位场景,同时验证它的非接触穿透能力。
需要注意:
接着,按照下面步骤进行校准:
3.2.2 Modbus Poll 的使用
Modbus Poll 是一款通用型 Modbus 主站调试工具,适配本系列所有支持 Modbus-RTU 协议的电容式传感器,可快速实现传感器与电脑的串口通信调试、实时数据读取与日志导出,是验证传感器功能、采集测试数据的通用上位机工具。软件支持 Modbus RTU/ASCII/TCP/IP 协议,兼容多种寄存器类型与数据格式,操作流程对全系列传感器通用。
使用前需先完成软件安装与激活,可通过官方渠道下载安装包,首次打开可试用 30 天,也可输入注册码永久激活。硬件连接传感器与电脑后,打开软件点击「Connection」-「Connect」,在弹出窗口中配置串口参数(端口号、波特率、数据位 / 校验位 / 停止位,本系列传感器默认采用 9600 Baud、8N1 格式,具体以对应型号规格书为准),确认后即可建立通信连接。
以下为通用操作流程说明:
串口连接配置:
-
- 将传感器通过 USB 转串口模块接入电脑后,打开 Modbus Poll 软件,点击菜单栏「Connection」-「Connect」,在弹出窗口中选择传感器对应的 COM 端口号,并配置与传感器匹配的串口参数(波特率、数据位、校验方式、停止位,本系列传感器默认采用 9600 Baud、8N1 格式),确认后即可建立通信连接。
导入传感器配置文件:
-
- 软件支持导入各传感器型号对应的
.mbp
-
- 预配置文件,文件中已预设好寄存器地址、数据格式与别名定义,无需手动配置寄存器。直接在软件中打开对应传感器的
.mbp
-
- 文件,即可自动加载所有参数,连接成功后将直接显示传感器的实时检测数据(如尘 / 雨 / 霜厚度值、状态标志位等)。
数据日志记录(可选):
- 如需保存测试数据,可通过「Setup」-「Excel Log」功能配置日志记录规则,支持按固定周期或每次数据更新记录数据,并可设置记录条数上限,方便后续对传感器数据进行分析与验证。
以上为通用的上位机基础操作,不同传感器型号的 .mbp 预配置文件、具体寄存器定义、特殊配置细节,可参考「七、相关资料」中内容。
3.3 应用实验
这里,我们使用 GraftPort-RP2040 开发板进行测试,MER-MCP1081-260-26 电子水尺液位上使用 UART 接口与主控进行通信。
该图展示了 MER 模块与 GraftPort-RP2040 开发板的接线方式。
模块连线如下表所示:
| 开发板引脚 | 模块引脚 | 说明 |
|---|---|---|
| 引脚 16 | MTX |
UART 数据传输线,对应开发板的发送引脚 |
| 引脚 17 | MRX |
UART 数据传输线,对应开发板的接收引脚 |
这里,我们需要在 uPyPI 上搜索相关驱动包:https://upypi.net/zh/
该图演示了在 uPyPI 中搜索 MER 驱动包的操作界面。
输入 mcp1081_driver 进行搜索,显示如下:
该图展示了 mcp_driver 搜索结果,便于确认安装目标驱动包。
点击复制本地安装命令:
该图展示了复制 MER 驱动安装命令的界面,方便快速部署测试环境。
通过 mip 工具导入模块驱动库代码,以下是 mpremote 工具使用指令:
mpremote mip install https://upypi.net/pkgs/mcp1081_driver/2.1.0
导入 MER-MCP1081-260-26 电子水尺液位传感器 -MicroPython 驱动代码后,将下面 main.py 代码复制到我们的工程中:
# Python env : MicroPython v1.23.0
# -*- coding: utf-8 -*-
# @Time : 2026/08/21
# @Author : hogeiha
# @File : main.py
# @Description : MER-MCP1081-260-26 electronic water-level sensor example
# @License : MIT
# ======================================== 导入相关模块 =========================================
import time
from mer import MER
from umodbus.serial import Serial as ModbusRTUMaster
# ======================================== 全局变量 ============================================
SLAVE_ADDR = 1
UART_ID = 0
TX_PIN = 16
RX_PIN = 17
BAUDRATE = 9600
PRINT_INTERVAL_MS = 1000
READ_ERROR_DELAY_MS = 500
STARTUP_RETRY_DELAY_MS = 1000
# ======================================== 功能函数 ============================================
# ======================================== 自定义类 ============================================
# ======================================== 初始化配置 ===========================================
time.sleep(3)
print("FreakStudio: MER-MCP1081-260-26 water level sensor running")
host = ModbusRTUMaster(
pins=(TX_PIN, RX_PIN),
baudrate=BAUDRATE,
data_bits=8,
stop_bits=1,
parity=None,
uart_id=UART_ID,
)
sensor = MER(host, slave_addr=SLAVE_ADDR)
# ======================================== 主程序 ============================================
whileTrue:
try:
node_address = sensor.read_node_address()
break
except RuntimeError as error:
print("Sensor not responding: %s" % error)
print("Retrying sensor startup...")
time.sleep_ms(STARTUP_RETRY_DELAY_MS)
print("Node address: %d" % node_address)
print("Hardware version: %s" % sensor.read_hw_version())
print("Firmware version (raw): %d" % sensor.read_fw_version())
print("Device UID: %s" % sensor.read_device_uid())
print("Filter window: %d" % sensor.read_filter_count())
print("Fit mode: %d" % sensor.read_fit_mode())
print("Alarm levels (low, overflow): %s" % (sensor.read_alarm_levels(),))
print("Full level: %d mm" % sensor.read_full_level())
last_print_time = time.ticks_ms()
try:
whileTrue:
current_time = time.ticks_ms()
if time.ticks_diff(current_time, last_print_time) >= PRINT_INTERVAL_MS:
try:
data = sensor.read_measurements()
except RuntimeError as error:
print("Transient communication error: %s" % error)
last_print_time = current_time
time.sleep_ms(READ_ERROR_DELAY_MS)
continue
print(
"Level: %(level_mm)d mm | Temperature: %(temperature_c).1f C | "
"CAP: %(capacitance_pf).3f pF | SF: %(sf).3f | "
"Low: %(low_alarm)s | Overflow: %(overflow_alarm)s" % data
)
last_print_time = current_time
time.sleep_ms(10)
except KeyboardInterrupt:
print("Program interrupted by user")
except OSError as error:
print("Hardware communication error: %s" % error)
except RuntimeError as error:
print("Driver error: %s" % error)
except Exception as error:
print("Unknown error: %s" % error)
finally:
print("Cleaning up resources...")
sensor.deinit()
ifhasattr(host._uart, "deinit"):
host._uart.deinit()
del sensor
del host
print("Program exited")
烧录代码,打开终端,输出如下:
该图展示了 MER 示例程序的串口输出结果,可验证液位、温度、电容等参数读取正常。
这里,注意唤醒操作已经在我们的驱动库内置,开发者无需二次操作。
446
