さて、大詰めまでやってきました。ボタンを押したら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カメラの使い方についてご紹介してきました。ラズパイとボタンを箱のようなものに組み込んでモバイルバッテリーで動作させれば、デジカメのような使い方ができるかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR