基于 ESP32-CAM 构建一个智能垃圾桶
问题
大多数人不知道物品该放入哪个垃圾桶。一个油腻的披萨盒或未冲洗的瓶子,都可能污染整批可回收物。我想要一个能自动判断的垃圾桶,这样你只需把物品丢进去即可。
它做什么
ESP32-CAM智能垃圾桶无需电脑、手机应用或后端服务器,即可将垃圾分为可回收物和残余物两个区域。它仅需电源和WiFi即可运行。
每次你丢入物品时:
1. 它注意到了物品。HC-SR04超声波传感器检测到有东西落在了翻盖上。
2. 需要一张照片。经过短暂的等待延迟(0.8秒)后,ESP32-CAM 会拍摄该物品。
3. 它会识别物品。照片通过 HTTPS 直接发送到 Google Gemini API。Gemini 会返回物品名称、类别、预估重量以及预估的二氧化碳排放量。
4. 它会将物品进行分类。伺服电机将翻盖倾斜至180°用于可回收物,或保持0°用于残留垃圾,保持2秒后返回90°。
5. 显示结果。SSD1306 OLED 显示商品名称、重量、二氧化碳含量以及货位信息。
重量和二氧化碳含量为通过照片估算的AI数据,该货位没有配备称重设备。
分类
硬件列表
布线
不要跳过分隔器。HC-SR04 的回波电压为 5 V,但 ESP32 的 GPIO 只能承受 3.3 V。接线时请断开电源。
制作二进制文件
1. 将一个盒子分成两个隔间。
2. 在伺服喇叭上方安装一个翻盖。它可平放,角度为90°,并可倾斜至180°(可回收)或0°(残留)。
3. 将ESP32-CAM安装在翻盖上方,朝下放置。
4. 将超声波传感器安装在翻盖的一侧边缘,位置略高于其表面,并朝向翻盖。翻盖上的物品必须距离传感器不超过15厘米。当翻盖为空时,传感器应能检测到约20厘米以上的开放空间。
5. 将OLED安装在可读取的位置。
软件设置
1. 安装 Arduino IDE 和 Espressif 的 ESP32 板载软件包,然后选择 AI Thinker ESP32-CAM。
2. 安装 ESP32Servo、ArduinoJson 7.x 和 Adafruit SSD1306(含 GFX 和 BusIO)。
3. 从 Google AI Studio 获取免费的 API 密钥。
4. 将 config.h.example 复制到 config.h 文件中,并填写 WIFI_SSID(仅限 2.4 GHz)、WIFI_PASSWORD 和 GEMINI_API_KEY。config.h 被 git 忽略,因此凭据不会上传到仓库。
5. 上传后,以115200波特率打开串行监视器,并放入一个物品。
所有可调节参数(距离、伺服角度、屏幕时间、估计夹具)均位于config.h文件中。
固件的工作原理
•非阻塞状态机:IDLE → SETTLE → RESULT / ERROR → IDLE。超声波手表在显示结果期间持续运行,因此新的投送可能会中断该过程。
•故障闭锁:当相机出现错误、Gemini失效或未知类别时,系统会将物品分类为残余物。当无法确定时,垃圾桶不会声称某物可回收。
•结构化输出:通过REST API调用Gemini,并使用响应模式(responseSchema)。类别为固定枚举类型,因此返回的响应始终是严格的JSON格式。固件使用ArduinoJson进行解析。
•安全显示:物品名称被清理为可打印的ASCII字符,并截断为21个字符(单行OLED显示)。重量和CO₂值在显示前会被限制在合理范围内。
•去抖与滞后:投送需要连续3次关闭读取,重新启动则需超过更高阈值的连续5次清除读取。这可防止误触发。
•硬件问题:从PSRAM获取的请求体上传TLS数据在此板上失败。请求体实际上是在内部RAM中构建的。
•网络鲁棒性:自动重新连接WiFi,以及向公共DNS解析器的回退机制。
限制
•每个分类使用 Gemini-3.5 Flash 大约需要 12 秒。[请根据您的实际测量结果更新。]
•重量和二氧化碳含量为视觉估算,非精确测量值。
•需要网络连接,且免费 API 级别存在速率限制(HTTP 429)。
•分类可能存在错误,尤其是对于脏污、体积小或不常见的物品。
为什么重要
它通过减少回收过程中的污染,并使废弃物的碳成本对用户透明可见,从而支持联合国可持续发展目标13(气候行动)。
本文编译自hackster.io





