Arduino人体红外报警系统设计
人体红外报警的程序本身极其简单,只需要执行模拟数值输入函数:analogRead(analogPin);即可从模拟口读到红外传感器的相应数值。当可侦测的范围内没有没有人体红外辐射温度(热释电)变化时返回的数值较小,当有人体红外辐射温度(热释电)变化时返回的数值较大,当返回的数值大于100时,判断有人在活动。当然,此值可以调试直到找到合适的值。
为了实现项目提出的不仅返回人体红外警报信号,还要能从串口输入控制信号控制LED灯亮和灭,因此,还要加入基本的判断处理,代码如下:
int LEDPin=13; //人体感应LED灯的引脚
int analogPin=3; //人体感应电位器(中间的引脚)连接到模拟输入引脚3
int buttonState=LOW; //人体感应读取的当前按键状态
void setup()
{
//声名引脚为输入模式
pinMode(analogPin,INPUT);
pinMode(LEDPin,OUTPUT);
Serial.begin(9600);
}
char A_D='A'; //区别执行人体红外自动检测和远程控制红灯
void loop()
{
if(Serial.available())
{
A_D=Serial.read();
}
digitalWrite(LEDPin, LOW);
if(A_D=='1') //远程指挥
{
digitalWrite(LEDPin, HIGH); //红灯亮
delay(100);
}
if(A_D=='0') //远程指挥
{
digitalWrite(LEDPin, LOW); //红灯亮
}
if(A_D=='A') //人体红外检测处理程序
{ //人体感应处理
buttonState=analogRead(analogPin); //从输入引脚读取数值
//注意,人体红外传感器读取间隔默认2.5秒
if(buttonState>100)
{ //如果读入数值大于200,说明有人进入区域。一般测到人体红外,返回数值为670左右
digitalWrite(LEDPin,HIGH); //红灯亮
Serial.println(buttonState);
Serial.print("In:");
Serial.print(buttonState); //显示读取的数值
Serial.println("");
delay(2000); //让灯亮一段时间
}
else{
digitalWrite(LEDPin,LOW);
}
}
}
下载到Arduino UNO板后,可以从串口输入A、1、0等值查看输出结果,观察Arduino LED小灯的变化情况。对人体的探测会出现间隔反应延时的情况,这是因为人体红外检测传感器读取默认间隔是2.5s。这个间隔时间是可调的。