Blog Archives

shotaのマイクロマウス研修29 ESP32マウスでLチカ

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

前回の記事ではHello World!のサンプルプログラムを実行しました。

今回はHello World!の編集方法を書きます。その後GPIOのサンプルを編集し、マウスのLEDを点灯させます。

続きを読む ›

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

shotaのマイクロマウス研修28 ESP32マウスでHello World!

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

全国大会で完走したので研修は終わりましたが、本ブログはプログラムの説明が終わるまで続けます。

今回の記事では、ESP32を搭載したマウスでHello World!を実行する方法を書きます。

続きを読む ›

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

M5Balaを分解してみた – 元Web屋のマウス製作記 Part.13

ししかわです。

研修の一環で、マイクロマウスを基板から自作します。

記事一覧

私のマウスはM5Stackの拡張モジュールとして作る予定ですが、「本体とモジュールの通信をどうするか」「モータやセンサをどのように制御するか」のイメージがまだ付いていません。そこで、学習のためにM5Stack公式のモジュールを分解して仕組みを観察しました。

今回分解したのはM5Balaという、2輪でバランスを取るロボットカーです。倒立振子ともいいます。

国内ではスイッチサイエンス等から購入できます。
マイクロマウスではありませんが、エンコーダ付きのDCモータやバッテリー等共通する部品も多いです。

公式ドキュメントにはモジュール内部の回路図等は見つかりませんでした。
実際に分解して使われている部品等を確認したいと思います。

 

モジュール側にPOGOピンというバネ付きのピンが4本生えています。
本体とモジュール間はこの4ピンのみで繋がっていて、I2Cプロトコルで通信します。

本体上面や側面に空いている穴はLEGO TECHNIC互換になっています。
M5Stackのセンサユニット等、他の部品もこの穴が空いている物が多く、ブロックを使って自由に固定、拡張できます。

ではモジュールを分解していきます。

①モジュール下部のネジ4本を外します。

②モジュール本体とモータを繋ぐケーブルを外します。
画像のように、モータと車輪部分は別部品になっていました。

③左右のモータと車輪を取り出します。
モータの軸に磁石、その側面にエンコーダが2つ取り付けられています。モータはN-20という型番でした。
さらにモータとエンコーダのセットがAliExpressで販売されているのを見つけました。
この部分はM5Stackオリジナルではなく、この単位で流通していると思われます。

④続いてモジュール本体側です。六角レンチを使ってネジを4本外します。

基板が見えました。

モジュールの基板側にマイコンが搭載されています。
Atmel社のATmega328Pというマイコンです。Arduinoでよく使われます。
基板側面の6ピンのコネクタを経由してファームウェアを書き込めるようになっています。
(ただし、ファームウェアのソースコードは公開されていませんでした)

そのほか、次の部品が使われていることを確認できました。

  • モータドライバ:L9110 x2個
    • 他のモータ搭載モジュールでも使われています(別記事で言及予定)
  • バッテリー(550mAh@3.7V)
  • バッテリー制御IC:IP5306
  • 16MHzのクリスタル:型番不明

M5Balaを分解して基板を観察しました。
設計上、次の点が参考になりました。

  • モジュール側にもマイコンを搭載し、M5Stackとは最小限のピンで接続している
    • モータ駆動やセンサ通信処理をモジュール側に任せられる
    • 基板にファームウェア書き込みのコネクタを搭載することで、組込後に開発ができる
  • モータとエンコーダ部分を別部品としている
    • 簡単に交換できる
  • M5Stackや他のモジュールと同じ部品を使っている
    • 部品やドライバプログラムの再利用ができる

特に「モジュール側にもマイコンを積んでモータやセンサとの制御を任せる」の部分は真似したいです。
(マイクロマウスでよく使われるSTM32を使いたいと考えています)。

以上です。

続きを読む ›

Posted in DCマウス研修
Tags:

安江の自作マウス製作記【Part.01】-コンセプト決め

<公開中のブログ一覧>

こんにちは!安江です。

前回までは[Pi:Co Classic3]を使ってマイクロマウスについて勉強してきましたが、弊社の研修はあくまで自作マウスで全国完走することが目的です。

よって、今回からは自作マウス制作記として、新たにブログを書いていきたいと思いますので、よろしくお願いします!

 

まずは自作マウスのコンセプトを決めよう!!

半年間、いろいろな大会で皆さんのマウスを拝見して自作マウスの構想を練ってみました。

アールティの研修&初の自作マイクロマウスになるので、この機会に色々とお勉強をしようと思いコンセプトを下記としました!(全国大会後の打ち上げで決めましたw)

  • ESP32を実装した、クラシック競技用マイクロマウスを作る
  • 吸引マウス作りたい(吸引ファンの設計にこだわる!)
  • MATLABを使えるようにする(デバッグし易いのは正義!)
  • プログラミングのお勉強します(マウスに向かないって聞くけどMicroPython面白そう)
  • 機械設計段階の作りこみを頑張る!(宇宙人の皆さんから大事だぞと聞いたので)
  • 全国大会で完走できるスケジュールを計画して実行する

 

自作マウスの仕様を決めよう!!

具体的な使用部品はまだまだ未定ですが、僕の自作マイクロマウスの仕様は下記となります。

  • 機体名:Katzenkerl(カッツェンケール)
  • クラシック競技用吸引マイクロマウス
  • 基板:検討中(KICADで設計予定)
  • マイコン:ESP-WROOM-32D [shop] [datasheet]
  • 壁センサ:発光ダイオード@検討中
  •      フォトトランジスタ@検討中
  • ジャイロセンサ:未定(MPU-6050を予定してたけどディスコン・・・)
  • エンコーダ:モータに付属
  • モータ:駆動用@Faulharber 1717T 006SR –

続きを読む ›

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


shotaのマイクロマウス研修27 全日本大会完走!研修修了!?

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

[前回の記事]では、全日本大会の出場権を獲得したことを書きました。

今回は全日本大会に出場し、どんな走りをしたのかを書きます。

続きを読む ›

Posted in DCマウス研修, ブログ, 大会情報, 研修


自作マウスの計画を立てる – 元Web屋のマウス製作記 Part.12

ししかわです。

社員研修の一環として、基板からマウスを自作していきます。
来年のマイクロマウス全日本大会での完走を目指します。

記事一覧

今回から自作マウス編がスタートです!

さて、「マイクロマウスを1から作ってください」といわれたら皆さんはどうするでしょうか。

  • コンセプトは?
  • 部品は何を使う?(マイコン、センサ、モータ…)
  • どうやって制御したら良い?

やることが多すぎて、何から手を付ければよいか迷ってしまいます。

そこで、まずは計画を立てました。
キット編のときと同様に、今回もソースコードと工程管理はGitHubで行います。
ただし、前回は大会ごとにマイルストーンを置きましたが、今回は大会がしばらく無いので、
約1~2ヶ月おきにマイルストーンを立てて、目標を設定します。

各バージョンのコードネームは、マイクロマウスに多大な貢献をされているナムコ(現・バンダイナムコエンターテインメント)の初期のアーケードゲームから拝借しました。

次に、直近のマイルストーンを対象に、目標を達成するためのタスクを洗い出します。
基本的なコンセプトはすでに立てているので、最初のマイルストーンは「とにかく必要な部品を揃えて、繋いで、動かしてみる」ことを目指します。
各タスクはIssueとして起こします。

社内ではIssueからガントチャートを生成するツールが使われ始めているので、これを活用してみます。

一人プロジェクトなので、ガントチャートのバーが重なるのは基本的にはやっちゃだめ(分身している)なのですが、
モチベーションを保つために「インプット(書籍等で勉強する、調べる)」と「アウトプット(設計、実装など手を動かす)」が
1個ずつなら重ねて良いことにしました(その分各タスクの工期を2倍にして薄めます)。

大会まで1年というと長く思えますが、計画を立ててみるとなかなか時間が厳しいことがわかりました。
こうしてマイルストーンを置いていくと直近なにをすべきかが明らかになるし、
ゴールまでの道のりも認識できるので良いですね。

次回はM5Stackを使ってマウスに必要な部品を動かしていきます。

続きを読む ›

Posted in DCマウス研修


マイクロマウス研修(kora編)[38] 第40回全日本マイクロマウス大会

こんにちは。koraです。

今回は、2019年12月1日に開催された全日本マイクロマウス大会について報告します。

会場は昨年と同じ、東京工芸大学の厚木キャンパスでした。

マイクロマウス競技

全国大会のマイクロマウス競技はファイナルとセミファイナルに分かれており、参加者のうち地区大会で獲得したポイントが多い人はファイナルに出場します。今回は3ポイントがボーダーラインだったらしく、運よく3ポイント獲得していた私はファイナルに出ることになりました。

ファイナルは32×32区画のサイズで、今までの迷路の4倍の面積があります。手ごわい相手ですが、これまでの改良で走破できるだけの性能はあるはずです。

実際の結果がどうだったかというと…

  • 第1走:多少ふらついていはいましたが、壁を読み違えることなく完走できました。
  • 第2走:南回りのルートで最短走行を試みるも、途中で壁に引っかかってリタイアしてしまいました。
  • 第3走:再度最短走行を試しましたが、同じ場所で引っかかってリタイアしました。迷路の段差とカーブが重なって曲がりきらなかったようです。
  • 第4走:重ね探索で他のルートを探すことにし、北回りのルートを見つけてゴールしました。
  • 第5走:最後に北回りの最短走行にトライしたが、残念ながらこれも壁に引っかかって終了となりました。


結果としては、第4走の「00:53.301」が記録として残り、成績は14位となりました。

技術交流会

競技の後は技術交流会が開かれました。毎度のことですが、皆さん作り込みはすごいです。見比べると自分のマウスの改良すべき点に気づかされます。車体自体もっと小型化できるはずですし、車軸のブレも直せるはずです。ブザーはあったほうが良かったし、欲を言えば吸引機構も欲しいです。

おわりに

今回で、社員研修としてのゴールであった「全国大会での完走」は達成することができました。
これにてマイクロマウス研修は修了となります。

しかし、この大会で最短走行を決められなかったのは心残りです。また、ハードウェアから作り直したい部分がたくさんあって、このまま終わらせることはできそうにありません。まだまだマウスは続けていこうと思います。

続きを読む ›

Posted in DCマウス研修


マイクロマウス研修(kora編)[37] STM32F7のFlashにマップデータを保存する

こんにちは。koraです。

前回までの投稿で迷路探索ができるようになりました。今回は迷路の壁情報をFlashメモリに書き込む方法についてまとめます。
マイコンのRAMに保存されている情報は電源を切ると消えてしまいますが、Flashメモリに保存しておけば電源を入れなおした後でも読み込むことができます。

STM32のFlashメモリの基本的な使い方は、idさんのブログを参考にさせていただきました。

STM32F7のFlashメモリについて

私のマウスはSTM32F7を使用しているので、公式のマニュアルを参照します。68ページ目にFlashのSector表が記載されていました。STM32F732には、全部で7つのSectorがあり、Sector 0~3は16Kbyte、Sector 4は64Kbyte、Sector 5~7は128Kbyteのサイズになっていることがわかります。

ただし、どのSectorでも自由に使えるというわけではなく、Sector 0にはシステムによって割り込みベクタテーブルが配置されるそうです。なので、Sector 1にマップデータ、Sector 2以降に実行プログラムが書き込まれるようにリンカスクリプトを編集します。

リンカスクリプト

STM32CubeMXとSW4STM32を使った環境では、プロジェクトディレクトリの直下にある.ldファイルがリンカスクリプトです。

MEMORYコマンド

リンカスクリプトではMEMORYコマンドでメモリ領域を定義しています。デフォルトではRAM領域とFLASH領域のみ定義されていますが、まずこの部分を変更します。
RAM領域はそのまま、新たにFLASH_SECTOR0とFLASH_SECTOR1を追加します。また、元のFLASH領域の開始アドレスをSector 0の0x80000000からSector 2の0x8008000に変更し、領域のサイズを512Kから480Kに変更します。

SECTIONコマンド

次に以下のSECTIONSコマンドを変更します。

.isr_vectorは割り込みベクタテーブルを表していて、STM32CubeMXで生成されたコード内で定義されています。先ほどFLASH領域をSector 2~7に変更したので、割り込みベクタテーブルがSector 0に配置されるようFLASHをFLASH_SECTOR0に変更します。

.backup_flashが今回マップデータを保存するセクションです。これをFLASH_SECTOR1に配置します。また、_backup_flash_startという変数にこのセクションの開始アドレスを代入します。この変数は実際にFlashへ書き込む際に使用します。

マップデータの書き込み・読み込み

大まかな流れは次の通りになります。ソースコードはidさんのものとだいたい同じになるのでここでは割愛します。

書き込みの流れ

  1. あらかじめRAM上にマップデータ受け渡し用の領域を確保しておく
  2. マップデータをRAM上の一時領域に展開
  3. HAL_FLASH_Unlock関数でFlashの制御を許可
  4. HAL_FLASHEx_Erase関数でFlash上の指定Sectorのデータを消去
  5. HAL_FLASH_Program関数でRAMに展開されたマップデータをFlashにコピー
  6. HAL_FLASH_Lock関数でFlashの制御をロック

読み込みの流れ

  1. memcpy関数でFlash上のデータをRAM上の領域にコピーする
  2. コピーしたメモリから、マップデータの構造体に落とし込む

おわり

これで探索後のマップデータを保存できるようになりました。電源を入れなおしても重ね探索や最短走行にトライできるので、かなり便利になりました。

続きを読む ›

Posted in DCマウス研修


shotaのマイクロマウス研修26 九州・中部地区大会に参加しました(写真多め)

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

[前回の記事]では、ようやくマウスが完成しました。
筐体ができただけで、プログラムは書いてません。

そして今日の記事では九州地区大会・中部地区大会に参加し、全国大会出場権を獲得したことを書きます。

※マウス製作記事と大会報告記事には2,3ヶ月ぐらい時差があります。

続きを読む ›

Posted in DCマウス研修, ブログ, 大会情報, 研修


shotaのマイクロマウス研修25 基板発注と実装とアートワーク作業の振り返り

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

[前回の記事]では、GitHubを使用した大会振り返り方法について書きました。

[前々回の記事]では、アートワークが完了しました。
今回はアートワークの最終記事です。

部品実装の話と、大反省会です。

続きを読む ›

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