在生活中,我们经常看到某些路灯到了黄昏或晚上就会自动亮起,或者某些指示路牌在天色昏暗的情况下也会点亮灯光,你有没有思考过,它是如何判断天色是明亮的或者昏暗的呢?其实判断亮度情况可以使用光线传感器,光线传感器可以检测出当前环境光线的亮度值,我们根据亮度值就可以判断情况了。那么在本节课中我们将一起来制作一个光线报警器,当光线很强时就通过蜂鸣器发声报警。

知识锦囊

光线传感器

光线传感器可以检测周围环境中的光线强度,并将检测到的光能转化为电能。光线传感器按照类型分为光敏电阻型、光电二极管型和光电晶体管型。这里简单介绍两种常用的光线传感器,光敏电阻型和光电二极管型。

光敏电阻型
首先是光敏电阻型,其模块上会集成一个光敏电阻,如下图所示,光敏电阻对光线极其敏感,只要是我们人眼可见的光都可以引起它的反应。高强度的光照会导致电阻值降低,而低强度的光照会导致电阻值增高,通过光照强度来调节电路中接入的电阻值,从而去控制其他的设备,比如去控制LED灯亮灭。
image.png
光电二极管型
光电二极管又叫做光电传感器、光电探测器,当一束光线撞击二极管时,管中的电子会迅速散开形成电子空穴,从而导致电流流过,光照越强,电流越强,由于光电二极管产生的电流与光的强度成正比,因此对于需要快速改变光响应的光检测来说非常有利,本节课我们要用到的光线传感器就是这一类型。
image.png

再说到光线的用途,我们可以通过光线传感器构建光控开关,比如通过光线传感器控制灯的亮灭,白天的时候关闭灯,夜间打开灯。光控设备的主要目的是为了节约能源,通过智能自动化的手段提高效率,生活中最常见的光控设备大概就是光控灯了,光控台灯、光控路灯、公路隧道照明等等,为我们的生活带了便利的同时也对环保节能作出贡献。

蜂鸣器

蜂鸣器是一种能够电子发声的元器件,广泛应用于各类电子产品,如电脑、打印机、复印机、报警器、电子玩具、电话、定时器等。蜂鸣器有有两种类型:有源蜂鸣器和无源蜂鸣器,这两种蜂鸣器的区别就在于内部是否有振荡源。

  • 有源蜂鸣器:内部有一个振荡源,只要接通电源,蜂鸣器就会发出声音。
  • 无源蜂鸣器:内部没有振荡源,需要用波形脉冲信号去驱动它发声,以产生各种音调和效果。

在本课程中使用的是有源蜂鸣器,独立的蜂鸣器模块如下图所示:
第4课 光线报警器 - 图3

实践操作

任务一:在串口监视器显示光线传感器的值

首先我们将光线传感器通过Grove线连接到主控板的A0/D0接口上。
image.png
打开Arduino IDE,新建一个程序文件,编写以下代码:

  1. #define LIGHT_PIN 0//定义光线传感器连接至A0
  2. #define BAT_ENABLE 19 //Grove端口使能引脚
  3. int readValue = 0;//定义变量readValue,存储光线值
  4. void setup() {
  5. Serial.begin(9600);//设置串口的通信频道
  6. pinMode(LIGHT_PIN , INPUT); //设置光线传感器的引脚为输入状态
  7. digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口
  8. }
  9. void loop() {
  10. readValue = analogRead(A0);//读取A0引脚的光线模拟值并存储在readValue变量中
  11. Serial.println(readValue);//在串口输出变量readValue的值
  12. delay(200);//延时200毫秒,防止读取过快导致出错。
  13. }

然后,

  • 单击工具>开发板> Wio LTE
  • 单击工具>端口以选择正确的端口号。(不要选择COM1

接下来单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。程序上传成功之后,点击界面右上角的串口监视器图标,打开串口监视器。
image.png
用手遮挡光线传感器观察串口监视器中的数值是否发生变化。
image.png

任务二:光线报警器

通过任务一的操作你会发现,光线传感器的数值会随着光线增强而变大,光线减弱会变小,并且数值输出范围为0-1023之间。那么我们就可以利用传感器的值做一个自动报警装置。
逻辑如下:
当光线传感器的值小于某一个数的时候,则控制蜂鸣器报警;当光线传感器的值大于某一个数的时候,则关闭蜂鸣器停止报警。
我们首先将蜂鸣器与光线传感器正确的接入开发板上,蜂鸣器接入A2/D2接口,光线传感器接入A0/D0接口。
image.png
然后打开Arduino IDE,新建一个程序文件,编写以下代码:

  1. #define LIGHT_PIN 0//定义光线传感器连接至A0
  2. #define buzzer_PIN 2//定义蜂鸣器连接至D2
  3. #define BAT_ENABLE 19 //Grove端口使能引脚
  4. int readValue = 0;//定义变量readValue,存储光线值
  5. void setup() {
  6. Serial.begin(9600);//设置串口的通信频道
  7. pinMode(LIGHT_PIN , INPUT); //设置光线传感器的引脚为输入状态
  8. pinMode(buzzer_PIN, OUTPUT); //设置蜂鸣器的引脚为输出状态
  9. digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口
  10. }
  11. void loop() {
  12. readValue = analogRead(A0);//读取A0引脚的光线模拟值并存储在readValue变量中
  13. if(readValue < 100){ //条件判断,如果光线值小于100,则启动蜂鸣器
  14. digitalWrite(buzzer_PIN,HIGH);//启动蜂鸣器
  15. }
  16. else {
  17. digitalWrite(buzzer_PIN,LOW);//关闭蜂鸣器
  18. }
  19. delay(100);//降低程序运行速度,防止出错
  20. }

然后,

  • 单击工具>开发板> Wio LTE
  • 单击工具>端口以选择正确的端口号。(不要选择COM1

然后,单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。上传完成之后,尝试用手遮挡光线传感器,观察蜂鸣器是否按照程序逻辑报警。
image.png