ブロックで ロボットを 走らせる プログラムを 作って みよう
1. 目的
プログラミングと 耳に すると, 言語を 覚えて パソコンの キーボードを カチャカチャと・・・ そんな イメージから 離れて, プログラムの 基本的な 処理や 構造を 並べて 触れて 動かして 感じて もらおうと いう ワーク ショップです.
プログラミングと 耳に すると, 言語を 覚えて パソコンの キーボードを カチャカチャと・・・ そんな イメージから 離れて, プログラムの 基本的な 処理や 構造を 並べて 触れて 動かして 感じて もらおうと いう ワーク ショップです.
本 ワーク ショップでは,ブロック型 言語を 採用 した タンジブルな プログラミング ツール: P-CUBEを 使用 して, 移動 ロボットの ライン トレース プログラムの 作成に 挑戦 します. ライン トレース プログラムを 上手く 作成 すると, ロボットに 搭載 された 左右 2個の 赤外線 センサからの 情報(白/黒)に 応じて 移動 方向を 調整 しながら コース上の 線に 沿うように 動かす ことが できます. ライン トレース プログラムを 完成 させるまでの 過程で いくつかの 単純な プログラムを 作りながら,プログラムの 基本で ある 「順次」 「繰り返し」 「条件 分岐」の 概念を 学びます.
P-CUBEは プログラミング ブロックを プログラム マットの 上に 並べるだけで 移動 ロボットを 制御 する プログラムを 作成 できます. プログラミング ブロックは, 種類や ブロック上に 示された 情報を 手触りや 重さなどで 判別 できるように 配慮 されて います. また 各 プログラミング ブロックには 識別用の RFIDタグが 貼付 されて おり, プログラム マットに 備えられた リーダーバーを 操作 する ことで 配置 情報を 読み取る ことが できます. 読み取り時は 読み取り 位置を 示す 音階が 流れる ため, 耳で 操作が うまく いって いるかを 判断 する ことが できます.
本 ワーク ショップに 使用 する 物品は 次の とおりです. 各 物品の 構成は 前ページの 図中の 物品 番号を 参照 して ください.
◆ ブロック型 プログラミング ツール P-CUBE
- プログラム マット(①)
- プログラミング ブロック(②)
◆ プログラム 情報 転送用 PC(③)
(Visual Basicが 使用 可能な Win機, 要 無線 LAN 機能) & モニタ & マウス
# キーボードは トラブル 発生時 等に 必要
◆ P-CUBE用 移動 ロボット(④)
◆ 移動 ロボット 走行用 コース マット(⑤)
◆ 各種 延長 ケーブル(あった ほうが のぞましい)
- USB-A(オス-メス) 1本 → プログラム マットと 転送用 PC 接続用
- モニタ 出力用 ケーブル(HDMIなど, デスクトップ機の 場合)
- PC 電源用 延長 ケーブル
① プログラム マット
プログラミング ブロックを 並べる ための 枠を 30個 備えた マットです. マット 下部に RFIDリーダを 搭載 した リーダーバーが あります. リーダーバーを プログラム 作成後に マットの 下で スライド させる ことに よって プログラム 構造を 読み取る ことが できます.
② プログラミング ブロック
移動 ロボットを 制御 する ための プログラミング 言語です. ロボットの 移動 方向を 指定 する 「動作 ブロック (4個)」, 動作 時間を 指定 する 「タイマー ブロック (4個)」, 赤外線 センサの 入力 情報 (白 or 黒)に よって 処理を 分岐 する 「条件 分岐 ブロック(左センサ用(青) 2セット, 右センサ用(黄) 1セット)」, 繰り返し 処理を 指定 する 「ループ ブロック (1セット)」が 1式と なります.
③ プログラム 転送用 PC (OS: Win8.1 or Win10)
P-CUBEで 作成 した プログラム 情報を 読み取り, 移動 ロボットに 転送 する ために 使用 します. 読み取り/転送 アプリケーション:ASIOPは Visual Basic 使用.
④ P-CUBE用 移動 ロボット
走行 コースの 色 (白 or 黒)を 見分ける ための 赤外線 センサ 2基, および 駆動用の モータ 2基を 装備 した ロボットです. 制御用 マイコン Arduino Leonardo Ethernetを 搭載 して います. P-CUBEの プログラム 情報は Wi-fi 機能 搭載 SDカード FlashAirに 無線 LANを 介して 書き込まれます.
⑤ 移動 ロボット用 コース マット
白地に 黒ラインを 描いた 走行用 マットです. 直線, および 90°ターンの 2パターンが あり, 組み合わせて 好きな 形状の コースを 作成 できます. サイズは 一辺 30cm 程度で, 手触りで 走行 ラインを 確認 できます.
ワーク ショップに おける 設置・ 準備, 実施は 以下の 手順で 行います.
(ア) プログラム マットを 組み立てる
- ベース マットの レールに リーダーバーを 取り付ける.
- ベース マットの 上に ブロック マットを 設置 する.
(イ) リーダーバー内の RFIDリーダの 上位 インタフェース 基板と 転送用 PCを 接続 ケーブル (シリアル-USB(A) ケーブル: 下図 参照)で つなぐ.
(ウ) 上位 インタフェース 基板の 電源 アダプタを 接続 し LED 点灯 (オレンジ)を 確認 する.
(エ) 転送用 PCを 起動. 上位 インタフェースとの 接続 状態 (ポート)を 確認 する.
- スタート → コントロール パネル → デバイス マネージャー → ハードウェアと サウンド → デバイス マネージャー
(オ) 読み取り/転送用 アプリケーション ASIOPを 起動 する.
- デスク トップ 画面 slide_type_program → program_mat_ASIOP → ASIOP_SRC → ASIOP.slnを ダブル クリック
- アプリケーションの 選択では 「Visual Basic Express 2010」で OK.
- 「・・・ この 種類の プロジェクトを サポート する バージョンを 使用 して ください」の メッセージ BOXが 表示 された 場合は 「OK」を 押す.
(カ) デバッグの 開始 ボタンを 押す or F5キーを 押して ASI Series Operation Program を 立ち上げる. ウィンドウ 左 やや 上の シリアル ポート 選択(☆)が (エ)で 選択 した COMポートと 同一で あるかを 確認, 異なって いれば 正しい ものを 選択 する. その 後 Open ボタン(★)を クリック.
(キ) 右上の 「サンプル デモ」 タブを クリック → ASI4000ⅡC インベントリ ボタンを クリック
参加者(生徒)に 課題 内容を 説明 し プログラムを 作成 して もらう. 詳細は 別添の 進行 テキストを 参照.
読み取り/転送 操作の 前に, 移動 ロボットの 電源を 入れ スタンバイ させて おく.
(ア) 移動 ロボットに FlashAirを 挿入 する.
(イ) FlashAir用の 電源 スイッチを ONに する.
(ウ) 転送用 PCの 無線 LANを “p-cube flash air2”に 接続 する.”
P-CUBEで 作成 した プログラム 情報を 読み取り, 移動 ロボットに 接続 された FlashAir (SDカード)に 書き込みます.
(ア) RFIDリーダを 読み取り 状態に する.
- ASIOP 画面上の 「Re Start」 ボタンを クリック
(イ) プログラム マットの リーダーバーを 奥から 手前に 順次 スライド させて プログラムを 読み取る.
- この とき, 各段 順に 音階 (ドレミファソラシド)が 鳴り, ブロックが 配置 されて いる マスの 番号を 音声で 知らせて くれる.
(ウ) プログラム マットの 全ての 段の 読み取りが 終了 したら 「SDカードに 保存」 ボタンを クリック する.
(エ) 読み取った プログラム 構造が 合致 して いれば OKを クリック, 書き込み 完了 ウィンドウが 立ち上がったら 再度 OKを クリック.
(オ) 移動 ロボットの FlashAirの 電源 スイッチを OFFに する.
(ア) ロボットを 走行 させる 場所まで 持って いく.
(イ) 移動 ロボットの 電源 スイッチを ONに する.
※ この 操作で FlashAirにも 電源が 供給 される.
(ウ) スタート 位置を 決めたら 移動 ロボットの プログラム 実行 ボタンを 押す.
移動 ロボットは 右旋回, 左旋回時に 電子音が 鳴り, モータの 走行音と あわせて 走行 状況を 確認 可能.
[7] 走行後は 移動 ロボット上の Arduinoの 電源を OFFに する. 次に 新しい プログラムを 作成 し 実行 する 場合は FlashAirの 電源 ボタンを ONに して おく.
◇ プログラムを 実行 した 後, 移動 ロボットに 新しい プログラム 情報を 書き込む 場合, Arduinoの 電源を OFFに し, FlashAirを 再起動 しなければ 書き込みが できません.
◇ 他の Wi-fiが 飛んで いる 場合は 接続 するまで 時間を 要する 場合が あります.
次の 内容を ブロックの 配置と 移動 ロボットの 動作を 確認 しながら 理解 する ことを 目標に します.
・ 動作 処理に 時間 指定を 入れなければ 移動 ロボットが 動かない.
・ 移動 ロボットは 命令を 上から 順に 実行 して いく.
・ 処理を 繰り返す(無限 ループ) ことが できる.
・ 条件に よって 処理を 変える ことが できる.
プログラムは, コンピューターの マウスや キーボードを つかって やる ものと 思って いる 方も いるでしょう. しかし, この ワーク ショップでは, マウスや キーボードを つかわずに, 木の ブロックを ならべて 移動 ロボットを うごかす プログラムを つくります. 木の ブロックを つかって プログラムを つくる 道具の ことを P-CUBEと よびます. うまく ゆけば, ロボットが 走行 コースから はみださないように じぶんで うごきを 調節 する プログラムが つくれます.
ワーク ショップは, 導入, プログラムの つくりかた, 練習 問題, アンケートの 順で すすめます. 導入では, 移動 ロボット, 走行 コース, プログラム マット, および P-CUBEで つかわれる プログラミング ブロックを かくにん します.
これから P-CUBEを つかって プログラムを つくる まえに, つかう ものを たしかめて おきましょう. たしかめる ものは 「移動 ロボット」 「走行 コース」 「プログラム マット」 「プログラミング ブロック」の 4種類です.
ワーク ショップで とりくむのは プログラミングです. プログラムで うごかすのは 移動 ロボットです. まず, 移動 ロボットを さわって ロボットの “まえ”と “うしろ”を 確認 しましょう. フチが まるい ほうが まえ, 直線の ほうが うしろです.
ロボットの うしろよりの ひだりと みぎに それぞれ 1基ずつ, モーターで まわす 大きな 車輪が ついて います. ひとつの 車輪に 1台の モーターが ついて います. 車輪が 回転 する 方向を 調節 すると 前進, 後進(バック), 右旋回, 左旋回と すすむ 方向を かえる ことが できます. これは ロボットの 足ですね.
移動 ロボットには 目の 役割を する 赤外線 センサーと いう ものも ついて います. ロボットの 前の 下, ひだりと みぎに 1つずつ あります. 赤外線 センサーを つかうと ロボットの したに ある 道の 色を 見わける ことが できます. じょうずに プログラムを つくると, 黒い 線に そって ロボットが うごいて くれるように なります.
移動 ロボットを 走行 させる コースは, 白と 黒で ぬりわけられて います. いちど 走行 コースを さわって みましょう. スポンジのような やわらかさが ある ところと 紙で さらさら した ところが あるのが わかるでしょうか. スポンジのように やわらかい ところが 黒色, 紙の さらさら した ところが 白色です.
プログラム マットは, P-CUBEの プログラミング ブロックを はめこんで ならべる ための マットです. プログラム マットには 30個の 枠が あり, プログラムを つくる ときは, 上(とおい ほう)から 下(てまえ)に 向かって ブロックを おいて いきます. いちばん はじめ (プログラムの さいしょ)の ブロックは, 下の 図の 赤い まるで かこまれた ところ, もっとも 上の 段の 左側の わくに 入れます. さいしょに たしかめて おきましょう.
P-CUBEは, 木の ブロックを 並べて 移動 ロボットの プログラムが できる 装置です. ブロックは 「プログラミング ブロック」と よばれ, 移動 ロボットに 指示 する 内容に よって つかいわけます. プログラミング ブロックの 種類を じゅんばんに たしかめて いきましょう.
移動 ロボットの うごく 方向を 指定 する ための ブロックです. スギで できて いて 立方体のような 形を して います. さらさら して いて 木の かおりが するのが わかるでしょうか.
なにも 凹凸が ない 面が 上と 下です. 上側の 角は ななめに きりとられて いて すぼまって いるのが わかるでしょうか. つぎに 凹凸が ある 横側の 側面に うつります. 側面は ぜんぶで 4面 あります. それぞれの 面が 「前進」 「後進 (バック)」 「右旋回」 「左旋回」を あらわして います. どの 面が どんな 動作か わかるでしょうか. 凹凸は 矢印の かたちを して いて, スポンジ状の やわらかい ところが さす むきが 移動 ロボットの すすむ 方向を あらわして います.
タイマー ブロックは, 移動 ロボットの 動作 時間を 設定 する ための ブロックです. もちあげて みましょう. どうさ ブロックと おもさや てざわりが ちがうのが わかるでしょうか. タイマー ブロックは コルクと いう かるい 材料で できて います. かたちは どうさ ブロックと おなじです. 角が ななめに きりとられて いて すぼまって いるのが 上側です. 側面 4面には 動作 させる 時間の ながさを あらわした 砂時計が 凹凸で かかれて います. 4つの 凸が ある 面が もっとも ながい 動作 時間, 1つしか 凸が ない 面が もっとも みじかい 動作 時間を あらわして います.
くりかえし(LOOP=ループ) ブロックは, 移動 ロボットの 動作を 持続 させたい ときに 使います. さわって みると どうさ ブロックや タイマー ブロックに くらべて 大きくて おもい ことが わかるでしょうか. くりかえし ブロックは, ケヤキで できて います. 2つの ブロックが ひもで つながれて 対(セット)に なって います. くりかえしたい 処理, たとえば 「前進」などを 対(セット)の ブロックで はさみます. あいだに はさむ ブロックの かずは, プログラム マットに はいる 範囲で あれば 制限は ありません.
IFブロックは 「イフ ブロック」と 読みます. 日本語で 「もしも ブロック」と よんでも よいでしょう. この ブロックは 移動 ロボットの 状態に よって ロボットの うごきを かえたい ときに つかいます. 移動 ロボットに 赤外線 センサーが ある ことは ロボットに さわった ときに 確認 して いるでしょう. たとえば, この 赤外線 センサーから よみこまれた 情報が 白 (さらさら)か, 黒 (やわらかい)かに よって 移動 ロボットの うごきを 「白の ときは 前進, 黒の ときは 右旋回」などと かえたい ときに つかいます.
IFブロックも くりかえし ブロックと おなじように, 2つの ブロックが 対(セット)に なって いて, 条件に よって かえる 処理を 「はじまり ブロック」と 「おわり ブロック」で はさみます. 「はじまり ブロック」は, 手で ふれる 面が ひしがたに ちかい かたちを して います. 「おわり ブロック」は, 半円に 近い かたちを して います. 「はじまり ブロック」の 上面は 白色と 黒色で 分かれて いますが, これは ロボットの 走行 コースの 白色 (さらっと した 紙)と 黒色 (やわらかい スポンジ)と 同じ 材料が 使われて います. 手触りで 確認 して みて ください.
「はじまり ブロック」は, ロボットに ある 赤外線 センサーの みぎ用と ひだり用で わかれて います. それぞれの ブロックの 色は きいろ(右)と あおいろ(左)で ぬりわけられて います. また, 赤外線 センサーの 位置 (みぎか ひだりか)と おなじ側が おもく なって います. ほかにも 赤外線 センサーの ばしょと おなじ側, ブロックの うえに ちいさく まるい 凸が あります. 手ざわりでも 確認 して みましょう. 「はじまり ブロック」は, はめこむ ときの むきが きまって います. 上(むこうがわ)に くる 面には, 手で もつ ときの 指の くぼみが あります. また, 「おわり ブロック」は まるい ほうが 下(てまえ)です.
さいしょに どうさ ブロック(前進)を 1個, プログラム マットに 配置 して みましょう. ロボットは 動くでしょうか. 動かない はずです. なぜでしょう・・・?
移動 ロボットを 動かす ためには, タイマー ブロックを 使って みる 方法が あります. さきほど 【プログラム 1】で 置いた どうさ ブロックの 右側に タイマー ブロックを 置いて みましょう. ロボットは どんな 動きを するでしょうか? また, 時間が あったら タイマー ブロックの 置く 面を 変えると 動きは どのように 変わるでしょうか?
さきほどの プログラム(【プログラム 2】)では, ロボットが 動いた あと, すぐに 止まって しまいます. ロボットを 動かしつづけたい とき (たとえば, ずっと 右に 旋回 させつづけたい とき)は, 「くりかえし ブロック」を 使う 方法が あります. では, くりかえし ブロックの 片方を 一番 上に 置き, 次に どうさ ブロック (右旋回 させつづけたい ときは 右旋回を 上に)を 置きましょう. その 下に くりかえし ブロックの 片方を 置いて どうさ ブロックを はさんで みたら, ロボットを 走らせて みましょう.
これまでの プログラムでは, ロボットは プログラム マットの うえに おいた どうさ ブロックの 方向にしか うごけませんでした. ロボットが コース ラインに そうように うごく ためには, ラインから はずれないように うごく 方向を 調整 しなければ なりません. ラインから はずれて いるかは 赤外線 センサーを つかって ロボットの したに ある 色を 見わける ことで 判断 します. 色に よって うごく 方向を かえながら ラインに そって うごく プログラムの ことを ライン トレース プログラムと いいます. 赤外線 センサーが よみとった 色に 応じて うごく 方向を 変えるには IFブロックを つかいます.
まず, IFブロックを ひとつ (右センサー/左センサーの どちらでも 構いません) つかった ライン トレース プログラムに 挑戦 して みましょう. コースは 四角い 周回 コースです. IFブロック (はじまり)の 下には, ロボットの 赤外線 センサーから 読み取られた 情報に 応じた どうさ ブロックを 置きます. こう する ことで, センサーからの 条件に よって ロボットは 動く 方向を 変えます. さて, ロボットの 下が 白色 (さらさらの 紙)の ときと 黒色 (やわらかい スポンジ)の とき, それぞれ どの どうさ ブロックを 置けば, コースに 沿って 走るでしょうか. ここで 注意 しなければ ならないのは, IFブロックと どうさ ブロックだけでは, ロボットは 動きません. どの ブロックが 必要でしょう?
【プログラム 4】では 赤外線 センサーを 1個だけ 使いました. さいごに, 赤外線 センサー 2つを 使う 方法を 考えて みましょう. コースの ラインは 黒色 (やわらかい マット)ですか? それとも 白色 (さらさら した 紙)ですか? ロボットに ある ふたつの 赤外線 センサーで コースの 線を はさむように して 走らせる ことが できる はずです. <右, 左>の 赤外線 センサーが 読んだ 情報が <黒 (やわらかい), 黒 (やわらかい)>の とき, <白 (さらさら), 白 (さらさら)>の とき, <黒 (やわらかい), 白 (さらさら)>の とき, <白 (さらさら), 黒 (やわらかい)>の とき, それぞれ どのような 動きを すれば よいか 考えて みて ください.
こたえは つぎの ページ
さて, あたらしい コースを 用意 しました. さっき 【プログラム 5】で とりくんだ ときと コースの 色 (やわらかい ところと さらさら した ところ)が 逆に なって いるのが わかりますか? では 赤外線 センサー 2個を つかって コースに そって はしる プログラムを つくって みましょう.
こたえは つぎの ページ