本文介紹如何透過紅外線動作感測器(PIR Motion Sensor)來偵測是否有人,然後控制 LED 燈的開跟關。
作業系統
Windows 10 IOT Core
設備
Raspberry Pi 2
紅外線動作感測器(PIR Motion Sensor)
LED燈
麵包板
電阻
杜邦線
實作
在先前的文章中「安裝 Windows 10 IoT core 到 Raspberry Pi 2」,使用 Blinky 專案來讓 LED 燈一閃一閃的。
再來,我們可以拿一個 紅外線動作感測器 (PIR Motion Sensor) 來偵測是否有人,
有人的話,就讓 LED燈 亮起來,不然就關掉LED燈。
所以,而 LED燈 就依 Blinky 專案 的接法,詳細請參考「安裝 Windows 10 IoT core 到 Raspberry Pi 2」
再來就是將 PIR Motion Sensor 接到 PI 的 GPIO 上面,
VCC 接 PI 的 5V 接腳,
GND就接 PI 的接地 ,
而 OUT 就接 GPIO 12 (PIN 32),如下圖,
準備就緒後,就可以來開始寫程式了,
新增一個 「Background Application (IoT)」 專案,取名為 InfraredRayTest ,如下,
因為要使用 GPIO ,所以要加入「Windows IoT Extensions for the UWP」,如下,
先設定GPIO,再透過 Timer 每 1 秒問 PIR Motion Sensor 是否有偵測到人,
有的話,就設定 LED燈 為 Low, LED燈就會亮起來了,程式如下,
using System;
using Windows.ApplicationModel.Background;
//加入以下的using
using Windows.Devices.Gpio;
using Windows.System.Threading;
namespace InfraredRayTest
{
public sealed class StartupTask : IBackgroundTask
{
BackgroundTaskDeferral deferral;
private GpioPinValue irPinValue = GpioPinValue.Low;
private const int LED_PIN = 5; // pin 29
private GpioPin ledPin;
private const int IR_PIN = 12; // pin 32
private GpioPin irPin;
private ThreadPoolTimer timer;
public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();
InitGPIO();
timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(1000));
}
private void InitGPIO()
{
//設定 LED
ledPin = GpioController.GetDefault().OpenPin(LED_PIN);
//一開始不要亮!
ledPin.Write(GpioPinValue.High);
ledPin.SetDriveMode(GpioPinDriveMode.Output);
//設定 紅外線 Sensor
irPin = GpioController.GetDefault().OpenPin(IR_PIN);
irPin.SetDriveMode(GpioPinDriveMode.Input);
}
private void Timer_Tick(ThreadPoolTimer timer)
{
irPinValue = irPin.Read();
//紅外線偵測到,就開啟 LED 燈 (設定為Low),沒有就關掉它 (設定為High)
//當LED一支腳為3.3V,GPIO 5 為 High ,因為電位差為0,所以不會亮。
GpioPinValue ledPinValue = (irPinValue == GpioPinValue.High) ? GpioPinValue.Low : GpioPinValue.High;
ledPin.Write(ledPinValue);
}
}
}
再來就可以透過 VS.NET 將程式部署到 PI 上面,然後測試看看結果,如下,
如果有偵測到人,就會讓 LED燈亮起來,如下,
沒有LED燈就熄掉,如下,
特別感謝
同事 Kent 借 紅外線動作感測器(PIR Motion Sensor) 給我們測試
同事 Wright 對於設備的串接與教導
參考資料
Arduino 筆記 – Lab20 用紅外線動作感測器 (PIR Motion Sensor) 控制 LED 的開關
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^