专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
青塔  ·  湖南工商大学2025年诚聘海内外英才 ·  昨天  
高校人才网V  ·  招募博士英才!四川工商学院2025年诚邀您共 ... ·  3 天前  
高校人才网V  ·  北京市生态环境保护科学研究院2025年博士后 ... ·  6 天前  
国家大剧院  ·  今晚19:30 乐中喜闻春之声, ... ·  4 天前  
51好读  ›  专栏  ›  安信可科技

【社区参赛作品】自己动手做一个卫生间感应香薰?

安信可科技  · 公众号  ·  · 2024-07-01 11:59

正文

各位小伙伴好!智能家居DIY活动正在进行中,这次板子管饱,还有京东购物卡相送。 活动页面直达: https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44894&_dsign=09201d67




已经有参赛小伙伴提交了作品,一起来看看:


本作品由安信可社区用户

Aramy 制作


概要:用ESP32C3开发板+安信可24G毫米波雷达模组Rd-03,再加上一个超声波雾化器构成一套卫生间感应香薰系统。



起因:去了酒店,卫生间总是有宜人的香味,感觉很舒服。研究了一下,是有香薰定时喷射到空气中,改善气味环境。于是就想给家里的卫生间整一套。



硬件准备

人体感应模块,这里使用安信可24G毫米波雷达Rd-03,人体存在传感器,使用这个模块的优点是,感应距离可以配置,按说明文档最大感应范围是10米内,满足家里卫生间需求。



雾化模块,淘宝购买的一套超声波雾化模块,可以通过超声波的方式将液体打碎,变成汽体。可以将液态的香薰,通过虹吸方式运输到超声波雾化片上,然后汽化,散播到空气中。



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





软件编程

1、设置安信可24G毫米波雷达Rd-03模块。


模块刚购买回来,接上串口总是提示:“Error:flashataLen is more than FLASH PAGE SIZE!”。经过安信可的工程师协助,将SW烧写口的焊盘焊上线,重新烧写固件,就完美解决了问题。当无人存在时雷达模块通过串口返还:“OFF”,当有人出现在探测范围内时,返回“ON”,并且还有rang信息。




2、选择了vscode+platformio进行编程,使用arduino进行编程。


这里Rd-03模块是通过串口协议与主控连接的。主控ESP32C3只有一组串口,已经用来和上位机通讯用了,所以这里使用模拟串口,使用脚4、5,模拟出一组软串口,用来连接Rd-03模块。雾化器驱动部分还是很简单,因为有驱动模块了,所以只需要用一个管脚的额高低电平即可控制雾化器是否工作。


[env:seeed_xiao_esp32c3]platform = espressif32board = seeed_xiao_esp32c3framework = arduinomonitor_speed = 115200lib_deps =  plerup/EspSoftwareSerial @ ~8.2.0


#include "Arduino.h"#include SoftwareSerial radio(4, 5); //启动一个软串口,用来连接雷达模块  RX TXString strbuf = "";bool bodyflag = false; //检测到有人bool flag = false;uint_fast32_t lasttime = 0, springtime = 0;uint8_t spintPin = 3; //驱动雾化器管脚void setup(){  // put your setup code here, to run once:  Serial.begin(115200);  radio.begin(115200);  // Serial.println("Ready");  pinMode(spintPin, OUTPUT);
digitalWrite(spintPin, HIGH); //高电平 关闭雾化器}


3、在程序循环中,不停地读取Rd-03模块发来的串口信息。


每次遇到“\n”就判断读取完一行,通过这一行的字符串,判断是"ON"、“OFF”,来区分是否检测到有人出现。


  //从串口读取数据  char ch;  if (radio.available())  {    ch = radio.read();    if (ch == '\n')      flag = true;    else      strbuf = strbuf + String(ch);  }  //观察串口数据,判断雷达是否检测到有人  if (flag)  { //一行结束    // Serial.println(strbuf);    if (strbuf.compareTo("ON") > 0)    {      bodyflag = true; //有人出现    }    else    {      bodyflag = false;    }    strbuf = "";    flag = false;  }



4、当有人出现,再去额外判断一下距离上次有人出现的时间间隔。


当这个时间间隔超过阈值时,就去驱动雾化器工作。如果小于阈值,就不做任何动作。这样有效防止了,有人在感应区活动,雾化器不停工作的问题。然后雾化器工作时长也有限制,测试发现每次雾化时长1秒,是个不错的选择。


//检测到有人,结合时间进行判断,距离上次检测时间是否超过60秒,超过则驱动  if (bodyflag)  {    if (millis() - lasttime > 30000)    {      Serial.println("Driver is on!");      digitalWrite(spintPin, LOW); //低电平 开启雾化器      lasttime = millis();      springtime = millis(); //雾化器管脚开始计时    }    lasttime = millis();  }  //雾化器每次开启1秒  if (millis() - springtime > 1000)  {    digitalWrite(spintPin, HIGH); //关闭雾化器    // Serial.println("Driver is off!");  }



视频展示

点击图片跳转查看视频展示效果





源码















请到「今天看啥」查看全文