Arduino项目式编程教学第五章——激光报警装置

发布时间:2024年01月06日

文章目录
一、激光头的使用
二、光敏传感器的使用
三、无源蜂鸣器的使用
四、完成激光报警装置

硬件清单

激光报警装置

一、激光头的使用

激光头
如图所示激光头,其发光原理是利用激光二极管产生的激光束进行照射,激光二极管将电能转化为光能,通过镜头聚焦成一束高度聚集的激光光束。激光光束光线几乎平行,且光束直径非常小,因此可以在较远的距离上保持高强度。这使得激光可以用来指示或投影图像。
激光头的使用
其使用方法也比较简单,如图所示,直接将两个引脚与正负极连接即可点亮激光头。

二、光敏传感器的使用

光敏传感器
如上图为光敏传感器,其最重要的元件为一个接近圆形的光敏电阻,即其阻值会受光照强弱的影响;并且上述传感器的阈值可以通过上图的十字形旋钮来调节。
其接线顺序为:

VCC:接电源正极
GND:接电源负极
DO:接数字端口,开关信号输出
AO:接模拟端口,模拟信号输出

首先按照下图对光敏传感器进行连接:
在这里插入图片描述
此时,VCC和GND分别接正负极;DO接3号数字端口;AO接A1模拟端口。
完成以下测试程序:

//此程序功能为测试光敏传感器在不同光照强度下的数值变化
void setup() 
{
  pinMode(3,INPUT);  //设置DO所接端口为输入
  pinMode(A1,INPUT);  //设置AO所接端口为输入
  Serial.begin(9600);  //初始化串口监视器的波特率为9600
}

void loop() 
{
  Serial.print(digitalRead(3));  //输出4号端口的数字数值
  Serial.print(" ");  //输出空格
  Serial.println(analogRead(A1));  //输出A1端口的模拟数值,并换行
}

将上述程序上传至Arduino板,然后打开串口监视器,观察两个数值的变化:
在这里插入图片描述

此时为光敏传感器在较暗的环境下的数值,其中3号端口的数值为“1”;A1模拟端口的数值为“585”左右;
尝试增加光敏传感器周围的亮度:
在这里插入图片描述

可以发现:在增加亮度之后,3号端口的数值变为了“0”;A1模拟端口的数值变成了“383”左右;
因此可以得到结论:光照越强,其模拟端口的数值越小;并且可以通过调节模块上的旋钮来调节0-1变化的阈值。

三、无源蜂鸣器的使用

1.有源蜂鸣器和无源蜂鸣器的区别

有源蜂鸣器和无源蜂鸣器
关于有源蜂鸣器和无源蜂鸣器在外观上的区别,其正面都是一样的,唯独底面一个由黑胶包裹,一个为裸露的电路板 ,正如以下实物图所示:
有源蜂鸣器和 无源蜂鸣器
另外关于两者的使用区别也容易理解:有源蜂鸣器只要通电即可连续发出声音,但音色无法调节;无源蜂鸣器需要接在音频输出电路中才能使用,可以通过改变频率来改变声音。

2.无源蜂鸣器的使用

无源蜂鸣器
无源蜂鸣器共有3个引脚,除了正负极以外,IO口直接连接数字端口,控制其输出频率即可。
在这里插入图片描述
按照上述图片,将无源蜂鸣器的IO口与7号数字端口连接,并完成以下程序:

//此程序用于测试无源蜂鸣器的使用
void setup() 
{
	pinMode(7,OUTPUT);  //设置蜂鸣器连接的7号端口为输出
}

void loop() 
{
	tone(7,555);  //tone函数的作用为使蜂鸣器以指定频率发声
	              //tone(端口号 ,发声频率);
}

程序中的“tone(7, 555)”作用为使得7号端口的蜂鸣器以555的频率发声;上传后,会发现蜂鸣器会持续发声,不妨改变一下程序,使得蜂鸣器可以像警报一样断断续续的发声。

//此程序可以使蜂鸣器间断性的发声
void setup() 
{
	pinMode(7,OUTPUT);  //设置蜂鸣器连接的7号端口为输出
}

void loop() 
{
	tone(7,555);  //tone函数用于发声
	delay(300);  //延时300毫秒
	noTone(7);  //使7号端口的蜂鸣器停止发声
	delay(300);  //延时300毫秒
}

此程序又引入了“noTone(7)”,其作用为使7号端口的蜂鸣器停止发声,可以尝试改变发声的频率,并上传测试。

四、完成激光报警装置

激光报警装置
首先解释一下报警装置的功能逻辑:将激光头与光敏传感器分别固定在两侧,并且使得激光头发射的光照射在光敏电阻上,当物体遮挡光线之后,蜂鸣器会发出报警声音,并且LED灯伴随闪烁,持续时间15秒钟。

激光头----接5V及GND
光敏传感器----DO可以置空、AO接A1模拟端口
无源蜂鸣器----接7号数字端口
LED灯模块----接11号数字端口

1.记录激光直射下的光敏模块数值

将激光头通电后使其直接照射光敏电阻,然后记录直射下的光敏模块数值

//此程序功能为记录激光头直射下的光敏模块数值
void setup() 
{
  pinMode(3,INPUT);  //设置DO所接端口为输入
  pinMode(A1,INPUT);  //设置AO所接端口为输入
  Serial.begin(9600);  //初始化串口监视器的波特率为9600
}

void loop() 
{
  Serial.print(digitalRead(3));  //输出3号端口的数字数值
  Serial.print(" ");  //输出空格
  Serial.println(analogRead(A1));  //输出A1端口的模拟数值,并换行
}

在这里插入图片描述
经过测试,发现当激光直射时,模块的模拟数值为120左右(需根据自己的测试进行记录),并且遮挡之后会保证在200以上,因此我们可以以200这个数值来区分是否有物体遮挡激光光束。(DO端口所得到的数字信号在本功能中不使用)

2.实现激光报警功能

激光头----接5V及GND
光敏传感器----DO可以置空、AO接A1模拟端口
无源蜂鸣器----接7号数字端口
LED灯模块----接11号数字端口

再次确定好接线顺序后,完成以下程序:

void setup() 
{
  pinMode(A1, INPUT);  //光敏传感器输入
  pinMode(7, OUTPUT);  //无源蜂鸣器输出
  pinMode(11, OUTPUT);  //LED灯输出
  Serial.begin(9600);  //初始化串口监视器
}

void loop() 
{
  if(analogRead(A1) < 200)  //如果光敏数值小于200,认定无遮挡
  {
    noTone(7);  //蜂鸣器不发声
    digitalWrite(11, 0);  //LED灯不亮
  }
  else  //数值超过200,认定为有遮挡
  {
    while(1)  //while循环,满足括号内的条件后将在while内循环
    {
      tone(7, 555);  //7号端口的蜂鸣器发声频率555
      digitalWrite(11, 1);  //11号端口的LED灯点亮
      delay(100);  //延时100毫秒
      noTone(7);  //7号端口的蜂鸣器停止发声
      digitalWrite(11, 0);  //11号端口的LED灯熄灭
      delay(100);  //延时100毫秒
    }
  }
}

在固定好激光头和光敏传感器后(保证激光直射光敏电阻),上传以上程序,并测试遮挡激光束之后是否实现报警功能;如果要关闭当前状态,仅需按下arduino板的重置按钮即可。

3.while循环的使用

for循环与while循环
与for循环不同的是:for循环每次执行后都要检验是否符合当前条件,进而判断是否要进行下一次循环;while循环只要满足了条件,便会持续循环内部的语句。
如果想要在while循环内跳出循环,可以使用break语句:

while(条件1)
{
	循环体;
	
	if(条件2)
	{
		break;
	}
}

以上程序可以实现当满足“条件1”时,可进入while循环,一旦“条件2”发生,则跳出当前循环。

五、总结

本章所实现的激光报警装置是对多个硬件的综合使用,其中激光头、光敏传感器及无源蜂鸣器的原理及使用方法都较为简单,并未使用“”来进行驱动;并且本章加入了一个新的循环语句——while循环,要理解其与for循环的使用区别;当然本章所实现的报警功能还是有一些缺陷的,比如一旦触发报警后,仅能通过arduino板的重置按钮来关闭,因此可以自己尝试加入一个按键,当按下按键后可以跳出while循环,从而关闭报警装置。

文章来源:https://blog.csdn.net/qq_37744263/article/details/135200778
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。