谢丫丫

如何通过超声波运动检测开启灯光?

0
阅读(130) 评论(0)

本文介绍的项目将向您展示如何配对超声波传感器和Arduino,以便在感应到运动时打开灯。

材料清单

  1. Arduino Uno

  2. NPN晶体管

  3. Maxbotix UltraSonic传感器

  4. 电线

  5. 面包板

  6. 1k欧姆电阻或更高

  7. 使用Arduino IDE的计算机(集成开发环境)

  8. USB B型连接Arduino

  9. 万用表

  10. LED

对于这个项目,我使用2N3904 NPN晶体管作为开关。如果您没有2N3904,则可以使用类似2N2222的等效设备。只要它是NPN,它就可以使用下面提供的代码。如果您有PNP晶体管,则必须对代码进行更改(将对其进行描述)。要打开和关闭LED,这些晶体管将正常工作。但是为了打开更高功率的灯,就像你家里的灯一样,那么你需要一个备用的功率晶体管。一个能够处理从电源插座流过电流的晶体管是NPN MJ15022 (PDF)。 

 

使用超声波传感器作为运动检测器

超声波传感器或声纳传感器是一种传感器形式,使用回声定位来感测周围的物体。这与鲸鱼和蝙蝠在旅行时用来寻找食物或物体的回声定位原理相同。通过发出一定频率并查看它返回所需的时间,我们可以确定物体的位置甚至速度。

我们使用的超声波传感器的射程高达20英尺。它是一种有源传感器,不断发出噪音并等待接收它。它可以每50ms或以20Hz的速率发出新的声波。我们将使用超声波传感器作为运动检测器; 当距离发生明显变化时,我们会将其视为物体在传感器前方经过的指示。这样,如果你把它指向你的门,它将获得恒定的距离。但是只要有人走过,声纳传感器接收的距离就会改变,我们就知道这是移动的东西。 

由于声纳传感器使用声波的反射工作,因此当物体在其范围内移动时可能存在一些延迟或滞后。为了获得完美的信号,物体必须是平的并且直接面向传感器以便完美地反射波。人体不会完美地反射声纳波,但是由于声波相对于人体的半径足以反射回波,所以延迟或滞后不应该产生那么大的差异。您可以尝试使用较小的物体来找到最佳的波反射角度,以便Arduino获得正确的距离。 

 

使用晶体管作为开关

晶体管是一种非常通用的电子元件。它可用于开关,放大,滤波,缓冲器和稳压器。在这种情况下,我们将把它用作开关。

我们必须确保在本教程中您使用的是NPN晶体管而不是PNP - 否则,电路将与您希望的相反。使用PNP晶体管时,未检测到运动时灯将亮起;检测到运动时灯将熄灭。发生这种情况是因为,在NPN晶体管上,当基极中没有电流时,集电极和发射极之间存在开路。这对PNP来说是相反的效果。当基极中没有电流时,集电极和发射极之间存在短路,使其成为闭合电路并允许电流流过。

我们将通过模拟输出A2输出到晶体管的基极,以打开通过我们光源的电流。

 

 

如果我们查看2N3904 IC数据表  (PDF),那么我们就可以读取它的所有电气特性。当使用晶体管作为开关时,我们最关心的电气特性是基极 - 发射极饱和最小电压和最大电压。

当晶体管工作在饱和区时,它将允许发射极和集电极之间的电流流动。当我们检查2N3904的数据表时,我们发现在饱和区运行该晶体管所需的最小电压为0.65V。

 

 

如果您使用电池为Arduino供电,并且不想每次感测到某些东西时发出高输出,那么您可以更改电压输出。默认情况下,当Arduino输出高电平时,输出5V。但要将其更改为更低的值,如0.65 V或1 V,那么您必须更改AnalogWrite函数参数。其电流值255给出最大(100%)占空比,这意味着它给出5V。使用比率,我们可以使用以下公式将输出更改为大约1 v:


image.png

 

如果我们在公式的所需电压部分插入1 v ,这将给出51的值。我将它舍入到50.简而言之,要将输出电压更改为1V,请将AnalogWrite参数更改为50所以代码看起来像下面的代码。这样,消耗的电量更少,Arduino可以延长电池寿命。 

 

image.png

 

如果您正在使用另一个NPN晶体管,请查看其数据表并密切关注最小基极 - 发射极饱和电压。确保Arduino输出足够的电位差以使晶体管导通。 

 

在面包板上连接我们的组件

一旦我们准备好所有组件,我们就像下图所示连接它们。在这种情况下,我们通过A2的模拟输出连接晶体管导通。只要在代码中更改它,您就可以选择所需的输出。

 

 

如上所述,我们的模拟输出(连接到晶体管的基极)将关闭3.3V和LED之间的电路。我们Arduino的3.3V恒定输出将模拟电源插座输出。

如上图所示连接声纳传感器,以便能够检测运动。使用万用表检查所有电线是否连接良好,以免出现不需要的短路或开路。确保LED指示方向正确 - 否则无法打开。 

 

代码

此代码将在Arduino IDE上输入。编译代码后打开Arduino串行监视器,检查晶体管是否正在切换,当物体在其前面通过时。

 

image.png


打开串行监视器后,您将看到传感器的读数。由于在此示例中编写的代码用于检测小于48cm的距离/移动,因此如果在48cm内检测到运动,则晶体管将仅打开并激活我们的光。

在下面的串行监视器中,您可以看到当距离从172cm变为18cm时晶体管是如何开启的。 

 

 

如果您更喜欢英制系统(因为您在美国,利比里亚或缅甸)而非公制系统,则在串行监视器上打印值时,您必须进行简单的转换。当调用rangeSensorPw.getRange()函数时,将其乘以0.393701以接收以英寸为单位的距离。如果您继续进行此更改,则必须为调用该函数的所有实例执行此更改。在If语句中,新条件现在以英寸为单位。因此,不是48厘米,而是18英寸,新的范围将是48英寸。确保考虑到这一变化,并根据需要调整距离。


image.png