obniz board 1Yで複数圧力センサの値を受け取ってみる
「obniz IoT コンテスト2021」に応募した際に、obniz board 1Yを頂いたので、色々遊んでいます。
色々と電子センサーを使うことができるのですが、今回は圧力センサーを使って遊んでみようと思います。
obniz board 1Yで使用できるセンサ数
私は当初センサーをboardに直付けできるセンサーは1つだけなのかなと思っていましたが、実際は、圧力センサでは6個まで使用可能でした。
この写真のように、0から11ピンまで全て使用可能です。
用意したもの
- obniz Board 1Y ・・・1つ
- ジャンパーワイヤー ・・・12本
- ブレッドボード ・・・1つ
- (obniz動作確認済み)圧力センサFSR40X ・・・6こ
構成例
このように直接つなぎました。
コーディング例①:ただ値を表示する
コーディングはHTMLとJavaScriptで行いました。
値が細かく出てくるので、切り捨てています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<script> var obniz = new Obniz("<YOUR OBNIZ ID>"); var sensor_num = 6; var sensor_status = ""; var ceiled_value=[]; obniz.onconnect = async function() { var pressure0 = obniz.wired("FSR40X", {pin0:0, pin1:1}); var pressure1 = obniz.wired("FSR40X", {pin0:2, pin1:3}); var pressure2 = obniz.wired("FSR40X", {pin0:4, pin1:5}); var pressure3 = obniz.wired("FSR40X", {pin0:6, pin1:7}); var pressure4 = obniz.wired("FSR40X", {pin0:8, pin1:9}); var pressure5 = obniz.wired("FSR40X", {pin0:10, pin1:11}); // 2秒おきにコンソールに結果を出す。 // ループと待機については公式ドキュメントを参考 //https://obniz.com/ja/doc/reference/common/wait-and-loop obniz.onloop = async function(){ var press0 = await pressure0.getWait(); var press1 = await pressure1.getWait(); var press2 = await pressure2.getWait(); var press3 = await pressure3.getWait(); var press4 = await pressure4.getWait(); var press5 = await pressure5.getWait(); await obniz.wait(2000); for(var i=0; i<sensor_num; i++){ ceiled_value.push(Math.ceil(eval("press"+i))); sensor_status += "//s"+i+": "+ceiled_value[i]; } console.log(sensor_status); $("#print").text(sensor_status); // free ceiled_value.splice(0); sensor_status=""; } }; </script> |
処理自体は簡単で、センサーの値を全て取得したら、その値を切り捨てして、2秒に一回コンソールと画面に表示する、というものです。
結果
s0~s5がそれぞれのセンサーです。
それをs0からs5まで順番につまんでいきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//s0: 212//s1: 208//s2: 208//s3: 212//s4: 197//s5: 34 //s0: 500//s1: 208//s2: 208//s3: 212//s4: 198//s5: 34 //s0: 500//s1: 209//s2: 208//s3: 213//s4: 198//s5: 34 //s0: 210//s1: 468//s2: 208//s3: 213//s4: 198//s5: 34 //s0: 211//s1: 499//s2: 207//s3: 213//s4: 198//s5: 34 //s0: 211//s1: 208//s2: 495//s3: 213//s4: 198//s5: 35 //s0: 211//s1: 208//s2: 499//s3: 213//s4: 198//s5: 34 //s0: 212//s1: 208//s2: 207//s3: 213//s4: 198//s5: 34 //s0: 211//s1: 208//s2: 207//s3: 498//s4: 198//s5: 35 //s0: 212//s1: 208//s2: 207//s3: 499//s4: 198//s5: 34 //s0: 212//s1: 208//s2: 208//s3: 212//s4: 198//s5: 34 //s0: 212//s1: 208//s2: 208//s3: 212//s4: 500//s5: 34 //s0: 211//s1: 210//s2: 209//s3: 212//s4: 499//s5: 34 //s0: 211//s1: 208//s2: 208//s3: 212//s4: 198//s5: 35 //s0: 211//s1: 208//s2: 208//s3: 213//s4: 198//s5: 496 //s0: 212//s1: 208//s2: 208//s3: 212//s4: 198//s5: 499 //s0: 211//s1: 208//s2: 208//s3: 213//s4: 197//s5: 203 //s0: 211//s1: 208//s2: 208//s3: 213//s4: 198//s5: 203 //s0: 210//s1: 208//s2: 208//s3: 213//s4: 198//s5: 203 //s0: 211//s1: 208//s2: 209//s3: 213//s4: 198//s5: 203 //s0: 211//s1: 209//s2: 208//s3: 213//s4: 198//s5: 203 //s0: 212//s1: 208//s2: 208//s3: 212//s4: 198//s5: 202 |
上記のように、抵抗を入れていないからか、200スタートという何とも言えない感じです。
また、触るとすぐに500となり、なかなか300など中間値にはいかない印象です。
リアルタイムに結果は取得できますが、「圧力かかっているか、どうか」の2値の判断に向いている、のでしょうか。
コーディング例②:センサーが押されているかどうか判定
先ほど数値の取得があまり意味がないことが分かったので、300以上かどうかの閾値でセンサーが押されているかいないかを判別するようにしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<script> var obniz = new Obniz("<YOUR OBNIZ ID>"); var sensor_num = 6; var sensor_status = ""; var ceiled_value=[]; obniz.onconnect = async function() { var pressure0 = obniz.wired("FSR40X", {pin0:0, pin1:1}); var pressure1 = obniz.wired("FSR40X", {pin0:2, pin1:3}); var pressure2 = obniz.wired("FSR40X", {pin0:4, pin1:5}); var pressure3 = obniz.wired("FSR40X", {pin0:6, pin1:7}); var pressure4 = obniz.wired("FSR40X", {pin0:8, pin1:9}); var pressure5 = obniz.wired("FSR40X", {pin0:10, pin1:11}); //[memo]:1秒ごとに、圧力センサが押されているかを判別する obniz.onloop = async function(){ var data=[]; var is_pressed=[]; var pressed_limit = 300; //[memo]:ひとまず仮置き var sensor_num = 6; var pressed_status = ""; //[memo]:可読性が悪いが書くのだるい。 for(var i=0; i < sensor_num; i++){ eval("(async()=>{press"+i+ "= await pressure"+i+".getWait()})()"); } for (var i=0; i<sensor_num; i++){ data.push(eval("press"+i)); } for (var i=0; i<data.length; i++){ if(data[i]<pressed_limit){ is_pressed.push(false); }else{ is_pressed.push(true); } pressed_status += "sensor" + i + ": " + is_pressed[i] +" /" ; } await obniz.wait(2000); console.log(pressed_status); $("#print").text(pressed_status); } }; </script> |
結果
先ほどと同様に、sensor0からsensor5まで順番につまんでいきました。
これなら、どこが押されているか分かるので、応用可能性がありそうです。
1 2 3 4 5 6 7 8 9 10 11 12 |
sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: true /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: true /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: true /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: true /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: true /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: false / sensor0: false /sensor1: false /sensor2: false /sensor3: false /sensor4: false /sensor5: true / |
まとめ
obniz Board 1Yで、圧力センサーを6個つないでみました。
結果は、True/Falseで取るのであれば使える、のでしょうか。
もし値をきれいに取る方法があればご教授お願い致します。