前回は「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