短期集中連載、超小型PC「Raspberry Pi」を使って夏休みの自由課題をやってみよう。第4回は、前回の気圧・温度センサーを接続したRaspberry Piを屋外に持ち出して、高層ビルのエレベーターに乗って気圧変化を計測してみる。

短期集中連載・超小型PC「Raspberry Pi」で夏休み自由課題

■第1回 Raspberry Piとは? 入手とセットアップ
■第2回 雨量や雷情報を3分おきに自動取得するプログラム
■第3回 気圧・温度センサーを動かして数値を記録
■第4回 高層ビルのエレベーターで気圧の変化を記録

Raspberry Piの本体(写真左)と、今回の連載で使う「気圧」センサーを組み合わせた状態(写真右)

気圧測定をより細かく測定したい

気圧が変わる要因は天候だけではない。例えば、行楽地でケーブルカーやリフトに乗って移動しているときに気圧を測ると、「高度が上がると気圧が低くなる」ことが分かる。高いエレベーターに乗ればより短時間に気圧変化が分かる。ということで、Raspberry Piに接続した気圧センサーの数値を、前回の1分間隔より短いサイクルで記録させてみたい。

前回作ったCプログラムは、気圧と温度を1回だけ計測して表示するというものだった(cronを使って1分間隔で実行)。これを一定間隔で記録し続けて、何らかの方法で止めるようにしたい。屋外にRaspberry Piを持ち出した場合、ネットワーク経由でログインして操作できないので(プログラム実行の中止やシャットダウンなど)、今回は電源スイッチを付けることにした。小型のUSBキーボードと液晶モニタを一緒に持ち歩く手もあるが、そこまでするならRaspberry Piより適した機材がたくさんある。

GPIOを使う

これはAinexのPA-045。こちらのほうが入手性がよい(写真を撮るためにヨドバシカメラで購入)。ただ、ワイヤーが長いのでちょっと邪魔かもしれない

Raspberry Piには、汎用入出力(GPIO:General Purpose Input/Output)がいくつも用意されている。そこで、GPIOのどれかにスイッチを接続して、スイッチが押されたかどうかをプログラムで判断できるようにしたい。今回はピン配置の関係で「GPIO23」を使う。

スイッチだけのパーツだとそのままRaspberry Piに接続できないので、コネクタ付きのスイッチパーツを使うとよいだろう。今回は秋葉原の千石電商で購入した(カモン Z-SET)。

スイッチは黄緑の位置に取り付ける。赤枠(数字付き)の接続は後述

ブレッドボードとの接続は手前左から3つのピン、1つ空けてもう1つのピンを接続(詳細は後述)。そこから1つ空けた奥側にスイッチを取り付ける。これでスイッチの片方がGNDに、もう片方がGPIO23に接続される

Raspberry PiでGPIOを使うのに便利なプログラムが、「wiringPi」だ。これは今までのようにapt-getでインストールできないので、該当プログラムをダウンロードして組み込む必要がある。といってもコマンドはたったの3行で、Windows PCのTera Termから、以下を順に実行すればよい。

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

GPIOを使うために、目的のファイルを一気に取ってくる「git」コマンドを使う

これで「GPIO」というコマンドが使えるようになる。スイッチを写真の位置に取り付けると、スイッチを押して導通があるとGPIO23がGNDとつながる。スイッチを押していないとGPIO23の状態が不安定になるので、抵抗を介してGPIO23と電源(3.3V)を接続すると、「GPIO23端子はスイッチを押すとGND、離すと3.3V」となる。スイッチに抵抗をつなぐのは面倒なので、これもプログラムを使い、「GPIO23ピンに抵抗を介して3.3Vに接続」と指示する。

gpio -g mode 23 input
gpio -g mode 23 up
gpio -g read 23

上記の1行目は「GPIO23を読み取りモードにする」、2行目は「GPIO23をプルアップ(抵抗で3.3V電源と接続)する」、3行目は「GPIO23を読み出す」だ。

GPIOコマンドを使って、スイッチに接続したGPIO23ピンを読み取り用に設定。さらに、プルアップしたのち読み取りコマンドを実行する。スイッチを離した状態の読み取りコマンド実行結果が「1」、スイッチ押した状態の読み取りコマンド実行結果が「0」になれば、スイッチの状態を正しく把握している

上記のコマンド、「gpio -g mode 23 input」と「gpio -g mode 23 up」を実行してから、スイッチを押したり離したりしながら3番目の「gpio -g read 23」コマンドを実行してみる。これでスイッチの状態を読み取れた。プログラムによってスイッチ状態が分かり、さらにプログラムから電源オフの処理(shutdownコマンド)を実行することによって、「スイッチを押すと電源切断」を実現できる。