前回の投稿からの続きです!
前回はボタンとLEDをつなげて光らせるということを実施して、
GPIOの「in」と「out」を制御できました!
今回はその応用です。「in」と「out」のしくみを利用して、センサーとRaspberry piをつなぎそのセンサーの値を取得する、ということを実施しました。
習得できた知識
- 超音波距離センサーのしくみ
- Node.js
-
process.nextTick([function])
- イベントループの次以降のループで[]内で指定したfunctionを実行する
- setTimeout([function],0)よりもはるかに早い!
-
process.hrtime()
- 現在時刻を [seconds, nanoseconds] の配列で返す
- 引数に、過去に取得した時刻をいれると差分がとれる
例var time = process.hrtime(); var diff = process.hrtime(time);
-
用意したもの
- 前回と同様
- 超音波距離センサー(HC-SR04)
まず超音波距離センサーの回路を理解する
- 超音波距離センサーの仕組み
- outからinの時間を計る
- 道のり= 時間/速さ に当てはめる
- 距離が求められる!
やりたいこと
- 「out」から「in」までの時間を測定するプログラムを作成したい!
- 距離を測るアルゴリズム
実行する
※ サンプルコードなのでこのまま書いても動きません
distance.js
// ポートを使う準備
var fs = require('fs');
・・・
(略)
// 27ポートの値を聞き続けるFunction
function kurikaesiFunc(){
// 27ポートの値を取得
var stdout = fs.readFileSync("/sys/class/gpio/gpio27/value");
if(1 == stdout){
// 1だった時はoutではかった時間との差分を取得する
diff = process.hrtime(startTime);
goalFunc(diffから距離を計算した値);
}
process.nextTick(kurikaesiFunc); //くりかえし
};
// 非同期処理で呼び出すFunction
var outFunc = function(){
// outに出力の命令を出す
// 時間を測る (process.hrtime()を使う)
};
// 距離を出力するFunction
var goalFunc = finction(distance){
console.log(distance)
};
上記のようなコードの流れでプログラムを実行する
値を取得できた!
→ まだ値が正確ではないので、もう少し精度向上を図る必要がありそう!
→ 完成したら更新しようと思います