污水桶快满了,为什么隔着桶壁也能提醒?

本文为教学接线与设计预期,尚无实物测量记录;使用 NUCLEO-F030R8、DFRobot SEN0715 非接触电容液位开关、板载 PA5/R31/LD2 提醒灯;低压教学模型。

问题

拖地机器人的污水桶快满了,提醒灯怎样知道该亮?不能把一块普通电路板泡进脏水。把电容液位开关贴在透明塑料桶外侧靠近桶口的位置,它只看这一点有没有液体,不会量出整桶还剩多少空间。

物件动作

小熊拿着水位卡从桶底走向桶口的门槛牌。水面没到牌,小熊举白旗;水面越过牌,小熊举红旗。门卫连续看三张红卡,才按下亮灯按钮。回到电路,门槛牌是外贴传感器,红卡是高电平,亮灯按钮是开发板的输出。

真实连接

本例用三点三伏给传感器供电。棕线接开发板三点三伏,蓝线接公共地,黑色输出线进 D 六数字输入。开发板内部的 PA 五经过五百一十欧电阻接板载绿灯,再回地。没有五伏线进输入脚,也没有电线穿过桶壁。

原因与结果

水靠近外贴片时,桶壁两侧的电容条件改变;传感器自己判断是否达到贴片位置。厂家示例中,检测到液体输出高,没液体输出低。开机先等五秒,再每半秒看一次;连续三次为高才亮灯。桶晃一下只出现一次高,不会马上报警。

验证

先断电核对棕、蓝、黑三线,再把贴片固定在薄的非金属桶外。用清水教学桶从低于贴片慢慢加到贴片,再倒空;万用表量黑线对地,记录真实高低后才接入程序。观察连续三次判定和板载灯。本片画的是设计预期,不是假装做过实测。

边界

这只是满位提醒,不控制拖地机器人,也不能防止溢水。污渍、泡沫、桶壁材料和安装空隙都可能改变判定;输出线断开更不能假设一定安全。真实设备还要密封、防水和故障诊断,本例只演示低压逻辑。

一次具体的桶满提醒,不是假装改造整台机器人

教学对象是一只透明薄壁非金属桶:把感应片贴在桶口以下预留余量的位置。水面没有到贴片时不提醒;水面到达贴片并连续稳定出现时才让灯亮。这里没有拆开任何拖地机器人的电机、电池或主控,也不让本电路控制机器人的行走或抽吸。标题说‘污水桶’,是生活应用场景;实物验证必须先用清水教学桶完成。不同机器人的污水、泡沫、桶壁弧度和密封方式会让结果变化,所以本成品不承诺对任意品牌产品可直接贴装。

小熊拿水位卡从桶底向上走,来到贴片所在的门槛牌。水面还低时,门卫手持白旗;碰到门槛后,水位卡变红。门卫用秒表隔半秒收一张卡,连续三张红卡才举红旗,板上的提醒灯跟着点亮。回到真实器件:贴片是 DFRobot SEN0715,红卡对应黑线 OUT 的高电平;门卫是 NUCLEO-F030R8 的软件状态机,提醒灯是板载 PA5/R31/LD2。卡片和旗是解释动作,不是电路图中的额外元件。

隔着桶壁,为什么会出现开关信号

SEN0715 用电容感应判断液体是否靠近贴片。非金属壁不是导线,水也没有与 MCU 引脚接触;贴片附近介质改变后,传感器内部检测电容变化,再输出一个高或低的数字结果。它只报告贴片这一高度附近是否到位,不会量出整个桶的剩余容积。DFRobot 的官方规格给出 3.3–5 V 供电、至多 15 mm 的感应壁厚和 500 ms 响应时间;实际桶的材料、曲率、胶带间隙和污物残留仍需验证。官方示例说明该型号检测到液位时 liquidLevel=1,没有液位时为 0。不要把它与另一个型号的‘浸水拉低’光学探头混用。

三根外部线和一条板内灯路

本例用 NUCLEO-F030R8 的 CN6 3V3 给 SEN0715 棕色 VCC 供电,CN6 GND 接蓝色地线,黑色 OUT 接 CN9 D6/PB10 数字输入。传感器与 MCU 处于同一个三点三伏低压域;不接外部五伏,也不假定任意机器人内部电源可以直接提供合格三点三伏。ST UM1724 Rev12 的板卡图及引脚表支持这些板端子映射。板内 PA5/D13 输出通过 R31 510 Ω 到 LD2,再到地;红卡判定只是让 MCU 改变 PA5,不让 SEN0715 黑线直接拖动灯。所有外部线都停在桶外,电路图不会把功能箭头冒充穿桶导线。

为什么要等三次,而不是看一次就亮

厂家资料只给传感器单次输出和典型响应,不规定本例的软件报警策略。本例上电先等待五秒,让感应器完成启动;之后每 500 ms 采样一次黑线。只要某次为低,就把连续高计数归零;连续第三次读到高,才点亮板载灯。数字例子是:高、低、高、高、高,前三次不会报警,最后一次才达到连续三高。显示‘三次’不等于保证 1.5 秒内必然报警:上电等待、采样相位、传感器响应、桶水晃动都影响真实时间。灯亮后保持,直到人倒空并确认才熄灭;这只是让使用者看见提醒的教学选择,并非独立防溢保护。

先做哪些检查,才能说它真的有效

断电时先查棕线到 3V3、蓝线到 GND、黑线到 D6;查看板载 R31/LD2 是内部灯路,没有额外负载接在黑线上。贴片固定在清洁、平坦且符合厚度范围的非金属桶壁。通电后,用万用表黑表笔接公共地、红表笔接 OUT:清水低于贴片时记录一个原始值,再慢慢加水到贴片、离开贴片,并记录每次原始值、连续高计数和 LD2 状态。故意让水面晃动,核对单次高是否被过滤。只有保存桶的材质、壁厚、贴片位置和这些原始读数,才能写‘实测几伏’或‘实测延迟多少秒’。本篇没有这样的原始记录,所以图上仅标设计预期。

不能跳过的适用边界

电容式开关不是容量计。泡沫、残水膜和黏在桶壁的污渍可能使它继续报到位;松动、供电异常或输出断线则可能导致漏报。单个数字输出不足以诊断所有失效,更不能保证真的防止污水外溢。真实拖地机器人还涉及供电隔离、防水、结构固定、清洗和产品安全测试。读者可以借此理解‘感应位置—数字状态—软件确认—提醒灯’这条因果链,但不能照搬成免维护的商品改装。

逐线接线清单

  • NUCLEO CN6 3V3 → SEN0715 棕线 VCC:板卡三点三伏供电,处于厂家 3.3–5 V 范围内
  • NUCLEO CN6 GND → SEN0715 蓝线 GND:唯一公共低压参考地
  • SEN0715 黑线 OUT → NUCLEO CN9 D6/PB10 数字输入:同一三点三伏域;厂家示例液体到位为高,未到位为低
  • STM32F030R8 PA5 / 板载 D13 → 板内 R31 510 Ω → LD2 绿灯阳极;灯阴极 → GND:板载提醒灯回路;不让传感器输出直接带灯
  • 外贴 SEN0715 感应面 → 非金属教学桶近满位置:机械安装关系,不是穿过桶壁的导线;不是连续水位测量
  • D6/PB10 输入状态 → 软件开机等待、三次稳定判定与提醒状态:逻辑事件,不画成额外导线;输出断线无法靠单信号诊断

计算与实施边界

  • ST UM1724 Rev12:NUCLEO-F030R8 CN6 3V3/GND、CN9 D6/PB10;板载 PA5/D13 经 R31 510 Ω 接 LD2。官方原件 SHA256 831ec497d07d5681469790ee93dca1790b3ab40be8847f146d25c4b84101d6b1
  • DFRobot SEN0715 官方规格:3.3–5 V DC、响应时间 500 ms、非接触电容式、壁厚不超过 15 mm;棕 VCC、黑 OUT、蓝 GND。安装必须先核对实际桶壁材质及厚度
  • DFRobot SEN0715 官方 Arduino 例程结果明确:检测到液位为 1,未检测到为 0。本例三点三伏供电且与 MCU 同电压域,不把五伏输出直送 GPIO
  • 开机等 5 秒、每 500 ms 采样、连续 3 次高亮灯、桶清空后人工确认再熄灯,均为本例软件设计选择,不是厂家保证的报警时间;厂家资料提示灵敏度初始化需约 3–5 秒
  • 贴片只判断安装高度附近有没有液体,不给出桶的连续容量;泡沫、污渍、材料、贴合状态会影响误判。没有原始实测记录,不宣称电压、报警延时或防溢成功率
  • 板载绿灯是教学提醒,不改装真实拖地机器人电源或控制;输出断线、传感器失电时不能把单个高低状态当可靠故障诊断,不能当无人值守防溢方案

这些参数和数值是本例选择或可复算计算;实际测量前,应先检查电源极性、公共地、元件额定值、仪器探头连接。

完整可运行的核心算例与验收

以下 C11 程序可在电脑上用 C 编译器单独编译运行,用来复算状态或数值;它不是已配置 GPIO、ADC、定时器和驱动的开发板固件。移植到实板时应按前述接线配置外设、检查读取错误,并另做实测。

#include <stdbool.h>
#include <stdio.h>
/* 只复算提醒状态,不含 GPIO 初始化,不能直接烧录。 */
struct bucket { unsigned consecutive_high; bool alert; };
static void sample(struct bucket *s, unsigned now_ms, bool level_high, bool emptied_ack) {
    if (now_ms < 5000u) return;
    s->consecutive_high = level_high ? s->consecutive_high + 1u : 0u;
    if (s->consecutive_high >= 3u) s->alert = true;
    if (emptied_ack && !level_high) s->alert = false;
}
int main(void) {
    struct bucket s={0};
    sample(&s,5000,false,false); sample(&s,5500,true,false);
    sample(&s,6000,false,false); bool wave_ignored=!s.alert;
    sample(&s,6500,true,false); sample(&s,7000,true,false);
    sample(&s,7500,true,false); bool full_alert=s.alert;
    sample(&s,8000,false,false); bool latched=s.alert;
    sample(&s,8500,false,true); bool reset=!s.alert;
    printf("wave=%d full=%d latched=%d reset=%d\n",wave_ignored,full_alert,latched,reset);
    return wave_ignored && full_alert && latched && reset ? 0 : 1;
}

验收时同时记录输入、关键节点电压或波形、程序输出;若发现输入超出允许范围、连接错误或波形明显异常,应停止并排查。

官方资料

  • https://www.st.com/resource/en/user_manual/um1724-.pdf
  • https://wiki.dfrobot.com/sen0715/
  • https://wiki.dfrobot.com/sen0715/docs/23794
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐