2012年1月30日 星期一

Netduino--紅外線動作感測器(PIR Motion Sensor)

紅外線動作感測器(Passive Infrared Sensor; PIR)

紅外線動作感測器 (PIR Motion Sensor) 是屬於被動式的紅外線裝置,感應器本身不會發射紅外線光束。可用來偵測人體運動、路口轉角的亮燈、警報、或機器人移動檢測。

以下使用Parallax 的 PIR 模組測試

image

模組的接腳圖,包含兩種模式(H、L),可接受+3.3V~+5V的電壓輸入,有一個輸出接腳(out)
Vdd : +3.3V ~ +5V

clip_image002

下圖是物體移動狀態(detection state)與感測輸出值sensor output)之間的變化

clip_image002[5]

1.PIR sensor 啟動時,需要有一段時間做 Calibration,依據不同的 sensor 有不同的時間,大約 10~60 秒,這個時間所輸出的值不具參考值。
2.沒有任何物體被偵測到移動時,輸出為 LOW。
3.在 H 模式,當有物體被偵測到移動時,輸出為 HIGH,然後又回到 LOW。
4.在 L 模式,如果有物體不斷的移動,輸出就會變成 HIGH LOW 不停變換,而不是維持在 HIGH 喔。

實驗線路圖

image

以下程式偵測 PIR 是否有產生 high 的訊號(代表偵測到生物移動),若有則點亮 Netduino 控制板上的 LED

範例程式

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace PIR_test
{
    public class Program
    {
        public static void Main()
        {
            // write your code here
            OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

            InputPort PIR = new InputPort(Pins.GPIO_PIN_D3, false, Port.ResistorMode.Disabled);
            bool PIRState = false, preState = false;


            while (true)
            {
                PIRState = PIR.Read();    //取得PIR讀取的值  H:偵測到物體移動  L:物體靜止
                if (PIRState != preState)  
                {
                    led.Write(PIRState); 
                    preState = PIRState;
                    Debug.Print(PIRState.ToString());
                }
                Thread.Sleep(100);
            }
        }
    }
}

沒有留言:

張貼留言