艦楽のtwitter濃縮箱

twitterを濃縮したよ

第3回転 Arduinoで遊ぼう・表示するものを増やそうの回だよ

かんらだよ

 

サイコン2回目です。ワットとパワーウェイトレシオを表示させます。

 

 

今回はあんまりArduino側はいじらないですね。

計算とプログラミングのみです。

 

 

PWRについての説明

まず、PWR(パワーウェイトレシオ)とはなんだ、ということですね。

 

記事冒頭に「(ワットと)パワーウェイトレシオを表示する」と書きましたが、今回表示させるのは正確には「瞬間のパワーウェイトレシオ」です。

 

本来の意味でのパワーウェイトレシオは

 

らくライド−体重とパワーの関係。パワーウエイトレシオとは?

 

ここに書いてあるように、

FTP÷体重=パワーウエイトレシオ(W/kg)

で求めるものです。

 

FTP1時間めっちゃがんばって漕いだ時に持続できるパワー(W)のことです。

 

これは実際に1時間漕いで測ったり、これまでのライドから算出してくれたりする性能の良いサイコン(知らんけどあるらしい)とかで出せます。

 

でも、ちょーーーーーーーしんどいのでやりたくないし、とりあえず「自分がいま、どれくらいの力で踏めているのか」を知りたいので今回はこれを瞬間の値として出していきます。

ZWIFTとかROUVYとかでも名前の下とかに表示されてますね。アレです。

 

やったことないけど

 

ワット編

 

まずはワットです。

 

僕はパワーメーターは持ってないです。

 

じゃ、パワー測れないじゃ~~~~~~~~~~~~~~~~~~~~ん

 

ってなるんですが、僕の持ってる固定ローラー台「MINOURA LR960」君にはパフォーマンスデータというものがあります。

 

f:id:kanra_6236:20200503201524j:plain

MINOURA LR960 君

 

f:id:kanra_6236:20200503201129p:plain

パフォーマンスデータ


この子には手元で調節できるダイヤルがついててそれを回すことで負荷を調節できます。

f:id:kanra_6236:20200503201528j:plain

負荷調節クン

L(1)からH(13)までの負荷が調節できます。

 

この負荷の数字と時速を、上の表と照らし合わせるとパワーが求められます。

 

Switch文使って「この負荷でこの速度だから何W、今ちょっと速度上がったから何W」とかやってもいいんですが、全然スマートじゃないので一回関数に直します。

 

f:id:kanra_6236:20200503202332p:plain

関数だそうね

はい、グラフの右肩に乗ってるy=~のやつがそうです。

やり方としてはExcelに表をぶち込んでいい感じにグラフを作成して一番近い近似曲線を表示!みたいな感じです。

このグラフが負荷1のときのものなのでこれを13個分集めます。

 

そしたらこれをコードに書き加えて、xのとこを速度にすれば、

 

int Watt(float Sp, int load){
  int watt = 0;

  switch (load) {
    case 1:
      Serial.println("1");
      watt = 0.06769 * Sp * Sp + 2.6255 * Sp - 7.6044;
      break;
    case 2:
      Serial.println("2");
      watt = 0.00889 * Sp * Sp + 3.4082 * Sp - 9.3846;
      break;
    case 3:
      Serial.println("3");
      watt = 0.00712 * Sp * Sp + 5.4307 * Sp - 16.802;
      break;
    case 4:
      Serial.println("4");
      watt = 0.0809 * Sp * Sp + 6.367 * Sp - 17.033;
      break;
    case 5:
      Serial.println("5");
      watt = 0.0732 * Sp * Sp + 7.5788 * Sp - 19.846;
      break;
    case 6:
      Serial.println("6");
      watt = 0.0535 * Sp * Sp + 9.7327 * Sp - 26.582;
      break;
    case 7:
      Serial.println("7");
      watt = 0.0701 * Sp * Sp + 10.06 * Sp - 27.22;
      break;
    case 8:
      Serial.println("8");
      watt = 0.072 * Sp * Sp + 11.28 * Sp - 29.297;
      break;
    case 9:
      Serial.println("9");
      watt = 0.0774 * Sp * Sp + 12.433 * Sp - 35.044;
      break;
    case 10:
      Serial.println("10");
      watt = 0.0766 * Sp * Sp + 14.402 * Sp - 44.604;
      break;
    case 11:
      Serial.println("11");
      watt = 0.0746 * Sp * Sp + 15.702 * Sp - 47.714;
      break;
    case 12:
      Serial.println("12");
      watt = 0.1055 * Sp * Sp + 15.11 * Sp - 40.198;
      break;
    case 13:
      Serial.println("13");
      watt = 0.1748 * Sp * Sp + 14.225 * Sp - 34.747;
      break;
    default :
      break;
  }

  return watt;
}

完成です。もっといいやり方あったら教えてください。助けて。

 

速度・負荷を引数、ワットを返り値として画面に表示させるコードに渡します。

 

ワット編終了!!!!!!!!

 

PWR編


ワットが出せてしまえばもうPWRなんか割り算一つなんで一瞬です。

最初に載せたように、

 

W÷体重=パワーウエイトレシオ(W/kg)

 

なので、さっき出したWを体重で割ります。

 

float weight = 47.5;

      WATT = Watt(sp, Load);

      PWR = WATT / weight;

終了。

 

表示編

 Monitor(sp,loop_time,WATT,PWR);

/*************************
*********省略************
*************************/


void Monitor(float Speed, float Loop_time, int W, float pwr){



    
  monitor_Bt = millis();

  if(monitor_Bt - monitor_St >= 1000){
    Serial.print("loop_time(ms):");
    Serial.println(Loop_time);
    Serial.print("SPEED(km/h):");
    Serial.println(Speed);
    Serial.print("WATT:");
    Serial.println(W);
    Serial.print("PWR(W/kg):");
    Serial.println(pwr);
    
    monitor_St = millis();
  }
}

上の1文だけloopの中です。

まあ、引数で表示させたいの渡して関数で表示させるだけですね。

 

速度、ホイール1周分の時間、ワット、PWRです。

 

この他に負荷が表示されますが、これは入力されたときにすぐ返してほしいのでloopの方に載せました。

 

終了!

次は起動!!!!

 

実際に漕いでみよう編

 

 これです。

 

漕いでるときWが見えるとちょっとだけテンション上がりますね。

 

この前のデジタルスイス、PWR=7とか出てたけどプロ選手どうなっとんねん。

 

次は特に考えてないですが、なんかやります。

頑張ろう!!!!!!

 

以上

 

艦楽(⊿Δδ)