【电子DIY作品】卫生间感应香薰+ESP32C3+Rd-03

[复制链接]
查看382 | 回复12 | 2024-6-21 11:20:23 | 显示全部楼层 |阅读模式
本帖最后由 aramy 于 2024-6-24 15:12 编辑

用开发板ESP32C3加安信可24G毫米波雷达模组Rd-03,再加上一个超声波雾化器构成一套卫生间感应香薰系统。
起因:去了酒店,卫生间总是有宜人的香味,感觉很舒服。研究了一下,是有香薰定时喷射到空气中,改善气味环境。于是就想给家里的卫生间整一套。
一:硬件准备:
人体感应模块,这里使用安信可24G毫米波雷达Rd-03,人体存在传感器,使用这个模块的优点是,感应距离可以配置,按说明文档最大感应范围是10米内,满足家里卫生间需求。
Honeyview_1.jpg
雾化模块,淘宝购买的一套超声波雾化模块,可以通过超声波的方式将液体打碎,变成汽体。可以将液态的香薰,通过虹吸方式运输到超声波雾化片上,然后汽化,散播到空气中。

Honeyview_2.jpg

3.png
Honeyview_4.jpg

主控芯片,这里我使用开发板ESP32C3,用来获取人体存在传感器信号,并驱动超声波雾化模块工作。

二:软件编程:
1、设置安信可24G毫米波雷达Rd-03模块。模块刚购买回来,接上串口总是提示:“Error:flashataLen is more than FLASH PAGE SIZE!”。经过安信可的工程师协助,将SW烧写口的焊盘焊上线,重新烧写固件,就完美解决了问题。当无人存在时雷达模块通过串口返还:“OFF”,当有人出现在探测范围内时,返回“ON”,并且还有rang信息。
5.png
2、选择了vscode+platformio进行编程,使用arduino进行编程。这里Rd-03模块是通过串口协议与主控连接的。主控ESP32C3只有一组串口,已经用来和上位机通讯用了,所以这里使用模拟串口,使用脚4、5,模拟出一组软串口,用来连接Rd-03模块。雾化器驱动部分还是很简单,因为有驱动模块了,所以只需要用一个管脚的额高低电平即可控制雾化器是否工作。
  1. [env:seeed_xiao_esp32c3]
  2. platform = espressif32
  3. board = seeed_xiao_esp32c3
  4. framework = arduino
  5. monitor_speed = 115200
  6. lib_deps =
  7.   plerup/EspSoftwareSerial @ ~8.2.0
复制代码
  1. #include "Arduino.h"
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial radio(4, 5); //启动一个软串口,用来连接雷达模块  RX TX
  4. String strbuf = "";
  5. bool bodyflag = false; //检测到有人
  6. bool flag = false;
  7. uint_fast32_t lasttime = 0, springtime = 0;
  8. uint8_t spintPin = 3; //驱动雾化器管脚
  9. void setup()
  10. {
  11.   // put your setup code here, to run once:
  12.   Serial.begin(115200);
  13.   radio.begin(115200);
  14.   // Serial.println("Ready");
  15.   pinMode(spintPin, OUTPUT);

  16.   digitalWrite(spintPin, HIGH); //高电平 关闭雾化器
  17. }
复制代码
3、在程序循环中,不停地读取Rd-03模块发来的串口信息,每次遇到“\n”就判断读取完一行,通过这一行的字符串,判断是"ON"、“OFF”,来区分是否检测到有人出现。
  1.   //从串口读取数据
  2.   char ch;
  3.   if (radio.available())
  4.   {
  5.     ch = radio.read();
  6.     if (ch == '\n')
  7.       flag = true;
  8.     else
  9.       strbuf = strbuf + String(ch);
  10.   }
  11.   //观察串口数据,判断雷达是否检测到有人
  12.   if (flag)
  13.   { //一行结束
  14.     // Serial.println(strbuf);
  15.     if (strbuf.compareTo("ON") > 0)
  16.     {
  17.       bodyflag = true; //有人出现
  18.     }
  19.     else
  20.     {
  21.       bodyflag = false;
  22.     }
  23.     strbuf = "";
  24.     flag = false;
  25.   }
复制代码
4:当有人出现,再去额外判断一下距离上次有人出现的时间间隔。当这个时间间隔超过阈值时,就去驱动雾化器工作。如果小于阈值,就不做任何动作。这样有效防止了,有人在感应区活动,雾化器不停工作的问题。然后雾化器工作时长也有限制,测试发现每次雾化时长1秒,是个不错的选择。
  1. //检测到有人,结合时间进行判断,距离上次检测时间是否超过60秒,超过则驱动
  2.   if (bodyflag)
  3.   {
  4.     if (millis() - lasttime > 30000)
  5.     {
  6.       Serial.println("Driver is on!");
  7.       digitalWrite(spintPin, LOW); //低电平 开启雾化器
  8.       lasttime = millis();
  9.       springtime = millis(); //雾化器管脚开始计时
  10.     }
  11.     lasttime = millis();
  12.   }
  13.   //雾化器每次开启1秒
  14.   if (millis() - springtime > 1000)
  15.   {
  16.     digitalWrite(spintPin, HIGH); //关闭雾化器
  17.     // Serial.println("Driver is off!");
  18.   }
复制代码
三:视频展示:
四:源码:
radio.zip (103.52 KB, 下载次数: 6)
回复

使用道具 举报

aramy | 2024-6-21 11:27:31 | 显示全部楼层
奇怪,为啥看不到内容啊?
回复 支持 反对

使用道具 举报

bzhou830 | 2024-6-21 14:46:56 | 显示全部楼层
为啥看不到内容啊?
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

jkernet | 2024-6-21 20:45:13 | 显示全部楼层
没有内容
回复

使用道具 举报

iiv | 2024-6-23 17:27:26 | 显示全部楼层
看不到东西
回复 支持 反对

使用道具 举报

爱笑 | 2024-6-24 08:38:19 | 显示全部楼层
aramy 发表于 2024-6-21 11:27
奇怪,为啥看不到内容啊?

https://bbs.ai-thinker.com/forum ... amp;_dsign=64a277b8
看一下这个发帖教程
用心做好保姆工作
回复 支持 反对

使用道具 举报

aramy | 2024-6-24 10:10:44 | 显示全部楼层
爱笑 发表于 2024-6-24 08:38
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=43082&_dsign=64a277b8
看一下这个发帖教程 ...

谢谢!终于可以看见了!
回复 支持 反对

使用道具 举报

爱笑 | 2024-6-24 10:22:03 | 显示全部楼层
ESP系列不是WB2的哈,这是两个完全不同的芯片啦~
用心做好保姆工作
回复 支持 反对

使用道具 举报

aramy | 2024-6-24 15:11:23 | 显示全部楼层
爱笑 发表于 2024-6-24 10:22
ESP系列不是WB2的哈,这是两个完全不同的芯片啦~

555~ ,好的,修改一下!傻傻分不清。只有个 Rd-03模块,也能参加活动吧?
回复 支持 反对

使用道具 举报

爱笑 | 2024-6-24 15:13:56 | 显示全部楼层
aramy 发表于 2024-6-24 15:11
555~ ,好的,修改一下!傻傻分不清。只有个 Rd-03模块,也能参加活动吧?

可以参加活动
用心做好保姆工作
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则