Raspberry Piでセンサを使ってみる
こんにちは.
GPIOやC言語が使えるようになり,がぜん電子工作っぽくなってきたわけですが,肝心なことをまだ学んでいません.
それは,入力(INPUT)です.LEDを光らせるのは出力(OUTPUT)ですが,INPUTは外部のセンサの値などを取り込むことを指します.インターネット経由で送られてくる信号を受け取るのも広義でのINPUTと言えます.
まずはWiringPiの機能を使用してコマンドラインから入力を試してみます.
LEDを光らせる実験に使用したものに加え,下記のものを準備しましょう(過去記事からの転載[1]).
PIRセンサ
Parallax PIRセンサー RevB: センサ一般 秋月電子通商 電子部品 ネット通販
人感センサと呼ばれるものです.人が動いたら反応するセンサです.赤外線の変化を感知するので熱を持っているものが動けば反応します.熱を持っていないものなんてまずないので,つまりは何かが動くと反応するって意味ですね.
-------------------転載以上--------------------
これだけです.
次に下記の2個の図を参考に配線を行います.例のごとく接続はラズパイの電源を切った状態で行いましょう(感電および故障防止のため).
今回は回路が少し複雑なので,回路図を添えてみました.
回路図の右端にある四角がPIRセンサを表しています.端子は上から,GDN,電源(VCC),OUTPUTです.実際と同じ順番の配置ですね.
ポイントはラズパイの3.3V電源をPIRセンサのVCCに,ラズパイのGNDをLEDの-側とPIRセンサのGNDに,ラズパイのGPIO4を抵抗に,ラズパイのGPIO5をPIRセンサのOUTに接続するということです.どのPINがどのGPIOかは,過去の記事をご参照ください.
まだこのブログでは回路図の見方など説明していないので,不明点があればコメントなどでご質問ください.
接続ができたらラズパイを起動し,ログインし,下記のコマンドを実行します.
gpio -g mode 25 in
gpio -g read 25
以下のように1または0と表示されたら成功です.
1
0
これを何度か繰り返してみましょう.特に,Enterを押すときにセンサの前方で手などを動かしながら行うと,数値が変わるはずです.
回路もコマンドも同じなのに,センサの前で何かが動いただけで値が変わりました.これがセンサの信号をINPUTするということです.
具体的にどのようなことが起こっていたのか解説していきます.
PIRセンサとは赤外線を放射してその反射波を見ることで,物体の動きを感知するセンサです.具体的には赤外線の反射の様子が同じであれば何も起こらず,反射の様子が変化すると電流が流れるようになっています.
このため,センサの前で手などを動かすことにより赤外線の反射の様子が変わり,センサから回路に電流が流れ,PORT 5の値が1になったのです.
これが回路図もコマンドも変えずに,センサの前でものが動くか動かないかで入力の値が変わった仕組みです.
次に,同じ回路とプログラムを使用して入力と出力を組み合わせた実験を行ってみましょう.
お好きな方法で下記のソースコードを書き,保存してください[3].
ファイル名は"pir_test.c"としましょう.
#include <wiringPi.h>
#define LED_PORT 4
#define SENSOR_PORT 25int main (void){
//initialize
if(wiringPiSetupGpio() == 1) return 1;
pinMode(LED_PORT, OUTPUT);
pinMode(SENSOR_PORT, INPUT);while(1){
if(digitalRead(SENSOR_PORT) == 1) digitalWrite(LED_PORT, 1);
else digitalWrite(LED_PORT, 0);
}return 0;
}
保存が完了したら下記のコマンドを実行して,コンパイルし,実行します.
cc -o pir_test pir_test.c -lwiringPi
./ pir_test
問題なく実行されたらセンサの前で手を動かしたり止めたりしてみましょう.
それに伴いLEDが光ったり消えたりしたら成功です.あまり急激に変化すると実用性が無いため,このセンサは少し遅れて反応するようにできていますが,おおよそリアルタイムに信号が反映されるのをLEDを通すことで確認できたと思います.
このままですと永遠にプログラムが走り続けてしまうので,最後はcontrol + Cでプログラムを強制終了させましょう.
これでC言語を使ってINPUTとOUTPUTをコントロールできるようになりました.
あとはどのセンサを使う場合でもこれを応用すれば,ちょっとしたデバイスが作れそうですよね.
参考文献
[1]ものづくりブログ「Raspberry PiでGPIOを使う(C言語)」(http://daisukekmr.hatenablog.com/entry/2015/01/23/210000)
[2]始める電子回路「光センサをつかう」(http://startelc.com/elc/Works/elc_W_CdsTr.html)
[3]ものづくりブログ「Raspberry Piでプログラムを使ってLチカしてみる」(http://daisukekmr.hatenablog.com/entry/2015/01/27/193000)