gpiozeroライブラリ入門⑱import LineSensor
使用環境
|
gpiozeroパッケージの基底クラスInput Devicesは、入力デバイスやセンサ用です。
●LineSensor
class gpiozero.LineSensor(pin, *, queue_len=5, sample_rate=100, threshold=0.5, partial=False, pin_factory=None)一般的なライン・センサは、VCC、GNDおよびOUTの三つのピンを備えている。 VCCは3V3ピンに接続し、GNDはグラウンド・ピンの一つに接続し、最後にOUTをコンストラクタのピン・パラメータの値として指定されたGPIOに接続する。 pin (int or str)センサが接続されているGPIOピン。 pull_up (bool or None)True(デフォルト)の場合、GPIOピンはデフォルトでHighにプルアップされる。この場合、センサの反対側をアースに接続する。Falseの場合、GPIOピンはデフォルトでLowにプルダウンされる。この場合、センサの反対側を3V3に接続する。Noneの場合、ピンはフローティングになるため、外部でプルアップまたはプルダウンし、active_stateに応じてパラメータを設定する。 active_state(bool or None)Trueの場合、ハードウェア・ピンの状態がHigh場合、ソフトウェア・ピンはHigh。Falseの場合、入力極性が逆になる。ハードウェア・ピンの状態がHighの場合、ソフトウェア・ピンの状態はLow。このパラメータを使用して、プルアップされていないものとして構成する場合(pull_upがNoneの場合)に、基になるピンのアクティブ状態を設定する。 pull_upがTrueまたはFalseのとき、アクティブ状態を自動的に適切な値に設定される。 queue_len (int)センサから読み取られた値を格納するために使用されるキューの長さ。デフォルトは5。 sample_rate (float)1秒あたりにデバイスから読み取る(および内部キューに追加する)値の数。デフォルトは100。 threshold (float)しきい値のデフォルトは0.5。内部キュー内のすべての値の平均がこの値を超えると、センサはis_activeプロパティによって「アクティブ」と見なされ、適切なすべてのイベントが発生する。 (※)入手した二つのライン・センサ(TCRT5000 infra-red proximity sensor をキーに検索して探した)は、どちらも、反射物がデフォルト3cmより近づくとONになった。 こちらのボードでは出力をD0ににした。A0の機能は不明。 partial (bool)False(デフォルト)の場合、内部キューが値でいっぱいになるまで、オブジェクトはis_activeの値を返さない。オブジェクト構築の直後に値が必要な場合にのみ、これをTrueに設定する。 pin_factory(factoryまたはNone)詳細については、API –ピンを参照(これは、ほとんどのユーザが無視できる高度な機能)
|
●配線
GPIO4に信号のOUT端子、隣のGNDにGND端子、3.3VにVcc端子をつなぎました。
●プログラム
サンプルを動かします。
from gpiozero import LineSensor
from signal import pause
sensor = LineSensor(4)
sensor.when_line = lambda: print('Line detected')
sensor.when_no_line = lambda: print('No line detected')
pause()
普通のdef文に書き換えました。
from gpiozero import LineSensor
from signal import pause
def detected():
a = 'Line detected'
print(a)
def nodetected():
b = 'Line no detected'
print(b)
sensor = LineSensor(4)
sensor.when_line = detected
sensor.when_no_line = nodetected
pause()
threshold=0.1や0.8に設定しましたが、変化は見られませんでした。
from gpiozero import LineSensor
import time
sensor = LineSensor(4, threshold=0.8)
while 1:
print(sensor.value)
time.sleep(0.1)
結果は、1もしくは0が返ってきました。白や黒とは関係ないようです。