五金店通常都会出售动态感应式泛光灯,您可以将这种泛光灯安装在屋外,使其在有人穿过您的庭院时打开。其实,只要使用一个廉价的运动传感器,您就可以通过Arduino来构建自己的动态感应灯(或其他任何动态感应设备)了。
运动传感器的工作原理在本项目中,我们将使用被动红外(PIR)运动传感器。该传感器通过检测红外线来进行工作,类似人体以热量形式所散发出的光。因为这种传感器即使在人眼看不到的黑暗环境中也可以检测到红外光,所以成为了安保或安全系统的绝佳组件。图片:带有PIR的Arduino 大多数基本型PIR传感器有三个引脚。一个接地引脚,一个电源引脚,第三个为信号引脚。当传感器检测到运动时,信号引脚返回HIGH(或1)。当没有检测到运动时,返回LOW(或0)。两者之间不存在中间级别,例如,传感器无法区分缓慢走过的人和快速走过的人,但是这对大多数项目来说已经足够了。 一些更高级的PIR传感器(如 HC-SR501)具有额外的模块,可以让您调整传感器的灵敏度和触发模式。但是,我们将只使用一个简单的PIR传感器,以简化项目内容。
所需组件该项目所需的大部分组件都可以在入门电子零件套件中找到。为了演示传感器的工作原理,我们将使用它来控制一个简单的LED。为了实现该目的,您需要以下组件:
Arduino Uno | |
一个 PIR运动传感器 | |
Arduino IDE | |
一个LED | |
一个电阻器 对于大部分LED来说,如果将它们直接连接到Arduino的5V输出,将会被烧坏。因此需要在输出引脚和LED之间放置套件中的电阻器。 |
您还需要准备一根USB电缆(如果身边没有的话)。 该项目的电路非常简单,但是通过该过程,您将能够学会如何在未来的任何项目中添加运动传感器。
代码使用运动传感器来触发LED灯的代码相对简单。您需要将传感器和LED分配给引脚,并且可以使用一个简单的if-else循环来检测运动并触发LED。 首先,以下是完整的代码。在设置接线之前,您可以将其添加到您的Arduino IDE并将其上传到Arduino Uno。 int ledPIN = 8; // LED output int motionPin = 2; // PIR sensor pin int motionStatus = 0; // Motion detected status void setup() { pinMode(ledPin, OUTPUT); pinMode(motionPin, INPUT); Serial.begin(9600); } void loop(){ motionStatus = digitalRead(motionPin); if (motionStatus == HIGH) { // When motion is detected digitalWrite(ledPIN, HIGH); // turn LED ON Serial.println(“Motion detected.”); // Print motion detected message } else { digitalWrite(ledPIN, LOW); // Turn LED OFF if no motion is detected Serial.println(“All clear.”); // Print all clear message } } 现在,我们来分块了解一下代码内容。首先是变量: int ledPIN = 8; // LED output int motionPin = 2; // PIR sensor pin int motionStatus = 0; // Motion detected status 在setup()部分之前,我们将初始化一些变量。首先,ledPIN将LED分配给引脚8。接下来,motionPin将运动传感器信号连接器分配到引脚2。最后,motionStatus将存储运动传感器的状态。 void setup() { pinMode(ledPin, OUTPUT); pinMode(motionPin, INPUT); Serial.begin(9600); } 这部分代码出现在setup()部分中。这里的前两行用于初始化LED和传感器引脚,并把它们分配给OUTPUT和INPUT引脚。 最后一行用于初始化串行监视器。我们将使用它来确认运动传感器是否在工作(即使在LED没有工作的状态下)。当您对新项目进行故障排除时,这会很有用,因为您也许会使用比此处的LED更复杂的电路。 motionStatus = digitalRead(motionPin); if (motionStatus == HIGH) { // When motion is detected digitalWrite(ledPIN, HIGH); // turn LED ON Serial.println(“Motion detected.”); // Print motion detected message } else { digitalWrite(ledPIN, LOW); // Turn LED OFF if no motion is detected Serial.println(“All clear.”); // Print all clear message } 在草图的主loop()部分内,第一行代码用于将传感器的状态分配给变量motionStatus。 接下来,您将看到一个if-else循环。如果变量motionStatus为HIGH(表示检测到运动),LED将会打开,并在串行监视器中打印出“Motion detected(检测到运动)”。如果变量为LOW(表示没有检测到运动),那么LED将会关闭,并发送信息“All clear(全部清除)”到串行监视器。 将草图上传到Arduino后,您就可以设置接线了。
接线设置PIR传感器和LED的过程比较简单。如果您有一个面包板,那么所有测试都会变得更容易。首先,我们连接PIR传感器。 ●将传感器上的接地引脚连接到GND。 ●将传感器上的电源引脚连接到5V。 ●将传感器上的信号引脚连接到数字引脚2。 接下来,我们需要设置LED。Arduino Uno带有一个内置LED,您可以将其用于技术测试, 就像默认的Blink草图那样。但是,使用一个外部LED可以帮助您了解在未来的项目中如何连接其他光源或输出设备。使用外部LED是一种比较常见的操作,所以可能您之前已经很熟悉了,但是我们还是在这里对其进行说明。 ●在面包板上添加一个LED。 ●使用电线将较短的 LED引脚连接到Arduino上的GND。 ●将较长的LED引脚连接到电阻器的一端。 ●用一根电线将电阻器的另一端连接到数字引脚8. 完成所有连接后,您就可以开始运行Arduino了。尝试在运动传感器前挥手来查看LED是否亮起。如果没有亮起,请查看您的串行监视器以确认传感器是否工作正常。现在,您可以尝试在项目中添加其他功能,例如控制伺服,或者添加一个继电器来使用运动传感器控制更大的光源。