この記事は、ケーシーエスキャロット Advent Calendar 2017 の23日目の記事になります。
使うもの
まずはラズパイ本体。RaspbetyPi 3 ModelB です。トランプとほぼ同じ大きさのシングルボード・コンピュータです。
小型でもパソコンとして必要なものは一通り揃っています。CPU は ARM プロセッサのクアッドコア 1.2 GHz。GPU も積んでいます。USB ポートを4つに HDMI 端子1つ。100Mbps のイーサネットポートも搭載。Bluetooth4.1 にも対応してます。45g という超軽量ながら、抜群の能力を秘めています。
しかも電子工作には欠かせない、GPIO を搭載しています。GPIO とは General Purpose Input/Output(汎用入出力)の略で、文字通りの入出力ピンがずらっと並んでいます。これにスイッチや LED やセンサー等を繋いで電子工作ができます。
次にラズパイカメラ。SONY 製の CMOS センサー「IMX219」を搭載しており、800 万画素の能力を持っています。3280x2464ピクセルまでの写真や、1080p・30fps までの動画を撮影することができます。500円玉よりひと回り小さいくらいのサイズなのに、かなりの高性能です。ラズパイと組み合わせれば、ちょっとしたデジカメは簡単に自作できてしまいます。(制御するためにちょっとだけ python の知識も必要です)
組み立て
カメラのケーブルを挿すためのコネクタがありますので、ラズパイカメラはそこに差し込むだけです。他のパーツは以下のように接続します。これで、GPIO27(入力ピン#13) からスイッチの状態を読み込むことができるようになります。それだけだと寂しいので、ついでに GPIO12(出力ピン#32) に信号を送ることで自由に LED を光らせることができるようにもう1つの回路を組んであります。
実際にカメラとスイッチとLEDを繋いだ状態がこれ。
実際にカメラとスイッチとLEDを繋いだ状態がこれ。
プログラミング
HDMIの出力ポートがありますのでテレビやモニタに繋いで、USBキーボードやマウスを接続すれば、普通のLinuxPCとして使えます。プログラミングはそんな環境で行います。と言っても、無線LANを搭載していますので、一度ネットワークの設定を済ませて、SSH で接続できるようにしておけば、普段使っている PC から操作できますので、モニタやキーボードなどを接続する必要も無くなります。(そのあたりの説明は省略)
どんな環境であれ、とにかくラズベリーパイ上に GPIO を制御するための python ライブラリをインストールしましょう。
$ pip3 install wringpi
以上!
簡単。これで python から GPIO を制御できるようになります。
どんな環境であれ、とにかくラズベリーパイ上に GPIO を制御するための python ライブラリをインストールしましょう。
$ pip3 install wringpi
以上!
簡単。これで python から GPIO を制御できるようになります。
1 !/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 import wiringpi as pi, time 5 6 switch_pin = 27 7 led_pin = 12 8 9 pi.wiringPiSetupGpio() 10 pi.pinMode(switch_pin, 0) 11 pi.pullUpDnControl(switch_pin, 2) 12 13 pi.pinMode(led_pin, 1) 14 15 before_switch = 0 16 17 while True: 18 status = pi.digitalRead(switch_pin) 19 time.sleep(0.1) 20 if (status != before_switch): 21 before_switch = status 22 if (status == 0): 23 pi.digitalWrite(led_pin, 1) 24 else: 25 pi.digitalWrite(led_pin, 0)
スイッチのピンから0.1秒間隔で状態を読み込んで、状態に変化があった時だけ LED を点灯したり消灯したりします。 説明が雑ですが、実際その程度のことしかしていません。ここまでだと、スイッチを押したら LED が光るだけのプログラムです。LED を光らせるのではなく、カメラで撮影するのが目的ですので、このあたりの処理を置き換えましょう。
というわけで、ラズパイカメラを使うための python ライブラリもインストールします。
$ pip3 install picamera
以上!
やっぱり簡単。さすが python。
で、先ほどのコードを更新します。
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 import wiringpi as pi, time 5 import datetime 6 import picamera 7 8 switch_pin = 27 9 10 pi.wiringPiSetupGpio() 11 pi.pinMode(switch_pin, 0) 12 pi.pullUpDnControl(switch_pin, 2) 13 14 before_switch = 0 15 16 with picamera.PiCamera() as camera: 17 camera.resolution = (1280, 720) 18 camera.rotation = 180 19 camera.start_preview() 20 camera.preview_fullscreen = False 21 camera.preview_window = (100, 100, 640, 360) 22 23 while True: 24 status = pi.digitalRead(switch_pin) 25 time.sleep(0.1) 26 if (status != before_switch): 27 before_switch = status 28 if (status == 0): 29 now = datetime.datetime.now() 30 camera.capture("{0:%Y%m%d_%H%M%S}.jpg".format(now)) 31 32 camera.stop_preview()
カメラの初期設定が数行ありますが、それ以外はシンプルです。camera.capture() で写真を撮影し、引数に指定したファイル名で保存するだけです。これで、簡単なデジカメは完成です。
0 件のコメント:
コメントを投稿