专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
自贡网  ·  沙尘+冷空气!自贡人注意防护! ·  昨天  
四川发布  ·  听,代表委员们的经济“春”声 ·  2 天前  
宁夏药安早知道  ·  宁夏药品不良反应监测能力建设再上新台阶——全 ... ·  2 天前  
宁夏药安早知道  ·  宁夏药品不良反应监测能力建设再上新台阶——全 ... ·  2 天前  
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;  }







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