LoginSignup
3
1

More than 5 years have passed since last update.

Raspberry Piで入店音システム3

Last updated at Posted at 2018-03-06

【Raspberry Pi】 人感センサー設置と反応の取得

前回の記事:【Raspberry Pi】Vim設定からプログラミングまで

第0章 全体の流れ

前回の記事では、Vimの設定をしてプログラミングを行いました。今回は入店を感知するセンサーを取り付けたいと思います。

第1章では、必要なアイテム(今回使用したもの)のリンクを載せています。
第2章では、センサーの物理的な接続を行います。
第3章では、プログラミングでセンサーの反応を取得します。

第1章 必要なアイテム

どちらも前回使用したものです。事前に必要な設定などは前回の記事を見てください。
1. Raspberry Pi 3 model B
2. macbook
3. 人感センサーHC-SR501
4. ジャンパーワイヤー(メスーメス)

第2章 Raspberry Piとセンサーの接続

  1. ジャンパーワイヤーとRaspberryPiを繋げる
    1. ジャンパーワイヤーがくっついてると思うので、3本だけ分離してください。
      :sunny:この時なるべく別の色にした方がわかりやすいです
    2. それぞれのワイヤーをA,B,Cとします。(色で覚えたらいいです。)
    3. Raspberry Piのピン(金色の尖ったやつたち)はこんな配列です。 raspi_gpio.png
      :sunny:詳細な説明はこのサイトなどをみてください。
    4. ワイヤーAをピン番号4、ワイヤーBをピン番号6、ワイヤーCをピン番号12へさしてください。
    5. 次に反対側をセンサーに差します。Aを一番左、Bを一番右、Cを真ん中へさしてください。
      :sunny:どっちが左右かわからない人は、センサーの裏側に書いてある文字通りで上下がわかります。ピンがある方が下です。
    6. 完成した時の実際の図です。 2_sensor1.png

第3章 プログラムでセンサーの反応を確認する。

  1. プログラムをまとめるフォルダへ移動(前回フォルダを作りました。)
    1. $cd Documents/Python3でドキュメントフォルダのPython3フォルダへ移動する。 :sunny: この時Python3の部分は自分がつけた名前にしてください。
  2. viでプログラムを書く
    1. $vi jinkan_test.pyで、jinkan_test.pyというpythonのファイルをviで作って開く。
    2. iを押すと入力モード(画面下にINSERT)になり、escを押すと保存とか終了をするモードになります。プログラムを入力したいので、iを入力して入力モードにします。
    3. プログラム全体はこんな感じです。説明を読みながら手打ちでやってみましょう。 3_program_all.png
  3. プログラムの説明(できない人向け)

    1. import timetimeという時間を操作する能力を得る(importする)ことです。
    2. import RPi.GPIO as GPIOというのは、RPi.GPIOというGPIO(ピンを刺して操作すること)を操る能力を得ることです。as GPIOというのは、「それらをこのプログラム中ではGPIOと呼ぶことにした」って言ってます。
    3. SENSOR_GPIO = 18というのは、18という数字を保存する箱です。つまり名前はなんでもいいんです。これは第2章-3のGPIOのピンの配列を見たらわかりますが、GPIO18という場所にピンを刺していますよね。ここにセンサーが反応したかどうかが来るので、それを使うために場所を指定してあげるためです。
    4. GPIO.setmode(GPIO.BCM)というのは、GPIOのピンを指定するときに、どんな表記方法で指定するかってことです。つまり、さっきはGPIO18で指定しましたが、ピン番号12で指定することも可能です。今回はBCM(GPIO18とか)の方で行います。
    5. GPIO.setup(SENSOR_GPIO, GPIO.IN)というのは、セットアップ、つまり初期設定です。SENSOR_GPIOは先ほども言った通り、18を格納しているので、ここに直接18と書いても結果は同じです。GPIO.INはどんな挙動かを表しています。INなので、センサーからの反応をIN(取り込み)します。つまり、ここでは操作したい場所と挙動を示しています。
    6. while True:は永遠に繰り返すという意味です。手動で終了させるしかありませんが、ずっと一定の処理を行ってくれます。
    7. print(GPIO.input(SENSOR_GPIO))は、GPIO18がinputしてきた数字(反応ありなら1、なしなら0)を取得してprint(表示)しています。
    8. if(GPIO.input(SENSOR_GPIO) == GPIO_HIGH):というのは、もし(if)、GPIO.input(SENSOR_GPIO)(GPIO18が反応有なら1、反応無なら0)が、GPIO.HIGH(1)と同じである時の処理を決めています。なのでGPIO.HIGHには1と直接入力しても問題ありません。
    9. print("人を検知しました")は、先ほどifの条件が当てはまる(つまり反応あり)であればprint("人を検知しました")と表示されます。
    10. time.sleep(1)は、if文の効力の外側にいますので、条件がなくても発動します。プログラムに1秒待ってもらうものです。
    11. GPIO.cleanup()というのは、GPIOの初期化です。
  4. 実行する

    1. センサーを人のいない方に向けて固定しましょう。
    2. $python jinkan_test.pyで実行できます。
    3. 正しく実行されれば、人がいない場合の判定結果(GPIO.input(SENSOR_GPIO))が表示されています。つまり、0が永遠と表示されていれば反応なしでOKです。)
    4. 次に反応ありの場合が欲しいので、センサーの周りをうろついたり手を振りかざしたりして見てください。
    5. 「人を検知しました」が表示されていれば成功です。

第4章 最後に

今回は人感センサーの反応を確かめることができました。次回はUSBスピーカーとの接続をしていきます。お疲れ様でした。
次の記事:【Raspberry Pi】 USBスピーカーから音を出す

3
1
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
3
1