プログラミングCube-D

概要

 楽しみながら「プログラミング的思考」が養えるプログラミング学習キットを開発中です。プログラミングボードに複数のブロックを装着するだけで、逐次処理はもちろん、モジュール化、多重ループ処理、条件分岐処理もプログラムできます。プログラムは「統合ブロック」1つにまとめて移動ロボットに装着します。

特許出願済み、協業メーカ様を募集中

プログラミングボード

 「移動」「右」「左」「時間待ち」などの単機能ブロックを複数装着してプログラミングを行うボードで、エミュレーション機能があります。センサ入力等はスイッチに置き換えられ、出力状態はディスプレイに表示されます。ブロック機能を切替える専用領域があり、切替の仕組みは回路版のCube-Dと同様です。この専用ボードで簡単なデバッグを行った後にプログラム全体を1つのブロックに集約(統合ブロックを装着するだけ)し、これを移動ロボットに装着して動きを確認します。現在は、回路版Cube-Dのベースボードを改造して代用させています。

マイコン基板(ロボット用)

 試作したマイコン基板(70mm x 40mm)には、2chのモータ制御の他に4chの出力ポートがあり、これを使ってサーボモータやLEDが制御できます(3PINのサーボモータコネクタがそのまま装着可)。車体の光センサ2つは入力ポートに接続します(最大4ch)。黒ボタンはリセットスイッチです。また、統合ブロックを1つ装着する領域を設けてあります。ブロックと基板上のマイコン(ARM Cortex M0+)はUARTで接続され、ブロックの出すコマンドを受けてモータやLEDを制御します。これ以外に、3.3Vレギューレータ、ADC用入力用ポート、I2C用専用ポートなどを備えています。

移動ロボット

 DCモータギア2つの上に電池ボックス(単四x3or4)、2chモータドライバ、赤外線光センサx3、マイコン基板、ロボット本体(サーボモータx3、LEDドライバ)が搭載されます。ロボット本体は今のところペーパークラフトで作成して中にサーボモータとLEDドライバを納めています。デジタルパペットの台座も装着できます。移動の必要がなければ、電池ボックスとマイコン基板とロボット本体だけの構成でも動作可能です。

プログラミング例

PCを使わずにブロック装着だけでプログラミングを行った例を紹介します。

■見えない檻

車体裏の光センサを使って白の場合は直進、黒を検出すると右回転して進行方向を変えます。アルゴリズムは単純ですが、見えない檻の中に閉じ込められた動物が出口を探して右往左往しているようにも見えます。黒線はある程度太くしておく必要があります。

ブロックの接続は左の通りです。最初にモータの速さを4段階のうち真ん中の2に設定し、前進ブロックでモータを回転させます。次にセンサ2(裏面センサ)が黒を検出するまで待ちます。黒を検出したら右回転で0.4秒経過後に、最初の前進ブロックに戻り、処理を繰り返します。


■ライントレーサー

「見えない檻」で使った黒ラインシートを使って、ライン上をトレースするように動くライントレーサを作ります。センサが黒を検出したら右旋回(左モータのみ動かす)、白の場合には左旋回(右モータのみ動作)させます。これで黒ラインの境界線に沿って車体を動かすことができます。モータのスピード設定は低速にしてありますが、

これはモータを早く動かすと車体の揺れが強くなって曲率が小さい箇所でトレースできなくなってしまうからです。センサを2つにするともっとスムースな動きが実現できます。

ブロックの接続は左の通りです。最初にスピード設定を1にして、センサ2(裏面センサ)の状態に応じて処理が分岐します。黒を検出した場合は右旋回(待ち時間は0)設定後、ジャンパ線を使ってセンサ分岐処理に戻ります。センサが白を検出したら左旋回(待ち時間は0)設定後に、同じジャンパ線を使ってセンサ分岐処理に戻ります。これを繰り返します。ジャンパ線を使わずに接続ブロックで繋げても問題ありません。


■迷路脱出

車体横と全面の光センサを使って右側の壁に沿って移動する動作を実現してみました。これは迷路脱出の一つの方法です。迷路はマイクロマウス(ロボットの迷路脱出コンテスト)のクラシックサイズ(1区画18cmx18cm)に合わせてスチレンボードで作成してみました。本来は16x16区画なのですが動きを確認するのが目的なので3x3の最小サイズにしてあります。もっと大きなサイズでも動作的には問題ないはずです。

ブロックの接続を左に示します。最初に前進設定後、まずセンサ0(前面センサ)で正面に壁がある場合には左回転を0.4秒行い進行方向を変え、ジャンプブロックで最初に戻ります。袋小路に入った場合に抜け出すための処理です。センサ0が未検出だった場合、センサ1(右側面センサ)でもう一度分岐を行います。右側に壁を検出した場合に壁から離れるように右モータの速度を上げます。逆に右側に壁を検出しなかった場合は壁に近づくように左モータの速度を上げます。そしてジャンパ線を介してセンサ0による分岐処理にジャンプします。ライントレーサーのように右左の旋回ブロックを使ってもよかったのですが、できるだけ迷路脱出スピードを上げたかったので左右モータの回転速度変更を取り入れました。たったブロック8個のプログラムですがロボットが知性を持ったように感じませんか?


■サーボモータ制御例

挨拶ロボット

右側光センサが検知すると右手を上げ頭を右に回して目を2回点滅させます。左側光センサが検知すると左手を上げ頭を左に回して目を2回点滅させます。どちらも検知しない場合は正面を向きます。

ロボットの体と頭はペーパークラフトで作ってあります。ただしロボットと基板の連結部分および腕は強度が足りないので3Dプリンタで作成しました。

ダンシングロボ

ロボットが頭と腕を振りながら踊る様子をイメージしてプログラムしてみました。一区切りのループ処理をモジュール化し、そのモジュールを組み合わせて動きを作り出しています。

オオハシ(デジタルパペット)

プログラミングカーにデジタルパペットを載せてみました(パペット台座と基板の連結部分は3Dプリンタで作成)。オオハシが餌をついばみながら移動する様子をイメージしています。

恐竜(デジタルパペット)

プログラミングカーにデジタルパペットの恐竜を載せてみました。恐竜がのしのし歩くさまをイメージしてみました。

ご感想やご要望がございましたら下記フォームよりお知らせください。

メモ: * は入力必須項目です