2013年11月3日

Raspberry Piで秋月の無接点プッシュスイッチを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Web系のお仕事が山積みで、数ヶ月間更新出来ていませんでした;;
現在もガッツリ電子工作系に打ち込む時間が無いので、今回はベーシックな小ネタということで。


秋月電子で売ってる「無接点プッシュスイッチ(コード付)」を使う。
"機械的接点がない光学式の無接点プッシュスイッチです。デジタル出力型ICセンサ内蔵でドライブ回路に直結可能。" という説明の通り、ICが載ってるので出てる線はVCC、GND、OUTの3本です。
添付されていた参考資料によると、スイッチを押すとOUTがGNDに落ちるようになっていたので配線は以下。


これに加えてLEDを1個追加したので、図には入れてませんが、GPIO 17(pin11)から1kΩの抵抗を介してLED、GND(pin6)というのを入れています。

プログラム(Python with RPi.GPIO)はこんな感じで。
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
GPIO.setup(17,GPIO.OUT)

while True:
 if (GPIO.input(4)):
  GPIO.output(17,GPIO.LOW)
 else:
  GPIO.output(17,GPIO.HIGH)
ifとelseの中身を変えてあげれば何にでも使えますね。

もし、ボタンを押したらコマンドを叩く様にしたい場合は、
import RPi.GPIO as GPIO
import subprocess

GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
GPIO.setup(17,GPIO.OUT)

while True:
 if (not GPIO.input(4)):
  subprocess.call("shutdown -h now", shell=True)
みたいな感じにしてあげれば良いかも。
#このままだとボタンを押していると連続して叩いてしまうので、一回だけ実行するようにする必要ありです。

追記:pushCheck = Falseとか定義して、以下みたいな感じにすればOK
while True:
 if (not GPIO.input(4) and not pushCheck):
  pushCheck = True
  print "Push!"
  GPIO.output(17,GPIO.HIGH)
 if (GPIO.input(4) and pushCheck):
  pushCheck = False
  GPIO.output(17,GPIO.LOW)

話は変わりますが、12/1に割と大きなネタがあるので、時期が近づいたら改めて告知します。