前進をしながらカラーブロックの色を読み取るプログラム~レゴマインドストーム~
Contents
前進しながらカラーブロックを読み取る
レゴマインドストームEV3で「停止をせずに前進をしながらランダムに置かれた4色のカラーブロックを読み取るプログラムはどの様に書くのか?」との質問が来たので試してみた時の備忘録。
以下の前提条件とする。
- カラーブロックは4色(赤、青、黄、緑)
- 置かれる順番はランダム
- 停止せずに前進をしながらカラーブロックを読み取る
- 4色を読み取った後に読み取った順番でカラーを読み上げる
黒ライントレースをしながらカラーブロックを読み取るプログラムの記事を書いた。
本体
本体はトレーニングロボットをベースに組み立てた。
地面に置かれたカラーブロックを前方中央のカラーセンサーで読み取る前提としている。
※カラーセンサーを横に付ければトレーニングロボット横のカラーブロックを読み取る事も可能
プログラム
全体図
プログラムの全体図は以下の通り。
- 処理群1:トレーニングロボットが4色読み取るまで前進させる。4色読み取ったら順番に読み上げる
- 処理群2:カラーセンサーにてカラーブロックを読み取った順番に数値配列に格納する
処理群1
1 | 処理スタート(処理群2とは非同期で同時に実行される) |
2 | 処理5の結果(Count変数が4以上)が真になるまで繰り返す
|
3 | ステアリングブロックで前進する
|
4 | Count変数を呼び出して処理5にデーターワイヤーで出力する 尚、Count変数は処理群2でカウントアップされている
|
5 | 処理4の値 >= 4の結果(”真” or ”偽”)を処理2のループの終了条件に出力する
|
6 | ステアリングブロックでトレーニングロボットを停止させる
|
7 | 4回繰り返す
ループインデックス(0からの連番)を処理9の配列操作ブロックのインデックスに出力する |
8 | Color数値配列を読み込む
|
9 | Color数値配列を処理7のループインデックス(0→1→2→3)の順番で取り出して中の値を処理10のスイッチの数値に出力する
|
10 | 数値の値に応じて4つの処理に分岐する
|
11 | 数値が2の時に音声ブロックで「Blue」と再生する
|
12 | 数値が3の時に音声ブロックで「Green」と再生する
|
13 | 数値が4の時に音声ブロックで「Yellow」と再生する
|
14 | 数値が5の時に音声ブロックで「Red」と再生する
|
15 | 1秒間待機する
|
処理群2
1 | 処理スタート(処理群1とは非同期で同時に実行される) |
2 | Count変数をゼロリセットする
|
3 | color数値配列を空にする
※数値配列についての詳細はこちらの記事を参照 |
4 | 処理18の出力結果(Count変数が4以上か)が真になるまで繰り返す
Count変数が4以上になるとループを終了する |
5 | カラーセンサーで読み取った色毎に5パターンに分岐する
※その他の色を初期条件に設定しておく |
6 | color数値配列変数を読み込む
|
7 | Count変数を読み込む
|
8 | 配列操作ブロックでcolor数値配列にインデックス指定で色(数値)を書き込む
青、緑、黄、赤の色をカラーセンサーで検知する度にCount変数は0→1→2→3とカウントアップされている 例えば最初に検知された色が青の場合、color数値配列の0番目に2(青色)がセットされる 次に検知された色が赤の場合、color数値配列の1番目に5(赤色)がセットされる |
9 | color数値配列にカラーセンサーで検知した色を数値で書き込む
|
10 | 青色以外が検知されるまで待機する
トレーニングロボットが青のブロックの上を通過するまで待機する このブロックを入れないと連続で青(2)がcolor数値配列に書き込まれてしまう |
11 | Count変数をカウントアップする為に読み込む
|
12 | 数学ブロックでCount変数に1を加算する
|
13 | Count変数にカウントアップ結果を書き込む
|
14 | 処理5で緑を検知した時の処理群 処理6~13と色の指定以外は同じなので説明は割愛する |
15 | 処理5で黄を検知した時の処理群 処理6~13と色の指定以外は同じなので説明は割愛する |
16 | 処理5で赤を検知した時の処理群 処理6~13と色の指定以外は同じなので説明は割愛する |
17 | 処理5で青、緑、黄、赤以外が検知された時の処理群 色ブロックを検知していない時はこの分岐が実行されて何も処理は行わない |
18 | Count変数を読み込む
|
19 | 比較ブロックでCount変数が4以上かどうかを判定する
|
動作結果(動画)
プログラムの動作の様子を動画にしているので確認してみて欲しい。
動画ではうまく動作したものだけを編集しているが実際にはカラーセンサーの真下にカラーブロックが無い場合(走行ラインがずれている)などは正しく動作しなかった。
終わりに
以上で走行しながらカラーセンサーで色を読み取るプログラムを終了する。
もう一つカラーセンサー追加して追加したカラーセンサーで黒ライントレースをしながカラーブロックを読み取るプログラムもそのうち挑戦したい。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
最近のコメント