スイッチ入力

ruby hardware programming

スイッチ入力

スイッチが押されたことをプログラムで検知して、プログラムからLEDを光らせます。

必要なパーツ

メーカー 秋月 通販コード 型番 商品名 個数
OptoSupply I-11577 OSR5JA3Z74A 赤色LED 1
FAITHFUL LINK INDUSTRIAL CORP. R-25471 CF25J470RB カーボン抵抗(炭素皮膜抵抗) 1/4W470Ω 2
Cosland Co,. Ltd. P-03647 TS-0606-F-N-BLK タクトスイッチ(黒色) 1

配線

今回使用している2つの抵抗は両方とも、470Ωです。

スイッチ入力 配線図

コード

input_switch.rb を作成します。

require 'pi_piper'

switch_pin = PiPiper::Pin.new(pin: 21, direction: :in)
led_pin = PiPiper::Pin.new(pin: 18, direction: :out)

loop do
  switch_pin.read
  puts switch_pin.off?
  if switch_pin.on?
    led_pin.off
  else
    led_pin.on
  end
  sleep 0.5
end

次のコマンドを実行すれば、入力待機状態になります。

rbenv sudo bundle exec ruby input_switch.rb

終了するには、Ctrl + C を押下します。

コードの説明と配線

PiPiper::Pin#readはピンから値を読み取り、インスタンスのvalueに入れる。読み取り前のvaluelast_valueに入れる。

スイッチが押されていない状態では、青色ケーブルを通って、 GPIO 21 に電流が流れます。 スイッチを押すと、黒色ケーブル(Ground)に電流が流れ始めるため、 GPIO 21 の電流が減ります。電流量が一定量を下回ると Off と認識されるため、 GPIO 21 が Off になります。 スイッチ側の、+側に置いている抵抗のことを、Pull up 抵抗と言います。反対に、-側に置いた場合は、 Pull down 抵抗と言います。

Let’s try

  1. 今回の配線は Pull up抵抗を用いていました。配線を変更して、Pull down抵抗にしましょう。今回のコードをそのまま使った場合は、どのような挙動になるでしょうか。
  2. Pull down抵抗でも、スイッチを押したら LED が点灯するように修正してみましょう。

回答例はこちら