前回は「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を光らせる
続いてはラズパイで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が点灯する仕組みを作ってみましょう。タクトスイッチと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です。
ボタンを押したら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カメラの使い方についてご紹介してきました。ラズパイとボタンを箱のようなものに組み込んでモバイルバッテリーで動作させれば、デジカメのような使い方ができるかもしれません。
関連記事
"に" - Google ニュース
July 27, 2020 at 08:00AM
https://ift.tt/3fXT7uV
レンズ交換式モジュール「High Quality Camera」にシャッターボタンと通知LEDを取り付ける - ITmedia
"に" - Google ニュース
https://ift.tt/2q0a0jR
Shoes Man Tutorial
Pos News Update
Meme Update
Korean Entertainment News
Japan News Update
Bagikan Berita Ini
0 Response to "レンズ交換式モジュール「High Quality Camera」にシャッターボタンと通知LEDを取り付ける - ITmedia"
Post a Comment