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.配線図
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を超えないことを確認する。
今回の場合、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が点灯しました。