2016/08/15

Raspberry Piのことはじめ - 06 プログラム制御(入力)

前回はGPIOの制御のうち、出力のみを行った。
今回は入力に関して回路を作成して、実際に入力値を取ってみる。



今回必要なもの


今回は新しく回路を作るため、部品も新しく必要なのでリストを記載する。

  1. ブレッドボード
  2. ジャンパワイヤ
  3. スイッチ
  4. 抵抗×2

3は基本的にスイッチならなんでもいいが、「タクトスイッチ」と呼ばれるものが安価で一般的か。
タクトスイッチとかタクティクルスイッチと言われるのは、カチッと押した感があるスイッチのこと。
押している間だけONになるタイプ(モーメンタリ)と、プッシュするたびにON/OFFが切り替わるタイプ(オルタネイト)がある。
今回はどっちでもいいけど、動作は把握しておいてね。

あと、4足と2足のものがある。2足の場合はわかりやすいが、4足のやつは直感的にどこのリード線がどこと繋がるのかが分かりづらいかもしれない。


こんな見た目だが、回路図はこんな感じ。



つまり、はじめから繋がっている2足のペアをスイッチでつなぐ構造になっている。

抵抗の容量は比較的自由だが、前回より大きめのものをつけるといい。1kΩとかでいいかな。
今回は2個使用したい。


構成


今回作成する回路はこんな感じ。



Raspberry Pi構成情報

ピン1(3.3V)からブレッドボードを経てスイッチに接続されている。
そのスイッチの接続先は2股にわかれている。一方は抵抗を経てGPIO14のピンに接続されており、もう一方は、抵抗を経てGNDに接続されている。
この2経路はどちらも途中に抵抗があるのでショートを起こすことはない。

入力モードのGPIO14ピンにつなぐ電線は常にどこかで3.3VやGNDに繋がってないと不安定になるため、スイッチの先にGNDにつながる経路をつくっている。こうすることで、スイッチを切った際にもその経路はGNDに繋がっているようになる。
全ての電線は電圧(電位)がはっきり決まっているところに繋いだ方が安定するってことですな。

本来だったらスイッチからGPIO14につなぐ経路には抵抗はいらないのだが、別のピンにさしてしまった場合などにショートする危険があるため、安全対策でこれを入れる。
(ただ、まあ入れればいいってもんじゃないのであしからず)

これで、スイッチをONにしたら、GPIO14に電圧がかかる構成になった。


入力確認


入力確認はコマンドでもプログラムでも可能。
当然ファイルの入出力を使ってもいいが、今回はgpioコマンドと、Pythonのプログラムを例として記載する。

デフォルトでGPIOは入力になっているようだが、一応下記のコマンドでモードを指定する。
$ gpio -g mode 14 in
次に入力をコマンドで読み込む。
$ gpio -g read 14
スイッチを押さないと0が出力され、スイッチを押すと1が出力される。
ファイルの入出力で行う場合は、exportに書き込んでできたgpioxディレクトリ内のdirectionにinを書き込むことと、valueファイルをwriteするんじゃなくてreadする操作に変えると、同様に状態が取得できる。
コマンドでファイル内を簡単に読み込む際には、catコマンド便利。
$ cat /sys/class/gpio/gpio14/value


次にPythonスクリプトを書いてみる。内容は
  • 状態を読み込んでprintする。
  • 1秒待ってから、また状態を読み込んでprintする。
  • 1秒待ってから、また状態を読み込んでprintする。
  • 終了する。
とする。

内容は下記になる。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.IN)

print GPIO.input(14)
time.sleep(1)
print GPIO.input(14)
time.sleep(1)
print GPIO.input(14)

GPIO.cleanup()

前回と似ている内容だが、GPIO.setupでGPIO.INを指定していることがわかると思う。
さらに、GPIO.inputの結果をprint出力している。
それ以外の設定と終了処理は同じ。


実行してみると、1秒ごとにGPIO14の状態を確認してprintするため、途中でスイッチをONにしたりOFFにしたりして確認すると、操作の通りになるはず。



今回はここまで。
とりあえず一通りの簡単なGPIO操作はやった。

次回からは理論的な背景を説明しながら、まとめていこうと思う。

0 件のコメント:

コメントを投稿