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 = espressif32
board = seeed_xiao_esp32c3
framework = arduino
monitor_speed = 115200
lib_deps =
plerup/EspSoftwareSerial @ ~8.2.0
#include "Arduino.h"
#include
SoftwareSerial radio(4, 5);
String strbuf = "";
bool bodyflag = false;
bool flag = false;
uint_fast32_t lasttime = 0, springtime = 0;
uint8_t spintPin = 3;
void setup()
{
Serial.begin(115200);
radio.begin(115200);
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)
{
if (strbuf.compareTo("ON") > 0)
{
bodyflag = true;
}
else
{
bodyflag = false;
}
strbuf = "";
flag = false;
}
4、当有人出现,再去额外判断一下距离上次有人出现的时间间隔。
当这个时间间隔超过阈值时,就去驱动雾化器工作。如果小于阈值,就不做任何动作。这样有效防止了,有人在感应区活动,雾化器不停工作的问题。然后雾化器工作时长也有限制,测试发现每次雾化时长1秒,是个不错的选择。
if (bodyflag)
{
if (millis() - lasttime > 30000)
{
Serial.println("Driver is on!");
digitalWrite(spintPin, LOW);
lasttime = millis();
springtime = millis();
}
lasttime = millis();
}
if (millis() - springtime > 1000)
{
digitalWrite(spintPin, HIGH);
}