如何在ESP32中使用人体红外传感器监测是否有人

时间:2024-05-10 05:59:14浏览量:4

本例程介绍如何使用人体红外传感器通过ESP32检测是中使是否有人。在此示例中,用人当检测到运动(触发中断)时,体红ESP32会启动计时器并打开LED并持续预定义的外传秒数。当计时器倒计时结束时,感器LED自动关闭。监测

要使用人体红外传感器触发事件​,中使可以使用中断。用人中断对于使微控制器程序中的体红事情自动发生非常有用,并且可以帮助解决时序问题。外传通过中断,感器不需要不断检查引脚的监测当前值。通过中断,中使当检测到更改时,用人就会触发事件(调用函数)。体红

要在ArduinoIDE中设置中断,使用中断()函数:

attachInterrupt(digitalPinToInterrupt(GPIO),function,mode);

GPIO中断

第一个参数是GPIO编号。通常,您应该使用数字引脚到中断(GPIO)将实际GPIO设置为中断引脚。例如,如果您想使用通用输入输出口27作为中断,使用:

digitalPinToInterrupt(27)

对于ESP32开发板,下图中红色矩形突出显示的所有引脚都可以配置为中断引脚。在这个例子中我们将使用通用输入输出口27作为连接到人体红外传感器。

需要触发的函数

第二个参数中断()function是每次触发中断时将调用的函数的名称。

模式

第三个参数是模式。有5种不同的模式:

低电平:每当引脚为低电平时触发中断;

高的:每当引脚为高电平时触发中断;

改变:每当引脚改变值时触发中断-例如从高电平到低电平或从低电平到高电平;

坠落:当引脚从高电平变为低电平时;

瑞星:当引脚从低电平变为高电平时触发。

连接实物图

重要提示:本项目中使用的MiniAM312PIR运动传感器的工作电压为3.3V。但是,如果您其他PIR运动传感器(例如HC-SR501),则其工作电压为5V。

#definetimeSeconds10//为LED和红外感器设置GPIOsconstintled=26;constintmotionSensor=27;unsignedlongnow=millis();unsignedlonglastTrigger=0;booleanstartTimer=false;booleanmotion=false;//检查是否检测是否有人,设置LED高,并启动计时器voidIRAM_ATTRdetectsMovement(){digitalWrite(led,HIGH);startTimer=true;lastTrigger=millis();}voidsetup(){(115200);//传感器连接的端口模式INPUT_PULLUPpinMode(motionSensor,INPUT_PULLUP);//设置传感器管脚为中断,设置中断函数,设置中断模式RISING模式attachInterrupt(digitalPinToInterrupt(motionSensor),detectsMovement,RISING);//设置LED为关pinMode(led,OUTPUT);digitalWrite(led,LOW);}voidloop(){//当前时间now=millis();if((digitalRead(led)==HIGH)(motion==false)){("有人!!!");motion=true;}//达到设定的时间后量关闭LEDif(startTimer(now-lastTrigger(timeSeconds*1000))){("停止运动");digitalWrite(led,LOW);startTimer=false;motion=false;}}