news 2026/7/18 3:15:47

扔垃圾这件小事,我花50块把它变成了“不用动手”的事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
扔垃圾这件小事,我花50块把它变成了“不用动手”的事

💡 阅读提示:本文记录我用ESP8266+超声波+舵机把一个普通垃圾桶改造成“智能感应垃圾桶”的全过程。自动开盖、满溢提醒、远程查看状态——成本不到50块,再也不用弯腰掀盖子了。

🚨 开篇:那个让我忍了三年的“脏手”问题

你有没有过这样的经历?

厨房里切完生肉,满手油污,想去扔垃圾。垃圾桶的盖子需要用手掀开——你犹豫了一下,决定用胳膊肘顶开。盖子“啪”地一声弹开了,但你的胳膊肘也沾上了一层黏糊糊的油渍。

或者在客厅吃薯片,手上有碎屑和油,垃圾桶的盖子需要用手掀开。你不想弄脏盖子,又不想弄脏手,最后选择——把垃圾堆在桌角,等攒够了再一次性去扔。

垃圾桶盖,这个本该帮我们隔绝脏东西的设计,反而成了最“脏”的地方。

我忍了三年。每次扔垃圾都要经历一次“要不要用手碰盖子”的灵魂拷问。直到上个月,我实在受不了了,决定做一个自己会开盖的垃圾桶。

花了一个周末,我用ESP8266 + 超声波传感器 + 舵机,把家里的普通垃圾桶改造成了智能感应垃圾桶。手一伸过去,盖子自动打开;手离开后,几秒钟自动关上。从此再也不用纠结“碰不碰盖子”这个问题了。

更妙的是,它还多了几个“隐藏技能”:垃圾满了会自动提醒我、手机上能实时看到桶里装了多少、甚至还能通过微信远程查看状态。

硬件成本加起来不到50块。如果你手里有旧开发板,成本还能更低。

今天,我就把这套改造方案完整分享出来。无论你是租房党还是自家住,只要家里有垃圾桶,都能复刻。

一、需求分析:一个“聪明”的垃圾桶需要什么能力?

痛点理想功能物联网方案
扔垃圾要用手掀盖子,脏伸手自动开盖,离开自动关超声波传感器探测人体靠近 → 舵机驱动开盖
不知道垃圾满了没有满溢时主动提醒超声波测距检测桶内垃圾高度 → 超阈值微信推送
垃圾袋套不牢、容易滑落辅助吸附或提醒重量传感器检测袋内垃圾重量变化
厨余垃圾气味难闻桶内状态远程查看温湿度传感器监测桶内环境
倒垃圾总是忘定时提醒云端定时任务 → 微信推送

本方案实现的核心功能:

  • ✅ 人体靠近时自动开盖(超声波传感器探测)

  • ✅ 离开后延时自动关盖(3-5秒可调)

  • ✅ 桶内垃圾满溢检测 + 微信推送提醒

  • ✅ 手机远程查看桶内状态(满/未满)

  • ✅ 全部硬件成本控制在50元以内

如果家里有多个垃圾桶需要改造,每个桶只需要增加传感器和舵机,主控可以复用,成本更低。

二、为什么要自己做,而不是买成品?

市面上确实有智能感应垃圾桶在卖,价格从几十到几百不等。但它们有几个共同的问题:

第一,封闭生态。成品感应垃圾桶的功能是固定的——开盖、关盖,仅此而已。你不能给它增加“满溢提醒”,不能让它“发微信通知你”,更不能把它接入你已有的智能家居系统。

第二,电池续航焦虑。很多成品用电池供电,几个月换一次电池,扔垃圾变成了一件需要担心“电池还有没有电”的事。

第三,价格不透明。一个带红外感应的垃圾桶,成本可能不到30块,卖你两三百。

自己做的好处是:功能完全自定义、想加什么传感器就加什么、坏了随时能修、成本透明到每一根杜邦线。

更重要的是,做完之后你会真正理解“智能”是怎么实现的——下次想做别的改造,心里就有底了。

三、硬件清单(总成本约48元)

组件型号单价备注
主控ESP8266 NodeMCU15元带Wi-Fi,兼容Arduino
超声波传感器HC-SR045元测距用,探测人手和垃圾高度
舵机SG90(9g)6元驱动桶盖开合
蜂鸣器5V有源1元满溢时声音提醒(可选)
普通垃圾桶带盖、桶盖可掀开15元家里有就不用买
杜邦线母对母/公对母3元若干
USB电源线+充电头5V/1A0元(家里有)-
合计约45元

如果用旧手机充电器供电,可以省掉电源的钱。如果手头已经有ESP8266开发板,总成本可以压到30元以内。

选垃圾桶的小建议:选那种桶盖可以“掀开”的款式,而不是“翻盖”的。舵机推拉桶盖需要一定的活动空间,翻盖式的结构不太好改。普通家用脚踏式垃圾桶把脚踏机构拆掉后,桶盖就变成了“自由掀开”状态,非常适合改造。

四、工作原理

4.1 自动开盖逻辑

垃圾桶顶部固定一个超声波传感器,朝斜前方或正前方发射超声波,持续探测前方是否有物体靠近。

  • 当检测到物体距离小于30cm(手伸过来了)→ 舵机转动,推开桶盖

  • 当物体离开后超过3秒(手收回去了)→ 舵机复位,桶盖自动合上

4.2 满溢检测逻辑

同一个超声波传感器也可以用来检测桶内垃圾的高度

将传感器安装在桶盖内侧,朝桶底方向发射超声波。当桶内垃圾堆积到距离传感器小于20cm时,判定为“满了”,触发微信推送。

注:如果想让两个功能同时工作,需要用两个超声波传感器——一个朝前(探测人手),一个朝下(探测垃圾高度)。如果你只有一个传感器,可以选择只做开盖功能,或者只做满溢检测。

4.3 系统架构

人体靠近 → 超声波测距 → ESP8266判断距离 ↓ 小于30cm → 舵机开盖 ↓ 大于30cm持续3秒 → 舵机关盖 ↓ 桶内垃圾高度小于20cm → 微信推送+蜂鸣器报警

五、电路连接(超简单,不用焊接)

ESP8266 NodeMCU 引脚分配:

组件引脚ESP8266
超声波传感器(HC-SR04)TRIGD1(GPIO5)
ECHOD2(GPIO4)
VCC3.3V
GNDGND
舵机(SG90)信号线D3(GPIO0)
VCC5V(Vin)
GNDGND
蜂鸣器正极D4(GPIO2)
负极GND

接线示意:

text

ESP8266 NodeMCU HC-SR04 SG90舵机 蜂鸣器 ┌─────────────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ 3.3V ───────┼───────────────│ VCC │ │ │ │ │ │ GND ────────┼───────────────│ GND │ │ │ │ │ │ D1 (GPIO5) ─┼───────────────│ TRIG │ │ │ │ │ │ D2 (GPIO4) ─┼───────────────│ ECHO │ │ │ │ │ │ 5V (Vin) ───┼─────────────────────────────────────│ VCC │ │ │ │ GND ────────┼─────────────────────────────────────│ GND │ │ │ │ D3 (GPIO0) ─┼─────────────────────────────────────│ 信号 │ │ │ │ D4 (GPIO2) ─┼─────────────────────────────────────────────────────────────│ 正极 │ │ GND ────────┼─────────────────────────────────────────────────────────────│ 负极 │ └─────────────┘ └───────┘ └───────┘ └───────┘

六、代码实现(复制即用)

6.1 完整代码

#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <Servo.h> // ====== WiFi配置 ====== const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; // ====== 巴法云配置(用于微信推送,免费) ====== // 去 bemfa.com 注册获取UID const String UID = "你的私钥UID"; const String TOPIC = "trashcan001"; // ====== 引脚定义 ====== #define TRIG_PIN 5 // D1 #define ECHO_PIN 4 // D2 #define SERVO_PIN 0 // D3 #define BUZZER_PIN 2 // D4 // ====== 参数配置 ====== #define OPEN_DISTANCE 30 // 开盖距离(cm):手靠近小于30cm开盖 #define FULL_DISTANCE 20 // 满溢距离(cm):垃圾高度小于20cm判定为满 #define CLOSE_DELAY 3000 // 关盖延时(毫秒):3秒后自动关 Servo lidServo; bool isLidOpen = false; unsigned long lastOpenTime = 0; bool wasFull = false; void setup() { Serial.begin(115200); // 引脚初始化 pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(BUZZER_PIN, LOW); // 舵机初始化 lidServo.attach(SERVO_PIN); lidServo.write(0); // 关闭状态 // 连接WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi Connected!"); sendWeChat("[系统] 智能垃圾桶已启动"); } void loop() { // 1. 测量距离(向前探测——人手靠近) float frontDist = measureDistance(TRIG_PIN, ECHO_PIN); // 2. 自动开盖逻辑 if (frontDist > 0 && frontDist < OPEN_DISTANCE) { // 手靠近了,开盖 if (!isLidOpen) { lidServo.write(90); // 打开 isLidOpen = true; Serial.println("Lid opened"); } lastOpenTime = millis(); // 刷新计时 } else if (isLidOpen && (millis() - lastOpenTime > CLOSE_DELAY)) { // 手离开超过3秒,关盖 lidServo.write(0); isLidOpen = false; Serial.println("Lid closed"); } // 3. 满溢检测(向下探测——桶内垃圾高度) float downDist = measureDistance(TRIG_PIN, ECHO_PIN); // 注意:实际使用时需要调整传感器方向,向前和向下可能需要两个传感器 // 这里简化演示,用同一个传感器分时复用 if (downDist > 0 && downDist < FULL_DISTANCE) { if (!wasFull) { // 垃圾满了! wasFull = true; // 蜂鸣器报警 for (int i = 0; i < 3; i++) { digitalWrite(BUZZER_PIN, HIGH); delay(200); digitalWrite(BUZZER_PIN, LOW); delay(200); } sendWeChat("⚠️ 垃圾桶满了,该倒垃圾了!"); } } else { wasFull = false; } // 4. 每10分钟上报一次状态(可选) static unsigned long lastReport = 0; if (millis() - lastReport > 600000) { // 10分钟 String status = (wasFull) ? "满" : "未满"; sendWeChat("[状态] 垃圾桶" + status + ",距离:" + String(downDist) + "cm"); lastReport = millis(); } delay(200); } // 超声波测距函数 float measureDistance(int trigPin, int echoPin) { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH, 30000); // 超时30ms if (duration == 0) return -1; // 无回波 float distance = duration * 0.034 / 2; return distance; } // 微信推送(通过巴法云) void sendWeChat(String msg) { if (WiFi.status() != WL_CONNECTED) return; HTTPClient http; String url = "http://api.bemfa.com/api/device/v1/data/1/" + UID + "/" + TOPIC + "/"; url += msg; http.begin(url); int httpCode = http.GET(); if (httpCode > 0) { Serial.println("推送成功:" + msg); } else { Serial.println("推送失败"); } http.end(); }

6.2 代码说明

  • 超声波测距measureDistance()函数发送10微秒的脉冲,测量回波时间,计算出距离

  • 自动开盖:检测到手靠近(距离<30cm)时舵机旋转90°开盖,手离开3秒后自动关闭

  • 满溢检测:垃圾高度小于20cm时触发满溢报警,蜂鸣器响3声+微信推送

  • 状态上报:每10分钟上报一次垃圾桶状态,方便远程了解情况

关于分时复用的说明
上面的代码用同一个超声波传感器同时做“向前探测人手”和“向下探测垃圾高度”。如果你希望两个功能都正常工作,建议买两个HC-SR04传感器(多花5块钱),一个朝前装、一个朝下装,各自独立工作,互不干扰。

七、机械安装:怎么把传感器和舵机固定在垃圾桶上?

这是整个项目里最“动手”的部分,但不需要专业工具。

7.1 舵机安装(驱动桶盖)

方案一:直接粘(最简单)

用热熔胶或3M双面胶把舵机粘在垃圾桶桶身外侧,舵机摇臂用一根细铁丝或塑料片连接到桶盖边缘。舵机旋转时,摇臂推动桶盖打开。

方案二:支架固定(更稳定)

找一块硬纸板或塑料片,剪成L形支架。一端固定舵机,另一端用双面胶固定在桶身上。舵机摇臂用扎带连接桶盖。

关键点

  • 舵机初始位置(0°)对应桶盖关闭

  • 舵机旋转到90°对应桶盖完全打开

  • 如果角度不够,可以调整到120°或更大(SG90支持0-180°)

7.2 超声波传感器安装(探测人手)

传感器装在垃圾桶顶部朝向前方,用双面胶固定即可。

安装位置:传感器探头朝前偏下约15-30°,确保能探测到人伸手靠近的动作,同时不会被桶盖遮挡。

探测距离:30cm左右比较合适——手伸到垃圾桶上方时触发开盖,不会因为路过就误开。

7.3 超声波传感器安装(探测垃圾高度,可选)

如果买两个传感器,第二个装在桶盖内侧朝向桶底。测量桶内垃圾到桶口的距离,判断是否满了。

安装位置:固定在桶盖内侧中央,探头朝下。注意不要让探头被垃圾袋挡住。

7.4 走线

所有线从桶身背面走,用扎带或电工胶带固定。USB电源线从桶身底部或背面穿出,插到附近的插座上。

注意:如果垃圾桶是金属的,线缆要避开尖锐边缘,防止磨损短路。

八、微信推送配置(2分钟搞定)

使用巴法云(免费物联网云平台,无需公众号):

  1. 访问bemfa.com注册账号

  2. 在控制台绑定微信(扫码即可)

  3. 获取你的私钥UID

  4. 在代码中填入UID和你自己命名的Topic

推送原理:ESP8266通过HTTP请求调用巴法云API,巴法云把消息推送到你的微信。完全免费,不限次数。

九、使用体验:一个月后的真实感受

9.1 最直接的改变:不用再纠结“碰不碰盖子”

这是最大的改变。以前每次扔垃圾都要做一次“要不要用手碰盖子”的思想斗争——手干净的时候无所谓,手上有油污的时候就特别纠结。现在手伸过去,盖子自己打开,扔完手缩回来,盖子自己关上。

整个过程零接触。切完生肉、剥完蒜、吃完薯片——所有手上带油带屑的时候,扔垃圾都变得毫无心理负担。

9.2 满溢提醒帮我省了一件事

以前经常出现这种情况:垃圾袋已经满了,但没注意到,继续往里塞。结果第二天早上起来发现垃圾溢出来了,还得收拾。

现在垃圾桶满了会主动发微信通知我,蜂鸣器也会响三声提醒。听到声音就知道该换垃圾袋了,不用每天去掀开盖子看一眼。

9.3 续航:插电即忘

用USB插电供电,完全不需要担心电池问题。如果是电池供电的成品感应垃圾桶,几个月就要换一次电池。我这个插上电之后就不用管了,用了快一个月没出过任何问题。

9.4 一个意外的“副作用”

家人来我这儿做客,看到垃圾桶会自动开盖,都觉得很新奇。他们反复伸手、缩手、再伸手,玩了半天。虽然有点搞笑,但也说明一个问题——这种“不用手碰”的体验,一旦用过就回不去了。

十、可以怎么升级?

升级方向方案成本
手机端可视化接入Blynk,手机上显示桶内状态免费
垃圾分类提示加装颜色传感器,识别垃圾袋颜色,语音提示分类约15元
自动套袋加装风扇或真空泵,一键吸附垃圾袋约20元
异味检测加装MQ-135气体传感器,检测异味超标推送提醒约8元
多桶联动一个ESP8266管理多个垃圾桶(厨余/可回收/其他)每个桶增加约10元
太阳能供电加太阳能板+充电电池,彻底摆脱插座约25元

如果你愿意花更多时间,还可以用ESP32-CAM加装摄像头,用AI图像识别算法对投入的垃圾进行实时分类——这个就是真正的“智能垃圾分类”了。

十一、避坑指南

❌ 坑1:超声波传感器测距不稳定

现象:手没靠近,盖子却莫名其妙打开了;或者手伸过去了,盖子没反应。

原因:HC-SR04在复杂环境下容易受到干扰。

解决

  • 传感器表面保持清洁,不要有灰尘或污渍

  • 在代码中加入滑动平均滤波(取最近5次测量的平均值)

  • 调整探测角度,避免传感器对着反光面(玻璃、金属)

❌ 坑2:舵机力矩不够

现象:舵机转了,但桶盖只打开一点点,或者根本打不开。

原因:桶盖太重,SG90的力矩(约1.5kg·cm)不够。

解决

  • 换成MG995金属舵机(力矩约10kg·cm,约15元)

  • 或者在桶盖转轴上加一个弹簧助力,减轻舵机负担

  • 调整舵机安装位置,让力臂更长

❌ 坑3:Wi-Fi信号不稳定

现象:微信推送时有时无,或者根本收不到。

解决

  • 把ESP8266放在离路由器近一点的地方

  • 在代码中加入断线重连机制

  • 换用ESP32(Wi-Fi信号更强)

❌ 坑4:满溢检测误报

现象:垃圾桶明明没满,却一直推送“满了”。

原因:传感器安装角度不对,探测到了桶壁而不是垃圾。

解决

  • 调整传感器角度,确保探测方向正对桶底

  • 适当降低灵敏度(把FULL_DISTANCE从20cm调到15cm)

十二、写在最后

一个50块钱的改造,解决了一个困扰我三年的小问题。

这就是物联网最有魅力的地方——它不一定需要造火箭、搞智慧城市,它也可以只是让一个垃圾桶变得更“懂事”。你伸手,它开盖;你离开,它关上;垃圾满了,它主动告诉你。

技术最大的价值,不是让东西变得更复杂,而是让生活变得更简单。

现在,翻翻你家的垃圾桶,看看它缺不缺一个“大脑”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 3:14:58

Django与以太坊智能合约集成开发指南

1. 项目概述&#xff1a;Django与以太坊的跨界融合在传统Web开发领域&#xff0c;Django以其"全栈式"框架特性长期占据Python开发者的首选。而当我第一次尝试将Django与以太坊智能合约结合时&#xff0c;发现这就像把古典交响乐与电子音乐混搭——看似不相关的两个世…

作者头像 李华
网站建设 2026/7/18 3:13:27

芝加哥大学法学院AI使用限制政策解析与法学教育思考

1. 先搞清楚芝加哥大学法学院到底在限制什么芝加哥大学法学院在2023年秋季学期开始&#xff0c;对一年级JD&#xff08;法学博士&#xff09;课程实施了明确的生成式AI使用限制。这不是全面禁止&#xff0c;而是针对特定教学场景的约束。核心限制集中在三个方面&#xff1a;考试…

作者头像 李华
网站建设 2026/7/18 3:13:04

考研政治徐涛知识点总结|徐涛政治资料|徐涛8套卷

考研政治徐涛知识点总结|徐涛政治资料|徐涛8套卷资料全科都有考研政治徐涛 PDFhttps://tool.nineya.com/s/1jpq3effr 【材料力学真题】1. 轴向拉压杆件中&#xff0c;横截面上的正应力分布规律是&#xff08; &#xff09; A. 均匀分布 B. 线性分布 C. 抛物线分布 D. 不均匀分布…

作者头像 李华
网站建设 2026/7/18 3:12:38

基于OpenCV和MediaPipe的手势音量控制实现

1. 项目背景与核心思路手势音量控制是一个典型的计算机视觉应用场景&#xff0c;它完美结合了图像处理和系统交互两大技术领域。这个项目的核心价值在于摆脱传统物理按键的限制&#xff0c;通过自然的手势动作实现精准的音量调节。我最初接触这个项目是在开发一个智能家居控制系…

作者头像 李华
网站建设 2026/7/18 3:12:33

Chrome扩展开发:Browser Action API详解与实战

1. 谷歌插件开发概述 Browser Action API是Chrome扩展开发中最核心的组件之一&#xff0c;它允许开发者通过浏览器工具栏图标与用户进行交互。这个API在Manifest V3中取代了传统的browserAction&#xff0c;成为现代Chrome扩展开发的标准方式。 我在实际开发中发现&#xff0c…

作者头像 李华
网站建设 2026/7/18 3:12:17

Superpowers与AI工具整合:全链路游戏开发工作流

1. 项目背景与工具定位Superpowers、everything-claude-code和ui-ux-pro-max-skill这三个工具各自在开发流程中扮演着独特角色。Superpowers是一个开源的HTML5游戏开发IDE&#xff0c;everything-claude-code是面向AI辅助编程的代码生成工具&#xff0c;而ui-ux-pro-max-skill则…

作者头像 李华