Arduino激光防盗警报器
2022-07-12牟晓东
牟晓东
在影视剧作品中,有时会出现因盗取某贵重物品而以各种花式动作去躲避激光“红外线网阵”报警防盗系统的经典桥段,主角儿一旦碰触到横竖交错的红色光线就会触发警报系统工作,看上去非常有趣。如果利用Arduino控制红色激光发射模块向光线传感器照射一束激光,同时不断读取光线传感器上所检测到的光线照明值并进行判断,如果该数值不在激光照射时的正常范围,则触发蜂鸣器进行报警。这样,我们就做出了一个简易的Arduino激光防盗警报器,从而实现影视剧作品中类似的监控防盗场景。
实验器材包括:ArduinoUNO主板一块,红色激光头发射模块一个,光线传感器一个,低电平触发蜂鸣器一个,小型面包板一塊,杜邦线若干。
首先,使用红色和黑色杜邦线分别将Arduino的5V和GND端连接至面包板的红色“+” 、蓝色“-”侧边槽线;接着,将蜂鸣器插入面包板,通过杜邦线将其VCC端和GND端连接至对应的“+”、“-”边槽线,中间的I/O信号端通过一根黄色杜邦线连接至Arduino的8号端口;再将光线传感器插入面包板中,同样也是将其VCC端和GND端通过杜邦线连接至边槽线,标注为AO的模拟数据输出端通过一根绿色杜邦线连接至Arduino的A1模拟端口;然后,将激光发射模块的电源正负极也连接至面包板的边槽线,标注为S的信号输出端通过一根蓝色杜邦线连接至Arduino的12号端口;最后,通过数据线将Arduino与计算机的USB口进行连接(如图1)。
首先,通过“int my_buzzer = 8;”和“int my_laser = 12;”语句分别定义my_buzzer和my_laser两个变量,对应蜂鸣器和激光发射模块连接Arduino的8号和12号端口号;接着,再定义一个整型变量my_light,作用是存储Arduino从光线传感器实时读取的环境光线照明数据。
在setup()设置函数中,通过“pinMode(my_buzzer,OUTPUT);”和“pinMode(my_laser,OUTPUT);”语句声明蜂鸣器和激光发射模块均为输出模式;由于光线传感器是连接在Arduino的A1模拟端口,所以不必进行类似的“显式”声明;最后,再通过“Serial.begin(9600);”语句设置串口传输波特率为9600(如图2)。
在loop()函数中,首先要关闭低电平触发的蜂鸣器,否则一加电就会直接先响起“警报”,设置为HIGH高电平即可——“digitalWrite(my_buzzer, HIGH);”;接着,再控制激光发射模块发射出红色激光(设置为高电平):“digitalWrite(my_laser, HIGH);”;然后为变量my_light赋值,即从Arduino的A1模拟端口读取数据:“my_light = analogRead(A1);”,并且通过“Serial.println(my_light);”语句将该值输出至Arduino的串口监视器。
构造一个if条件判断语句,对变量my_light的值进行“是否大于30”的判断,如果条件成立,则分别执行两步操作:一是控制蜂鸣器发声报警,将其设置为低电平——“digitalWrite(my_buzzer, LOW);”,二是向串口监视器输出文字报警信息——“Serial.println(“警报:有不明物体闯入!”);”;最后,通过“delay(100);”语句控制每次循环的间隔时间为100毫秒(如图3)。
将程序保存为Laser_Alert.ino,准备进行测试。
调整好激光发射模块的发射角度,使其对准光线传感器的光敏电阻表面。接着,将程序代码进行编译并上传至Arduino,并且在“工具”菜单中打开串口监视器。此时,蜂鸣器是正常的无声不报警状态,同时在串口监视器中会每隔0.1秒钟就显示输出一个不大于30的环境光线数据:29、24、25……如果尝试使用一根铅笔伸入至激光发射模块与光线传感器之间,阻隔红色激光照射至光敏电阻表面时,蜂鸣器迅速进行啸叫报警,同时也会在串口显示器上显示“警报:有不明物体闯入!”文字警示,此时的环境光线数据就会发生较大幅度的变化:231、196、154……(如图4)。
直到将铅笔移开,警报器才会解除警报,而且串口监视器上的环境光线数据又会恢复至小于30的正常范围。