Monthly Archives: January 2019

マイクロマウス研修(kora編)[14] IOエキスパンダを使ってみる

こんにちは。koraです。

今回は、HM-StarterKitの表示用LEDとスイッチを使用できるようにします。これを使うと、動作確認・センサの調整・探索・最短走行などのモードの確認がやりやすくなります。

HM-StarterKitの表示用LEDはD3~D6の4つ、スイッチはSW2~SW4の3つです。これらは直接マイコンにつながっているわけではなく、IOエキスパンダ(PCA9557PW)というデバイスにつながっています。このIOエキスパンダとマイコンはI2Cを使って通信しますので、まずはI2Cの準備をします。

I2Cの準備
i2c.hとi2c.c

サンプルプログラムのStep7からi2c.hとi2c.cをコピーして、現在のプロジェクトに追加します。そのままだとテストするときにスイッチの状態がわかりにくいので、225行目と226行目を次のように書き換えて、IOex_SWITCH関数でスイッチの状態が読み込まれた際にprintfで出力するようにします。

intprg.c

intprg.cファイルに、externを使ったプロトタイプ宣言を追加します。

そして次の行を、

以下のように書き換えて、I2C関連の割り込みが発生したときにi2c.cの関数が呼ばれるようにします。

I2Cのテスト
my_hm_starterkit.c

インクルードを追加します。

そして、テスト用にmain関数を次のように書き換えます。

プログラムを実行し、問題がなければ写真のように4つのLEDが点灯します。

また、シリアル通信でTeraTerm上にスイッチの状態が画面に出力されます。スイッチSW2~SW4を押すことで、表示される値が変化します。

インターフェースの作成

IOエキスパンダが動作することが確認できましたので、次は使いやすいように、サンプルプログラムのStep7にならってLEDのインターフェースを整えます。

interface.c

i2c.hのインクルードを追加します。

入力した数値を二進数でLEDに表示する関数を追加します。HM-StarterKitのLEDの並びは二進数とは少し異なるので、ビットの順を入れ替えて対応しています。

interface.h

ヘッダーファイルにプロトタイプ宣言を追加して、他のソースファイルからもinterface.hをインクルードすればLED関数を呼び出せるようにします。

init.c

I2C通信とIOエキスパンダの初期化をinit_all関数の中で済ませるために、以下の変更を加えます。まず、i2c.hとinterface.hのインクルードを追加します。

init_all関数に次の行を追加します。

my_hm_starterkit.c

LED関数とinit_all関数の動作を確認します。main関数を以下のように書き換えてHM-StarterKitに書き込みます。

書き込みが終わったら実行します。成功していれば、0から15までの数をLEDで表します。

次回

今回までいろいろ下準備をしてきましたが、次回からいよいよ迷路探索アルゴリズムを追加して、実際の迷路でゴールを探すようにしたいと思います。

続きを読む ›

Posted in DCマウス研修


マイクロマウス研修 Part2(岩本)

こんにちは、岩本です。

今回は、Pi:Co Classic3の電源基板を製作して行きたいと思います。

部品点数も少ないので早速半田付け。どうやら、この左の写真の白いコネクタにLIPOバッテリが接続され、右の写真の2か所の黒いコネクタから他の基板に電源が供給されるようです。

 

次に、メイン基板も作っていきます。メイン基板は、メインの基板だけあり一番部品点数が多いです。極性がある部品も多く、間違えないように付けていきます。

半田付け後半になって、気づいたのですが、Pi:Co Classic3の底板が半田付けする時、超便利です。気付く前までは、箱とかに置きながらやっていたのですが、後半になると基板の表面が部品で凸凹になり、箱に置けなくなってしまったのですが、この底板に置けば絶妙に嵌ります。 なぜ最初に気づかなかった(笑)

 

 

 

 

 

 

 

途中、コネクタを付ける面を間違えるという失態を犯したものの何とか修正して、メイン基板も製作完了しました。

 

 

 

 

 

 

 

次回は、CPU基板・センサ基板と組み立てを行ってい行きたいと思います。

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス学習キット[Pi:Co Classic3]を動かす②

こんにちは。営業部のJooです。
社員研修として弊社が販売しているマイクロマウス学習キット[Pi:Co Classic3]を動かして
前回ははんだ付け・組み立て・LEDの動作チェックまで行いました。

【前回の記事はこちら】

今回は、サンプルプログラムをロボットに書き込み、各動作の確認と迷路を走らせました。

準備するもの

・PC(プログラムを書き込むため)
・CS+(ルネサスマイコンの開発環境ツール※)
・ Tera Term(ターミナルエミュレータ※)
※マニュアルにインストール方法がしっかり記載しておりますので心配いりません。
・障害物(部屋の壁だと傷つく可能性があるため、迷路用の壁の購入をお勧めします)
・クラシックコース(個人では準備が難しいため、試走会に参加しましょう!

サンプルプログラムの書き込み

Pi:Co Classic3はCPUボードにルネサス製RX631 を採用しており環境ツールとしてCS+を推奨しております。
CS+については常にバージョンアップをしているため、私が使用したバージョンを記載しておきます。

図2 CS+のバージョン

サンプルプログラムは下記流れに沿って、ロボットを動かしながら楽しみながら進めることができる内容になっています。
①LEDを光らせる
②ブザーを鳴らす
③スイッチを使う
④壁センサーの数値を見る
⑤モータを回す
⑥壁を認識させながら走らせる
⑦迷路を走破する
ここまでで難しそう…と感じるかもしれませんが(私は不安でした)、プログラミング初心者向けのマニュアルとサンプルプログラムの解説が用意されていますので安心してください。

今回は⑥、⑦にスポットを当てて記載します。

壁を認識させながら走らせる

センサで壁を認識してフィードバック制御しながら走行し、迷路の真ん中を走らせるサンプルプログラムを用います。
壁の有無、距離は、壁センサ用LEDからの反射光をフォトトランジスタで受けることで計測します。この計測値を用いて現在値と目標値(迷路の真ん中)と比較しながら目標値に近づけることを「フィードバック制御」といいます。昨今、ビジネスシーンでも「フィードバック」は聞くようになりましたね。
実際に走らせてみました。

最初は壁に衝突していましたが、パラメータを調整することでコースの真ん中を走ってくれるようになりました。

迷路を走破する

壁を認識できていることが分かったので、実際に迷路を走らせてみます。
ここで、マイクロマウスの基本競技内容を簡単におさらいです。
・始点から終点への走行に要した最短の時間と最短時間達成までの過程、その間の自立性を競う。
・迷路が公開された後で迷路に関する情報をマイクロマウスに提供できない。
・競技中にスイッチ操作等で、迷路に関する情報を修正、あるいは部分的に消去することはできない。
・制限時間内(協議会によって異なる)に5回までの走行が可能。
驚きなのは迷路の情報をロボットは知らないということ。
知っていることは迷路全体の大きさとスタートとゴールの位置だけ。

ではどのようにして走破するのか??サンプルプログラムには2つの探索アルゴリズムが用意されています。
①左手法・右手法(常に左・右側の壁に沿って走行します)
②足立法(始点と終点に壁がないと仮定して最短経路を計算し、その間に壁があれば再計算を繰り返す)
詳しい説明はこちら「shotaさんのブログ」をどうぞ。実際に走らせてみました。

こいつ…動くぞ!
サンプルプログラムを使用して無事に走らせることができました。
これで私も「マウサー」に一歩近づいたかな?※マウサー:マイクロマウスの競技選手

次回に向けて

2018年12月1日に出版した「マイクロマウスではじめよう ロボットプログラミング入門」を用いてさらにロボットプログラミングの理解を深めたいと思います。
本誌は[Pi:Co Classic3]を題材にマイクロマウスをはじめ、各種ロボットに共通するハードウェア、ソフトウェアの基礎、センサーの使い方、各種制御の方法などを紹介し、ロボットプログラミングの基礎がわかる内容になっています。
皆様も如何ですか??


図3 マイクロマウスではじめよう ロボットプログラミング入門

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス研修 Part1(岩本) 

はじめまして、1月からアールティに入社した岩本です。 元々、RoboCupというロボットでサッカーをする大会に参加しており、もっとロボット関連の仕事に関わっていきたくて入社しました。

入社して、初めての研修はマイクロマウス(Pi:Co Classic3)を製作することでした。 RoboCupでは機械加工がメインで活動しておりましたので、回路やソフトウェアの製作がやや自信がありませんが、これから頑張って行きたいと思いますので、宜しくお願い致します。

それでは、Pi:Co Classic3の製作に移っていきます。 まず、Pi:Co Classic3の部品を全部出して、部品チェックです。

どうやら、工程ごとに袋分けされており、部品の名称なども袋に記載されているので、とてもチェックしやすいです。 マニュアルやソフトウェアは、webサイトからダウンロードする形式で、名刺サイズのカードにアドレスが記載されておりました。

マニュアルを読んでいくと最初は、練習用基板で半田付けの練習から行うようです。 正直RoboCupでは、お手伝い程度しか半田付けしたことが無かったので、練習用基板があって安心しました(笑) やり始めこそ少し緊張しましたが、特に苦戦することもなく練習用基板は完成しました。

 

 

 

 

 

 

 

 

この練習用回路は、右側のLEDはスイッチを押すと点灯し、中央のLEDは半固定抵抗の抵抗を変えることで明るさが変わり、左側のLEDはCdSセルを光から隠すと点灯します。 何とか半田付けも問題なく出来る事が確認できましたし、次回からの本番の半田付けもバンバン頑張って行きます。

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス学習キット[Pi:Co Classic3]を動かす①

あけましておめでとうございます(もう遅いですが…)
2019年1月から入社しました営業部のJooです。
この度、弊社大人気製品のマイクロマウス学習キット[Pi:Co Classic3]を用いてロボットの基本を学びながら製品を紹介させていただきます。
[Pi:Co Classic3]のすばらしさをお伝えできればと思いますので、よろしくお願いします。

まずは私の自己紹介から。
私は学生の頃にロボカップ小型ロボットリーグの出場を経験しております。
分野は機械(設計・加工・組立)、少し回路をかじったくらいのレベルです。
学生時代から7年が経過しており(歳がバレてしまいますね…)初心に戻って取り組んで参ります!

マイクロマウス学習キット[Pi:Co Classic3]とは
RT ROBOT SHOPで販売しているマイクロマウス用の学習キットです。


図1 Pi:Co Classic3

はんだ付けから組み立て、プログラムの勉強までできる研修に(私に)最適な学習キットになります。また、マイクロマウスの「いろは」を学ぶこともできます。(購入ページはこちら

準備するもの

手元に届いたハイテンションのまま組み立てたいので下記準備をしましょう。
・はんだ(はんだづけに慣れてない方は鉛入りでもOK)
・はんだごて(30~60W出力)+はんだごて台
・ニッパー(半導体のピンを切るため)

・ドライバ(0番が良い。可変抵抗に使用します)

・テープ(半導体を固定するため)

はんだ付け~組み立て

はんだ付けする基板は4つのユニットに分かれており、電源基板、メイン基板、マイコンボード、センサ基板の順ではんだ付けしていきます。
アールティらしい赤が特徴の基板。


図2 メイン基板の上面図(いっぱい穴が空いてますね)

いきなり本番なの??ってなりますよね。しかも両面ランドタイプの基板。失敗のリカバリが難しい…と思っている方のために、はんだ付け練習基板があります。


図3 練習基板の完成図(無事動作しました。安堵。)

電源・メイン基板のはんだ付けをしていきます。
電源・メイン基板のはんだ付けが完了すると動作チェックポイントがあります。
念のため、バッテリを接続するコネクタ(VccとGND)がショートしていないかチェック。コネクタなどがはんだによってブリッジしていることに気づかず、バッテリから過電流が流れ、昔はよく膨らませたものです。電源を入れる前によく確認してから電源を入れましょう!過信は禁物!


図4 電源・メイン基板の動作チェック(電源LEDが光ってます。安堵)

マイコンボード、センサ基板のはんだ付けをして完成です。
あとは基板、モータ、筐体をドッキングして完成です。

図5 完成品(手の平サイズでかわいいよ)

動作チェック(LED)

動かしたい衝動に駆られて、サンプルプログラムから前方のLEDだけ光らせてみます。(書き込む手順やサンプルも説明書に記載しております)
光った!安堵。

図6 LEDが光っている様子

このキットのすてきポイント。
・練習基板がある。
・部品が小袋に分けられており、作業順に番号が振られている。

図7 小袋に番号が振られている
・部品の位置が写真付きで説明されている。
・極性のある半導体は向きがわかるように説明されている。

図8 半導体の向きもわかりやすい

次回に向けて

キットに同封されているサンプルプログラムを書き込み、ロボットを動かします。

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス研修(kora編)[13]自律走行の実装

あけましておめでとうございます。koraです。

2019年最初の更新です。
年末に自律走行に取り掛かっていたところだったので、今回はその続きで自律走行を実装します。

ブザーの実装

まずは、ブザーを鳴らす関数を作ります。実際にマウスを走らせると、外からはマウスが何を実行しようとしているのか分かりにくくなってしまうので、ブザーでプログラムの進行状況を知らせるようにします。

interface.h

新しくinterface.hというファイルを作って、次のプロトタイプ宣言を追加します。

interface.c

ブザーを鳴らす関数の実体を作ります。新しくinterface.cというファイルを作って、サンプルプログラムStep7のBEEP関数とBEEP_MULTIをコピーします。

自律走行の実装
interrupt.c

machine.hをインクルードするように追加して、サンプルプログラムStep7からint_cmt0関数をコピーします。

int_cmt0関数を書くと長くなってしまうので、ここでは省略します。中身については前回の記事で解説しています。

glob_var.h

直進か回転かを切り替えるグローバル変数を追加します。TURN_DIRは回転モードで使用するグローバル変数です。

static_parameters.h

定数を追加します。

parameters.h

将来的に調整する定数を追加します。

run.h

Step7からrun.hファイルをコピーしてプロジェクトに追加します。

run.c

Step7からrun.cファイルを持ってきてプロジェクトに追加します。

直進走行のテスト
my_hm_starterkit.c

まず、今回追加したヘッダーファイルをインクルードします。

次に待機用の関数を宣言します。wait_ms関数については以前の記事で解説しています。

main関数の中身を作成します。

  1. init_all()で初期設定した後、wait_ms(1000)で1秒間待機し、gyro_get_ref()でジャイロセンサの初期値を取得します。
  2. 次に、マウスが進んだ距離を表すグローバル変数len_mouseをリセットし、straight(SECTION,SEARCH_ACCEL,SEARCH_SPEED,0)で直進します。引数で指定している値の意味は以下の通りです。
  • SECTIONが進みたい距離(マイクロマウスの迷路の1区間=90 mm)
  • SEARCH_ACCELが加速度(1.0 m/s^2)
  • SEARCH_SPEEDが最高速度(0.3 m/s)
  • 0が最終速度(0 m/s)
    1. 最後にwait_ms(1000)で1秒間待機し、MOT_POWER_OFFでモータドライバをOFFにして終了します。

    以上のプログラムを書き込んで、実際に走行した結果がこちらです。

    次回

    今回、マウスが走行できるようになりました。しかし、実際に迷路で走行するためには、動作確認・センサの調整・探索・最短走行など、複数のモードを人間が切り替える必要があります。HM-StarterKitはLEDで選択中のモードを表示できるようになっていますので、次回はこれを使用できるようにします。

    続きを読む ›

    Posted in DCマウス研修