#【Raspberry Pi】 人感センサー設置と反応の取得
前回の記事:【Raspberry Pi】Vim設定からプログラミングまで
##第0章 全体の流れ
前回の記事では、Vimの設定をしてプログラミングを行いました。今回は入店を感知するセンサーを取り付けたいと思います。
第1章では、必要なアイテム(今回使用したもの)のリンクを載せています。
第2章では、センサーの物理的な接続を行います。
第3章では、プログラミングでセンサーの反応を取得します。
##第1章 必要なアイテム
どちらも前回使用したものです。事前に必要な設定などは前回の記事を見てください。
##第2章 Raspberry Piとセンサーの接続
-
ジャンパーワイヤーとRaspberryPiを繋げる
- ジャンパーワイヤーがくっついてると思うので、3本だけ分離してください。
この時なるべく別の色にした方がわかりやすいです - それぞれのワイヤーをA,B,Cとします。(色で覚えたらいいです。)
- Raspberry Piのピン(金色の尖ったやつたち)はこんな配列です。
詳細な説明はこのサイトなどをみてください。 - ワイヤーAをピン番号4、ワイヤーBをピン番号6、ワイヤーCをピン番号12へさしてください。
- 次に反対側をセンサーに差します。Aを一番左、Bを一番右、Cを真ん中へさしてください。
どっちが左右かわからない人は、センサーの裏側に書いてある文字通りで上下がわかります。ピンがある方が下です。 - 完成した時の実際の図です。
- ジャンパーワイヤーがくっついてると思うので、3本だけ分離してください。
##第3章 プログラムでセンサーの反応を確認する。
-
プログラムをまとめるフォルダへ移動(前回フォルダを作りました。)
-
$cd Documents/Python3
でドキュメントフォルダのPython3フォルダへ移動する。
この時Python3の部分は自分がつけた名前にしてください。
-
-
viでプログラムを書く
-
$vi jinkan_test.py
で、jinkan_test.pyというpythonのファイルをviで作って開く。 -
i
を押すと入力モード(画面下にINSERT)になり、esc
を押すと保存とか終了をするモードになります。プログラムを入力したいので、i
を入力して入力モードにします。 - プログラム全体はこんな感じです。説明を読みながら手打ちでやってみましょう。
-
-
プログラムの説明(できない人向け)
-
import time
はtime
という時間を操作する能力を得る(import
する)ことです。
-
import RPi.GPIO as GPIO
というのは、RPi.GPIOというGPIO(ピンを刺して操作すること)を操る能力を得ることです。as GPIO
というのは、「それらをこのプログラム中ではGPIOと呼ぶことにした」って言ってます。 -
SENSOR_GPIO = 18
というのは、18という数字を保存する箱です。つまり名前はなんでもいいんです。これは第2章-3のGPIOのピンの配列を見たらわかりますが、GPIO18
という場所にピンを刺していますよね。ここにセンサーが反応したかどうかが来るので、それを使うために場所を指定してあげるためです。 -
GPIO.setmode(GPIO.BCM)
というのは、GPIOのピンを指定するときに、どんな表記方法で指定するかってことです。つまり、さっきはGPIO18で指定しましたが、ピン番号12で指定することも可能です。今回はBCM(GPIO18とか)の方で行います。 -
GPIO.setup(SENSOR_GPIO, GPIO.IN)
というのは、セットアップ、つまり初期設定です。SENSOR_GPIO
は先ほども言った通り、18を格納しているので、ここに直接18と書いても結果は同じです。GPIO.IN
はどんな挙動かを表しています。INなので、センサーからの反応をIN(取り込み)します。つまり、ここでは操作したい場所と挙動を示しています。 -
while True:
は永遠に繰り返すという意味です。手動で終了させるしかありませんが、ずっと一定の処理を行ってくれます。 -
print(GPIO.input(SENSOR_GPIO))
は、GPIO18がinputしてきた数字(反応ありなら1、なしなら0)を取得してprint(表示)しています。 -
if(GPIO.input(SENSOR_GPIO) == GPIO_HIGH):
というのは、もし(if)、GPIO.input(SENSOR_GPIO)(GPIO18が反応有なら1、反応無なら0)が、GPIO.HIGH(1)と同じである時の処理を決めています。なのでGPIO.HIGHには1と直接入力しても問題ありません。 -
print("人を検知しました")
は、先ほどifの条件が当てはまる(つまり反応あり)であればprint("人を検知しました")と表示されます。 -
time.sleep(1)
は、if文の効力の外側にいますので、条件がなくても発動します。プログラムに1秒待ってもらうものです。 -
GPIO.cleanup()
というのは、GPIOの初期化です。
-
-
実行する
- センサーを人のいない方に向けて固定しましょう。
-
$python jinkan_test.py
で実行できます。
- 正しく実行されれば、人がいない場合の判定結果(
GPIO.input(SENSOR_GPIO)
)が表示されています。つまり、0が永遠と表示されていれば反応なしでOKです。)
- 次に反応ありの場合が欲しいので、センサーの周りをうろついたり手を振りかざしたりして見てください。
- 「人を検知しました」が表示されていれば成功です。
##第4章 最後に
今回は人感センサーの反応を確かめることができました。次回はUSBスピーカーとの接続をしていきます。お疲れ様でした。
次の記事:【Raspberry Pi】 USBスピーカーから音を出す