Raspberry Pi3 でカメラと赤外線センサーであそぶ

## 購入したもの
ラズパイはあるので、カメラ、ジャンパワイヤ、赤外線センサーを購入します。

* [Amazon.co.jp： Raspberry Pi Raspberry Pi Camera V2: 産業・研究開発用品](https://www.amazon.co.jp/gp/product/B01ER2SKFS/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1)
* [PIRセンサーモジュール - aitendo](http://www.aitendo.com/product/10254)
* [ジャンパワイヤ（S-S）5本入り - aitendo](http://www.aitendo.com/product/11178)

## カメラのとりつけ
そんなに難しくはないですが、カメラモジュール取り付けが初めてだったので、上に押し上げることにしばらく気づかず四苦八苦しました。
上に押し上げて（取り外しまではしない）、シールをとります。
そしてそこに隙間があるのでカメラモジュールの端子部分を USB モジュール側にむけてさしこみます。

![_2016-12-23_21-24-04_658.png](https://qiita-image-store.s3.amazonaws.com/0/34022/64b4ee88-2414-a075-0539-b90817c70147.png)

## カメラのチェック
ラズパイの `sudo raspi-config` でカメラを有効にして再起動をかけます。

そのあと、次のコマンドで画像が出力されていれば OK です。

```
raspistill -o /tmp/image.jpg
```

## Raspberry Pi と赤外線センサーの接続
GPIO 18 ピンを使います。
赤外線センサーに、VCC、OUT、GND とあります。

![2016-12-23_21-39-05_293.jpeg](https://qiita-image-store.s3.amazonaws.com/0/34022/05b22069-c9a0-a63e-818d-57e4738389d8.jpeg)

それぞれ次の通りに接続します。

```
VCC → Raspberry Pi 4番ピン の 5V
OUT → Raspberry Pi  12番ピンの PWMO(18)
GND → Raspberry Pi 6番ピンの GND
```

![_68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f33343032322f30663331316435642d636331392d623163362d323637302d6361346333363166636636352e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/34022/0c135ae3-8843-5070-b329-f7553d6a744c.png)


※ピンについてはドキュメント参照してください。[GPIO: Raspberry Pi Models A and B - Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/usage/gpio/)
※配線は、VCC を 5V、OUT を GPIO、GND を GND に接続できたらなんでも大丈夫です。GPIO ピン変えたときはそのピン番号を適宜スクリプトに反映して下さい。

これで接続完了です！

## 実装前準備
`pip install` でもいけると思いますが、`apt-get` でインストールします。

```
sudo apt-get install python-picamera
```

Python の REPL で次がコケなければ OK です。

```
import pycamera
```

## 実装
GPIO のどのピンにさしたかにもよりますが、18番にさしたとして次のコードにしました。
もう少しイベント的に取る方法があったはずですが、ひとまず。

```python

# -*- coding: utf-8 -*-
# 2016/12/20 0:51
import traceback
from functools import wraps
import time
import RPi.GPIO as GPIO
import picamera

__author__ = 'isann'


def wrapper(func):
    @wraps(func)
    def _func(*args, **keywords):
        try:
            func(*args, **keywords)
        except Exception:
            traceback.print_exc()

    return _func


@wrapper
def main():
    sensor_pin = 18
    sleeptime = 5

    GPIO.cleanup()
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(sensor_pin, GPIO.IN)

    cam = picamera.PiCamera()
    cam.resolution = (384, 288)

    try:
        print "App Start"
        print "ctrl+c  :  if you want to stop app"
        while True:
            if (GPIO.input(sensor_pin) == GPIO.HIGH):
                print('shot!!!!')
                filename = time.strftime('%Y%m%d%H%M%S') + '.jpg'
                save_file = '/tmp' + '/' + filename
                cam.capture(save_file)
                time.sleep(sleeptime)
                print('wait...')
            else:
                time.sleep(1)
    except KeyboardInterrupt:
        print "Quit"
    finally:
        print "clean up"
        GPIO.cleanup()

if __name__ in '__main__':
    main()
```

これで人感カメラができましたー！
人の動作などに反応してカメラがショットされます！
あとは WEB にアップして表示する普通の仕組みを作ってやるだけです。

おわり。

## 参考

[人感センサーとカメラをRaspberryPiにつないでみた - ついてる工房](http://akkun49.blog.fc2.com/blog-entry-77.html)
[人感センサ A500BP (DSUN-PIR, SB00412A-1も) が安いだけでなく Raspberry Pi との相性もバッチリだったので、人感カメラが10分で出来てしまった話。 - Qiita](http://qiita.com/UedaTakeyuki/items/dd4365cefdb7293f79f6)
[Raspberry Piに赤外線センサーを付けて、動きを検知してみた: Raspberry Piでやってみた](http://raspi.seesaa.net/article/417437441.html)