社会の底辺

電子工作の底辺からどーもー

Micro Mouse Advent Calendar 2019 5日目 哺乳瓶とモンスターの話

この記事は

Micro Mouse Advent Calendar 2019 - Adventar

の5日目の記事です。

これはクラシック、マイクロ問わず、マウス競技に参加している方々が、そこで得た技術や参加を通して感じたことを各々がブログにまとめるものです。

 

昨日のH.S様から恐縮ながら引き継ぎます。

ロ、ロジスティック回帰ぃ〜!?

と聞いて僕はなんかの必殺技かな?って思ってしまいました笑

すごく丁寧でわかりやすかったです。

 

皆さん、マウス界隈最底辺層からごっきげんようです。

早稲田にて細々と暮らしていますジャッジーです。

初めましての方は忘れてくれてかまいません。

f:id:WMMCsaiteihen:20191202183951j:image

これは可愛い○ンコ。なんとなく載せた。

 

今回はそらさん(@sora_siro1)からのお誘いを受け、自分の備忘録について書かせてもらいます。

(↓この並びでよくブログ書いたなワイ。)

f:id:WMMCsaiteihen:20191202080757j:image

 

このAdvent calendarの中でまず間違いなく最弱の僕が書くクソブログなので今日はAdvent calendar実質無しです。

絶対的休憩回。

もしお読みいただけたならご指摘いただけますと幸いです。

流れ

  1. ネタ探し
  2. 序論
  3. 本題
  4. 実装(哺乳瓶の話)
  5. 終わりに
  6. 宣伝

[ネタ探し]

10月ぐらいにDCマウスのプログラムを7割程度書き終えた。そんな作業の中で最短経路導出で、「袋小路のところを消すにはどうしようかなぁ」とかを自分で考えるのはやはり難しく、

他人様のものが賢すぎて泣いた。

 

とまぁ組み込みプログラムを書く上で、まずはじめてのことが多すぎて右も左もわからぬ…となったので、そんな悩んだ(現在進行)ことの中から何か書こうと思った。

 

【序論】

近年、身の回りでレジスタ等を知らない人口が増えつつあります。かくいう自分もそうです。

ファームウェア化したライブラリが多数台頭しつつあるからだと思われますが、

ネット社会の現在、強い人のブログが数多く、中にはソースコードまであげてくれる方がいるため(本当にありがたい)、

ブログを見てコピペで済むのです。

これでは理解しないで終わらせてしまいそうです(低い方に流れる僕は特に)

少なくともコピペで動くならそっちが楽だから流れてしまうでしょう。理解せずコピペで動かして喜んでいるうちは僕は自分に嫌悪感を覚えてしまいます。というか、モヤモヤする?

コピペしたとしても理解はしたいという頑固さがどうしても除しきれません。

 

あと、同期とかに、☆☆の使い方教えてと言われた時に、

ワオ「○○さんのブログに書いてあるよ」

で済まさざるを得ない状況は回避したい。

 

自分で!きちんと!ここをこうしてこうしてこう!

と説明できるようになりたいのですね。(自己満足)

いままで なぁなぁで済ませてきたものを断ち切ってみたいなぁとふと思いました。

 

そこでまずは

ジャイロセンサーをお勉強してみようと思いました。

 

はぇー長いなこのブログと思ったあなたへ、

ここからは読む必要皆無なので以下のブログを読みましょう。ここから先は僕の自己満足です。

 

⭐︎圧倒的神的ブログ⭐︎はこちら

STM32 + HAL でMPU-6500と通信する | Sora's Activity Record

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

はい。

読者第一次フィルタリング終了〜。

ここから先は結構アホなことが書いてあるのと時間がかかります。やめといたほうがいいです。読むなら最後の引き継ぎだけ。

[本題]

ジャイロセンサー、とは言ったものの、

今回使うジャイロセンサーはデジタル角加速度センサーのICM20689です。

→invensenseサイトよりhttps://www.invensense.com/products/motion-tracking/6-axis/icm-20689/

 

こちらのジャイロは秋月や千石で取り扱っていないのでマルツでアメ公から輸入します。輸入に際して「何の用途で使うのか」、「自分の身分等」を英語で書類に書かなければならないので(マルツから取り寄せる場合はマルツからメールが届きます)面倒です。(皆さん英語での住所は日本語での住所の並びの逆から書くんです。間違えないでね(経験顔))

 

従って、ICM20689は入手性の点ではちょっとお勧めしません。

 

また今回はSPI通信を用います

理由はSPI通信の方が通信速度が早いらしいからです。(単細胞生物レベルの思考)

 

はやいと言ってもどのくらいの差があるのか、

以下のブログ↓より抜粋すると、

電子工作初心者のために シリアル通信方式を分かりやすくまとめてみた - Qiita

 

【通信速度】

I2C通信→100kbps〜1Mbps

SPI通信→数Mbps

 

と表記されています。皆さんご存知だとは思うがbpsとは、「bit per second」の略であり、

1秒にやりとりできるデータ量のことです。

 

つまり、単純に考えるとSPI通信の方が少なくとも数倍速いことになります。

 

 

【実装】

では実装のための理解からです。

https://www.shtsno24.tokyo/2019/02/stm32f411rempu9250spi.html?m=1

上記リンクのMiceのshtsさんのブログがわかりやすかったので参考にしました。ありがとうございます。

 

まずはデータシートの、レジスタマップを見てみましょう。

たくさんありすぎて何を使えばいいのかすら僕はわからなかったです。

よくよく考えたら"ジャイロセンサー" なんて使ったことはないし、そもそも使ったことある人が周りにほぼいなかったので大人しく自分で訳してみることにしました。

まず大別してみましょう

(16進数でレジスタ番号を書くことにします。)

データシートhttp://www.invensense.com/wp-content/uploads/2017/08/ICM-20689-v2.2-002.pdf?ref_disty=digikey

を見てみると、

 

 

①00,01,02,0D,0E,0F

 ここはセルフテストの時にデータを格納する?レジスタのようです。セルフテストとは、ジャイロをハードにセットした後でも、ジャイロをいじることなく正常に動いているかを判別できる確認作業のことらしいです。

 

②13〜18

 ここはセンサー値から直流バイアスを取り除くためのレジスタです。直流バイアスとは、ジャイロセンサーを使うときに弊害となる、ドリフト現象の主要因の一つです。

バイアス分のオフセットを加えてセンサー値としてくれるレジスタです。
 

うーん適度にリセットすればドリフトって解消できるって思ってるんだけどそれで良いのかな?

 

③19

「 内部サンプルレートを分割してサンプルを生成する(レジスタCONFIGを参照)。

 センサーデータ出力レート、FIFOサンプルレートを制御するレート。

 

 注:このレジスタは、FCHOICE_Bレジスタビットが2’b00である場合にのみ有効です。

 (0 <DLPF_CFG <7)。」

 

って書いてあります。サンプルレートってなんでしょうか?そうです。センサー値をサンプリング(取得する)速度だと思います。

おそらくこれは1kHz設定が多いような気がします。

(1kHz ならば1秒に1000回サンプリングします。)

要するに、上の「レート」は速度のことです。おそらく。ボードレートって聞いたことありますよね。それと同じですね。

 

1A〜1D

 ここはConfig関連レジスタです。

Configは構成と訳されますがまぁそんな感じです。(適当)

おそらくここのレジスタはいじくるでしょう。

 

⑤1E

 ここはノイズフィルタリング関連のレジスタです。低電力でジャイロを動かしつつ、ある程度のノイズ除去をする設定ができそうです。ノイズ除去に平均化を使う?ようですね。

現在、ノイズを最高に除去しつつ低電力で動かすのは不可能なので、ユーザーが低電力を取るか、ノイズ除去をとるかで選ばなければなりません。そのためのレジスタでしょう。

 

⑥20〜22

 各軸方向の動作割り込み閾値を有効にするレジスタのようです。はい。

(説明がめんどくなってきた顔)

 

⑦23

FIFOバッファの有効化です。

FIFOとはFirst in First out  のことで、

先に入れたデータが先に出てくるってだけです。バッファとはデータを入れる箱のことです。なんでバッファって言うんでしょうね。

知らね。

 

 

⑧36

 ファイル書き込みを非同期処理しようってやつですね。java scliptとかでいうasync,awaitと同じです。データ消えないよーにってこと。

あー説明適当になってきた。

 

⑨37〜39,3A

 INTピン。要するに割り込み用。

使わなくて良さそうとか思ってる。ダメなんかな。

DMPって何?知らない。

 

 

⑩3B〜40

 加速度の測定用。

 

①① 41〜42

はー絶対使わないから説明省きます。温度使わないっしょ?

 

①②43〜48

 各軸のジャイロスコープの値を測るらしい

 

①③69

アクセラメーターインテリジェントコントロール。はーい賢かれ加速度センサーってことですね。(多分ちゃう)

 

①④6A

 なんか色々ユーザー設定するらしいけど多分使わない

 

①⑤6B,6C

 電源系?パワーマネジメント。絶対使うし最初にやんないとなんも反応してくれないと思う。

 

①⑥72〜74

先述したFIFO 関連。めんどくてデータシート読んでない。ごめんなさい。

 

①⑦75

 このレジスタは、ジャイロと正しく通信できていれば特定の値が返ってきます。これは使います。まずジャイロとの通信がうまくいっているかを確認せねばなりませんから。

(ここの説明が丁寧なのは最初に書いたから)

 

①⑦77〜7E

 オフセットをキャンセルするためのレジスタ。 HとLは上位ビットと下位ビット指してる。はい。

 

と分けられます。

ガバガバながらレジスタの中で、どのレジスタはいらないし、必要なレジスタはどれと言うことがわかりました。このアドレスに行けばよいことがわかったので

あとはやるだけです!!通信方法の設定等は省きます。書く時間が普通になかったです。

 

まぁ同様にして、色々あって実装やってません。はい。そらさんのブログ読んでください(あれぇ〜矛盾〜)

 

 

【モンスターと哺乳瓶】

その代わりに哺乳瓶にモンスターを入れると不味く感じる理由について簡単考察します。

ナヴィエストークス方程式込みのシミュレーションなんてやれませんし解けませんから厳密ではありませんが勘弁してください。

 

モンスターを非圧縮性流体と仮定して、流量一定のもと、水平にした哺乳瓶の突起の先の穴をスロート部分とモデリングします。

 

この先端部と、哺乳瓶内のでかい円柱部分の2点でベルヌーイ式を立てますと、

(各物理量の説明は省きます)

f:id:WMMCsaiteihen:20191204144820j:image

 

となります。

ここで流量について、

Q(流量)=A(断面積)×V(流速)=const

の式より、先端部の方が断面積が小さいですから、流速が速くなります。

すなわち、ベルヌーイ式の速度ヘッドが高くなる。ということです。

今回哺乳瓶を水平に保っていますから、位置ヘッドは同じです。

まとめると、

 

  1. 速度は上がっている
  2. 位置ヘッド(位置エネルギー[m])が同じ

 

ですから、ベルヌーイ式より圧力ヘッドが下がります。

f:id:WMMCsaiteihen:20191204144829j:image

液体に溶ける気体の量は圧力が下がると減りますからおのずと炭酸は抜けてしまいます。

(参考として以下の図をご覧ください。

これは窒素ガスのデータであり、二酸化炭素のデータとは異なりますが、一般に圧力の低い方が液体への気体溶解度は低くなる傾向が掴めていただければここでは良いです。)

 

f:id:WMMCsaiteihen:20191204095424j:image

(引用:2013-190283号 高圧状態の水溶液に溶解している気体の溶解度を測定する方法および装置 - astamuse)

 

また、赤ちゃんクオリティを高い次元で再現するべく両手で包むように哺乳瓶を持っていますから手の熱がモンスターに伝わります。液体は温度が高いほど気体を溶かしにくいので、これも炭酸の溶解量の減少につながります。

 

簡単なモデリングしかしてませんが、以上の2点だけでも炭酸が抜けていることがわかると思います。炭酸が抜けると、舌の上で液体に触れる面積は多くなりますから普段以上に甘ったるく感じるでしょう。特に化学物質感が強まります。また、炭酸の爽やかさも抜けています。

これらが哺乳瓶でモンスターを飲んで不味くなる原因かと考察します。

 

f:id:WMMCsaiteihen:20191202080636j:image

(あ、あの、モンスター、レッドブルを飲むときにストロングゼロのレモン入れると馬鹿美味しい液体となるのでオススメです…)

【終わり(仮)に】

ここまで読んでくださった人はクソつまらない、既知の記事にわざわざお時間をとってくださった方だとおもいます。感謝してもしきれません。ありがとうございました。

 

【宣伝?】

ところで皆さんはIotという単語、ご存知でしょうか。「Internet of things」 の略です。最近話題ですよね。私はこの単語自体は知っていましたが、「難しそう」の一言で距離を置いていました。

簡単にいうと、モノとモノを繋ぐことで広範囲に使える。こんなやつです。

と言ってもわからないと思うので以下のリンクから飛べる動画を見て概要を掴んでもらえると幸いです。(→YouTubeの動画BLEからのSlack通知 – blog.obniz.io)

 

 

見ていただけたでしょうか。難しそうですよね。デバイスがセンサー知覚したことをwifi経由で送り、それを受け取ったら指定されたイベントとしてSlackに通知させる、これだけですごく難しそうです。

 

ところが、こんなIotモノ作りを簡単にするモジュールがあるんです。

そのモジュールを「obniz」と言います。

下の画像のやつです

 

f:id:WMMCsaiteihen:20191205003235j:image

 

こちらのobniz、マウス同様Advent calendarを実施しており、参考記事もたくさんあります。

また、ホームページ自体にも大変充実したチュートリアルがついています。プログラムを書くのもGUICUI両方完備の優れものです。

是非その充実さを見て感じ取ってください

(→ホームページobnizだけで誰でもIoTを今すぐ実現 | obniz)

 

 

マイクロマウス  オフシーズン、新しく楽しいモノ作りのために遊んで行きませんか?

興味出た方は是非お買い上げいただけると幸いです。

 

 

【次回予告】

明日のAdvent calendarは!

芝浦工大のSRDC部長の小鳥さんです。

よろしくお願いします。

 

ブログリンクは以下に!

とりかご

タイトルは「今年の振り返りと来年の話」

だそうです。

みんな、明日も

絶対見てくれよな!(ぴっぴかちゅう)

 

 

…。

今日のAdvent calendarがひどい(Advent calendar他の人全体が強い人なのでまぁマジモンの休憩回だと思ってもらえると幸いです)

ので申し訳ないですが明日の素晴らしいブログにご期待ください!

 

では!みなさんよいお年を!

…え?クリスマス?なにそれ知らない初めて聞いた。