注釈

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

参加する理由は?

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

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

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

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

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

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

2.2.1 フォトレジスタ

はじめに

フォトレジスタは、日常生活で環境光の強度を測定するためによく使用されるコンポーネントです。これにより、コントローラは昼と夜を認識し、ナイトランプなどの光制御機能を実現します。このプロジェクトはポテンショメーターに非常に似ており、電圧を変化させて光を検出します。

必要な部品

このプロジェクトには、次のコンポーネントが必要です。

../_images/2.2.1_photoresistor_list.png

一式を購入するのが便利です、こちらがリンクです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクから別々に購入することもできます。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ADC0834

-

フォトレジスタ

BUY

回路図

../_images/2.2.1_photoresistor_schematic_1.png ../_images/2.2.1_photoresistor_schematic_2.png

実験手順

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

../_images/2.2.1_photoresistor_circuit.png

ステップ 2: コードのフォルダに移動します。

cd ~/raphael-kit/python-pi5

ステップ 3: 実行可能ファイルを実行します。

sudo python3 2.2.1_Photoresistor_zero.py

コードが実行されていると、フォトレジスタで検出された光の強度に応じてLEDの明るさが変化します。

コード

注釈

以下のコードを 変更/リセット/コピー/実行/停止 することができます。ただし、その前に raphael-kit/python-pi5 のソースコードパスに移動する必要があります。コードを変更した後、効果を確認するために直接実行できます。

#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time

# Initialize a PWM LED on GPIO pin 22
led = PWMLED(22)

# Set up the ADC0834 module
ADC0834.setup()

# Define a function for mapping values from one range to another
def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Main loop for reading ADC value and controlling LED brightness
def loop():
    while True:
        # Read analog value from ADC
        analogVal = ADC0834.getResult()
        print('value = %d' % analogVal)

        # Map the ADC value to a PWM value and set LED brightness
        led.value = float(analogVal/255)

        # Wait for 0.2 seconds
        time.sleep(0.2)

# Run the main loop and handle KeyboardInterrupt for graceful shutdown
try:
    loop()
except KeyboardInterrupt:
    # Turn off LED before exiting
    led.value = 0

コードの説明

  1. このセクションでは、 gpiozero ライブラリから PWMLED クラスをインポートして、PWM LED の制御に必要です。また、アナログ-デジタルコンバータとのインタフェースのために ADC0834 モジュールを含み、sleep などの時間ベースの関数を実行するために time モジュールもインポートしています。

    #!/usr/bin/env python3
    from gpiozero import PWMLED
    import ADC0834
    import time
    
  2. GPIOピン22に接続されたPWM LEDを初期化し、ADC0834モジュールをセットアップしてプロジェクトで使用する準備を行います。

    # Initialize a PWM LED on GPIO pin 22
    led = PWMLED(22)
    
    # Set up the ADC0834 module
    ADC0834.setup()
    
  3. 1つの範囲から別の範囲への値をマップするための関数を定義します。この関数は、ADCの読み取りをPWM制御に適した範囲に変換するために重要です。

    # Define a function for mapping values from one range to another
    def MAP(x, in_min, in_max, out_min, out_max):
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
    
  4. このセクションには、アナログ値をADC0834から連続して読み取り、対応するPWM値にマップし、LEDの明るさを調整するループが含まれています。変更を可視化し、CPUへの負荷を軽減するために短い遅延( time.sleep(0.2) )が含まれています。

    # Main loop for reading ADC value and controlling LED brightness
    def loop():
        while True:
            # Read analog value from ADC
            analogVal = ADC0834.getResult()
            print('value = %d' % analogVal)
    
            # Map the ADC value to a PWM value and set LED brightness
            led.value = float(analogVal/255)
    
            # Wait for 0.2 seconds
            time.sleep(0.2)
    
  5. loop 関数を実行し、KeyboardInterrupt に対応して正常なシャットダウンを行います。プログラムが停止すると、LEDがオフになるようにします。

    # Run the main loop and handle KeyboardInterrupt for graceful shutdown
    try:
        loop()
    except KeyboardInterrupt:
        # Turn off LED before exiting
        led.value = 0