俺のアウトプット

調べたこと、試したことを書きます

Raspberry Pi タクトスイッチでポチッとな 〜LEDをON/OFF〜

前回は、最初の一歩として Lチカ を作成しました。

今回は、入力に タクトスイッチ を使って、LEDのON/OFFにチャレンジします。

  • スイッチを押したらLEDが点灯 (ON)
  • スイッチを離したらLEDが消灯 (OFF)

用意したもの

  • ブレッドボード
  • タクトスイッチ
  • ジャンパワイヤ (オス-メス) 4本
  • ジャンパワイヤ (U字型単線タイプ) 2本
  • LED 1本
  • 抵抗 (200Ω)

タクトスイッチは、押すと「カチッ」というクリック感があり、それが心地よく、ついつい何度も押してしまいます。
カバンに入れて持ち歩き、暇な時に連打するといいかもしれません。

プルダウン抵抗とプルアップ抵抗

タクトスイッチを使う場合、入力値が不定にならないように、プルダウン抵抗かプルアップ抵抗を用いる必要があります。

  • プルダウン抵抗
    • スイッチOFF: LOW (0V)
    • スイッチON: HIGH (3.3V)
  • プルアップ抵抗
    • スイッチOFF: HIGH (3.3V)
    • スイッチON: LOW (0V)

ブレッドボード上に大きめの抵抗を配置することで実現できますが、Raspberry Pi の場合、本体側にプルダウン抵抗・プルアップ抵抗が用意されています。

今回は、Raspberry Pi 本体のプルダウン抵抗を利用します。 その分、回路図がシンプルになります。

回路図

3.3V と GPIO24 の間にタクトスイッチを接続します。

f:id:kitsugi:20190105212124p:plain

ブレッドボード

前回より少し複雑になっています。
今回は横ラインに電源用とGND用に利用しました。

f:id:kitsugi:20190105221206p:plain

プログラム

import RPi.GPIO as GPIO
import time

PIN_IN = 24
PIN_OUT = 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_IN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(PIN_OUT, GPIO.OUT)

try:
    while True:
        flag = GPIO.input(PIN_IN) == GPIO.HIGH
        GPIO.output(PIN_OUT, flag)
        time.sleep(0.01)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

入力設定

入力時にプルダウン抵抗を利用するため、setup関数にキーワード引数 pull_up_down を指定します。

ループ内

GPIO24 の入力値に電流が流れてるかどうかをフラグにして、GPIO25 の出力を制御します。
CTRL+C で処理を中断できます。

ラズパイで確認

スイッチがOFFの状態です。LEDはOFFの状態です。

f:id:kitsugi:20190105153510j:plain

ポチッとな!!

f:id:kitsugi:20190105153527j:plain

LEDが光りました。 まるで天津飯の太陽拳のようです。

参考