注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

4.1.1 カメラ

はじめに

このセクションでは、ボタンを押すとLEDが点滅しながら写真を撮るカメラを作成します。

必要な部品

このプロジェクトに必要なパーツは以下の通りです。

../_images/3.1.15camera_list.png

一式をまとめて購入する方が便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクから、各パーツを個別に購入することもできます。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ボタン

BUY

カメラモジュール

BUY

回路図

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

../_images/camera_schematic.png

実験手順

ステップ1: 回路を組み立てます。

../_images/3.1.15camera_fritzing.png

ステップ2: カメラモジュールを接続し、設定を完了してください。詳しくは カメラモジュール を参照。

ステップ3: Raspberry Piデスクトップに入ります。より良い体験のためにスクリーンが必要かもしれません: Raspberry Piを接続する を参照してください。リモートからRaspberry Piのデスクトップにアクセスすることもできます。詳しいチュートリアルは リモートデスクトップ を参照してください。

ステップ4: ターミナルを開き、コードのディレクトリに移動します。

cd ~/raphael-kit/python/

ステップ5: コードを実行します。

sudo python3 4.1.1_Camera.py

コードが実行されると、ボタンを押すとRaspberry PiはLEDを点滅させて写真を撮ります。写真は my_photo.jpg という名前で ~ ディレクトリに保存されます。

注釈

PythonのIDEで ~/raphael-kit/python/4.1.1_Camera.py を開き、実行ボタンでコードを実行、ストップボタンでコードを停止することもできます。

PCに写真をダウンロードする方法については Filezilla Software をご参照ください。

コード

注釈

コードは 修正/リセット/コピー/実行/停止 が可能です。ただし、その前に raphael-kit/python のようなソースコードのディレクトリに移動する必要があります。

    #!/usr/bin/env python3

    from picamera import PiCamera
    import RPi.GPIO as GPIO
    import time
import os
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')


    camera = PiCamera()

    LedPin = 17 # Set GPIO17 as LED pin
    BtnPin = 18 # Set GPIO18 as button pin

    status = False

    def setup():
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
            GPIO.setup(BtnPin, GPIO.IN)
            camera.start_preview(alpha=200)

    def takePhotos(pin):
            global status
            status = True

    def main():
            global status
            GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=takePhotos)
            while True:
                    if status:
                            for i in range(5):
                                    GPIO.output(LedPin, GPIO.LOW)
                                    time.sleep(0.1)
                                    GPIO.output(LedPin, GPIO.HIGH)
                                    time.sleep(0.1)
                            camera.capture(f'{user_home}/my_photo.jpg')
                            print ('Take a photo!')
                            status = False
                    else:
                            GPIO.output(LedPin, GPIO.HIGH)
                    time.sleep(1)

    def destroy():
            camera.stop_preview()
            GPIO.output(LedPin, GPIO.HIGH)
            GPIO.cleanup()

    if __name__ == '__main__':
            setup()
            try:
                    main()
            except KeyboardInterrupt:
                    destroy()

コード説明

GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=takePhotos)

BtnPin のイベントを設定し、ボタンが押された場合(ハイレベルからローレベルに変化)に takePhotos() 関数を呼び出します。

def takePhotos(pin):
    global status
    status = True

takePhotos() が呼び出された際に、 statusTrue に設定します。

if status:
    for i in range(5):
        GPIO.output(LedPin, GPIO.LOW)
        time.sleep(0.1)
        GPIO.output(LedPin, GPIO.HIGH)
        time.sleep(0.1)
    camera.capture(f'{user_home}/my_photo.jpg')
    print ('Take a photo!')
    status = False
else:
    GPIO.output(LedPin, GPIO.HIGH)
time.sleep(1)

statusTrue であれば、Raspberry PiはLEDを点滅させて写真を撮ります。写真は my_photo.jpg という名前で ~ ディレクトリに保存されます。

現象の画像

../_images/4.1.1camera.JPG