前回は「Raspberry Pi High Quality Camera」(以下、HQカメラ)を使った撮影を簡単に紹介しました。しかしラズパイですから、単純にスクリプトを動かして撮影するだけでは面白くありません。シャッターボタンを付けて、撮影したらLEDが光って知らせてくれる、というのはどうでしょうか。順を追って解説していきます。
今回も「Raspberry Pi」シリーズの正規販売店としてECサイトを運営するケイエスワイにお借りしたHQカメラを利用しています。
まずはボタンを押したらシャッターを切ることができるようにしましょう。この仕組みですが、タクトスイッチをボタンに見立ててラズパイのGPIOにつなげて、その端子が導通したときにシャッターが切れるようにすればよさそうです。そこでブレッドボードにタクトスイッチを取り付け、これの一端をGNDに、もう一端を任意のGPIOにつなげましょう。ここでは12番目のピンであるGPIO18と、14番目のピンであるGNDにつなげました。
あとはPythonのプログラムを作成し、タクトスイッチを押したらシャッターを切るようにすればOKです。ファイル名は「shutter.py」などとしておきましょう。記述するプログラムは以下のようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import subprocess import datetime import time BUTTON = 12 # シャッターボタンは12番 GPIO.setmode(GPIO.BOARD) # ピン番号で配線 GPIO.setup(BUTTON, GPIO.IN) def shoot(BUTTON): now = datetime.datetime.now() DATE = now.strftime('%Y%m%d_%H%M%S') savephoto="/home/pi/Pictures/"+ DATE +".jpg" subprocess.call(["raspistill", "-o" ,savephoto]) GPIO.add_event_detect(BUTTON, GPIO.RISING, callback = shoot, bouncetime = 100) try: while True: time.sleep(1) except KeyboardInterrupt: print('\nStop!\n') # Ctrl+Cで中断 GPIO.cleanup()
取り付けたらコンソールから以下のように入力してプログラムを立ち上げましょう。
$ python shutter.py
プログラムを起動するとコマンド入力待ち状態になります。ここでシャッターボタンを押してみてください。撮影して画像がディスプレイに表示されたでしょうか。ボタンを押したときにGPIO18が「HIGH」になり、撮影するアクションが起きるという仕組みです。このあとボタンを押すたびに画像が撮影されていきます。画像は「年月日_時間分秒」という形式のファイル名で保存されます。
なお、画像はホームディレクトリの「Pictures」に保存されますので、ちゃんと撮影できているか見てみましょう。「Ctrl+C」を入力すると、画面に「Stop!」と表示されてプログラムを終了できます。
続いてはラズパイでLEDを光らせる仕組みについてご紹介します。いわゆる「Lチカ」と呼ばれるもので、電子工作の第一歩をこれから踏み出した人も多いかと思います。ご存じの方は飛ばしていただいて構わないですが、後ほどシャッターボタンと連動させるときに、GPIO15(10番ピン)を使うので、そこを念頭に置いてください。
ではLチカです。LEDはそのまま電源につないではいけません。アノード(+)側に抵抗を挟む必要があります。抵抗を挟まずにつなげると壊れたり、最悪は爆発することもありますので注意しましょう。
ところで抵抗値はどのように決めればいいのでしょうか。LEDには流すことができる「順方向電圧(VF)」と「順方向電流(IF)」がありますので、スペックからこの値を調べておきます。今回は秋月電子通商で販売されている「超高輝度5mmピンク色LED」を使いましたが、このLEDのVFは3.1V、IFは20mAです。LEDと直列して回路を構成するので、抵抗値Rはオームの法則から、
R=(E-VF)/IF=(3.3-3.1)/0.02=10(Ω)
となり、つまり10Ω以上の抵抗であれば問題ありません。今回は手元にあった20Ωの抵抗を使いました。接続図は以下のようになります。
パーツを接続したらラズパイを起動して、標準エディタ「nano」などで以下のプログラムを記述して「lchika.py」などのファイル名で保存します。次に
$ python lchika.py
としてプログラムを動かすとLEDが点滅します。終了するには先ほどと同じようにCtrl+Cを押せばOKです。以下がプログラムの内容です。
#!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time LEDPIN = 10 # LEDは10番 GPIO.setmode(GPIO.BOARD) # ピン番号で配線 GPIO.setup(LEDPIN,GPIO.OUT) try: while True: GPIO.output(LEDPIN ,GPIO.HIGH) time.sleep(1) GPIO.output(LEDPIN ,GPIO.LOW) time.sleep(1) except KeyboardInterrupt: print('\nStop!\n') # Ctrl+Cで中断 GPIO.cleanup()
さてLEDが点灯する環境を作ったので、今度はタクトスイッチを押したらLEDが点灯する仕組みを作ってみましょう。タクトスイッチとLEDの配線は以下のようになります。タクトスイッチ側に3.3Vの電源をつなぎ、抵抗を挟んでLEDと接続させます。LED側の抵抗は先ほどと同じく20Ω。タクトスイッチ側の抵抗は1KΩです。
接続が終了したらプログラムを組んで動作させましょう。以下のような内容をnanoなどで記述したら「lchika_switch.py」などのように名前をつけて保存します。
#!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time LEDPIN = 10 # LEDは10番 BUTTON = 12 # タクトスイッチは12番 GPIO.setmode(GPIO.BOARD) # ピン番号で配線 GPIO.setup(LEDPIN, GPIO.OUT) GPIO.setup(BUTTON, GPIO.IN) try: while True: if GPIO.input(BUTTON) == GPIO.HIGH: GPIO.output(LEDPIN, GPIO.HIGH) else: GPIO.output(LEDPIN, GPIO.LOW) except KeyboardInterrupt: print('\nStop!\n') # Ctrl+Cで中断 GPIO.cleanup()
では以下のようにプログラムを起動します。
$ python lchika_switch.py
プログラムを走らせたらボタンを押してみましょう。LEDが点灯したでしょうか。ボタンから手を離してオフにするとLEDが消灯します。プログラムの終了は、先ほどと同じようにCtrl+Cです。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR