0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RaspberryPi3 B+で人感センサーを作ってみた

Last updated at Posted at 2023-02-12

rightです。

今回はRaspberryPi(以降ラズパイ)と集電赤外線センサーを使用して、
人感センサーを作ってみました。
人や動物など温度を持つ物体は赤外線を放出しています。
集電赤外線センサーは、この赤外線を感知して人や動物の有無を検知できるので、
人感センサーとして使用できます。

1.環境

[H/W]

  • Raspberry Pi3 Model B+ (以降ラズパイ)
  • 集電赤外線センサー(HC-501)
  • 発光ダイオード(赤) (以降LED)
  • 抵抗(100Ω)
  • ジャンパー線

[S/W]

  • Python3 (Ver.3.9.2)
  • OpenCV2 (Ver.4.6.0)
  • NumPy (Ver.1.23.1)
$ python3
Python 3.9.2
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>> import numpy
>>> numpy.__version__
'1.23.1'

ライブラリ更新手順

2.基本機能

今回はRaspberry Pi3 Model B+に集電赤外線センサーを接続した。
併せて、集電赤外線センサーが反応した際に5秒間LEDを光らせ、
コンソールに検知日時を表示させた。

3.ハードウェア仕様

3.1.配線図

infrared_sensor_circuit.PNG

3.2.解説

[集電赤外線センサー]

集電赤外線センサーには、VCC = 5Vを入力電圧とする。
出力電圧は、Low:0V、Hi:3.3Vとなる。
出力先はラズパイのGPIO18(入力)とした。

[LED]

LEDのカソード(-)側には抵抗100Ωを接続した。(※)
入力元はラズパイのGPIO23(出力)とした。
※LEDに接続する抵抗の抵抗値選定は3.2.1.を参照。

3.2.1.LEDに接続する抵抗の選択

LEDに流れる電流値、ラズパイに流れる電流値を考慮して抵抗値を選定する。
①LEDにかかる順電圧V_fを調べる。(今回使用したLEDの場合、V_f = 2.0V)
②基板側の許容電流値I_limを調べる。(ラズパイのGPIO端子の場合、I_lim = 16mA)
③LEDの順電流I_fを調べる。このとき、I_fが許容電流値I_lim以下の電流値となるように設定する。
 (今回使用したLEDの場合、データシート上、TypでI_f = 20mAであり、I_lim = 16mAを超えているため、I_f = 10mAとした。)
④電源電圧Vを調べる。(ラズパイのGPIO出力の場合、V=3.3V)
⑤下記計算式で抵抗値Rを求める。
⑥選定した抵抗を使用した際に流れる電流がI_limを超えないことを確認する。
resi_dic_cal.PNG
circuit.png
今回の場合、R = (3.3-2.0)/0.01 = 130[Ω]
今回は、130[Ω]の代わりに100[Ω]の抵抗を使用。
念の為、100[Ω]の抵抗を使用した際に流れる電流を計算してみると、
I = 1.3/100 = 0.013[A] = 13[mA]
であるため、基板側の許容電流値I_lim = 16[mA]を超えていないため問題なし。

3.3.データシート

使用した電子部品のデータシートは、以下から入手可能。

集電赤外線センサー[HC-501]

LED(赤)[ELEGOO Upgraded Electronic Fun Kits]

4.ソフトウェア仕様

4.1.ソースコード

import wiringpi as pi
import time
import datetime

SENS_PIN = 18
LED_PIN = 23

pi.wiringPiSetupGpio()
pi.pinMode(LED_PIN, pi.OUTPUT)
pi.pinMode(SENS_PIN, pi.INPUT)
print("Operating the Sencer.")

while True:
    if(pi.digitalRead(SENS_PIN) == pi.HIGH):
        dt_now = datetime.datetime.now()
        print(dt_now)
        pi.digitalWrite(LED_PIN,pi.HIGH)
        time.sleep(5)
    else:
        pi.digitalWrite(LED_PIN,pi.LOW)
        time.sleep(1)

4.2.解説

以下の通り、ライブラリを呼び出す。
・WiringPi:ラズパイのGPIOを制御するためのライブラリ
・time:プログラムの一時停止などができるライブラリ
・datetime:時刻取得などができるライブラリ

import wiringpi as pi
import time
import datetime

変数にGPIO番号を格納する。
SENS_PIN:集電赤外線センサーを制御するGPIO番号
LED_PIN:LEDを制御するGPIO番号

SENS_PIN = 18
LED_PIN = 23

GPIOを初期化する。

pi.wiringPiSetupGpio()

以下の通り、GPIOピンのモードを設定する。
・LED_PIN(18):出力モード
・SENS_PIN(23):入力モード

pi.pinMode(LED_PIN, pi.OUTPUT)
pi.pinMode(SENS_PIN, pi.INPUT)

集電赤外線センサーの出力がONのとき、
ターミナルに現在の時刻を表示して、
LEDを5秒間点灯させる。

集電赤外線センサーの出力がOFFのとき、
LEDを消灯させる。

while True:
    if(pi.digitalRead(SENS_PIN) == pi.HIGH):
        dt_now = datetime.datetime.now()
        print(dt_now)
        pi.digitalWrite(LED_PIN,pi.HIGH)
        time.sleep(5)
    else:
        pi.digitalWrite(LED_PIN,pi.LOW)
        time.sleep(1)

Github URL

5.動作確認

RaspberryPiに接続した集電赤外線センサーが物体検知した際、
ターミナル上に現在の時刻が表示され、LEDが点灯しました。
result.PNG

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?