ITmedia NEWS > STUDIO >
連載
» 2020年07月27日 10時00分 公開

名刺サイズの超小型PC「ラズパイ」で遊ぶ(第23回):レンズ交換式モジュール「High Quality Camera」にシャッターボタンと通知LEDを取り付ける (1/2)

小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。前回に引き続き、Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介。今回はよりデジカメっぽい使い方を紹介します。

[岩泉茂,ITmedia]

 前回は「Raspberry Pi High Quality Camera」(以下、HQカメラ)を使った撮影を簡単に紹介しました。しかしラズパイですから、単純にスクリプトを動かして撮影するだけでは面白くありません。シャッターボタンを付けて、撮影したらLEDが光って知らせてくれる、というのはどうでしょうか。順を追って解説していきます。

 今回も「Raspberry Pi」シリーズの正規販売店としてECサイトを運営するケイエスワイにお借りしたHQカメラを利用しています。

シャッターボタンをつける

 まずはボタンを押したらシャッターを切ることができるようにしましょう。この仕組みですが、タクトスイッチをボタンに見立ててラズパイのGPIOにつなげて、その端子が導通したときにシャッターが切れるようにすればよさそうです。そこでブレッドボードにタクトスイッチを取り付け、これの一端をGNDに、もう一端を任意のGPIOにつなげましょう。ここでは12番目のピンであるGPIO18と、14番目のピンであるGNDにつなげました。

HQカメラ ブレッドボードにタクトスイッチを取り付けて配線する
HQカメラ このように取り付けた

 あとは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を光らせる

 続いてはラズパイで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Ωの抵抗を使いました。接続図は以下のようになります。

HQカメラ 接続図
HQカメラ 実際に接続した様子

 パーツを接続したらラズパイを起動して、標準エディタ「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が点灯する仕組みを作ってみましょう。タクトスイッチとLEDの配線は以下のようになります。タクトスイッチ側に3.3Vの電源をつなぎ、抵抗を挟んでLEDと接続させます。LED側の抵抗は先ほどと同じく20Ω。タクトスイッチ側の抵抗は1KΩです。

HQカメラ 接続図
HQカメラ 実際に接続した様子

 接続が終了したらプログラムを組んで動作させましょう。以下のような内容を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です。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.