TOPに戻る

gpiozeroライブラリ入門⑳import LightSensor (LDR)

 使用環境
  • Raspberry Pi Raspberry Pi 4 Model B 2MB
  • OS Raspberry Pi OS(32ビット)5.10.17
  • Python3 3.7.3
  • gpiozeroライブラリ 1.5.1
  • エディタ Mu

 gpiozeroパッケージの基底クラスInput Devicesは、入力デバイスやセンサ用です。

LightSensor (LDR)=CdS

class gpiozero.LightSensor(pin, *, queue_len=5, charge_time_limit=0.01, threshold=0.1, partial=False, pin_factory=None)

 LDRの片方の脚を3V3ピンに接続する。 1µFコンデンサの片方の脚をグラウンド・ピンに接続する。 LDRのもう一方の足とコンデンサのもう一方の足を同じGPIOピンに接続する。 このクラスは、コンデンサを繰り返し放電してから、充電にかかる時間を掛ける(これは、LDRに当たる光によって異なる)。

 LDRを検索すると、CdS硫化カドミウム)が見つかる。光の当たり具合で抵抗値が変化するデバイス。

 LTspiceで動かしてみた。青色がV1の発生するパルス電圧、赤色が回路を流れる電流。電源がつながったときと電源が切れた時に鋭い電流が流れることがわかる。

パラメータ;

pin (int or str)

 CdSが接続されているGPIOピン。

queue_len (int)

 センサから読み取られた値を格納するために使用されるキューの長さ。デフォルトは5。

charge_time_limit(float)

 回路内のコンデンサが充電にこの時間より長くかかる場合、それは暗いと見なされる。 デフォルト(0.01秒)は、CamJam#2 EduKit(製品名)からのCdSと結合された1µFコンデンサに適している。 異なる値のCdSに対してこの値を調整する必要がある。

threshold (float)

 デフォルトは0.1。 内部キュー内のすべての値の平均がこの値を超えると、その領域は「ライト」と見なされ、適切なすべてのイベントが発生する。

partial (bool)

 False(デフォルト)の場合、内部キューが値でいっぱいになるまで、オブジェクトはis_activeの値を返さない。オブジェクト構築の直後に値が必要な場合にのみ、これをTrueに設定する。

pin_factory(factoryまたはNone)

 詳細については、API –ピンを参照(これは、ほとんどのユーザが無視できる高度な機能)

wait_for_dark(timeout=None)

 デバイスが非アクティブ化されるか、タイムアウトに達するまで、スクリプトを一時停止する。

パラメータ: timeout(floatまたはNone)–続行する前に待機する秒数。これがNone(デフォルト)の場合 、デバイスがアクティブになるまで無期限に待機する。

wait_for_light(timeout=None)

 デバイスがアクティブ化されるか、タイムアウトに達するまで、スクリプトを一時停止する。

パラメータ: timeout(floatまたはNone)–続行する前に待機する秒数。これがNone(デフォルト)の場合 、デバイスが非アクティブになるまで無期限に待機する。

light_detected

 値が現在しきい値を超えている場合はTrueを返し、それ以外の場合はFalseを返す。

pin

 デバイスが接続されているピン。 デバイスが閉じられている場合、これはNoneになる(close()メソッドを参照)。 GPIOピンを処理するときは、pin.numberを照会して、デバイスが接続されているGPIOピン(BCM番号付け)を見つける。

value

 0(暗い)から1(明るい)までの値を返す。

when_dark

 デバイスの状態がアクティブから非アクティブに変化したときに実行される関数。 これは、(必須)パラメータを受け入れない関数、または単一の必須パラメータ(必要な数のオプションのパラメータを含む)を受け入れるPython関数に設定できる。 関数が単一の必須パラメータを受け入れる場合、非アクティブ化されたデバイスがそのパラメータとして渡される。
 イベントを無効にするには、このプロパティをNone(デフォルト)に設定する。

when_light

 デバイスの状態が非アクティブからアクティブに変化したときに実行される関数。 これは、(必須)パラメータを受け入れない関数、または単一の必須パラメータ(必要な数のオプションのパラメータを含む)を受け入れるPython関数に設定できる。 関数が単一の必須パラメータを受け入れる場合、それをアクティブにしたデバイスはそのパラメータとして渡される。
 イベントを無効にするには、このプロパティをNone(デフォルト)に設定する。

 

配線

 CdSの片方の足を3.3Vへ、もう一方を1uFの片方の足と接続してGPIO4に、1uF(フィルム・コンデンサ)の残りの足をGNDにつなぎました。

 回路図です。

 オシロスコープでGPIO4の信号を見ます。机の上の明るさの光が当たっているときの波形です。

 CdSを指でふさいだときの波形です。

プログラム

 サンプルを動かします。


from gpiozero import LightSensor

ldr = LightSensor(4)
ldr.wait_for_light()
print("Light detected!")

 指でCdSをふさいで、実行します。指を離すと、Light detected!と表示が出て終了しました。

連載 gpiozeroライブラリ入門

- OutputDevice -

(1) LED その1 (2) LED その2 (3) PWMLED (4) RGBLED

(5) Buzzer (6) TonalBuzzer

(7) Motor その1 BD65496 (8) その2 TB67H420FTG (9) その3 TB6612 (10) その4 MC33926 (11) PhaseEnableMotor DRV8835

(12) Servo (13) AngularServo

- SPI Device -

(14) 10ビットA-DコンバータMCP3001/MCP3002/MCP3004/MCP3008

(15) 12ビットA-DコンバータMCP3201/MCP3202/MCP3204/MCP3208

(16) 13ビットA-DコンバータMCP3301/MCP3302/MCP3304

- InputDevice -

(17) Button

(18) LineSensor

(19) MotionSensor

(20) LightSensor (LDR)