散歩のおともに ウエアラブルグラスを自作する5 作り方詳細(2)
M5StickcPlusにし、バッテリー問題を若干回避。事前に十分な充電が必要。以下の仕様で1時間は確実に持つ。LCDの明るさにより駆動時間が大きく変わるので、時間などで明るさを使い分けたりするなどして、もう少し造りこむ予定。
主な機能(予定含む)
1.加速度センサー(MPU6886)で体の揺れを表示 現状
2.実装中 IFTTTを用い、携帯電話のLINE通知をBlynkでM5Stickへ表示
M5StickcPlusのボタンで簡易に返信
Googleドライブに加速度データを上げる
3.さらにできれば、GoogleMAPのナビ案内を前方に表示したい
4.将来的には(もっとも行いたいのは)、携帯電話の画面を分割、スクロールなどして
画面の動きがカクカクしてもいいので、ひょうじさせたい
私のスキルでは、なんとか、2まではできそうな予感
3.4はどなたかアドバイスいただきたい
1.は、加速度センサー3軸の値を合成し、M5StickCPlusのLCD画面に表示
一定、加速度以上が続くと(4.8秒の中で)、マリオコインがもらえる(音がする)
2.は以下で検討中。
テキストデータを送る方法
IFTTTでLINEの情報を送る仕組みイメージ
1.のプログラム
#include <M5StickCPlus.h>
#define SAMPLE_PERIOD 20 // サンプリング間隔(ms)
#define SAMPLE_SIZE 240 // サンプリング間隔(20) x 画面幅(240) = 4.8s
#define BUTTON_A 37
bool isPause = false;
void setup() {
M5.begin();
M5.Lcd.setRotation(1);
M5.IMU.Init();
M5.IMU.SetAccelFsr(M5.IMU.AFS_4G);
pinMode(BUTTON_A, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON_A), handleInterrupt, FALLING);
//M5.Beep.setBeep(4000, 100); // ビープ音設定(初期値)
//LCD Rotation settings
M5.Lcd.setRotation(3);
M5.Lcd.writecommand(TFT_MADCTL);
M5.Lcd.writedata(TFT_MAD_MV | TFT_MAD_BGR);
//Text Settings
M5.Lcd.setTextDatum(4);
M5.Lcd.setTextColor(TFT_WHITE,TFT_BLACK);
M5.Lcd.setTextSize(4);
}
float ax[SAMPLE_SIZE];
float ay[SAMPLE_SIZE];
float az[SAMPLE_SIZE];
float accrms[SAMPLE_SIZE];
float accrmsMax; //記憶用
#define X0 5 // 横軸の描画開始座標
#define Y0 70 // 横軸の描画開始座標
// 水平静止で重力加速度1000mGが常にかかることを考慮する
#define MINacc -1000 // 縦軸の最小値 mG
#define MAXacc 3000 // 縦軸の最大値 mG
void handleInterrupt() {
isPause = !isPause;
}
void loop() {
if (!isPause) {
M5.Lcd.fillScreen(BLACK); // 画面クリア
//M5.update(); // ボタンの状態更新
M5.Beep.update(); // tone関数で鳴らした音が指定時間経過していたら止める
for (int i = 0; i < SAMPLE_SIZE; i++) {
if (isPause) break;
M5.IMU.getAccelData(&ax[i],&ay[i],&az[i]); // IMUから加速度を取得
ax[i] *= 1000; // mGに変換
ay[i] *= 1000; // mGに変換
az[i] *= 1000; // mGに変換
accrms[i] = sqrt(ax[i]*ax[i] + ay[i]*ay[i] + az[i]*az[i]);
int y1 = map((int)(accrms[i]), MINacc, MAXacc, M5.Lcd.height(), 0);
M5.Lcd.drawCircle(i+X0, y1/2+Y0, 1, YELLOW);
delay(SAMPLE_PERIOD);
M5.Lcd.drawString("TEST", 80, 40);
if(accrmsMax < accrms[i]) {
accrmsMax = accrms[i];
}
}
if (accrmsMax > MAXacc) {
// マリオ コイン
M5.Beep.tone( 988, 12);//Si2
delay(100);
M5.Beep.tone(1319, 12);//Mi3
delay(250);
accrmsMax = 0; //4.8秒ごとに最大値リセット
}
}
}
散歩のおともに ウエアラブルグラスを自作する3 つば付き帽子へ
次のようなものを自作した
100均一の大型ステンレスクリップにM5StickcPlusとハーフミラーをつけた
これをつば付き帽子に取り付けると、こんな感じに。
このままでは、次の課題があるのでM5StickcPlus+自前の眼鏡にに機能を組み込み
1.ハーフミラーには鏡像になるので、M5StickcPlusの表示でLCD設定を変更
arduino環境で、M5StickcPlusをプログラミング
M5.Lcd.writedata(TFT_MAD_MV | TFT_MAD_BGR);
にて、虚像を作成
2.ハーフミラーと目が近い
私はもともと近眼でありメガネをかけている。
老眼の気でさらに近すぎてピントがあわないため、100均一老眼鏡のレンズを取り付け
3.小さなハーフミラーが視差により片目のみになるように、光軸をオフセット
1.はこんな感じに映る
2.100均一老眼鏡のレンズを取り付けは
参考
大型クリップ ダイソー
散歩のおともに ウエアラブルグラスを自作する2 M5Stickc
散歩のおともに ウエアラブルグラスを自作する1
すっかりコロナ疲れで病んています。健康のために散歩を習慣化しているですが、視線が厳しく、その散歩するにもマスクするのに疲れが溜まります。暑い時期にもなり熱中症が心配な時期になりましたので、散歩中、日よけの布付きの防止をかぶっています。すっかり顔を隠すので不審者極まりないですね。
どうせ帽子をすっかり被って顔が見えないならと思い、何か散歩中に楽しめないかとウエアラブルグラスでも使えないかと探すも、Googleグラス問題以降、なかなか安価なものが普及していない。それなら自作してみようかということでこの記事を作成ました。
せっかく携帯電話があるので、マウントするものを物色。
さすが、中国色々なものを考える。携帯ベースで物色し、構想するも屋外の明るいところ、逆に夜間の暗いところでは携帯電話の画面の明るさでは、見えなかったり、夕方でも明るさのギャップが強すぎて、視界が眩惑して使えない。
首からスマートフォンをぶら下げて、下方向より携帯電話の画像と、前方の画像をミックスさせるために眼鏡にハーフミラーを着けて(写真はイメージ)検証してみた。
が、携帯電話に空が映り込み、十分なミックス画像は得られなかったし、夕方夜間は下から顔を携帯電話の明かりで照らすことになり、これまた恐ろしい。
次へ続く
新築の家、何を目指すか25 引っ越し、安住の地へ 終
引っ越しして、1ケ月が経った。
引っ越しの前後1週間は、本当に疲れた。50歳を過ぎて体力の衰えを強く感じた。
70箱近い荷物に梱包し、引っ越し屋さんに運んでもらい、開梱し、暮らし始められる状態になるまで1週間かかった。仕事に行きながら、夜、開封して、所定のところに収めて行く。単純な作業だからこそ疲れる。
もっと、整理して荷物を減らしておけばと後悔しながらも、新しい家での生活にワクワクしながら片付けをすすめるのだ。安住の地とするために。 終
新築の家、何を目指すか24 完成、引き渡しへ
本日、晴天の中、家の引き渡しを受けた。メーカー様にテープカット、シャンパンでお祝いして頂けた。涙がでた。2年3ヶ月、家族に満足とは言えないアパートでよく過ごしてこれた。コロナ禍が重なり、この狭いアパートで家族感染の危機に怯えて暮らしてきた。家族に感謝したい。
家は全館空調で、各場所に横長窓も付けたので、長い間、日差しが入るのも予想通りだ。4m幅の大きな窓も印象的だ。
でも、もっとお金をかけて豪勢に、、、何て、少し後悔もしながら、新しい家族の絆を作って行きたい、生きたい。
あ、あ、幸せを噛み締めて、、、。