デイトナ Mio MiVue M760DをMT-09に取り付けた

万が一の備えと旅の記録で使えるかなと思ったので、バイクにドラレコを取り付けた。

MITSUBAのEDR-21Gと悩んだが、本体のサイズがデイトナのほうが小さかったため、シート下スペースがあまり無いMT-09ではデイトナのM760Dの方が良さそうということで決めた。

f:id:sparkgene:20210814092508j:plain リアは、ナンバープレートの照明用のケーブルが出ているところに隙間があるので、そこを通そうとしたがコネクターが入らないので外してケーブルを通した。

f:id:sparkgene:20210814095235j:plain フロントはETCのケーブルが通っているルートと同じところを這わせるのが良さそうだったので、ダミーのインテイクを外し、タンクの隙間からライトのところまで這わせた。

f:id:sparkgene:20210814095318j:plain この様にすでにETCが広めのスペースを使っているので、タンク下にあるスペースに詰め込むことにしました。この写真の左下にある白いカバーで隠れている部分に、他のハーネスに電源をつなぐためのターミナルが用意されていたので、電源はバッテリーの端子に固定するのではなく、このターミナルに取り付けた。

f:id:sparkgene:20210814113320j:plain ETCの電源を見ていたら、ウィンカー用のリレーから取っていたので、ACCの電源はこのケーブルから分岐させて取りました。(通常だとダミーのエアーインテイク内のACCカプラーから取るが、すでにグリップヒーターで使っていたので)

f:id:sparkgene:20210814133004j:plain フロントはヘッドライト下にあるステーに穴を開けてネジ止めしました(両面テープと結束バンドで固定できなかったので)

f:id:sparkgene:20210814133013j:plain リアはフェンダーに両面テープと結束バンドで取り付け

f:id:sparkgene:20210814133021j:plain GPS内蔵のボタンはハンドルに結束バンドで固定。

見た目的には目立たない位置に付いてるから、アオリ防止にはあまり効かないかも。

PC向けのアプリで撮影された動画はYouTubeにあげてあります。

youtu.be

マイクも付いてるけど、高速だと風切り音でほとんど何も聞こえない。

スマフォアプリとWi-Fiドラレコを繋いでカメラの映像を見たり、SDカードの動画ファイルを取り出せるのは便利。ただし、元々は旅の記録にも使えるかと思い付けてみたものの、動画ファイルが1分に1つ作られ、ひとつあたり130MByteあるため、1時間分の前後の動画を取り出すには120ファイルコピーする必要があります。残念ながらWi-Fiがそこまで速くないため、かなり時間がかかるので、使い勝手がいまいち良くない。 結局、旅の記録はGoProの方が便利な気がしてる。

テレワーク環境の可視化

2020年3月からテレワーク(Work From Home)が始まり、常時同じ部屋にいることも増えたこともあって、いくつかのデバイス24/7で稼働させることを始めたけど、やりたかったとこまで一旦終わったのでブログにまとめてみました。

現在はこんな感じにモニターの下に置いて使ってます。

f:id:sparkgene:20210508115207j:plain

室温と湿度の可視化

まず最初にやったのが、M5StickCにFreeRTOSを入れて、DHT11センサーモジュールで室温と湿度を収集し、Raspberry Pi 3上で動いているAWS IoT Greengrass v1(v1.11.0)を経由してAWS IoTにデータを送っている。 IoT Coreで受け取ったデータはRuleの設定で、AWS CloudWatchのメトリックスとして登録され、その情報を使ってダッシュボード機能で可視化した。 ついでにAmazon QuickSightでも見れるようにしたかったので、AWS IoT CoreのRuleでAWS IoT Analyticsにデータを送り、Amazon QuickSightに取り込んでダッシュボードを作成している。

アーキテクチャ的には、以下のようになっている。

f:id:sparkgene:20210508162220p:plain

二酸化炭素濃度

部屋を閉め切ってオンライン会議をしていると、頭が痛くなってくることも多く、二酸化炭素濃度を可視化したいと思いつつ、一年近く経ってしまったが、やっと作業をした。

ダッシュボードで可視化するのはもちろんだが、二酸化炭素に関しては最新の情報だけ見れればいいと思い、だいぶ前に購入したM5Paperも丁度あったので、これを使って表示することにした。 色々と情報を収集していたら、同じ様にM5Paperで可視化をしている人がおり、気象情報やアイコンとかは参考にさせてもらった。

note.com

二酸化炭素が表示したい、AWSに溜め込んでいるデータを表示したいということもあり、結局以下のようなアーキテクチャに落ち着いた。

f:id:sparkgene:20210508164834p:plain

センサーデータの収集は、以下の動きに変わった。

  • M5StickCでFreeRTOSのアプリが動き毎秒、温度と湿度をGreengrassに対してPublish
  • サブスクリプションの設定で、M5StickCから来たデータでGreengrass上のLambdaを起動
  • Lambdaは起動されると、MH-Z19BからCO2の値を取得し、3つの値をまとめて、IoT CoreにPublish
  • IoT CoreのRuleでDynamoDBに最新のデータを更新(CloudWatchとIoT Analyticsに送るのは変わらない)

これで、収集したデータをM5Paperから参照出来るようになった。

次に、M5Paperの動きは以下のようにしている

  • 5分毎にAWS IoT Coreに接続し、データ受け取り用のTopic(B)にSubscribe
  • 最新データを取得するようにTopic(A)にPublish
  • IoT CoreのRuleのSQLでDynamoDBからデータを取得し、Topic(B)にre-Publish
  • M5Paperで受信したデータを描画
  • 30分ごとにOpenWeatherMapのAPIから現在の天気情報を取得し、描画

AWSに溜め込んだデータを取得するのに、API Gatewayなど使わなかった理由としては、そのために認証の仕組みを実装するのがめんどくさかったからだけです。AWS IoT Coreにはassume roleの仕組みもあり、一時的な認証トークンも取得できるので、それを使ってAPI Gatewayに認証させるのもやり方としてあるので、実際はそっちのほうが綺麗かもしれない。

M5Paperの描画

canvasは以下のような作りになっており、タイミングによって描画される場所が異なる。

f:id:sparkgene:20210508171518p:plain

  • 起動時に青い領域を描画
  • OpenWeatherMapの情報取得時に、オレンジとピンクの領域を描画
  • AWSに溜め込んだデータを取得した際に、緑色とピンクの領域を描画

M5PaperのソースコードGitHubに上げてあります。

github.com

可視化

CloudWatchのダッシュボードはこんな形。

f:id:sparkgene:20210508173633p:plain

QuickSightのダッシュボードはこんな形。

f:id:sparkgene:20210508173708p:plain

追記 5/11

CO2のモニターを始めて最初のWFHのグラフがこちら。

f:id:sparkgene:20210511092114p:plain

作業している寝室の広さは6畳間で、天井の高さは2.4mぐらい。 頭が痛くなるので、いつも部屋のドアを開けたまま作業を開始しているが、実際にどれぐらい変化があるか見たかったので、午後はドアと窓を閉じて作業をしました。途中、カミさんが荷物を取りに部屋に入ってきたり、トイレにいく以外は閉めっぱなし。

徐々に上がっていくのが確認できたし、タイミングによってはかなり高い数字となっているのもわかる。ということで、定期的に換気をするのが良さそうですね。

追記 9/10

長く運用していたら、表示がだんだんとこんな感じになってきた。

f:id:sparkgene:20210910090506j:plain

リセットすると直る。 f:id:sparkgene:20210910090443j:plain

部分的な上書きだけで更新しているので、今の処理があまり良くないのかもしれない。そもそも、電子ペーパーだから数分ごとに更新する使い方自体が良くないのかもしれないな。

壁掛けテレビを手に入れるために部屋を改造した話

久しぶりに家の大規模な改造を行った。

そもそもこの大規模工事が始まるきっかけは、嫁さんがこの窓枠がいまいち気に入らないと言い始めたこと。 地中海(ミコノス島、カプリ島)っぽいイメージに変えたいと言い始め、それなら壁を漆喰に塗り替えるってことになり、壁を塗り替えるなら(チャンスとばかりに私から)壁掛けテレビにしたいという話になった。

f:id:sparkgene:20201014110654j:plain

元の窓枠と壁の雰囲気

f:id:sparkgene:20201010092341j:plain

木材とかの素材だと加工が難しいし、特に力が掛かる場所ではないこともあり、漆喰を塗ればわからないということで、発泡スチロールを使って窓枠の上部をアーチ状にしてみた。

f:id:sparkgene:20201010150225j:plain

壁掛けテレビを取り付けるために石膏ボードだと心配だし、配線を隠したかったので、元の壁から3cmほど浮かせたところに新しい壁を作ることにした。

角材を両サイドの柱のところに取り付けて、この上に1cmぐらいの板を貼ることにした。また、電源タップでタコ足配線がごちゃごちゃになるのも嫌だったので、必要と思われる周辺機器の数から、コンセントを7口増設。(電気工事士の資格を持っていると、こういった事も出来る)

f:id:sparkgene:20201010164554j:plain

コンセントを差すとアダプターが出っ張るので、新しい壁にコンセントを増設せずに元の壁に増設しておいたので、新しい壁となる板を取り付けるといい感じにすることが出来た。

ここからひたすら壁に漆喰を塗っていくのですが、想像していたよりもかなりザラザラの仕上がりとなり、思ってたのと違うと思いながら、18L分の漆喰を壁に塗り切った。しかし、足りないのでホームセンターに追加の分を買いに行って、それを塗ってみたら質感がぜんぜん違う!ってことになり、よくよく説明を見ると、最初に買った漆喰が外壁用で、後から買ったのが室内用。。

室内用のは想像していた仕上がりのもではあったが、外壁用の漆喰を既に壁の半分以上塗り終わっていたがどうするかと悩んだが、外壁用の漆喰を全部剥がすことにした。(この時点で夜の8時)

全部剥がして、室内用の漆喰を塗りな終えたのが夜中の0時過ぎ。。この日は朝の7時ぐらいから作業をしていたので、体はボロボロでした。

f:id:sparkgene:20201011064800j:plain

翌朝、乾燥した壁を見ると、期待通りの出来となっており、深夜まで作業したかいが有ったと思う。

f:id:sparkgene:20201011085616j:plain

壁についていた照明も雰囲気の違うものに変更し、アーチ部分も漆喰を塗ったのでそれっぽい雰囲気が出るようになった。 壁掛けテレビは、なるべく出っ張る量が少ないように設置したかったので、Sony純正の壁掛けユニットを利用。

上段のコンセントの開口部は広めにしておいたので録画用のHDDデバイスを置いている。

www.amazon.co.jp

f:id:sparkgene:20201011094941j:plain

カミさんの要望で、テレビの後ろからLEDで光らせたいということで、テープ式のLEDを購入してテレビに貼ろうとしたけど、テレビの上 -> 右側 -> 下側と配線するには接続部分のケーブルが短い問題が有ったので、半分に切って延長してみた。 使ったテープLEDは、Alexaにも対応しているので、声で操作できて便利。

www.amazon.co.jp

f:id:sparkgene:20201011171800j:plain

疲れ切っていたので、配線部分の画像がまったくないが、テレビの周辺機器としては、以下を繋いているので、テレビのアンテナケーブルやLanケーブルを別の場所から壁を這わせて持ってきている。

棚も30 x 60の板を買ってきて壁に取り付け。壁の素材を木の板にしているので、こういったものの取り付けも頑丈にできるのが、壁を増設したメリットかなと。

f:id:sparkgene:20201011171826j:plain

暗いところで見ると、ホームシアター感が出て非常に満足である。

テレビは、10年前に買った42インチのブラビアから、55インチのブラビアに買い替えた。

www.amazon.co.jp

途中の作業で、材料が足りなかったりして3回ほどホームセンターに行ったりしたおかげで、まる二日かかった部屋の改造だが、非常に満足度の高い仕上がりになった。

MT-09への乗り換え&いじりメモ

昨年ゼファー750を手放し、知り合いから譲り受けたDucati Sports 1000に乗り換えるも自分には合わず、いろいろ調べてたどり着いたのがヤマハのMT-09。

f:id:sparkgene:20200202105735j:plain

最初はMT-07でも良いかなと思ったけど、SP忠男の試乗会で09に乗ってみたらすごく良くて、その足でヤマハのお店でMT-07と09を再度試乗してみたら、やはりMT-09が良かったので買うことを決めた。パワー的に言えば07でも十分だけど、09の後に乗ったらなにか物足りなさを感じてしまったのが決め手となった。実際のところは純正のMT-09も試乗会で乗ったのと比べると少しアレ?と思うことが有ったけど、SP忠男の試乗会で乗ったMT-09が結構いじってあって、すごく乗りやすかった。もちろんマフラーのサウンドも気持ちを後押ししたのもある。

そこから、しばらく中古バイクのサイトで良さそうな車体を探し、近場の3台を見に行ったけど、一番近くのお店に有った物が、値段的にも状態的にも良かったのでカミさんのOKをもらって、その場で購入。

マフラー

朝一番で納車し、そのまま浅草にあるSP忠男のお店に向かい、「POWER BOX FULL SS」を取り付けてもらった。 f:id:sparkgene:20200202092929j:plain

デカイサイレンサータイプのものではなく、純正のマフラーと同じぐらいのサイズで収まっていたのがカッコよくてこれにしました。試乗で乗ったのには、これのチタン版がついてて、焼けの色合いがカッコよかったんだけど値段もその分高くステンレスの方にしました。

音は十分満足な音で、乗ってて楽しくなる。

ハンドル

自分の慣らしを兼ねて、家 > 奥多摩 > 大月 > 家のショートツーリングに出かけてみたら、お尻がものすごく痛くなることがわかった。シートの問題かなと思い、色々調べてみると、意外とハンドルが広すぎるのが問題で、ライディングポジションが合わずに痛くなる声を多数見かけた。試乗で乗ったMT-09にもエフェックス イージーフィットバーPlusに変えてあり、見た目も良かったので同じものを購入。

これが純正の状態

f:id:sparkgene:20191116092821j:plain

取り外した純正との比較

f:id:sparkgene:20191116095710j:plain

取り付け後

f:id:sparkgene:20191229134415j:plain

交換したらお尻の痛さが低減されました。30年近くバイク乗ってきたけど、ハンドルの交換は初めて。そんなにも影響があるのかと感動した。

クラッチの重さ低減

Sports 1000と比べたら全然楽だけどゼファーと比べると重く感じたので、色々調べるとMT-03のレリーズに交換すると、軽くなるのがわかったので、早速購入して交換してみた(写真撮り忘れた)。 明らかに軽くなった。ただ、クラッチの調整が難しく、完全に握った状態まで握らないとクラッチが切れないのがちょっと不便。テコの原理でレリーズが長くなった分ケーブルをいっぱい引く必要があるので、しょうがない。これを改善したい場合は、レリーズではなくケーブルの間にカムを入れるような方法になり、大改造になるのでやめました。

エンジンプロテクター

もともとエンジンにスライダーが付けてあったけど、もう少し上も守るために、DAYTONAのエンジンプロテクターを購入して取り付けた。

取り付け前(クランクカバーに付いているのが元々付いてたスライダー)

f:id:sparkgene:20200202100017j:plain

取り付け後

f:id:sparkgene:20200202100034j:plain

結構外に飛び出るので守ってくれそうな感じはありますが、出番がないことを祈る。

グリップヒーター

バイク仲間の中では50%以上のシェアで付けられている物がこれで、主に夜のツーリングが多いことから取り付けることに。ハンドル周りはスッキリしててほしいので、外付けのスイッチタイプではなく、グリップにスイッチが付いているキジマのグリップヒーター GH07 を買いました。

MT-09の場合右側のインテーク(もどき)の中に、ACC電源用のケーブルがあるので、それを使うようです。

f:id:sparkgene:20200202100702j:plain

車体側の電装を切ってギボシ端子つけるのは嫌なので、ヤマハ純正のワイヤーリード スポーツ2Q5K-YSK-001-U48を使い、グリップヒーター側はエーモン カプラー2極(ロック式) 110型を取り付ければ、キレイに取り付けられる(ググるとこれが王道の取り付け方法みたい) f:id:sparkgene:20200202100808j:plain

MT-09にはバイザースクリーンが付いてたこともあり、ETCのアンテナや配線など隠すスペースが多いので、配線の引き回しはかなり楽。

アクセル側

f:id:sparkgene:20200202101422j:plain

クラッチf:id:sparkgene:20200202101459j:plain

スイッチの出っ張りが少し邪魔でウインカーのボタンが押しづらそうだったから、そんな操作すること無いし、グリップヒーターのスイッチは上を向けるように付けた。

電源を入れてみて、最大の温度にしたら、しばらくしてヒューズが飛んだ。。 ACCのヒューズは2Aが付いてるけど、最大出力だと2.9Aぐらい必要らしい。サイトを見ると「消費電力:13.5V 7.4W(LEVEL1)~34.8W(LEVEL5)」なので、今の所は5段階のうちLevel 3の出力60%あたりを最大にするしかないかな。 近々ACCの電源を使ってリレーをONにしてバッテリー直から電源を取るように変えるとしよう。

初めての手術と入院

転職しても毎年受けていた健康診断で、何年も前から経過観察となっていた胆のうポリープが、ここ2回10mmを超えたこともあり、大きな病院で精密検査を受けました。 その結果、「切除してもいいかな」って反応で、もう少し様子を見てもいいし、手術でも良いと言う選択肢を与えられたのだが、10mmを超えると悪性になることもあるということもあり、切除することにしました。(10月頃)

特に症状が出ているわけでもなく、急ぎということもなかったので、先生のスケジュールと自分のスケジュールで1月に手術&入院することになり、無事退院してこのブログを書いている。

手術に向けて、CTとMRIも初めて経験することに。

CTは撮影する際に、造影剤を注射するけど、これが血液に入るとすごく熱く感じる。熱さが全身を伝わるのを感じつつ、血液ってこんな感じの速度で流れているんだなーと思っているうちに終了。

MRIは熱くなるような造影剤は無いけど、指示されながら呼吸を止めたり、腹を膨らませたりで30分ぐらいかかって、狭いところが苦手な人ならちょっときついかもしれない。

麻酔科医との面談もあり、手術の前ってやることがいっぱいなんだなと思った。

入院

1週間の海外出張の翌週が入院だったので、出張は長時間飛行機の中にいたりと、病気をもらわないように気をつけながら過ごした。

入院初日は10時半に病院へ。特に検査もなく、自覚症状もないしいつもの体調なので実に暇。そうだろうと思ってたので、ガジェットで遊んだり、仕事したりと一日を過ごす。夕食も食べれたけど、21時から食事&水分の制限が始まり、水分はOS-1しか取れない。しかも、よく朝6時までに1リットル飲み干す必要があり、夜中に何回もトイレに行く羽目に。。

食事は健康を考えられていると思われるような味付けで、考えてみると普段の食事がいかに味付けが濃かったり塩分が多いんだなということを考えさせられた。

f:id:sparkgene:20200123133149p:plain

また今回は短期間だし、子供がお見舞いに来ることを考えると4人部屋ではなく個室を選んだ。費用は高くなるが、結果的に色々と気を使わないので余計なストレスがなく、快適に過ごせたので個室を選んで正解だった。とは言え、個室でもトイレがない一番安いのを選んだんだけど、結果的にはいい効果を生んだと思う。

手術

ドラマで見るように手術着を着てストレッチャーに乗せられて向かうのかと思いきや、手術着を着たら徒歩で向かうと言う流れでちょっと残念な気持ちに。

手術室も天井に研修医や医院長が覗き込むような窓がついているすごいところではなく、比較的地味な感じの部屋。 手術台の上で横になって、手術着を脱いで、酸素マスクを付けて、麻酔の前の薬を入れますと点滴を開始し数秒ぐらいで記憶が途切れた。

次に目をさますのは個室に戻ってきたあたりで、周りがバタバタしながら指に機械をつけたり、血圧測る機械付けられたりするところから目が覚める。 痛み止めの点滴も開始するが、やはりお腹周辺が痛い。特に痛かったのが尿道あたりで、尿意があったらそのまましてくださいと言われるんだけど、出ているのか出てないのか全くスッキリしないし、結構痛い。

術後

手術は午前で終わり、痛みを感じつつベッドでウトウトしながら、嫁さんに術後に取り出した胆嚢を先生が見せてくれて、「あれ、大きいポリープ無いね」な話がされたと聞く。(えっ、俺の胆のう無駄死に?)ポリープの代わりにマリモみたいのが有ったらしい。胆嚢石と呼ばれるもので、最後にくれたんだけど、そこそこな量だったので結果手術してよかったのかなと思います。

それにしても、手術前と大きく違い、手術後はお腹周りが痛くて、力を入れると余計に痛いから、体を起こすのも辛いぐらいでした。 お見舞いが15時からOKになるので、それに合わせて両親が来てくれました。その頃には少しは良くなって、色々と話しをしつつすごし、夕方には子供も来て特に問題なかったのを見せられてよかった。

みんなが帰ったあとあたりに、尿管に入れてた管を外したけど、思ったより長くてびっくり。変な違和感も取れたので早速トイレに行ってみたら、尿道が痛いのなんのってw。

この日は食事が出ず点滴のみで過ごすのだが、夜になって寝ようとするも腹痛と空腹で全く眠れず、人生初のナースコールも体験した。痛み止めの点滴を追加してもらい、やっと眠りについた。しかし、点滴のせいかトイレがメッチャ近くなり1時間おきぐらいに点滴を吊ってるやつを持ちながらトイレに行き、毎回尿道の激痛に耐えて朝を迎えた。

腹腔鏡の手術ということもあり、回復の速度は早く、翌日の昼には5分のお粥を食べ、夜はお粥、翌日には通常食に戻る感じです。オナラもでたし食欲もあり、傷の経過も良好ってことで、手術から2日後の今日に退院することになった。 痛いけど歩くの大事ということで、個室にトイレがなく強制的にトイレの度に歩く必要があったのも早い回復につながるのかなと思いました。

5分のお粥 f:id:sparkgene:20200123143919p:plain

お粥 f:id:sparkgene:20200123143935p:plain

退院朝の通常食 f:id:sparkgene:20200123143959p:plain

感想

手術をしないで済むならしない方が良いと思うけど、不安を抱えたまま暮らすのもアレだったので今回は手術を受けました。この判断が良かったのかどうかは数年数十年経たないとわからない。

お見舞いに来てくれた両親や、連日来てくれた嫁さんにも大変感謝です。 特に手術後は看護師さんの献身的な看護があって術後も安心して過ごせたのは、感謝の言葉しか無いです。

ちなみに、点滴の管って、先っぽが注射針なのかと思ったら、ゴムの管みたいな長いやつが血管に入っててびっくりしました。尿管の管も大きさにびっくりしたりと、そういった想像してたのと違うって話を看護師さんとしながら、医療ドラマを見ているだけでは知らなかったことを色々と経験できたのも良かったと思います。

期待していた入院によるダイエットですが、入院前から1kgしか減っておらず、出張で増えた分が戻ったぐらいですごく残念。。

4日間お世話になった個室 f:id:sparkgene:20200123144031p:plain

M5StackとM5UI.Flowで子供のプログラミング教室#4

今回は他のデバイスからデータを取得して、表示するようなプログラミングを勉強します。

事前準備

M5Stackには様々な外付けのモジュールが用意されています。当初プログラミングの勉強でM5Stackを選んだ理由の一つにこれがありました。

www.switch-science.com

今回は、この中からM5Stack用土壌水分センサユニットを使いたいと思います。

www.switch-science.com

【注意】今回の題材の準備の過程で知ったのが、UI.Flow用のM5GOやM5Stack FIREの場合は、これらの拡張デバイス用のポートが用意されているが、私が使っている通常のM5Stack BasicだとポートAしか無いので、ここで説明する作業が必要になります。(この問題について参考になったサイトはこちらです

M5Stack Basicに土壌湿度センサーEarthをつなげてAmbientに送信するまでの過程 - Qiita

ポートBを持たないM5Stackで使う場合

UI.Flowで使うにはポートBに刺さっていないと使えないみたいなので、Basicで使う場合はGroveケーブルをそのまま使って指すことが出来ません。そこで、M5Stackのバスポートに直接させるように、片側のコネクターを外します。端子がそのままだとあれなので、伸縮チューブで絶縁しておきます。

f:id:sparkgene:20190907123316p:plain

黒=GND、赤=5v、白=アナログの36、黄色=デジタルの26に挿せば使えるようになります。

f:id:sparkgene:20190907123429p:plain

UI.FlowにEarth Unitを追加する

IDEの左側にUNITを追加するためのボタンがあるので、それを押します。

f:id:sparkgene:20190907123750p:plain

Earth Unitを探して選択してからOKをクリックして追加します。

f:id:sparkgene:20190907123853p:plain

そうするとブロックグループのUnitsのところに「アース」が表示され、利用できるブロックが表示されます。

f:id:sparkgene:20190907123928p:plain

これで準備ができました。

課題1 アナログ値を表示する

まず最初に、UIのラベルを追加して、そこにアナログ値を表示するものを作ってみましょう。

f:id:sparkgene:20190907124105p:plain

以上で完成なので実行してみて、ウエットティッシュや水の入ったコップに入れて(電極が見えている部分だけが濡れるように注意すること)みてどうなるかを確認します。

課題2 一定の値を超えたら音を鳴らす

先程の課題で、水に入れたときの数値が確認(私の場合5〜700)できたと思うので、次はその数値を超える場合は音を鳴らすということを試します。

まずは、変数を使って取り出したアナログ値を使い回せるようにします。今回はwaterという変数を作りました。

f:id:sparkgene:20190907124656p:plain

「もし」のブロックを使って判定しますが、「変数>500」という判断をしたいので、ロジックの中から比較用のブロックを使います。

f:id:sparkgene:20190907124845p:plain

あとは、比較のブロックで数値と変数を比較して、条件を満たす(Trueになる)のであれば、音を鳴らすようにします。

f:id:sparkgene:20190907125001p:plain

課題3 一定の値を超えたら音を鳴らしながら画面の色を変える

音だけではなく、視覚的にもわかるようにしたいので、背景色を変えるようにします。

f:id:sparkgene:20190907125117p:plain

画面を塗りつぶした後、ラベルを再表示させないと文字が見えないのでそのようにしています。

これで、外部のセンサーと連動するプログラムを作ることが出来ました。

実際に動いているもの

youtu.be

まとめ

今回は外付けのセンサーと組み合わせることで、センサーとアプリの連携みたいなことを体験してもらいました。Earth Unitは電極間の電気の通りやすさによってアナログ値が変わります。デジタル値のブロックを使うと、一定の通電状態になると入力が「0」から「1」に変化するので、応用編としてやってみるのもいいともいます。

水の種類のよってアナログ値が変わるので、水道水、ミネラルウォーター、水道水に醤油を入れたりと、色々と試してみると子供も楽しみながら、電気と水の関係についても理解が深まる回となりました。

そろそろネタが切れてきたけど、子供は週に1回だけだとなかなかプログラミングの理解が進まないようなので、ある程度自分でできるようになるまで、ここまでの内容の応用編をやるのがいいのかなと思います。

プログラム教室の過去記事

sparkgene.hatenablog.com

M5StackとM5UI.Flowで子供のプログラミング教室#3

今回は今まで勉強した内容を応用しながら、じゃんけんゲームを作ってみたいと思います。

準備

じゃんけんしたいので、グー・チョキ・パーの画像を画面に表示したいです。 素材は、いらすとやの素材を使います。 グー・チョキ・パーの素材とじゃんけんしている姿の素材

M5StackはJpegの画像が表示できて、画面の解像度は320 x 240ということなので、じゃんけんしている子供の画像は、横幅を320に縮小します。この時ファイルサイズが大きいと表示が遅かったり、出来なかったりしたので、10k以下にします。

グー・チョキ・パーは、自分が出したものと、プログラムが選んだものを表示したいので、横幅を120になるように縮小します。

GIMPとかでjpegファイル作ってもM5Stackに表示できずにハマっていたら、こちらのブログConvertimageを使えば表示できる画像に変換できるとのこと。

これで、4つの素材が用意できました。ファイル名は10文字までという制限があるので短くします。

IDEの右上にあるアイコンをクリックすると、M5Stackに画像を転送できるので、ここから作成した画像を登録します。(SDカードに保存してそれを参照させる方法もあるみたい)

f:id:sparkgene:20190901151552p:plain

Resource Managerの「Add Image」ボタンをクリックして、4つのファイルを転送します。

f:id:sparkgene:20190901151815p:plain

課題1 画像を画面に表示する

UIエディタのところで、画像のアイコンをドラッグして、好きな場所に置きます。

f:id:sparkgene:20190901151950p:plain

置いたアイコンをクリックすると、ポップアップが表示されて、画像の設定でじゃんけんしている画像に変更します。これをTop画像とします。

f:id:sparkgene:20190901152125p:plain

次に、ラベルを書くボタンの上に配置して、「rock」、「scissor」、「paper」と入力します。(フォントファイルを用意すれば日本語も表示できますが英語の勉強も兼ねて、全部英語ですすめます)

f:id:sparkgene:20190901152522p:plain

次に、じゃんけんの画像を表示するイメージを配置します。プログラムからこの画像を変更するので、わかりやすいようにイメージの名前を「img_me」にしておきます。

f:id:sparkgene:20190901152702p:plain

ここからがプログラムを組んでいきます。 Setupでは、じゃんけんの画像を非表示にし、Top画像を表示します。ボタンを押されたら、Top画像を非表示にしてボタンに合った画像を表示します。

f:id:sparkgene:20190901153555p:plain

これで実行してみると、押したボタンに合わせて画像が変わります。

課題2 コンピュータ側のじゃんけんの手を選びます

M5Stackと対戦できるゲームなので、相手の手を表示するように画像をUI上に追加します。画像の名前は「img_m5」にします。

「変数」->「変数の作成」を押すと、変数名を入力できるので、「m5_sign」とします。

f:id:sparkgene:20190901154943p:plain

そうすると、作った変数のブロックが表示されるので、「m5_signに〜をセット」をエディタに置きます

f:id:sparkgene:20190901155119p:plain

この変数にランダムな値を入れて、グー・チョキ・パーを表示するのですが、ボタンを押す度に同じ処理をすることになるので、この処理には「関数」を使います。関数名は「m5_janken」にします。

f:id:sparkgene:20190901155914p:plain

次に変数にランダムな値を変数に入れるので、「数学」->「〜から〜までのランダムな整数」を使って、1〜3までの整数をランダムに発生させ、1=グー、2=チョキ、3=パーというルールとします。 数字の入力は、「数学」の一番上にあるブロックを使います。

f:id:sparkgene:20190901155541p:plain

これらを組み合わせるとかんな感じになります。

f:id:sparkgene:20190901160123p:plain

この変数の値を元に、表示する画像を変更したいので「もし」を組み合わせます。そして、変数と数字を比較して、画像を切り替えます。

f:id:sparkgene:20190901160459p:plain

これで、対戦相手側のロジックが出来たので、ボタンを押したら呼ばれるようにします。先程関数を作ったときに「関数」->「m5_janken」が選べるようになっているのでそれを使います。

f:id:sparkgene:20190901160729p:plain

出来上がったプログラムはこちら。

f:id:sparkgene:20190901160849p:plain

これで、じゃんけんすることが出来ました!

課題3 勝ち負けで音を鳴らします

勝ち負けを判定するには、自分の手と相手の手を判断する必要があります。そのためには、自分の手も変数に入れておいて、後で比較するのに利用します。この変数を「my_sign」とします。

f:id:sparkgene:20190901161225p:plain

次に、判定を行う処理を関数にまとめます。この関数の名前は「judge」とします。関数の中では自分の手と相手の手を比較して、勝ったら高い音、負けたら低い音を鳴らします。あいこは何もしません。

f:id:sparkgene:20190901161947p:plain

この関数をボタンを押したら呼ばれるようにします。

f:id:sparkgene:20190901162033p:plain

実行をすると、M5Stackでじゃんけんゲームを遊べるようになりました!

まとめ

今回のプログラミングを通して、以下のようなことを勉強しました。

  • 画像をUIで利用すると、文字だけよりもわかりやすいUIが作れる
  • 変数という何らかの値を入れておく物の使い方
  • 繰り返し行なうような処理は関数として作ると便利
  • 複数の条件を使いたいときは「もし」の中に「もし」を入れると作れる

プログラム教室の過去記事

sparkgene.hatenablog.com