2016年1月6日水曜日

RaspberryPi でタクトスイッチの信号を受信してみた

概要

タクトスイッチ (タクタイルスイッチ) の信号を RaspberryPi で受信してみました
タクトスイッチはいわゆる普通のスイッチで押した状態 (1) or 押していない状態 (0) を制御することができます

環境

  • Raspberry Pi Type B Single Board Computer 512MB
  • Raspbian 8.0 (Jessie)
  • Kernel Version 4.1.7+
  • Python 2.7.9
  • タクトスイッチ

配線

実際に配線した写真は以下の通り
rpi_tact_switch.jpg

fritzing で書いた配線図は以下の通り
rpi_tact_switch_circuit.png

今回はプルダウンスイッチをソフトウェア側ではなくハード側で制御するので GPIO で信号を受け取る前に 10kオームの抵抗を配置しています
これがプルダウン抵抗です

タクトスイッチのサンプルは他にもいろいろと情報が転がっているので、調べればプルダウン抵抗なし版の回路も簡単に見つかると思います

ソースコードデプロイ

  • mkdir -p ~/work/tact_switch
  • vim ~/work/tact_switch/receive_signal.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO

pin = 17

def setup(): 
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(pin, GPIO.IN)

def main(): 
    try:
        GPIO.wait_for_edge(pin, GPIO.FALLING)
        print(GPIO.input(pin))
        print("pushed")
    except KeyboardInterrupt:
        print "KeyboardInterrupt"
    except:
        print "Quit"
    finally:
        print "clean up"
        GPIO.cleanup()

if __name__=="__main__":
    setup()
    main()

GPIO は 17 番を使っています
ポイントは wait_for_edge というメソッドでこれを使うことで指定された GPIO が FALLING (押された) 状態になったら次の処理に進むことができます

スクリプトを実行するとスイッチからは 0 が送信されているため入力待ち状態になるはずです
その状態でスイッチを押すと「pushd」と表示されスクリプトが終了します

自分がハマったのは信号が 0 と 1 を繰り返してしまい、待ち状態に入らない現象が発生しました
原因は超単純で別のスクリプトが同じ GPIO を制御しており、そのスクリプトを停止したら正常に動きました
回路がおかしい場合や、抵抗の値が小さい場合にも正常に動かないようです

参考サイト

0 件のコメント:

コメントを投稿