harattaMouseの小部屋

組み込みプログラミングが趣味な人のブログ

【トピック】ToF センサと LiDARセンサの違いについて調査してみた! ~Lidar vs radar vs sonar の違い~

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

身近なところでも、ちらほら聞くようになったToFセンサ。ToFセンサモジュールとしてはVL53L0Xが有名ですよね。

LiDAR関係で活用されているToFセンサですが、調査してみると自動運転以外にもスマートフォンやドローンなど様々な分野で利用されており、それぞれの分野からの情報が混ざり合って、全体像が掴めません。そこらへんを素人ながらまとめてみています。

特にToFとLiDARの違いは理解しづらいです。

皆さんは ToFセンサとLiDARとの違い、説明できますか?

それでは解説していきましょう。

 

おまけとして、測距センサのRadar(レーダー),Lidar(ライダー),Sonar(ソナー)の違いについても簡単に調べてきました。興味のある方は最後までお付き合いください。

※素人が個人で調べてまとめた内容になっております。間違い等、お気づきの方は指摘していただけると幸いです。

f:id:harattaMouse:20200910203002j:image

 

ToFセンサとは?

ToFセンサとは、Time of Flight の略称で、物体までの距離をレーザー光で測定するセンサーになります。秋月でもToFセンサモジュールを取り扱いがあり、手軽に入手できるようになりました。

原理

名前の通り、"光の飛行時間"を測定します。レーザー光を発光したタイミングと、フォトダイオードにて受光したタイミングを計測し、距離を算出します。つまり、光の飛んだ時間を計測し、距離を割り出しています。

f:id:harattaMouse:20200813101108j:plain

図. ToFシステム (引用:浜松ホトニクス https://www.hamamatsu.com/jp/ja/applications/lidar/index.html )
光の飛行時間を測る技術(TDCの活用)

また、実際に計算してみると分かるのですが、光の飛行時間を測定するのでかなりの細かさになります。

具体的に1cmの距離を測定する場合には 66psと計算でき、ピコセック単位の時間計測技術が必要になることが分かります。

f:id:harattaMouse:20200909081407j:image

そこでToFセンサではこの微小時間を計測するため、TDC(Time to Digital Converter)という回路が活用されています。

TDCにSTART信号(レーザー光発射タイミング)とSTOP信号(反射波受光タイミング)を入力すると、時間に応じたデジタル信号が出力されます。これにより微小時間を計測しているのです。

Texas Instruments では TDCのICを出しているので、TDCの詳細を知りたい方はそちらを参考にすると面白いかも知れません。

f:id:harattaMouse:20200827075439j:plain

図. Time to Digital Converter のIC 例

(引用: https://www.tij.co.jp/product/jp/TDC7200 )

LiDAR とはどういう関係?

ToFと合わせて良くみるキーワードとしてLiDAR(Lidar)があります。LiDARとはLight Detection and Rangingの略称で、これもまた物体との距離を測定する技術です。レーザー光を対象物に照射し反射光を観測することで距離測定を行います。

ToFとLiDARの両者の違い

両者の違い それは、LiDARは"レーザー光の反響によって距離を測定する技術“全般を指す言葉"で、ToFセンサは"LiDARのToF方式のセンサ"とLiDARの分類を指す言葉なります。

f:id:harattaMouse:20200712112529j:plain

図. LiDAR技術の分類

Lidarの変調方式としてはパルス波を送信するToF方式と、FM波を送信するFMCW方式に分類されます。FMCW波では射出するレーザー光を工夫して、距離だけでなく速度検知も同時に行えます。

調査した中では、現状のLidarはToF方式がよく出回っているようです。

※LiDARと言えば自動車の自動運転技術ですが、自動運転技術に利用されるLiDARには、ToF方式のみならず、近年はFMCW方式の採用も検討されているようです。

一般製品上の ToFセンサとLiDARスキャナの違い

ただ定義としては上記のように分類されますが、一般的の製品の認識は少し違います。LiDARと呼ばれるものはあるエリア全体を見渡せる製品、対して、ToFセンサは、ある離れた一点との距離を測る製品で区別されています。

f:id:harattaMouse:20200909223327j:plain

図. 一般製品上のToFセンサとLiDARスキャナの区別

そのため、LiDARと表記されてあってもToFセンサを利用していない製品は、周囲スキャナとしての意味でLiDARと呼称しているケースになります。LiDAR製品の使用センサには気を付けましょう。

 

身近な応用例(ToFセンサやLiDAR技術)

LiDARには様々な応用例が見受けられます。多様な応用例を紹介しましょう。

スマートフォンタブレットの例

ToF方式のLiDAR技術に利用されている身近な例では iPad Pro です。iPad Pro シリーズに搭載されたLiDARスキャナにはToFセンサが使われています。他にも最近のスマートフォンに採用されることが多くなってきています。

f:id:harattaMouse:20200715222935j:image

iPad Pro の例

下記の写真のように整列された赤外線レーザー光を照射して物体との位置関係を把握することができます。iPad Pro の照射密度は比較的粗いようですね。

f:id:harattaMouse:20200816121929j:plain

図. iPad ProのLiDARの照射密度
(引用: iFixit https://youtu.be/xz6CExnGw9w )

ドローン の例

ドローンでの応用分野は広く、木々や地形をスキャンする用途や、地上までの距離を測定する 対地センサーに利用されている例もあるようです。

f:id:harattaMouse:20200820214158j:plain

図.DJI MAGIC AIR 2 の 対地センサー (引用: iFixit https://youtu.be/9Uy9QNidi1U )

f:id:harattaMouse:20200910225304j:plain

図. Lidar による木々や地形のスキャン画像

( https://enterprise.dji.com/jp/news/detail/how-lidar-is-revolutionizing-mapping-and-geospatial-data )

M5Stack製品のAtom Fly にもToFセンサ(VL53L0X)が採用されていました。

f:id:harattaMouse:20200812120313j:image

 

ToFセンサ(VL53L0X)の例

冒頭でもお話ししたVL53L0XはSTMicroが発売しているToFセンサです。シリーズ品として、VL53L1Xがあります。(性能がVL53L0Xよりも高性能。)

発光受光かつ、距離計測まで、パッケージ化してあり、I2C通信によって 計測値をデジタル値で取得することができます。

発光・受光素子は VCSEL(Vertical Cavity Surface-Emitting Laser) と SPAD(Singe Photo Avalanche Diode) です。VCSELはレーザー光を発光しますが波長は940nmと赤外線の波長です。

f:id:harattaMouse:20200705122412j:image

製品のスペックを確認すると、測定可能距離は、最大1mで、分解能は1mmです。

 

【おまけ】Radar(レーダー), Lidar(ライダー), Sonar(ソナー)の違いについて

Lidar調査のついでに調べたいものがありました。それがRadar(レーダー)、Lidar(ライダー)、Sonar(ソナー)についてです。

調べて初めて知りましたが、三者は名前が単に似ているのではなく、技術的に似通っているために名前が似ているようです。

三者とも、反響を用いる測距センサ技術になっています。 Radar(レーダー)はRadio Detection and Ranging の略で、Lidarがレーザー光を使用するのに対して、Radarは電波を利用します。Sonar (Sound Navigation And Ranging) は超音波を利用することで、対象物からの距離を測定しています。

以上の関係の対応表を作成してみました。

f:id:harattaMouse:20200908221657j:image

波長順に並べてみました。Sonarの超音波は水中で減衰することなく波を伝えられるので水中で積極的に利用されています。

RadarとLidarは共に電磁波を使用していますが、波長の長さによって、透過できる素材が変わってきたり、電磁波の飛ぶ距離、検出できる最小距離(解像度)が変わってきます。比較的に近距離で高分解能を選ぶ用途はLidar、低分解能でも遠距離を選ぶ用途はRadarを用いられているようです。

まとめ

今回はToFセンサとLiDARについて調査してまとめてみました。

LiDAR技術は、自動車の自動運転技術や最新スマホのみならず、ドローンやARに活用されていることが分かりました。

個人的にToFセンサとライダー、レーダーと、実に紛らわしい部分がクリアになり満足しています。

皆さんの技術知識になれば幸いです。

 

次の記事でお会いしましょう!

 

【M5Stack】ビープ音を鳴らすlibraryを作ってみた!

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

 M5Stackのスピーカーを利用して、ビープ音を作ってみました。案外webを探しても、 タイマーを使ったM5Stackのビープ音の参考記事がなく、今回素人ながらお手軽に使えるビープ関数を作りました。

概要としては、ESP32のタイマー割り込みを利用して ビープ音を生成します。サンプルコード(GitHub)を公開しますので、参考にしてみてください。

Arduino IDE のライブラリマネージャーにも登録されました!(M5Stack_SimpleBeep)

f:id:harattaMouse:20200810231025j:image

 今回作成したビープ音

今回作成したものはこちらになります。

今回は、音量、発振周波数、ビープ時間、が指定できるbeep関数を作成しました。

ダウンロードはこちら↓

Arduino IDE のライブラリマネージャ : "M5Stack_SimpleBeep" で検索.
GitHubhttps://github.com/haratta27/M5Stack_SimpleBeep

 

ESP32のタイマー割り込みについて

今回のビープ関数は、タイマー割り込みを利用します。ESP32のタイマーは4スレッドになりますので、他の処理でタイマーを使う場合は、リソース不足に気を付けましょう。

他の処理で タイマー割り込みを使う際は、同じスレッドを利用しないようにしてください。今回のソースコードでは スレッド0 を使用するように設定してあります。

参考< https://lang-ship.com/blog/work/esp32-timer/ > ESP32のタイマーについて

M5Stackのスピーカー回路

スピーカー回路を説明すると、ESP32のDAC端子がスピーカーアンプに入力されています。また、その入力はコンデンサの直列接続されているので、交流入力が適切だと思います。

f:id:harattaMouse:20200806210701j:image

ESP32のDAC分解能は8bitなので、256の半分 128を中心に振幅を決めれば音量を調節できます。

詳しくはこちらの記事が参考になりました。

参考< https://www.mgo-tec.com/blog-entry-beep-sound-speaker-m5stack.html > M5Stackの内蔵スピーカーからBeep音を出す実験

ビープ関数の使い方

使い方ですが、ビープ音を生成するためにinit関数を実行し、ビープ音を鳴らせたいタイミングでbeep関数を実行させるだけです。

f:id:harattaMouse:20200810112123j:image

ビープ関数の設定項目

beep関数の引数には、音量vol、発振周波数freq[Hz]、ビープ時間duration[ms] が設定できます。

f:id:harattaMouse:20200806203910j:image

音量 vol は 0~127 の範囲になります。目安は 2~8 ぐらいでしょうか? デフォルトで5と設定しています。大きくするとかなりの爆音になりますのでオススメはしません。

サンプルスケッチ

BeepSpeaker.ino

ボタンAを押すと"ド"、ボタンBを押すと"レ"、ボタンCを押すと"ミ"がビープします。なお、ボタン押しの有無はメインループで監視しています。

gist4b5f6ec5f4f0153da2011de417cc22ef

まとめ

ESP32のタイマー割り込みを利用して、 M5Stackでビープ音を鳴らしてみました。手軽に使えるように作ったつもりです。活用してもらえると嬉しいです。

※プログラム作成後に知りましたが、M5Stack Library のBeep関数でもv0.3.0以降のバージョンで音量調節ができるようです。

【丁寧に解説】M5Stack 開発環境構築 〜Arduino IDE から VSCodeのArduino拡張機能 導入 まで〜

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

今回は M5Stackの開発環境の導入をチュートリアル形式でまとめて見ようと思います。
解説範囲は Arduino IDEのインストールからArduino for Visual Studio Code(以下Arduino for VSCode)の導入までです。

Arduino for VSCode まで導入できると、快適なコード編集環境になるのでオススメしています。ぜひ導入してみてくださいね。

 

この記事ではこんな方にお勧めです。
・1からM5Stackの開発環境を整えたい方
・快適なコード編集の環境にしたい方

 (Arduino-IDEからアップグレードできます。)

 

M5Stackを持っていない方はこちらの記事を参考にしてみてください。

harattamouse.hatenablog.com

 

次回の予定として、バージョン管理システムGitの導入チュートリアルも計画しています。

最新記事の情報を入手したい方は @harattaMouse のフォローしていただければと思います。

 

それでは、本題に移っていきましょう!

f:id:harattaMouse:20200503153301p:plain

 

M5Stack の開発環境について

まずは、M5Stack の開発環境についてです。M5Stackの開発環境は、複数用意されています。それぞれがどのような立ち位置であるか分かりずらかったので、簡単に図にまとめてみました。

f:id:harattaMouse:20200329181836p:plain

図. M5Stack の開発環境

M5Stackの開発環境は大きく分けて3種になります。ardiuno IDE、UIFlow、Micropython があります。現在、M5Cloudは 閉鎖されており、UIFlowをオンライン環境として公式は推しているので、Micro pythonはやらない方が無難だと思います。

今回は、以上の中の Arduino-IDEの開発環境と Arduino-IDE を拡張した Arduino for VSCode を解説していきます。

 

Visual Studio CodeArduino-IDE の関係

f:id:harattaMouse:20200412161103p:plain

図. Arduino-IDEVisual Studio Code の関係


 Arduino-IDEArduinoを始め様々なボードを開発でき、共有できる開発環境です。Arduino-IDE で プログラムの編集やコンパイル、ボードへの書き込みができ、このツールで開発が完結しています。
 しかし、Arduino-IDE の弱点として、ソースコードの編集機能が必要最低限しかないことがネックでした。(筆者は 関数の定義元に飛ぶ機能ができなかったのが辛かった。)

一方、Visual Studio Code(以下VSCodeと略す)は、Microsoft社が開発したオープンソースの多機能なテキストエディタです。2017年に Microsoft公式 が VSCode拡張機能Arduino for VSCode をリリースしました。これを利用すれば、Visual Studio Code にある編集支援機能、IntellSense機能やマルチカーソル機能を利用しながら 快適にArduino 開発ができます!

 

チュートリアルの説明

下記のような環境にて、チュートリアルを進めていきます。

・PC  Windows 10 Home
・M5Stack 製品
(例ではM5Stack Basic ですが、M5Stack Gray, M5StickCなど何でも構いません。)

まず土台の①Arduino-IDEをインストールし、②Visual Studio Codeをインストールします。最後に③拡張機能を追加して環境構築完了です。

f:id:harattaMouse:20200412161651p:plain

図. 今回の導入の流れ

すでにArduino-IDEを導入済みの方は②から進めて行ってください。

それでは、M5Stack の 環境構築していきましょう。

 

参考:解説動画も 作りました! 動画で学びたい方は是非!こちらです↓


M5Stackの開発環境を整えよう!【Arduino IDE編】

 


M5Stackの開発環境を整えよう!②【VSCode導入編】

 

Arduino IDEの導入

1-1 Arduino IDE の インストール

まず、Arduino IDE を インストールします。

Arduino IDE のページ Arduino - Software からダウンロードしましょう。
Installer版、Zip版、App版 とありますが、Installer を選択します。

f:id:harattaMouse:20200402203643p:plain

図. Arduino-IDE DownloadPage (select Installer)

ダウンロード前に、Arduino-IDE 開発への支援するか確認があります。
支援したい方は「Contribute&Download」を選択。ダウンロードだけなら「Just Download」を選択。

f:id:harattaMouse:20200402204417p:plain

図. Arduino-IDE 開発への支援

Arduino-1.8.12-windows.exe」(←これがInstaller) がダウンロードされたら、起動します。

Arduino-IDEのインストールをします。「I Agree」を選択。

f:id:harattaMouse:20200412203534p:plain

図. Arduino-IDE のインストール (1)

インストールするコンポーネントを選択します。何もいじらず、「Next」を選択。

f:id:harattaMouse:20200412203826p:plain

図. Arduino-IDE のインストール (2)

インストール場所を指定します。そのままの場所でOKなので「Install」を選択。

f:id:harattaMouse:20200412204211p:plain

図. Arduino-IDE のインストール (3)

インストール完了まで、待ちましょう。インストールが完了したら、「Close」を選択。

f:id:harattaMouse:20200412204409p:plain

図. Arduino-IDE のインストール完了

Caution!

"Windows app" や "ストアからのダウンロード版" は 後々のVSCodeで認識しない問題があるようなので、必ず公式HPからInstaller版をダウンロードしましょう。

 

1-2 シリアル通信のドライバインストール

M5Stackのプログラム書き込みは、シリアル通信で行っています。

PCのUSB信号からシリアル信号に変換する際、PC側にドライバがインストールされている必要があります。

ドライバをインストールしましょう。

https://m5stack.com/pages/download

f:id:harattaMouse:20200404211213p:plain

図. リンク先

インストールが完了したら、デバイスマネージャーからCOMポートを確認しましょう。今回の例では、COMポート番号は COM4 でした。

f:id:harattaMouse:20200404213918p:plain

図. COMポートの確認 (デバイスマネージャ)

 

余談

M5Stackでは、CP210x を利用して、シリアル通信ポートをしているようです。CP210x の他にもFTDIなどが有名です。

 

1-3 ESP32マイコンのボード情報を取得

Arduino-IDEをダウンロードしただけでは、M5Stackのマイコン(ESP32)のボード情報がありませんので、ESPボード情報を取得します。

1-3-1 ライブラリマネージャの検索範囲追加

まず、初期のボードマネージャの検索範囲はESP32まで及んでいないため、ESP32を検索できるように環境設定します。
[ファイル]→[環境設定]と選択するとウィンドウが開きます。

f:id:harattaMouse:20200402211730p:plain

図. 環境設定ウィンドウを開く

開いたら、「追加のボードマネージャのURL」に
https://dl.espressif.com/dl/package_esp32_index.json を記載。

f:id:harattaMouse:20200402210952p:plain

図. 環境設定ウィンドウ(追加のボードマネージャURL)

「OK」を選択して、環境設定ウィンドウを閉じます。 

 

1-3-2 ESP32ボード情報を取得

つぎに、ボードマネージャからespressif社のESP32ボード情報をインストールします。

[ツール]→[ボード]→[ボードマネージャ]を選択。

f:id:harattaMouse:20200402212120p:plain

図. ボードの種類選択

選択すると、ボードマネージャが開きます。検索欄に「ESP32」と検索します。 

f:id:harattaMouse:20200402212652p:plain

図. ボードマネージャ画面

検索結果から、Espressif Systems の esp32 を インストールします。

f:id:harattaMouse:20200402212924p:plain

図. ボードマネージャ画面 ( 検索結果 )

しばらくインストールに時間がかかります。(ver 1.0.4 で 36853kB ありました。)

f:id:harattaMouse:20200402213258p:plain

図. ボードマネージャ画面 (インストール中)

インストールが終わりましたら、次に移りましょう。

f:id:harattaMouse:20200402214711p:plain

図. ボードマネージャ画面 ( インストール完了 )

Note. 保存場所

ESP32のボード情報は、[ User \ username \  AppData \ Local \ Arduino15 \ package ] 中に保存されています。

1-3-3 ボードの種類を設定

使用するボード情報を設定します。

[ツール]→[ボード] 自分の利用するボードを選択しましょう。(M5Stack-Core-ESP32、M5Stack-FIRE、M5Stick-C あたりだと思います。)
例では、Basicなので「M5Stack-Core-ESP32」を選択します。

f:id:harattaMouse:20200402215644p:plain

図. ボード選択

ボードを選択すると、再度[ツール]を開くと、通信設定がほぼ設定されています。シリアルポートのみ、手動で設定しましょう。1-2 で確認したCOMポート番号になります。今回の例では、COM4と確認できていましたので、COM4と設定します。

f:id:harattaMouse:20200402220702p:plain

図. シリアルポートの選択


 

1-4 M5Stack Library をインストール

Ardiuno-IDEでは、様々なボードのライブラリをもっています。M5Stack公式においても、M5Stack Library を提供しており、インストールすることで M5Stack.h を利用することができるようになります。

1-4-1 ライブラリマネージャ起動

インストールするためには、ライブラリマネージャを起動させましょう。[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理] を選択。

f:id:harattaMouse:20200402222229p:plain

図. ライブラリマネージャの起動

検索欄からM5Stackと打ち込みます。

f:id:harattaMouse:20200402222555p:plain

図. ライブラリマネージャ
1-4-2 M5Stack Library をインストール

M5Stack Library を選択し、インストールします。

f:id:harattaMouse:20200402222853p:plain

図. ライブラリマネージャ ( M5Stack Library を インストール )

インストールが完了していれば、[ファイル]→[スケッチ例] とすると、下記のようにサンプルスケッチが追加されているはずです。

f:id:harattaMouse:20200402223150p:plain

図. M5Stack Library の サンプルプログラム ( サンプルスケッチ )

 

Check!  ライブラリの保存場所

開発をする上では、ライブラリのリンク先を設定することが多々あります。

[ User\ username \ Documents\ Arduino \ libraries ]

こちらの場所にインストールされているはずですので、確認しておきましょう。

f:id:harattaMouse:20200404131123p:plain

図. Arduino Library の保存場所

 

  Arduino Library について

Arduino libraryの構成は ソースコード、サンプルプログラム(使用例)、説明資料(readme)から なります。

 

  サンプルスケッチを動かす

これで Arduino-IDE 導入は完了しました。試しにサンプルコードを動かしてみます。サンプルとして、M5Stack Library 中の Tetris を書き込んでみましょう。

α-1. ファイルからサンプルスケッチを選択する。

[ファイル]→[スケッチ例]→[書き込みたいスケッチ]を選択。

f:id:harattaMouse:20200404121017p:plain

図. サンプルスケッチの選択

Tetris スケッチのウィンドウが立ち上がりました。

f:id:harattaMouse:20200404122009p:plain

図. Tetris スケッチ 起動

α-2.チェックマーク(検証)を選択すると、コンパイルが始まります。

f:id:harattaMouse:20200404123520p:plain

図. チェックマーク(検証)ボタン

f:id:harattaMouse:20200404123359p:plain

図. コンパイル完了

α-3.書き込む前に、USBでM5Stackをつなぎましょう。

1-2  で設定したCOMポートにUSB接続しましょう。

※COMポートの確認はデバイスマネージャからできます。(下記参考)

f:id:harattaMouse:20200404124201p:plain

図. デバイスマネージャにて COMポート確認


α-4.右矢印マーク(マイコンボードに書き込む)を選択。

右矢印マークを選択して、マイコンボードにスケッチを書き込みます。

f:id:harattaMouse:20200404125750p:plain

図. 右矢印マーク(マイコンに書き込む)

α-5.書き込み完了

しばらくすると、書き込み終了し、M5Stackが勝手に起動します。

f:id:harattaMouse:20200404125327p:plain

図. 書き込み完了

※「右矢印マーク」は「検証」も同時にやってくれるため、α-2番の手順は飛ばしても問題ありません。

 

Visual Studio Code の導入

2-1. Visual Studio Code のインストール

つぎは、Visual Studio Code をインストールです。

こちらからダウンロードします。https://code.visualstudio.com/download

f:id:harattaMouse:20200404215608p:plain

図. ダウンロード画面

VSCodeUserSetup-x64-1.xx.x.exe を選択と下記のウィンドウが開く。

使用許諾契約書を読んで「同意する」選択し「次へ」。

f:id:harattaMouse:20200404220120p:plain

図. VSCodeインストール (その1)

プログラムの保存場所は変更せず「次へ」を選択。

f:id:harattaMouse:20200404220619p:plain

図. VSCodeインストール (その2)

スタートメニューにショートカットを作成する「次へ」

f:id:harattaMouse:20200404220729p:plain

図. VSCodeインストール (その3)

諸々の設定、オススメはチェックマークを付けて「次へ」

f:id:harattaMouse:20200404221023p:plain

図. VSCodeインストール (その4)

「インストール」を選択。

f:id:harattaMouse:20200404221206p:plain

図. VSCodeインストール (その5)

インストールが完了しました。「完了」を選択。

f:id:harattaMouse:20200404221401p:plain

図. VSCodeインストール (その6)

2-2. VSCode 起動後の初期設定

2-2-1. 日本語の変更

まず、日本語に変更します。

「Extensions (ブロック4つのアイコン)」を選択します。

f:id:harattaMouse:20200404223228p:plain

図. VSCode 起動時の初期画面

検索欄に "japanese" を検索します。検索結果から「日本語」選択します。

f:id:harattaMouse:20200404223649p:plain

図. 日本語の拡張機能を検索

「Install」を選択します。

f:id:harattaMouse:20200404223959p:plain

図. 日本語拡張機能をインストール

インストール後、VSCodeを再起動すると日本語に変更されています。

f:id:harattaMouse:20200404224205p:plain

図. 日本語に変更されたVSCode画面
2-2-2. 配色テーマの設定

配色テーマを変えてみます。

[ツール]→[基本設定]→[配色テーマ] を選択。

f:id:harattaMouse:20200404224441p:plain

図. 配色テーマを変える。

好きな配色テーマを選択しましょう。
今回は「Monokai Dimmed」に設定しました。地味に変わっています。

f:id:harattaMouse:20200404224919p:plain

図. 配色テーマの選択

「Monokai Dimmed」はこんな感じ。

f:id:harattaMouse:20200404225326p:plain

図. 配色テーマ Monokai Dimmed

 

 ③Arduino機能の拡張 

VSCodeを導入できましたので、Arduino for Visual Studio Code を追加していきます。

3-1.  Arduino for Visual Studio Code をインストール

「Extensions」を選択し、arduino と検索します。

f:id:harattaMouse:20200405142202p:plain

図. Extensions から Arduino を検索

Arduino でヒットする拡張機能は複数個出てきますが、MicrosoftArduinoを選択し、インストールします。

f:id:harattaMouse:20200405142636p:plain

図. Arduino 拡張機能をインストール

3-2. Arduino for VSCode 初期設定 

初期設定をおこないます。

3-2-1. Arduino:Path の設定

Arduino for VSCode では、Arduinoのツールチェーンを利用するため、Arduinoのパスを指定する必要があります。

[ファイル]→[基本設定]→[設定] を選択します。

f:id:harattaMouse:20200405153029p:plain

図. VSCode 設定画面

[拡張機能]→[Arduino configuration] から Arduino:Path を探し、

C:\Program Files (x86)\Arduino を指定します。

f:id:harattaMouse:20200405153846p:plain

図. Arduino:Path を設定
3-2-2.  IntelliSense の初期設定 (C/C++ 拡張機能)

Arduino for VSCode をインストールした際、C/C++拡張機能も同時にインストールされています。これは、Arduino for VSCodeで IntelliSenseを利用するためです。 

IntelliSenseの設定を行います。

VSCode設定画面から、"IntelliSense engine" と検索し、「Default」→「Tag Parser」 へ変更します。

f:id:harattaMouse:20200405173722p:plain

図. IntelliSense Engine 設定
3-2-3. Arduino コンパイル出力の文字化け対策

 ターミナルの文字化け対策を行います。

下記の JavaScript ファイルを見つけます。

C:\Users\username\.vscode\extensions\vsciot-vscode.vscode-arduino-0.3.0\out\src\common\util.js 

f:id:harattaMouse:20200405203110p:plain

図. Ufae

218行目をコメントアウトしました。

f:id:harattaMouse:20200405203821p:plain

図. コメントアウト場所

これで文字化け対策は完了しました。

参考元
こちらの記事を参考にしました。
Arduino for Visual Studio Code出力の文字化け対策 – Lang-ship

 

以上で、Arduino for VSCode の設定が完了しました。

 

4.  サンプルデモ

1からプログラムをするときのチュートリアルを行います。

4-1. プロジェクトフォルダ作成

まず、プロジェクトフォルダを作成します。

[ファイル]→[フォルダを開く] から、好きな場所にフォルダを新規作成し、開きます。

f:id:harattaMouse:20200405175225p:plain

図. フォルダを開く

今回は、"Demo" というフォルダを作ります。C:\Users\username\Documents\Arduino にフォルダを作成しました。空の"Demo"を選択し、「フォルダの選択」

f:id:harattaMouse:20200405175853p:plain

図. フォルダを新規作成して、開く

「新しいファイル」をクリックして、"Demo.ino" ファイルを作成します。

f:id:harattaMouse:20200405180547p:plain

図. 新しいファイルの作成

ArduinoスケッチのDefaultコードを書いてみました。

f:id:harattaMouse:20200405180803p:plain

図. スケッチの Defaultコード

4-2. ボード種類選択

ここでボードの選択します。Ctrl+Shift+P で Arduino : Board Config を選択

f:id:harattaMouse:20200405181222p:plain

図. Arduino : Board Config を選択

Selected Board を選択「M5Stack-Core-ESP32(esp32)」すると、"Flash Mode"や"Flash Frequency"等の項目が自動で設定されます。

f:id:harattaMouse:20200405181449p:plain

図. 利用するボードの設定

4-3. C/C++拡張機能のパス追加

VSCodeの IntelliSenseを機能させるためには、このプロジェクトで利用するインクルードパスを指定する必要があります。

エクスプローラ上の [.vscode]→[c_cpp_propaties] を選択します。

f:id:harattaMouse:20200405182201p:plain

図. .vscode を開く

今回は、M5Stack.hを利用しますので、下記のパスを追加します。

"C:\\User\\username\\Documents\\Arduino\\libraries\\**"

f:id:harattaMouse:20200405195151p:plain

図. インクルードパスの設定

4-4. シリアルポートの設定

シリアルポートを設定します。事前にM5StackをUSB接続しておきます。

Ctrl+Shift+P にて、「Arduino : Select Serial Port」 を選択します。

f:id:harattaMouse:20200405201430p:plain

図. シリアルポートの選択

例では、COM4を選択しました。

f:id:harattaMouse:20200405201654p:plain

図. シリアルポートの選択

4-5. ソースコードの編集

次に、ソースコードを書きます。

M5Stack Library を利用した簡単なプログラムです。1秒おきにM5Stackの画面にHello world が出力され、同時にシリアルモニターにもHello Worldが出力されます。

gist1ba8ec405d2253e0d6f73b8bfda7177f

 

f:id:harattaMouse:20200411183617p:plain

図. ソースコードの打ち込み

4-6. M5Stack への書き込み

ソースコードが書けましたら、M5Stackに書き込みます。「Verify」アイコンを選択するとコンパイルが始まります。

f:id:harattaMouse:20200411184137p:plain

図. 検証(コンパイル)中

コンパイルが完了したら、M5StackをUSB接続しましょう。「Upload」ボタンを選択すると書き込みが行われます。

f:id:harattaMouse:20200411184950p:plain

図. 「Upload」を押して、ボードにプログラムを書き込む。

赤丸の「Open Serial Monitor」を選択して、シリアル通信を開始します。M5Stack画面に「Hello World!」と1秒おきにLCD表示され、シリアル通信も確認できました。 

f:id:harattaMouse:20200411185344p:plain

図. シリアルモニターでシリアル通信を確認

ここまでできれば、VSCodeでプログラム開発ができますね!

 

5. サンプルスケッチを動かす

Arduino for VSCode でもサンプルコードを動かしてみましょう。

5-1. サンプルスケッチを選択

Ctrl+Shift+P で arduino example を選択します。

f:id:harattaMouse:20200405160534p:plain

図. Arduino Examples を選択

Arduino の初期ライブラリや、M5Stack Library の sample skech が選択できます。 

今回は、FlappyBird を選択しました。

f:id:harattaMouse:20200411190911p:plain

図. サンプルスケッチの選択

FlappyBirdのソースコード

f:id:harattaMouse:20200411191831p:plain

図. FlappyBird

5-2. サンプルスケッチの書き込み

サンプルスケッチは基本的に手を加えなくても動くと思いますので、メインの.ino ファイルを開いて、「upload」を押すだけです。

f:id:harattaMouse:20200411192157p:plain

図. FlappyBird の 書き込み

M5Stackに書き込みできたと思います。

まとめ

Arduino for VSCodeまで導入できれば、不自由ない開発環境かなと思います。個人的には、エラーメッセージがもっと見やすくなればうれしいなと思っていたりします。

 

次回、Git(Hub)の導入チュートリアルを解説していきたいと思います。

次の記事でお会いしましょう!

【M5Stack】パラパラ漫画をLCD表示させる方法 & JpgLoopAnime_Simple.verのご紹介

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

こんにちは。ブログ主のharattaMouseです。

 

先日、M5Stack にてJPGパラパラ漫画をLCD表示してみました。

その際に便利に使わせていただいたプログラムが らびやん(@lovyan03)様のM5Stack_JpgLoopAnimeです。

とても素晴らしいプログラムだったのですが、もう少しシンプルにできないかなと思いまして、勝手にですが、M5stack_JpgLoopAnime Simple.verを作らせていただきました。

M5stackのLCDでアニメーション表示させたい方は参考にしてみてください!

 

それでは、 始めていきます!

 

 

パラパラ漫画のLCD表示

まずは、動画をご覧ください。

 


【M5Stack入門】パラパラ漫画を表示させてみた!(アニメーション表示)

 

M5Stack_JpgLoopAnime_Simple.verは、JPG画像を高速描画するアニメーション描画プログラムです。Loopと名のつく通り、無限に繰り返す仕様になります。

 

本動画では2種類のパラパラ漫画をSDカードに仕込んでいるため、ボタン操作でパラパラ漫画を切り替えることができます。

描画サイズを小さくすると動画中にも述べた通り、最高65fpsまで出すことができました。(M5Stack Basicにて)

 

 

まずは、実際に描画してみましょう!

用意するもの

M5stack_Core ならなんでも。(Basic, Gray, FIRE. )

     M5stick系もいけるはず?(動作未確認)

SDカード(TFカード) 16GB以下のもの。

表示させるパラパラ漫画(JPG形式 最大320x240 複数コマ)

ソースコード (Simple.ver)

 

ソースコード(Simple.ver)はGitHubにて公開中です。

GitHub - haratta27/M5Stack_JpgLoopAnime(リンク先の緑のボタンからDownloadできます。)

SimpleImageフォルダにデモ用パラパラ漫画を入れておきます。まずはこちらで動作を確認しましょう。

 

以下、デモ手順です。

  1. ダウンロードしたソースコードをM5Stack_Coreに書き込んでください。この時点で M5stackを起動しても画面は真っ暗です。
  2. SDカードにdirname1とdirname2を作成し、それぞれにパラパラ漫画用JPG画像を入れておきます。(dirname1のみでも動作します。)
  3. 2で作ったSDカードを M5Stack_Coreに挿入し起動すると、パラパラ漫画が再生されます!
  4. シリアル通信を行うとフレームレートが確認できます。

 

いかがでしょうか?こんな感じで簡単にパラパラ漫画が再生できたと思います。

 

高速で表示できる仕組み

パラパラ漫画表示させるために重要なことは画像の更新スピードです。この更新スピードを上げるために役立っているのがDMA転送です。

DMA転送とは、Direct Memory Access のことです。

M5Stackでは、標準のjpgdraw関数と呼ばれるLCD表示関数が用意されていますが、DMA転送を利用したものでないため、イマイチ描画スピードが出ません。

一方、M5Stack_JpgLoopAnimeでは、DMA転送を利用した描画関数を用意しているため高速に描画できるのです。

※ 本家 lovyan03 様から高速化についてコメントをいただきました。

高フレームレートを出せるのはLCDへのDMA転送に加えて、JPGデコードルーチンも色々最適化+ディアルコア対応を行った点が結構効いてますね~。 (Twitter Replyより)

とのことです。JPGデコードの領域まで手を加えて高速化とは。。 実に手が込んでいますね。

 

ソースコードの解説

 lovyan03様 のソースコードから、少々のコメントを入れてみました。

gist7bb6475945e6731ecc038e6b0c6556fc

 

理解する上で肝になるところは、SDカードの画像データがどこに保存されるのかだと思います。

まず、画像データには、画像情報とサイズ情報の二つが必要で、それぞれ、fbuf (画像情報)、fbufsize (サイズ情報)に保存されているようです。

f:id:harattaMouse:20200309205715p:plain

loadImages関数では、SDカード内の指定されたpath(フォルダ)から画像情報とサイズ情報をfbufとfbufsizeにコピーしています。

f:id:harattaMouse:20200309205856p:plain

main.drawJpg関数にて、引き渡された画像データをDMA転送によりLCD描画します。

f:id:harattaMouse:20200309210231p:plain

※M5.Lcd.drawJpg関数を利用するとDMA転送なしの速度が確認できます。

 

以上がプログラムの大まかな内容になります。

 

 

パラパラ漫画の元になる画像を取得する方法

ここまで出来るようになると、皆さん気になるのはパラパラ漫画のJPG画像をどう作成するかだと思います。

もちろん、絵に自信がある方はお絵描きツールで描いても良いのですが、ブログ主は得意ではありませんでした。では、どのようにブログ主はパラパラ漫画向きのJPG画像を入手したのか。。。

f:id:harattaMouse:20200309213143p:plain

結論、GIFからJPGに変換して作成する方法が良いです。いろいろ試しましたが、これが個人的には簡単かなと思います。変換ツール or 変換サイト を利用して手軽に変換することができます。

 

また、GIFを入手するには下記の方法があります。

  • フリーのGIF素材を探してくる。
  • スマホやカメラ等で取得した動画素材をGIF化。
  • GIMPからGIFを作成。

どうやらGIMPでもGIFが作成できるようです。GIF作成方法を検索すると出てきました。個人的に参考になったリンクを貼っておきます。GIMPでアニメーション | GIMPの使い方

 

以上の方法を使うことで、皆さん 思い思いのパラパラ漫画用JPGを用意できると思います。

 

まとめ

やはり、LCD表示は面白いですね。これでLCDを使った表現の幅が広がりそうです。

当然ですが他のタスクを増やすと、フレームレートが下がってしまうので、気を付けましょう。

 

らびやん(@lovyan03)様には二重の意味で感謝いたします。"JPGLoopAnimeの公開"と"解説記事を書くことを承諾"していただきありがとうございます。この場をお借りしてお礼申し上げます。

 

準備するものはSDカードのみなので、皆さんも気軽にお試しあれ!

それでは、次の記事でお会いしましょう!

 

【M5Stack】スペック比較をしてみた & オススメ品を紹介

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

こんにちは。ブログ主のharattaMouseです。

 

M5Stack

今回は最近気になっているIoTオモチャ、M5STACKについて種類が豊富なので個人的にスペック比較してみました。これからM5STACKの世界に入ろうとしている方、新しいモジュールをお探しの方、参考にしていただければと思います。

 

 

なぜ M5STACKのスペック比較?

ことの発端は、先日ふとM5STACKを始めようとネット検索したところ、思った以上に関連する製品が様々あることが分かり、どれが良いか迷ってしまいました。ものによっては数千円違うし、出来ることも微妙に違いがあります。そして、スペックを比較できるサイトがなかなか見つからなかったので記事にしたら便利かなぁと思い、今回記事にしてみました。あなたに最適なモジュールはどれか、探してみましょう!

そもそも、M5STACK とは?

Fig. BASIC CORE の中身

中国で生まれたディスプレイ付きIoTモジュールです。日本ではスイッチサイエンスさんが精力的に販売しています。中身にはESP32マイコンが搭載され、GPIO、ADC、DACはもちろん、Wi-Fi, Bluetoothが利用できます。(一部ESP32搭載なしのモジュールもあるので注意)

M5STACKの魅力

基本的なハードウェアが始めから組み上がっているのが魅力かと思います。開発環境もARDUINO-IDEやUIFlowが整っており、導入もスムーズにできます。特にUIFlowと呼ばれる開発環境は、ビジュアルプログラミング言語に対応し、プログラミング初心者にも馴染みやすいものも用意されています。

Fig. UIFlow の GUI画面

Raspberry Pi との違い

IoTの電子工作といえば、小さなパソコンと呼ばれるRaspberry Piがよく候補に挙がります。Raspberry  Piは、基本的にはパソコンなので、本体の他に、micro SDカード、ディスプレイ、キーボード、Wi-Fiドングル(若しくは有線LAN)を最低限準備する必要があります。

一方、M5stackは ディスプレイとWi-Fi,Bluetoothが一つのモジュールに一体化しており、内臓のLi-poバッテリーを充電すればIoT機器になります。IoTオモチャを手軽に作りたいが、ハードウェア製作が少し億劫な方でも開発を始めやすいです。

 

Fig. Raspberry Pi の外観

 

さて、長くなってしまいましたが、前置きはこれぐらいにしまして、本題に入っていくとしましょう!

M5STACKの分類

早速ですが、まず初めに M5STACKの製品群を分類してみます。M5Stackの関連製品全体を見渡すと、かなりの数があり、初見は驚きました。大分類はこんな感じになります。 

Fig. M5Stack Product Family

やはり、M5Stackの中心になるのはCOREのラインナップです。ディスプレイやCPUなど基本機能が詰め込まており、これが無いと始まりません。M5Stack系とM5Stick系がこちらに分類されます。他の分類項目には、COREを機能拡張するBASEやUNIT、キットの部類の入るであろうAPPLICATIONもあります。

今回全てのモジュールを紹介するのは大変ですので、M5 COREを中心に紹介とスペック比較していきます。

 

M5Stack系 のスペック比較

 M5Stack系をざっくり機能別に分けてみるとこのようになりました。

Fig. simple spec of M5Stack


M5Stack系の共通機能は、ESP32、TFT LCD、Lipoバッテリー、3つのボタン、スピーカーです。BASIC以外のCOREには、6軸センサ(加速度、ジャイロ)+地磁気センサが搭載されています。BASIC < GRAY < FIRE < M5GO の価格設定どおり、高価格で機能が豊富になっています。

もう少し細かい比較は下記の表になります。

Device

BASIC

f:id:harattaMouse:20201028205431j:plain

GRAY

f:id:harattaMouse:20200211163634j:plain

FIRE

f:id:harattaMouse:20201028205513j:plain

M5GO

f:id:harattaMouse:20200216144143p:plain

Chip ESP32-D0WDQ6 ESP32-D0WDQ6 ESP32-D0WDQ6 ESP32-D0WDQ6
RAM/Flash

520kB RAM

4MB Flash

520kB RAM

16MB Flash

520kB RAM

16MB Flash

4MB PSRAM

520kB RAM

16MB Flash

Interfaces

PortA(I2C) x1,

Extendable GPIO PINS

PortA(I2C) x1,

Extendable GPIO PINS

PortA(I2C) x1,

PortB(IO/ADC) x1,

PortC(UART) x1

PortA(I2C) x1,

PortB(IO/ADC) x1,

PortC(UART) x1

Display

2inch, 320x240

Colorful TFT LCD,
ILI9342C

2inch, 320x240

Colorful TFT LCD,
ILI9342C

2inch, 320x240

Colorful TFT LCD,
ILI9342C

2inch, 320x240

Colorful TFT LCD,
ILI9342C

MEMS -

MPU6886

BMM150

MPU6886

BMM150

MPU6886

BMM150

Microphone - -

MEMS Analog

BSE3729

MEMS Analog

BSE3729

LED - -

SK6812 3535

RGB LED x10

SK6812 3535

RGB LED x10

Speaker 1W-0928 1W-0928 1W-0928 1W-0928
Battery 150mAh @3.7V 150mAh @3.7V 600mAh @3.7V 600mAh @3.7V
Include

BASIC core x1

BASIC botton x1

USB TypeC Cable x1

Dupont Cable x10

User Manual x1

GRAY core x1

GRAY botton x1

USB TypeC Cable x1

Dupont Cable x10

User Manual x1

FIRE core x1

M5GO botton x1

M5GO Charge Base x1

USB TypeC Cable x1

LEGO Blocks x2

Dupont Cable x10

User Manual x1

M5GO core x1

M5GO botton x1

M5GO Charge Base x1

USB TypeC Cable x1

Unit x6 (ENV,RGB,IR,ANGLE,HUB,PIR)

CONNEXT Cable x4

LEGO Blocks x4

Dupont Cable x10

User Manual x1

Value 3575円 4290円 6325円 8305円

 ※2020/02/16時点のスイッチサイエンスさんで販売価格です。

 

M5stick系+M5CAMERAのスペック比較

 M5stackよりも小型で安価にIoTを実現したい場合は M5stick系も候補に挙がります。ついでにM5CAMERAも比較してみました。

Fig. simple of M5Stick

M5stickのスペックはバラバラな印象です。M5stickVはESP32でないので、Wi-FiもBLEも利用できません。

もう少し細かい比較は下記の表になります。

Device

M5Stick

f:id:harattaMouse:20201028205546j:plain

M5StickC

f:id:harattaMouse:20200211165412j:plain

M5StickV

f:id:harattaMouse:20201028205609j:plain

M5Camera

f:id:harattaMouse:20201028205631j:plain

Chip ESP32-D0WD ESP32-PICO-D4 Kendryte-K210 ESP32-D0WD
RAM/Flash

520kB RAM

4MB Flash

520kB RAM

4MB Flash

8MB RAM

16MB Flash

520kB RAM

4MB Flash

4MB PSRAM

Interfaces

Port(I2C/UART/GPIO) x1

PortA(I2C/UART/GPIO) x1,

Extendable GPIO PINS

Port(I2C/UART/GPIO) x1

Port(I2C/UART/GPIO) x1

Display

1.3inch,

64x128

OLED Screen

0.96inch

80x160

TFT LCD

1.14inch

135x240

TFT LCD

-

MEMS

-

MPU6886

MPU6886

-

Microphone -  SPM1423

MSM261S4030HOR

-
LED - RED LED x1 RGBW LED x1 -
Speaker DET402-G-1 - - -
Battery 80mAh @3.7V 80mAh @3.7V 200mAh @3.7V -
Include

M5Stick x1

USB TypeC Cable x1

 

M5StickC x1

USB TypeC Cable x1

 x1

User Manual x1

M5StickV x1

USB TypeC Cable x1

 

M5Camera x1

USB TypeC Cable x1

LEGO accessories x2

User Manual x1

Value 取り扱い無し 1980円 3080円 1815円

 ※2020/02/16時点のスイッチサイエンスさんでの販売価格です。

筆者のオススメCORE

 M5 COREについて代表的なものは以上で一通り説明できたと思います。比較は分かったから、結局オススメがどれが良いですか?という方は参考にしてみてください。

①画面を利用してIoTモジュールを扱いたい方は、M5Stack GRAY をお勧め!

f:id:harattaMouse:20200211163634j:plain

M5Stack Basicよりも少し値が張りますが 9DOFセンサを搭載しています。センサが増えるとやれることが増えますので、予算に余裕がある方は基本GRAYが良いかと個人的には思います。

②コンパクトなIoTオモチャを作りたい方は M5StickC をお勧め!

f:id:harattaMouse:20200211165412j:plain

ラジコンに仕込みたいなど、コンパクトなところに設置したい場合はM5StickCがオススメです。6軸センサ搭載で、加速度、角速度検知が可能です。

また、価格がM5 CORE 群の中でも安価なので、お試しとしてやってみたいと考えている方はこちらから始めるのが良いかと思います。

 

まとめ

さて皆さんは、開発レベルや予算に合ったモジュールは見つかりましたか?少しでもM5stack、M5stickの選定のお役に立てたらと幸いです。おそらく、気軽に遊ぶ分には、どのモジュールから買っても、ハズレは無いかなと思います。(ChipにESP32が搭載されているものなら、Wi-Fi、BLEが利用できるので 最低限のIoT工作ができます。)

 

余談ですが、筆者は M5Stack Basicをまずは手に入れました。軽く触った感じ、開発環境が整備されてて導入しやすかったです。

Fig. Hello! M5Stack!!

 

ぜひ、皆さんも適切なM5stackを見つけて、IoT工作、楽しんでくださいね。

 

マイクロマウス導入技術~磁気式エンコーダ~

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

こんにちは。ブログ主のharattaMouseです。

 

本記事では、2019年に設計した機体(白いハラシーマウス.ver3.00)に導入した技術を公開していきます。今回は個人的に新しく取り入れた磁気エンコーダの評価方法と反省点についてお話できればと思います。

※機体の基本スペックは前回の記事で説明しています。読まれていない方は先にこちらの記事を読むとイメージしやすいと思います。

harattamouse.hatenablog.com

 

 

ロータリーエンコーダとは

マイクロマウスだけでなく、他のロボットコンテストでも広く利用されているロータリーエンコーダ。こちらの記事を参考にする方のほとんどは理解されている気がしますが念のためどんなものか説明しておきます。

ロータリーエンコーダとは、回転するもの(具体的にはモータや回転軸)に設置し、回転量を検知して電気信号を出力する部品になります。名前のとおり、回転量(ロータリー)を検知し、検知した角度情報を電気信号に変換(エンコード)して出力します。

ロータリーエンコーダには、光学式と磁気式が存在し、 マイクロマウス界隈では、省スペース化や省コスト化を目的に磁気式エンコーダを利用するケースが主流になっています。

磁気式エンコーダについて

特にマイクロマウス競技では、1区画 90mm x 90mm サイズの迷路を走り回れる機体を設計する必要がありますので、省スペース化に貢献できる磁気式エンコーダの採用は理にかなっていると言えます。

f:id:harattaMouse:20200208160500p:plain

(AM4096 datasheet より)

磁気式エンコーダの特徴として、磁気式エンコーダICと磁石をセットにして利用します。つまり、回転体に磁石、傍にエンコーダICを設置という構成になります磁気式エンコーダは 省スペース化や軽量化できるメリットがある反面、加工精度を求め、磁石とエンコーダICの位置を精度よく出さなければなりません。

採用した磁気エンコーダIC MA702

2019年度の本設計では、MPS製のMA702を採用しました。小型なパッケージ(QFN)が気に入り採用しています。このICは出力方式を選択でき、ABZ方式とSPI方式になります。出力方式によって分解能が異なり注意が必要です。スペック紹介の記事でも話した通り、今回はABZ方式を利用する配線になっており、一回転で256パルス、つまり、エッジカウントで分解能が10bit = 1024になっています。

f:id:harattaMouse:20200208135336p:plain

(MPS702 datasheetより)

磁気エンコーダの線形性評価

白いハラシーマウス.Ver3.00 組み立て後、MA702の動作確認を行いました。定速にモータを回転させ、線形性評価を行っています。

評価方法 (線形性の実験)

今回の実験では、定速 600mm/sで回転させたときの値を測定しています。MA702のABZ出力では分解能は1024になるので、一回転分、つまり、カウント数が1024まででプロットしました。

f:id:harattaMouse:20200119131736p:plain

理想的には、磁気エンコーダのゆがみがなければ カウント数は線形に上がっていくはずです。しかし、今回の実験結果では、計測時間40~60msのあたりで大きくゆがんでいることがわかります。また、左右のモータは同速度で回転しているはずなのですが、左右でゆがみの差があることもわかります。

出力値歪みの原因

磁気式エンコーダの角度情報を精度よく出力させるためには、回転体に取り付ける磁石をエンコーダICと垂直に配置させる必要があります。エンコーダICは磁力強弱によって角度情報を算出しているため、加工精度の悪いと、磁石の傾きによる磁力強弱も検知して、正確な角度情報を得られないといったことが懸念されます。

f:id:harattaMouse:20200208154958p:plain

↑こちらは、定速で回転させたときの磁気式エンコーダの出力になります。

1024カウント毎にマーカーを入れているので、一回転で周期的に歪んでいることが良くわかると思います。

 

結果、磁気エンコーダ出力のゆがみにより、機体の走行速度を正確に得ることができなくなり、旧機体よりも 距離の精度が求められる箇所の調整に苦しめられました。(旧機体は高精度な光学式エンコーダ採用だったので、調整にかなりギャップを感じました。)

 

余談

別に考えられる要因としては、磁気エンコーダIC自身の精度の問題です。データシートにも出力精度について記載があり、INL(integral non-linearity)という指標があります。INLは磁束密度80mT以上の使用条件下で INL=0.7deg になります。

f:id:harattaMouse:20200208141543p:plain

(MA702 datasheet より)

INLは、機械式高精度エンコーダが出力する角度情報と比較してどれくらいの誤差が発生してしまうか示したものです。MA702から0.7degの誤差が発生していると仮定すると、分解能値で換算して 0.7/360*1024≒1.9911...  約2分解能分になります。そのため、2分解能分は誤差の範囲になります。(本当ですかね?詳しい方、ご意見ください。)

こちらの場合は対処の施しようがないので、これぐらいの精度であるという認識だけでいいのかもしれません。

磁気式エンコーダの測定精度

さて、ここからは趣向を変えて、机上で測定精度を計算してみます。磁気式エンコーダが測定できる最小距離を計算してみます。

測定距離(精度)の机上計算

計算条件は タイヤ半径7.5mm、サンプリング周期1ms として計算しました。結果は下記になります。

f:id:harattaMouse:20200202154113p:plain

結果、計算する前から分かることではありますが、エンコーダの分解能が2bit違うだけで4倍細かい速度を測定できます。私の場合、いままで利用してきた光学式エンコーダの分解能が500pulse/回転で運用していたため、"2倍の分解能"と"エンコーダ出力の歪み"がかなり走行調整に悪影響を及ぼした印象です。

2019年度 設計の反省点

磁気エンコーダIC MA702には、ABZ出力(インクリメンタル方式)とSPI出力(アブソリュート方式)が配線で選択できるようになっています。ゆがみの原因が物理的なものであると仮定した場合、アブソリュート方式の場合は絶対角度(位相)が分かるため、絶対角度(位相)に対応した補正をかけることができると思います。そのため、SPI出力のほうが良いと今回の設計を通して感じました

また、本設計では考慮不足でしたが、設計する際はエンコーダの分解能から検知できる最小速度を計算して、これぐらいの精度で問題ないか確認しておく必要があると思いました。

まとめ

今回は磁気式エンコーダの特性の評価を行いました。少しでも評価や設計の参考にしていただけたらと幸いです。個人的には、少し設計の手間が増えても 分解能は多いほうが良いと思います。

 

それでは、次回の記事も要チューモクです!

2019年に設計した機体の紹介

「harattamouseの小部屋」は移転しました。新ページは 「Haratta-Tech-Lab」です。


 

 

 

こんにちは。ブログ主のharattaMouseです。

 

本記事では、2019年に作製した機体(マイクロマウス競技(旧ハーフ))の設計情報を公開していきます。(おそらく、基本的な話になると思いますので参考程度にみていただければと思います。)

白いハラシーマウス.ver3.00の基本スペック

まずは、2019年に作製した「白いハラシーマウス.ver3.00」の基本スペックです。

f:id:harattaMouse:20200117204327j:plain

スペック

Size Width:38mm  Length:50mm  Height:10mm
Weight 20g
CPU STM32F411CE(STMicro) 96MHz
Wall Sensor OSI5FU3A11C + LTR-4206E
Gyro LSM6DS3 (STMicro)
Encoder

MA702 (MPS)

ネオジム磁石 φ4×1.5 片面2極

Gear

M0.3  9T pinion (既製品)

M0.3 36T spur (3Dプリンタにて加工)

MotorDriver IC DRV8835
Motor MK06-4.5
Battery Lipo 70mAh

構成としては、二輪の吸引機構なし型のマイクロマウスです。基本に忠実な構成になっています。最近では、4輪の吸引機構ありのマウスが増え(特にクラシックマウス)、逆に目新しいかもしれません。

回路図

基本的な回路図となっています。壁センサ回路は 赤外LED + フォトトラの構成で設計しました。磁気式エンコーダは初採用もあって、光学式エンコーダの利用者にはなじみやすいABZ相方式を利用する配線になっています。

※2020/06/18 修正 : 壁センサ回路にPch-MOSFETの極性間違えがあります。正しい極性は下記の壁センサの新回路導入の図になります。

レイアウト

CADはEAGLEを使用しています。オートルーターを使用しないで、毎回、自分で配線しています。そろそろオートルーターを使ってもいいかなと考えてはいます。

引き回しのこだわりは、電源ノイズを気にして、パワー系のグランドとそれ以外のグランドを分離しています。ここは毎回気にして設計しているので、効果があるかは不明です。

f:id:harattaMouse:20200121205042p:plain

elecrowに発注する関係で、50mm x 50mm 以内で設計しています。

メイン基板1枚、右センサ用小基板1枚、左センサ用小基板1枚、右エンコーダ用小基板1枚、左エンコーダ用小基板1枚 を1枚に面付けしています。
 

今回の技術情報

足回りの設計

これは、磁気式エンコーダ導入と深く関わってくる部分だと思います。

3Dプリンタで加工した部品は、モータマウント、ギア付きホイールで、fusion360にて設計しています。(ピニオンギアは既製品を採用しています。)
DMM.make の3Dプリントサービスにて、材料はアクリル(Ultra Mode)で発注しました。

f:id:harattaMouse:20200121220233p:plain

エンコーダICは、ネオジム磁石面と1mm距離で設計。ここは、ほかのマウサーの記事に載っていない部分でしたが、MA702 + ネオジム磁石 φ4×1.5 片面2極 の組み合わせでは、1mm距離でも問題なく回転を読めていました。

足回りの部品
  • ネオジム磁石 (φ4x1.5 mm  片面2極)
  • ベアリング (外径4mm 内径1.5mm 厚み1.2mm)
  • シャフト (SUS 平行ピン φ1.5 x 8mm)
  • ホイール (M0.3 36T  φ12 mm)
磁力干渉

ネオジム磁石に鉄を巻いていないため、モータとネオジム磁石の磁力干渉が懸念されました。実際に組み立て後に磁力干渉を確認しましたが、ギアを嚙合わせるとわからなくなる程度のものでした。磁力の干渉が気になる方は注意が必要です。

モータマウント固定法

モータマウントの板厚は 2mmで設計しています。穴に直にタップを切って基板とモータマウントをねじ止めで固定しました。こうすることで、簡単にモータマウントと基板を固定できます。ですが、デメリットとして2つのネジのみで基板と固定しているので、精度よく加工しないと基板とモータマウントとの垂直が出ません。

 

 磁気式エンコーダについてはこちらの記事も合わせてご覧ください。↓

harattamouse.hatenablog.com

 

小基板設計

本機体は、磁気エンコーダ部分と壁センサ部分を小基板に実装し、90度に立てる方式を採用しました。EAGLEでうまく小基板分離することが出来ずやむなく表面実装パットで設計しました。結果として、表面実装パットのはんだ面が小さすぎて、はんだがうまく乗りませんでした。最後は諦めて UEW線で接続しています。

f:id:harattaMouse:20200125130810p:plain

特に、メイン基板と センサー小基板を接続するはんだ面ははんだ付けが大変でした(上図の赤枠部分)。はんだ面の サイズを小さくしすぎたことと他のはんだ面との距離が接近しすぎて、はんだごてがあてられません。単純な設計ミスです。気を付けましょう。

壁センサの新回路導入

壁センサは、こだわりだすとキリがないのですが、マイクロマウスでは必須の回路です。今回の機体ではKERI さんの発光回路を参考にさせていただいています。コンデンサへの充電時間を調整することで発光強度を調整できます。毎年、どの回路が良いか回路構成から見直していますが、製作時間の関係上、センサ値を取得できればいいとしています。←だめなやつです。

f:id:harattaMouse:20200618212534j:plain

図. 壁センサ回路図 (2020/06/18更新済み)

気が向けば センサ値についても詳しく別記事で実験データを載せたいと思います。

※2020/06/18 回路図の修正(Pch-MOSFETの極性):修正前は Pch-MOSFETの接続に誤りがありましたので、修正した回路図を掲載しています。

まとめ

新機体を設計するとハードウェアで新しいことができるので、毎回わくわくしながら設計しています。本機体を設計したことで得られた収穫としては、足回りが動作できるレベルで設計できたこと、磁気エンコーダのノウハウが得られたこと、です。

 

さあ、次の機体ではどんな設計をしようか!

絶賛 検討チュウです!