ITmedia NEWS > STUDIO >

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

» 2020年07月27日 10時00分 公開
[岩泉茂ITmedia]
前のページへ 1|2       

ボタンを押したらLEDが点灯してシャッターを切る

 さて、大詰めまでやってきました。ボタンを押したらLEDが点灯して、シャッターが切れるというプログラムに取り掛かります。配線は先ほどのタクトスイッチ+LEDと同じで、プログラムの内容を少し変えます。ただし基本的にはこれまで組んできたプログラムの位置を少し変えるだけなので、どのような動作になっているのかは分かりやすいかもしれません。プログラムは以下のようになります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import subprocess
import datetime
import time
LEDPIN = 10 # LEDは10番
BUTTON = 12 # シャッターボタンは12番
GPIO.setmode(GPIO.BOARD) # ピン番号で配線
GPIO.setup(LEDPIN, GPIO.OUT)
GPIO.setup(BUTTON, GPIO.IN)
def shoot(BUTTON):
    GPIO.output(LEDPIN, GPIO.HIGH)
    time.sleep(0.5)
    GPIO.output(LEDPIN, GPIO.LOW)
    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()

 このプログラムをこれまでと同様にnanoなどで記述し、「shoot_led.py」のようにファイル名を決めて保存しましょう。

 このプログラムですが、ボタンを押したときの動作を「shoot」で定義し、「GPIO.add_event_detect」はGPIOエッジ検出コールバック関数といい、ボタンが押されたときに「shoot」の内容を実行させるものです。「bouncetime」は、連続して動作することで不安定になる「チャタリング」を防止するため、イベントを検出すると指定するミリ秒、ここでは100ミリ秒(0.1秒)は次のイベントを起こさないようにしています。

 保存したら以下のように入力して実行してみましょう。

$ python shoot_led.py

 ボタンを押したらシャッターが切れ、LEDが点灯したでしょうか。画像は先ほどと同様にホームディレクトリの「Pictures」に保存されています。

 ここまで2回にわたりHQカメラの使い方についてご紹介してきました。ラズパイとボタンを箱のようなものに組み込んでモバイルバッテリーで動作させれば、デジカメのような使い方ができるかもしれません。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.