GARMIN EDGE500の表示パラメータリストのページを眺めながら表示項目を決めました。オリジナルは、風速計からの向い風、追い風相対速度表示 “H/TWind kmh” Head Wind speed /Tail Wind speedです。
オリジナルパワーメーターは、9月10月で完成させるので、できたところで追加します。その時は左右パワー値とペダリング効率をいれたいと思います。<たらればの願望ですが>
●プログラムの基本
Processingは、グラフィック専用でTEXTをGUI表示する機能が弱いので外部のライブラリーControlP5を検討してきましたが、サンプルプログラムが非常に少なくわからないところで詰まってしまたので、急がば回れということで、サイコンに必要なパラメータ10個の座標を決めて、文字サイズと四角の枠のサイズと10個の座標を手入力で定数として入力して作りました。
おかげで、単純なプログラムでだれが見てもすぐわかる点で
よいプログラムになったと思います。
フォントをVerdana-48.vlwにしてあります。メーターの表示用として雰囲気があるフォントを選びました。
■フォントの選び方
ProcessingIDEーツールーフォント作成で表示されるのは
そのPCのOSにインストールされているフォント全部です。足りなければ、PCに新たなフォントをインストールすれば、ここにでてきます。
●プログラム
Processing3.3.6 AndroidMode 4.0.2 で最新バージョンです。
Androido modeの最新版は、gradleエラーがでにくくなって安定してきてます。PCでコンパイルして動作させるのとスマホで動作させるのもコンパイル時間が長くなるだけで同じ操作でできて
スマホのデバッグもPCのコンソールにprintlnでデバッグ変数が表示されるので非常に便利な言語です。VBAより使いやすいです。
■画面パラメータ
①H/T Wind =Speed-風速でマイナスの時は向い風で損してます。プラスの時は追い風で得してます。時速で表示してますが
2kmh差でも大きく抵抗を感じるほど敏感です。
②Speedは、フロントフォークに取り付けるリードスイッチの信号波形をマイコンで処理して速度にします。
③AveSpeedは、走行スタートからの平均速度です。
Distance/RunTImeで正味走った速度の平均です。
④Distanceは、走行速度の累計とGPSの累計で比較してどちらが
正確かで決めます
⑤ ヘルメットにつけた耳たぶ式心拍センサの値をいれます。
⑥Run Timeは、車速ゼロのときの時間は差し引きます。
正味走行時間です。
⑦Elapsed Timeは、走行開始からの時間です。
⑧Elevationは、気圧センサから計算した標高です。
このスマホは、京セラTORQUEはアウトドア機能がついていて
気圧も正確にでます。ProcessingのKetaiライブラリで対応しています。標高はGPSでは精度が悪いので気圧センサです。
⑨累積標高差 標高がプラスになって場合を全部累計します。
⑩現在時刻です。これは、スマホの時計値を使います。
その他の機能、スタート、ストップボタン
ログは、スタートストップに関係なくずっとログしてます。
●コード( ライブラリ類は使ってませんのでそのまま走ります)
画面サイズは、740x1330を想定してます。
—————————————————————————–
int[] startpx={50,400,50,400,50,400,50,400,50,400};
int[] startpy={50,50,250,250,450,450,650,650,850,850};
String [] pName={“Speed kmh”,”H/T Wind kmh”,”Ave SPD kmh”,”Distance km”,”HeartRate bpm”,”Run Time”,”Elapsed Time”,”Elevation m”,”TotalAscent m”,”Time of Day”};
PFont font;
void setup(){
size(740,1330);
background(51);
font = loadFont(“Verdana-48.vlw”);
draw_table();
}
void draw(){
for (int i=0;i<10;i=i+1){
textFont(font,32);
textAlign(CENTER);
fill(255,255,255);
text(pName[i], startpx[i], startpy[i],300,40);
textFont(font,64);
text(“1000”,startpx[i],startpy[i]+100,300,200);
}
}
void draw_table(){
for (int i = 0; i < 10; i = i+1) {
fill(51);
stroke(255,255,255);
rect(startpx[i],startpy[i]-10,300,40);
rect(startpx[i],startpy[i]+30,300,200);
}
}
●以後
センサと回路基板を実装しながらこのプログラムも機能ごとに追加デバッグしていきます。