tiltセンサー
注意:当サイトに掲載されている手順は動作を保証するものではないもの、また、当サイトに掲載されている情報をもとに電子回路を作成した結果によって生じたことについて、一切の責任を負えないことをご了承ください。
【Article】「Peripheralページに掲載する記事について」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article011
tiltセンサーとRock4c+を接続し、出力結果を取得してみる。
機器について
tiltセンサーは以下のモジュールを使用した。
tiltセンサーモジュール SW-520D
機器に関するサイトのリンク
SW-520D Tilt Switch Sensor Module « osoyoo.com
https://osoyoo.com/2017/07/18/sw-520d-tilt-switch-sensor-module/
BAILIN ELECTRONICS CO.,LTD SW-520 Roll Ball Switch
https://funduino.de/DL/SW-520D.pdf
モジュールの先端にある円筒の中にボールが入っていて、傾きによってボールが転がり、円筒の底にある端子にボールが接触すると通電してONになるという、シンプルなしくみである。
モジュールにはLEDがついており、モジュールに通電すると赤色のLEDが点灯し、傾きを検知すると緑色のLEDが点灯する。
接続端子は3つあり、電源はVCCとGND、センサーのON/OFFはDOから取得できる。
機器接続
tiltセンサーモジュールへの電源供給はVCCおよびGNDのPin、センサー信号についてはDOのPinを使用する。
また、tiltセンサーモジュールのほかに、受信したセンサー信号と連動させるためのLEDを接続する。
Rock4c+とtiltセンサーモジュール SW-520Dを接続するための回路図は以下のようになる。
- GPIOのPin2をtiltセンサーモジュールのVCCと接続
- GPIOのPin6(グランド)をtiltセンサーモジュールのGNDと接続
- GPIOのPin8をtiltセンサーモジュールのDOと接続
- GPIOのPin18をLEDの+極(足が長い方)と接続
- LEDの-極(足が短い方)と抵抗(200Ω)を接続
- GPIOのPin20(グランド)を抵抗のもう一方と接続
注意点としては、今回のtiltセンサーの動作電圧が5Vのため、Rock4c+のGPIOのPinは赤色の5Vを使用する。
Pythonコード
~/pyディレクトリに"tilt_Read.py"のファイル名でviを起動し、編集モードで以下のコードを入力する。 (Rock4c+には日本語が入力できないため、カッコ書きのコメント行は入力不要。)
# (ライブラリのimport)
import mraa
import time
# (Pin18を操作対象にして、mr.DIR_OUTで"出力"に設定)
gpio_led = mraa.Gpio(18)
gpio_led.dir(mraa.DIR_OUT)
# (Pin8を操作対象にして、mr.DIR_OUT_LOWで"LOW"状態に初期化)
gpio_tilt = mraa.Gpio(8)
gpio_tilt.dir(mraa.DIR_OUT_LOW)
# (反映に少しタイムラグがあるので、1秒ほど待機)
time.sleep(1)
# (gpio_tiltをmraa.DIR_INで読み取りに変更)
gpio_tilt.dir(mraa.DIR_IN)
while True:
# (0.1秒間隔でtiltセンサーの状態を読み取り、LEDのステータスとして出力)
result = gpio_tilt.read()
gpio_led.write(result)
time.sleep(0.1)
コーディングが完了すれば保存する。
コードの実行
tiltセンサーやLEDとRock4c+の結線が間違っていないか確認し、問題がなければ先程のコードを管理者権限で実行する。
(GPIOを操作するには管理者権限が必要。)
$ sudo python3 ~/py/tilt_Read.py
スプレッドボードのLEDが反応するか、tiltセンサーの角度を変えてみる。
センサーを下に傾けるとLEDは点灯し、上に傾けるとLEDは消灯する。
tiltセンサーモジュール側の緑色LEDとは点灯条件が逆のようだが、切り替わりのタイミングは一致している。
tiltセンサーモジュール側LEDと点灯条件を一致させたい場合は、tiltセンサーの受信結果を以下のように反転させてresultに格納すればよい。
# (resultに値を反転させて格納)
result = not bool(gpio_tilt.read())