电子说
这篇文章来源于DevicePlus.com英语网站的翻译稿。
ARDUINO激光绊线
目的
本教程描述了如何使用Arduino Uno制作一个激光绊线。如果您不熟悉Arduino平台,请参阅“Arduino设置教程”。
概述
在本教程中,您将学习如何设置激光绊线传感器,并在光束被阻断时触发执行器,在此例中为点亮LED。您将学习如何使用if/else循环、激光二极管以及光敏电阻。
警告: 激光可能对眼睛有害,切勿直视激光束。
设备
Arduino Uno R3
“DOT”激光模
20件光敏电阻套
9V、1A电源适配器
跳线
USB电缆(A-to-B)
面包板
目录
电路设计
编写代码
引脚定义
设置
循环
上传并运行程序
程序
1.1 电路设计
这个项目的电路设计相当简单。电路分为三部分:激光电源、光敏电阻接收器(传感器)和LED指示灯(执行器)。一般来讲,单片机通过传感器接收来自外界的信息,并通过执行器传递信息或执行操作。我选择使用LED指示灯作为我的执行器,但是执行器可以是警报、短信,甚至是门锁。
我总是喜欢用Fritzing绘制原理图(图1:电路原理图)。Fritzing是一款开源原理图设计和PCB布线软件。这样,将来可以作为参考。
图1:电路原理图
电路的第一部分是激光二极管的电源。您可以用5V引脚(红色导线)为激光二极管供电。我希望能够打开/关闭激光器,但是Arduino上的数字输出引脚无法为激光二极管提供足够的功率。负极应接地(黑色导线)。确保您的激光二极管不需要限流电阻。如果需要,请选择适当的阻值。
接下来将创建我们的执行器(LED指示灯)。执行器的目的是告诉我们激光二极管光束已经被阻断。LED和电阻应串联在引脚9(浅蓝色导线)和GND(黑色导线)之间。电阻的作用是限制流过LED的电流,并应根据您的LED进行相应调整,以防止电流过大将LED烧坏。请记住,LED较长的引线是正极,应连接到引脚9。
最后,电路的最后一部分是光敏电阻(图2:光敏电阻),即我们的传感器。光敏电阻是一种电阻,其阻值会随电阻面上的光线强度变化而变化。电阻的一个引线应连至引脚7(浅蓝色导线),另一个引线应连至GND(黑色导线)。我使用的光敏电阻在光线照射时具有高电阻,而在没有光线时具有低电阻。
图2:光敏电阻
2.0 编写代码
2.1 引脚定义
代码的第一部分是定义引脚。这一步是可选操作,但是为了便于记忆和跟踪,我为引脚添加了描述性名称。另外,如果我改变电路的连接方式,只需改变引脚定义即可,无需改变引用引脚编号的每一行代码。
在我们的电路中,光敏电阻被定义为“引脚7”,LED被定义为“引脚9”。
图3:引脚定义
2.2 设置
在代码的设置部分,我将LED引脚配置为数字输出。
图4:设置代码
我们还将光敏电阻配置为带上拉电阻(INPUT_PULLUP)的数字输入。我们正在创建的电路与下面的电路类似,这是一种常用电气电路。在这种情况下,上拉电阻和电压源位于单片机(Arduino)内部,“按钮”则是我们的光敏电阻。当激光二极管照射在光敏电阻上时,它呈现高电阻,并且上拉电阻将输入的电压拉到数字高电平。当光束被阻断时,光敏电阻的电阻下降,输入电压变为数字低电平。
图5:上拉电阻输入电路
2.3 循环
对于重复循环,我编写了一个连续查询光敏电阻数字输入的IF/ELSE语句。如果数字输入为高电平,LED输出关闭;否则LED输出开启。
图6:循环代码
3.0 上传并运行程序
图7:激光绊线的Arduino电路
将代码上传到Arduino。确保Arduino已经连接9V电源适配器,因为USB电源不足以为Arduino和激光二极管同时供电。程序开始后,激光二极管应该输出一束激光。如果光束照射在光敏电阻上,LED应熄灭(图8:激光绊线)。当光束被阻断时,LED亮起,表明绊线已经断开(图9:绊线断开)。
图8:激光绊线
图9:绊线断开
提示:如果您的LED没有点亮,请使用万用表分别检查激光照射到光敏电阻上时光敏电阻的阻值以及光束阻断时光敏电阻的阻值。光照射到光敏电阻上时,光敏电阻的阻值应该在数千欧姆;没有照射时,阻值应为几百欧姆或更低。
附件:激光绊线代码
/* Project: Laser Tripwire Tutorial * Written by: Chris Marella * Date: January 24, 2018 * Version: 1.0 * */ //Pin Definitions const int photo = 7; const int LED = 9; void setup() { //Pin Configurations //Outputs pinMode(LED, OUTPUT); digitalWrite(LED, LOW); //Inputs pinMode(photo, INPUT_PULLUP); } void loop() { //if/else loop checks if photoresistor is high or low if(digitalRead(photo)==HIGH){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED, LOW); } }
DevicePlus 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !