正規のオンライン小売業者:

AMAZON
AMAZON
amzuk

紹介

このレッスンでは、Raspberry Piを使用してPIRモーションセンサー(ヒューマンボディパイロ電気赤外線センサー)を制御し、アラームシステムを作成する方法を紹介します。

ハードウェア準備:

1 * Raspberry Pi
1 * ブレッドボード
1 * ブザー
1 * PIRモーションセンサー
いくつかのジャンパーワイヤー

ソフトウェア準備:
注意:このレッスンでは、PC上のPuTTyを介してRaspberry Piをリモートで制御します。 Raspberry Piの設定方法については、レッスン1:Raspberry Piのはじめ方をご覧ください。

作業原理

パッシブ赤外線センサー(PIRモーションセンサー)は、一定距離内のオブジェクトから放射される赤外線(IR)の量の変化を検出する電子センサーです。 センサーは、入射する赤外線放射を電圧信号に変換します。
PIRセンサーの検出範囲は8〜12umであり、人体の温度は約10umのIRを放射します。 したがって、PIRセンサーはアラームシステムで人間の動きを検出するためによく使用されます。

このプロジェクトのPIRセンサーには3つのピン(VCC、OUT、GND)、2つのポテンショメータ(感度調整用と時間遅延調整用)があり、以下の画像に示されています。

ハードウェアのセットアップ

以下の接続図に従って、PIRセンサーとブザーをPiに配線してください。

サンプルコード

C言語ユーザーの場合は、以下の手順に従ってください:


1) 次のターミナルコマンドを入力して、Cのサンプルコードをダウンロードします。

cd   ~
sudo  wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_16/pirsensor.c

注:サンプルコードファイルをカスタマイズする場合は、以下のコマンドを入力してソースコードを編集することができます。

sudo nano  pirsensor.c

2)コードをコンパイルする
gcc  -Wall  -o pirsensor  pirsensor.c  -lwiringPi

4) プログラムを実行する
sudo  ./pirsensor

5) 実行結果
プログラムが実行を開始すると、ターミナルにプログラムに応じたメッセージが表示されます。Raspberry PI PIRセンサーの前に移動すると、パイゾブザーが鳴動するはずです。離れると、ブザーは鳴動を停止します。

C言語のサンプルコード解析

#include < wiringPi.h>
#include < stdio.h>
#include < stdlib.h>

#define BuzzerPin    1 //output buzzer signal to wiringPi pin#1(BCM#18)
#define PIRPin       0 //input PIR sensor signalfrom wiringPi pin#0(BCM#17)

int main(void)
{
// When initialize wiring failed, print messageto screen
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
exit(1);
}

pinMode(BuzzerPin, OUTPUT);
pinMode(PIRPin,INPUT);

printf("\n");
printf("========================================\n");
printf("|              Alarm                   |\n");
printf("|    ------------------------------    |\n");
printf("|        PIR connect to wPi#0          |\n");
printf("|                                      |\n");
printf("|        Buzzer connect to wPi#1       |\n");
printf("|                                      |\n");
printf("|                                OSOYOO|\n");
printf("========================================\n");
printf("\n");

while(1){
if(!(digitalRead(PIRPin))){
digitalWrite(BuzzerPin, HIGH);
printf("\n");
printf("-------------------|\n");
printf("|    no alarm...   |\n");
printf("-------------------|\n");
delay(1000);
}
else{
digitalWrite(BuzzerPin, LOW);
delay(500);
printf("\n");
printf("===================|\n");
printf("|      alarm...    |\n");
printf("===================|\n");
}
}

return 0;
}

Pythonユーザーの場合は、以下の手順を実行してください。

1) 以下のコマンドを入力して、Pythonサンプルコードをダウンロードしてください。

cd  ~

sudo  wget –no-check-certificate  https://osoyoo.com/driver/pi3_start_learning_kit_lesson_16/pirsensor.py

2)プログラムを実行する

sudo  python  ./pirsensor.py

3) 実行結果

プログラムが実行を開始すると、ターミナルにプリントメッセージが表示されます。Raspberry PI PIRセンサーの前に移動すると、パイゾブザーが鳴動するはずです。離れると、ブザーの鳴動が停止します。

Pythonサンプルコード解析:

import RPi.GPIO as GPIO
import time

# set BCM_GPIO 17(wPi#0) as PIR pin
PIRPin = 17
# set BCM_GPIO 18(wPi#1) as buzzer pin
BuzzerPin = 18

#print message at the begining ---custom function
def print_message():
print ('==================================')
print ('|              Alarm             |')
print ('|     -----------------------    |')
print ('|     PIR connect to GPIO0       |')
print ('|                                |')
print ('|     Buzzer connect to GPIO1    |')
print ('|     ------------------------   |')
print ('|                                |')
print ('|                          OSOYOO|')
print ('==================================\n')
print ('Program is running...')
print ('Please press Ctrl+C to end the program...')

#setup function for some setup---custom function
def setup():
GPIO.setwarnings(False)
#set the gpio modes to BCM numbering
GPIO.setmode(GPIO.BCM)
#set BuzzerPin's mode to output,and initial level to HIGH(3.3V)
GPIO.setup(BuzzerPin,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(PIRPin,GPIO.IN)

#main function
def main():
#print info
print_message()
while True:
#read Sw520dPin's level
if(GPIO.input(PIRPin)!=0):
GPIO.output(BuzzerPin,GPIO.LOW)
#time.sleep(0.5)
print ('********************')
print ('*     alarm!     *')
print ('********************')
print ('\n')
time.sleep(1)
else:
GPIO.output(BuzzerPin,GPIO.HIGH)
print ('====================')
print ('=     Not alarm...  =')
print ('====================')
print ('\n')
time.sleep(1)
#define a destroy function for clean up everything after the script finished
def destroy():
#turn off buzzer
GPIO.output(BuzzerPin,GPIO.HIGH)
#release resource
GPIO.cleanup()
#
# if run this script directly ,do:
if __name__ == '__main__':
setup()
try:
main()
#when 'Ctrl+C' is pressed,child program destroy() will be executed.
except KeyboardInterrupt:
destroy()
pass