· 

18.センサープロジェクト(1)人体赤外線感応センサーRaspberry Pi Pico WindowsC言語入門

14.1.人体赤外線感応センサーによる侵入警報システム

プロジェクト名:PirSensor

プロジェクト概要

最近は治安が悪くなっています。このため外部からの侵入警報の需要が増えています。このプロジェクトでは、人体赤外線感応センサーによる侵入警報システムを作成します。センサーの仕様は以下です。

電源電圧: DC4.520V

出力信号: HIGH 3.3VLOW 0V

動作モード: L:再検知しない,  H:再検知あり

検知時間: 0.5s

出力時間: 3200s※調整可能

感知範囲、距離: 100°、センター 57m、サイド 34m

以下、3つの調整可能項目があります。

ジャンパーはHLに設定可能です。Hの時は、リピートトリガーで、検出されると常に規定の時間オンします。Lの時は、シングルトリガーとなり、オンの時間は、ポテンションメーターで設定します。正面向かって、電解コンデンサー側のポテンションメーターで設定します。反時計周り最小で3秒、時計周り最大で200秒となります。もう一つのポテンションメーターは感度で設定で、反時計周り最小距離、時計周り最大距離となります。

本システムはシングルトリガーで、最小のオン時間としております。

検出されると、標準出力に”ALARM! Montion detected!"と表示され、ブザーがオンされます。タクトスイッチがオンされるまでブザーは、鳴り続け、再検出もされません。タクトスイッチで、アラームはリセットされます。

 

 

 

 

 

部品リスト

HC-SR501人体赤外線感応モジュール                                            アマゾン

電子ブザーPKB24SPCH3601                                                            秋月電子通商

 

配線図

ソースリスト

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include "pico/stdlib.h"

 

#define LED_PIN PICO_DEFAULT_LED_PIN

#define BUZZER_PIN 2

#define BUTTON_PIN 3

#define PIR_PIN 10

 

//setup ----------------------

//-----------------------------

int main()

{

    stdio_init_all();

 

    gpio_init(LED_PIN);

    gpio_set_dir(LED_PIN, GPIO_OUT);

 

    gpio_init(BUZZER_PIN);

    gpio_set_dir(BUZZER_PIN, GPIO_OUT);

 

    gpio_init(BUTTON_PIN);

    gpio_set_dir(BUTTON_PIN, GPIO_IN);

    gpio_pull_down(BUTTON_PIN);

   

    gpio_put(LED_PIN, 0);

    gpio_put(BUZZER_PIN, 0);

 

    WaitTerminalStartup(30*1000);

    printf("\nTerminal connected\n");

 

    bool alarmOn = false;

    uint8_t pvalue = 0, bvalue = 0;

    uint8_t value;

    while(true){

        if(!alarmOn) {     

            value = gpio_get(PIR_PIN);

            if(pvalue == 0 && value == 1) {

                alarmOn = true;

                gpio_put(BUZZER_PIN, 1);

                printf("ALARM! Motion detected!\n");

            }

            pvalue = value;

        } else {

            value = gpio_get(BUTTON_PIN);

            if(bvalue == 0 && value == 1) {

                alarmOn = false;

                gpio_put(BUZZER_PIN, 0);

            }

            bvalue = value;

        }

        sleep_ms(10);

    }

    return 0;

 

}