Blog Archives

shotaのマイクロマウス研修17 回路設計⑤:ESP32ソフト書き込み基板と間違い

こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。

[前回の記事]ではモータドライバとエンコーダについて書きました。
今回は

  • マウス基板のその他モジュール(モーションセンサ・インジケータ・ソフト書き込み)
  • ソフト書き込み基板の回路
  • LiPoバッテリー充電回路
  • 回路の間違い
  • について書きます。

    マウス基板のその他モジュールについてはサラッと流して、ソフト書き込み基板をメインに説明します。

    マウス基板
    その他モジュール ブロック図

    ブロック図はこのようになりました。

    点線から左側は外部回路で、ソフト書き込み基板があります。
    点線から右側が内部回路で、左からソフト書き込みコネクタ・ESP32・モーショントラッキングセンサ(6軸加速度・ジャイロ)・LED x2があります。

    ソフト書き込みコネクタには、データの送受信をするTx/Rxと、書き込み時にESP32のモードを切り替えるBOOT/ENを接続します。
    モーショントラッキングセンサとESP32はSPI通信でやり取りします。インジケータ回路にはLEDを2つ用意します。

    モーショントラッキング回路については、回路流用元の[HM-StarterKit]と同じ構成です。
    ESP32特有の部分は、ソフト書き込みに使う信号(Tx/Rx/BOOT/EN)です。

    それでは、それぞれの回路図について説明します。

    モーショントラッキング回路

    回路図はこのようになりました。


    この回路は、[ICM-20648データシート]の推奨回路と一致しています。

    インジケータ回路

    回路図はこのようになりました。


    ESP32のI/Oピンで、LEDの点灯させます。

    ソフト書き込み回路

    回路図はこのようになりました。

    回路図と言ってもコネクタがあるだけです。
    ソフト書き込み必要な信号(Tx/Rx/BOOT/EN)とGNDを接続しています。

    ソフト書き込み基板

    続いて、ソフト書き込み基板について説明します。
    ソフト書き込み基板も回路流用元の[HM-StarterKit]と同じ構成ですが、一部ESP32特有の回路があります。

    回路ブロック図はこのようになりました。

    ソフト書き込み基板には、ソフト書き込みと、バッテリ充電の2つの機能があります。

    左側の外部回路にはPCとバッテリが、右側の外部回路にはマウス(ロボット)があります。
    内部回路左上のUSB Micro-BコネクタはPCと接続されます。USBの信号は、真ん中のIC(FT232RL)でシリアル信号に変換され、外部のマウスに送られます。

    変換ICからはDTR/RTSも出力され、この信号を用いてBOOTとENをON/OFFし、ソフトを自動で書き込みます。また、手動でBOOT/ENをON/OFFできるようにタクトスイッチも接続されています。

    内部回路左下がバッテリ充電ブロックで、USBの電源(VBUS)を用いて、外部のバッテリを充電します。

    それでは、それぞれの回路図について説明します。

    USB-Serial変換回路

    回路図はこのようになりました。
    USB-シリアル変換は[FT232-RLのデータシート]の推奨回路を参考にしました。
    また、自動ソフト書き込み部分については、[ESP32-Devkit-V4の回路図]流用しました(ここ重要)


    まず、Micro-Bコネクタから必要な信号を取り出します。IDは使用しません。


    USBの信号をシリアル変換IC(FT232RL)へ接続します。ICからは、LEDに接続するTXLED/RXLEDと、シリアル通信のTXD/RXDとDTR/RTSが出力されます。大事なことなのでもう一度、DTR/RTSが出力されます。


    続いて、ソフト書き込み用のスイッチ回路です。
    左側は手動ソフト書き込み用のスイッチ回路で、それぞれBOOTとENに接続しています。BOOTとENは、マウス基板側でプルアップされています。
    ESP32ではソフト書き込み時に、プルアップされたBOOTとENをON/OFFしなければなりません。

    そもそもBOOTとENの役割は何なんだ?ということで、[ESP-IDF Programming Guide]を見てみましょう。

      EN: Reset button.

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    shotaのマイクロマウス研修16[回路設計④ モーダドライバ・エンコーダ回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では物体検出センサ回路(壁センサ)について書きました。

    今回はモータドライバ・エンコーダ回路について書きます。

    モータドライバ・エンコーダ回路 ブロック図

    モータドライバ・エンコーダ回路のブロック図はこのようになりました。

    ブロック図中央のモータドライバは、ESP32から送られてくる正転・逆転や回転速度(PWM Duty)の信号を、モータ出力電圧に変換します。ブロック図下のエンコーダは、マウスのホイールに取り付けられた磁石の磁気を読み取り、ホイールの角度を出力します。

    モータにはMK06-4.5を使用します。[アールティWebショップ]から購入できます。

    この構成は、回路流用元の[HM-StarterKit]とほぼ同じですが、エンコーダのMA700が新規設計非推奨だったため、後継機のMA702に変更しています。

    モーダドライバ回路図

    回路図はこのようになりました。

    モータドライバ回路は、モータドライブIC [DRV883のデータシート]に書かれている参考回路とほぼ一致します。それとは別に、モータ電流を滑らかにするためにインダクタ(L1, L2)を追加しています。

    マイクロマウスで使うモータは小さいため、電気的時定数が小さい傾向が有ります。その場合、PWM入力に対して電流が反応しやすくなるため、電流スパイクが発生しやすくなります。この電流によりモータが発熱したり、制御が不安定になるという問題が有ります。

    インダクタを追加した理由は、モータ電流を滑らかにし、モータの発熱と制御の不安定さを抑えるためです。

    参考:[パルス出力ステージ(PWM)とチョークコイル – マクソンアカデミー]

     

    ESP32と接続するピンは、PH(正転・逆転の切り替え)、EN(モータ出力制御(PWM))、SLEEPの3つです。PHとENは、右・左モータで独立しています。SLEEPは右・左共通です。

     

    ESP32のピンアサインについては後ほどまとめて記事にしますが、ここでESP32のPWM機能について簡単に触れておきます。

    ESP32 MCPWM機能について

    ESP32でモータ制御をする場合、MCPWM機能を使います。MCPWMはMotor Control Pulse Width Modulator (MCPWM)の略です。まさに、モータ制御のための機能ですね。

    MCPWM機能の全容は[ESP32のTechnical Reference Manual]を参考にしてください。MCPWMのAPIは[こちら]のページに書かれています。また、サンプルコードが[GitHub]に公開されているので、先にコードを読んだほうが機能を理解しやすいかもしれません。

    ここでは、APIのドキュメントからMCPWMの機能をざっくりとまとめてみます。

    ※ここに提示している画像は[ESP-IDF Programming Guide]内のものを使用しています

    • MCPWMユニットは2つあり、それぞれのユニットが3つのペア(A,

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    shotaのマイクロマウス研修15[回路設計③ 物体検出センサ回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では電源回路について書きました。

    今回は物体検出センサ回路(通称:壁センサ回路)について書きます。

     

    物体検出センサ回路

    物体検出センサ回路のブロック図はこのようになりました。

    点線から左側が内部回路で、上半分が発光回路、下半分が受光回路です。

    点線から右側が外部回路です。回路はありませんが、赤外線を反射する壁があります。

     

    物体の検出にはフォトリフレクタ[LBR-127HLD]を使用します。

    フォトリフレクタには赤外線発光ダイオードとフォトトランジスタが内蔵されており、ダイオードが発光した赤外線が壁で反射し、フォトトランジスタで受光されることで壁を検出できます。

    壁がない場合は、赤外線が反射されず、フォトトランジスタが受光できません。

     

    回路図はこのようになりました。

    自分のマイクロマウスには、この検出回路が4つ搭載されます。それぞれ、前(左)・左・右・前(右)の壁を検出します。

     

    それでは発光回路・受光回路について説明します。

    発光回路

    回路図は[HM-StarterKit]を流用していますが、より詳しい発光回路の動きについては[マイクロマウスのセンサについて②]を参考にしました。

     

    参考記事に書いてあるとおり、環境光による壁の誤検知を防ぐため、発光ダイオードをパルスでON/OFFさせます。パルスの周波数は1kHzとします。

    発光ダイオードを1kHzでON/OFFすると、それに伴い電源電流が変動します。この変動をなだらかにするためにローパスフィルタを搭載しています(回路図のR5とC11)。

    素子の定数はHM-StarterKitの値をそのまま使用しています。電源ICがHM-SterterKitのものから変わっているので、実際に動かした時の波形を見て定数を変えようと思います。(もしかしたらフィルタ回路が不要かもしれません。)

     

    ON/OFFするパルスは、ESP32から出力します。発光した赤外線が別の受光部に入らないように、4つのダイオードを別々のタイミングで発光させたいです。

    そのためには、パルスの出力端子も4つ必要ですが、ESP32の端子数が足りないため出力端子を2つに減らしています(回路図のIRLED_R_FLと、IRLED_L_FR)。

    本来は別々に点灯させる、RとFLを同時に点灯させます。同じようにLとFRも同時に点灯させます。

    RとLのセンサは角度が傾いているので、センサRとFL、LとFRのペアで発光すれば、誤検知しません(おそらく)。

    受光回路

    こちらも、HM-StarterKitの回路図を流用します。

    フォトリフレクタに内蔵されているフォトトランジスタは、ベース電流の入力が光の入力に置き換わったトランジスタです。

    [赤外LEDとフォトトランジスタ –

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    shotaのマイクロマウス研修14[回路設計② 電源回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では回路ブロック図について書きました。

    今回は電源回路について書きます。

     

    マウスの回路ブロック図(振り返り)

    マウスの回路ブロック図は以下のとおりでした。

    今回は、この左上部分の電源回路について書きます。

     

    電源回路の回路ブロック図

    電源回路のブロック図はこのようになりました。

    点線から左側が外部回路で、LiPoバッテリが接続されます。

    点線から右側が内部回路で、コネクタから始まり、スイッチやLDO、その先にはESP32マイコンやモータドライバが接続されます。

     

    それでは、各ブロックの役割を左から順に説明します。

    LiPoバッテリ

    LiPoバッテリは、電源回路(広く言えばマウス回路)の電源供給源です。バッテリがなければ回路は動きません。

    どのLiPoバッテリを使用するかは、動かしたい回路の電源電圧や消費電流などから選定します。

    今回は[HM-StarterKit(通称ハムスター)]で使用しているバッテリ 3.7V 150mAhを使用する予定ですが、容量を何mAhにするかは実際に動かしてみて決めたいと思います。

    ESP32はWiFiやBluetoothが使用できるので、150mAhでは容量が足りないことを懸念しています。

     

    別のLiPoバッテリ使用する場合は、[Amazonで”lipo 3.7V”と検索]したり、模型屋さんでドローン用のバッテリを調べたりして入手しようと思います。

     

    電源コネクタ

    電源コネクタは、使用するバッテリのコネクタ形状に合うものを選びます。

    今回はハムスターで使用しているものと同じ、JSTのZHコネクタを使います。

    [ZHコネクタ データシート]

    ケーブルが車体外に飛び出ないようにトップ型を選びます。

    また、ケーブルを繰り返し抜き差しすることを想定して、スルーホールタイプ(表面実装タイプではない)を選びます。

    (私はケーブルを外すときに、表面実装のコネクタを剥がした経験があります)

     

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    マイクロマウスクラシック~プラスチック壁について~

    こんにちは、まえけんです。

    ただいまアールティではマイクロマウスクラシックサイズの
    プラスチック壁の開発をしております!

    現在、弊社webショップでは木製の壁を販売しておりますが
    昨年販売を開始した柱に引き続き、壁もプラスチック化を進めております。

    販売はもう少し先になりますが、形になってきましたので情報を公開していきたいと思います。

    手前側がプラスチック壁で、奥側が木製の壁になります。
    壁をひっくり返すとわかりやすいですね。
    近くで見るとこんな感じになっています。
    上から見るとこんな感じです。左と下がプラスチック壁で、右側が木製の壁になります。

    作りたてで見た目が綺麗なのもいいですね!
    また新たな情報が入りましたらこちらで更新していきます!

    続きを読む ›

    Posted in お知らせ, ブログ


    shotaのマイクロマウス研修13[回路設計①]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作を始めます。

    [前回の記事]ではオリジナルマウスの設計方針を決めました。[HM-StarterKit(通称ハムスター)]の回路を流用して、設計時間を短縮するということでした。

    今回から回路設計を始めます。

     

    マウスの回路ブロック図

    まずはじめに回路ブロック図を作ります。

    回路ブロック図を書くと、システムに必要な回路要素(ブロック)を把握でき、要素間の接続も確認できます。

    各ブロックに使用する素子・ICや、接続する電源電圧等を書いておくとより便利です。

     

    今回は簡易的な回路ブロック図を作成しました。

    [ハムスターの回路図]をベースにしていますが、マイクロマウスとしてはベーシックな回路構成になっていると思います。

    (最近では[吸引ファン]を取り付けるのが流行ってるみたいです)

     

    このブロック図について簡単に説明します。

    • バッテリ・電源コネクタ・電源回路
      • マイクロマウス(というか回路)を動かすには電源が必要です。
      • [マイクロマウス(ハーフサイズ)競技規定]より、マウスの大きさに制限があるため、ACアダプタによる電源供給は難しそうです。
      • 競技規定より、燃焼を利用したエネルギー源は許されないので、残念ながらエンジンは搭載できません。
      • 以上より、比較的サイズの小さいLiPoバッテリを使います。
    •  マイコン回路
      • 競技規定より、マイクロマウスは自立型でなければなりません。そのためには頭脳となるマイコンが必要です。
      • マイコンにはESP-WROOM-32Dを使用します。
    • モータドライバ・エンコーダ・DCモータ
      • 迷路を走行するためにはタイヤとモータが必要です。モータを動かすためにはモータドライバが必要です。
      • また、走行速度や走行距離を推定するためにはエンコーダが必要です。
      • 競技規定より、迷路の壁を飛び越したり、 よじのぼったりしてはいけいないので、残念ながらジャンプ機構は搭載できません。
    • 物体検出センサ回路
      • いわゆる壁センサです。
      • 迷路の壁を検出し、マウス自身の位置や姿勢を推定するために必要です。
    • モーショントラッキング回路
      • マウス自身の位置・速度・姿勢を推定するために必要です。
      • 加速度センサ・ジャイロセンサを搭載します。
    • インジケータ回路
      • プログラムの状態を表示するために必要です。
      • LEDを搭載します。
    • ソフト書き込みコネクタ
      • マイコンにプログラムを書き込むために必要です。
      • 回路規模の縮小のためコネクタを用意せず、基板に導線をハンダ付けしてプログラムを書く方法もあります。
        • 毎回毎回ハンダ付けするのは手間がかかるので採用しません。

    マウスの回路図

    そして・・・出来上がった回路図がこちらです。

    次回から、各回路ブロックについて説明します。

     

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    Raspberry Pi Mouse / Cat を遠隔操作(音声通話編)

    1.はじめに

    こんにちは.鈴本です.
    前回の記事「Raspberry Pi Mouse / Catを中継サーバー経由で遠隔操作」の続きとして
    双方向音声通話機能を実装しました.

    構成は前回記事と同様,

    ロボット

    • Raspberry Pi Mouse / Cat
    • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
    • Node.js v10.14.2

    PC

    • Microsoft Windows 10 Home 1803 (64bit)
    • Google Chrome 72.0.3626.121 (Official Build) (64bit) or Firefox 65.0.2 (64 bit)

    中継サーバー

    • Raspberry Pi 3 Model B
    • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
    • Node.js v10.14.2

    通信プロトコル

    • WebSocket

    です.

    また,これも前回同様ソースコードは
    ソースコードを GitHub で公開しています.

    どうやら,ChromeブラウザからPCのマイクへアクセスするには,
    サイトがHTTPSであることが必須なようで,マイクの動作確認はFirefoxのみで行いました.

    2.実装(ロボット→PC)

    Node.jsの以下の2つのモジュールを利用しました.

    ロボット側は

    なかんじで,PC側も

    なかんじ.

    ロボット側ではマイク入力を, mic_input_stream のイベントを監視して取得し,WebSocketに流し,
    PC側ではそれを中継サーバー経由で受け取って,Web Audio APIであるAudioContextで再生しています.

    PC側のコードで,音声が途切れ途切れにならないようになっている部分は,
    WebAudio+WebSocketでブラウザへの音声リアルタイムストリーミングを実装する
    を参考に実装しました.

    3.実装(PC→ロボット)

    ラズパイでのスピーカーでの再生には,Node.jsの

    モジュールを使いました.

    ラズパイにRaspbianをインストールしていると,ラズパイ上のオーディオジャックが簡単につかえるのですが,
    代わりにUbuntuをインストールしている環境では, /boot/config.txt を編集する必要があるようです.
    (出典:How to enable sound on Raspberry Pi 3 running Ubuntu 16 –

    続きを読む ›

    Posted in Raspberry Pi Cat, Raspberry Pi Mouse, ブログ


    shotaのマイクロマウス研修12[オリジナルマウスの設計方針]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作を始めます。

    [前回の記事]ではESP32のSPI機能を使ってみました。

    今回はオリジナルマウスの設計方針を決めます。

     

    オリジナルマウスの仕様

    オリジナルマウスの仕様は[この記事]に書いてます。

    ESP32を使う、というのが一番の重要項目です。

     

    オリジナルマウスの設計方針

    まずはじめに、設計の時間がとても少ないことを考慮しなければなりません。

    全日本マイクロマウス大会は12月はじめごろに開催されるのですが、地区大会がそれよりも早く開催されます。

    [2018年のスケジュール]を見ると、7月頭から地区大会が始まっています。。。

    残りの4ヶ月で迷路を走れるマウスを作らなければなりません。これは厳しい。。。

    ということで、できるだけ頑張らない設計方針を決めました。

    • ESP32のソフト設計・開発に集中する
    • 情報公開できる設計資料を作る

    方針①:ESP32のソフト設計・開発に集中する

    マイクロマウスを実現するには、

    • 走行するためのタイヤ・モータ、壁を検知するセンサー
      • それらを動かす回路
        • 回路を動かすソフト

    を選定・設計・開発しなければなりません。

     

    先程も述べたとおり、大会まで時間がないので・・・

    • 走行するためのタイヤ・モータ、壁を検知するセンサー → HM-StarterKitをコピーする
      • それらを動かす回路 → HM-StarterKitをコピーする
        • 回路を動かすソフト → ここを頑張る!!!

    という方針でマウスを作ります!

    [HM-StarterKit(通称ハムスター)]は弊社アールティが開発・販売するマイクロマウス競技(旧ハーフサイズ)向けの学習キットです。

    HM-StarterKitの回路図は[GitHub]に公開されています。

    そしてなんと、このHM-StarterKitを設計・開発した人が社内にいます! (質問し放題)

    実績があり、情報量も多いマウスをコピーできる貴重な機会なので、この回路図をベースにESP32マウスを作ります。

     

    続きを読む ›

    Posted in DCマウス研修, お知らせ, ブログ, 研修


    shotaのマイクロマウス研修11[ESP32でMPU9250とSPI通信する]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作を始めます。

    [前回の記事]ではオリジナルマウスの仕様を決めました。

    今回はタイトルの通り、ESP32で9軸センサMPU9250とSPI通信をします。

     

    確認すること

    できあがったプログラムがこちらです

    n分クッキングみたいですが、先に完成したプログラムと通信結果を紹介します。

    プログラムは[GitHub]に公開しています。[ESP-IDFのサンプル]をもとに作成しました。

    WHO_AM_I(0x75)の応答のみを実装しています。

     

    通信結果はこちらです。MPU9250からの返答0x71が確認できます。


    SPI通信信号をロジアナで確認した結果がこちらです。

    ESP32からの送信信号0xF5(Readビット(0x80) + WHO_AM_I(0x75))と、MPU9250からの返答0x71が確認できます。

    また、通信クロック500 kHzも確認できます。

    それでは、このプログラムができるまでの過程をここに書きます。

     

    開発環境の導入からHello Worldまで

    は、省略します。公式ページを見れば実施できるため、ここには書きません。

    [ESP-IDF Programming Guide]Get Startedから開発環境(ESP-IDF)を導入してください。

    私は、Linux(Xubuntu 16.04)に開発環境を作りました。使用するESP32のボードは[ESP32-DevKitC-32D]です。

     

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    Raspberry Pi Mouse / Catを中継サーバー経由で遠隔操作

    1.はじめに

    こんにちは.鈴本です.
    Raspberry Pi MouseとCatを遠隔操作するためのシステムを作りました.

    • 同一LANにいなくても操作できる
    • 複数台あったとしても中央集権的に管理できる

    などの要求から,中継サーバーを挟んでPCから遠隔地のロボットを操作できるようにします.

    2.全体像と要求

    全体像は上図のような感じです.
    遠隔地のLAN間でも操作できるように,PCとロボットがそれぞれ中継サーバー(ここではRaspberry Pi)につなぎに行きます.
    そこでデータなどをやり取りして,遠隔操作を行おう,というものです.

    要求は,

    • ロボット,操作PCは静的グローバルIPを必要としない.
    • 中継サーバー1台あれば,複数の通信セッションも開設できる.
    • データを中央で管理できる.
    • LANをまたいだ遠隔操作(NAT超え)も可能である.
    • 可能な限りリアルタイム性を追求する.

    です.

    3.構成
    ロボット

    • Raspberry Pi Mouse / Cat
    • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
    • Node.js v10.14.2
    • ROS kinetic
    • UVC対応カメラ:LOAS MCM-15W or C270 HD WEBCAM

    PC

    • Microsoft Windows 10 Home 1803 (64bit)
    • Google Chrome 71.0.3578.80 (Official Build) (64bit)

    中継サーバー

    • Raspberry Pi 3 Model B
    • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
    • Node.js v10.14.2

    通信プロトコル

    • WebSocket

    のような構成にしました.

    操作コンソールにはブラウザを用いて,リアルタイム性より通信プロトコルはWebSocketを採用しました.
    Webを使うので,サーバーサイドとロボットサイドのコードはNode.jsで実装しています.

    4.環境構築
    ロボットと中継サーバーへのUbuntu Serverインストール

    ロボットも中継サーバーもRaspberry Piなので,公式ページよりRaspberry Pi用のイメージファイルをダウンロードしてきて,SDカードに展開します.
    ここでは Unofficial images の Raspberry Pi 3: ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz (4G image,

    続きを読む ›

    Posted in Raspberry Pi Cat, Raspberry Pi Mouse, ブログ