EV3 Classroomでロボットプログラミング入門【もくじ】

デフォルトアイキャッチ

みなさん、こんにちは。さいたま市にあるプログラミング教室「ツクリウム」です。

さて、今回は、EV3 Classroom入門 レゴ・マインドストームロボットプログラミング入門についての記事です。

本稿はEV3廃版に伴い、授業で使用した資料を修正したうえで発表しています。確認はしておりますが、古い情報や誤記がありましたらご容赦ください。

元はこんな原稿でした。順次、WEB公開の予定です。

はじめに

 2020年の4月に小学校でプログラミング教育が必修化されてから3年がたとうとしています。ただ新型コロナウィルスの世界的流行のためか、休校措置をはじめとした感染予防策の結果、教育は後回しにされてしまった感もあります。そしてプログラミング教育もその例外ではありませんでした。ただその一方で2021年からは中学で、2022年からは高校で必修化され、そして2025年度からは大学入試の試験科目に導入されるというスケジュールが進行しています。また2021年から導入された大学入学共通テストではそれまでとは傾向が変わりつつあります。従来の暗記型の勉強では通用しにくくなり、文章を読み解く力やそこから推論をした上で答えを出していくという力がより求められるようになってきているのです。言い換えれば、知の在り方が一変しかねない過渡期に我々は生きているのです。


 これは好むと好まざるに関わらず国際間の競争が激化していることと、コンピューターなどの発達により博覧強記型の能力の重要性が減り、それよりも自ら考え答えを見つけ出す力が求められるようになってきているためと思われます。またプログラミング教育で言えば、日本国内では少子高齢化問題があり、この解決策の一つとしてAIやロボットを活用していくためには社会の一人一人がコンピューターに関する基礎教養を求められるためでもあります。しかし百年河清を俟つがごとく実際の教育現場、特に公教育の場では大きな変化は起きていないようにも感じます。それは実際の教務を担当される先生方がプログラミングを理解していない方も少なくないなど実態を無視した教育行政が行われている結果でしょう。そのため現状の小学生から高校生くらいを対象にしたプログラミング教育は実際には私立の学校や塾、そして独学という形であるのがほとんどと思われます。


(現状のプログラミング教育の問題点、そしてロボットプログラミング教育の問題点)
1つは業務で使われているプログラミング言語はほぼ全て英語ベースであるということ。もう一つは習うより慣れろ的な精神主義が横行していて教育効果や方法論という観点を無視していることです。

 さて、ロボットプログラミングを入門用に位置づけるのはその具体性にあります。つまり作ったプログラムの結果として動くロボットがあるということです。このことは子供の発達段階を考えればスクラッチをはじめとするテキストベースの言語の橋渡しとするには1つの手段とは言えます。

 ジャン・ピアジェという名前を聞いたことがあるでしょうか? 著名なスイスの心理学者でフロイトやユングなどと並び20世紀で最も影響力あった心理学者の一人と言われています。そして、ピアジェは、子供の発達段階には次のようなステージを経ると考えました。

 1段階目(感覚運動期:0~2才 :感覚と運動が表象を介さずに直接結び付いている時期
 2段階目(前操作期:2~7才 :他者の視点に立って理解することができず、自己中心性の特徴を持つ。
 3 段階目(具体的操作期:7~12才:数や量の保存概念が成立し、可逆的操作も行える。
 4 形式的操作期(12歳以降:形式的、抽象的操作が可能になり仮説演繹的思考ができるようになる。

 この発達段階説は、かいつまんで言えば、子供は小さい頃は具体的な形を伴うモノが動く結果でしか判断できず、年を経るごとに数式や抽象概念などを扱えるようになっていくということです。

そして、ロボットプログラミング教材の場合、プログラミングの結果が実際に目に見える形で表れるためある程度は有効だと言える、ということです。 (もちろん、高名とは言え、既に没後40年以上たった説ですのである程度の割引は必要だと思いますが。)

 このようにロボットプログラミングは挫折させることなく子供がプログラミングを学ぶには適したものなのですがデメリットがないわけではありません。ロボットそのものの価格も大きな問題ではありますが、それは需給の問題ですのでよりプログラミング教育が普及すれば解消されていく問題です。それよりも大きな問題はロボットプログラミングゆえにプログラミングの基礎からは偏りやすいという点です。もっと具体的に言えばロボット競技に勝つための小手先の技術体系の習得に流れていきやすいのです。そしてその結果、本来の目的であるプログラミングの基礎の習得から外れやすいという問題があるのです。「がんばってロボットプログラムの競技で優勝しました。けれどその知識や技術は他のプログラミング技術では使い物になりませんでした。別のプログラム言語を使いこなすためには、もう一度最初からやりなおさないといけません。」となれば、時間と資源の浪費です。入門用の選択の行きつく先が行き止まりのデッドエンドならば、それはまさしく本末転倒で子供たちに大きな負担を強い、彼らの可能性とチャンスを潰すことになるのです。

 今はまだマインドストームEV3(その後継機のSPIKEプライムも)は高額です。全ての子供たちが触れることはなかなかできないのも事実でしょう。けれど、必修化がなされる以上、潜在的な需要は大きくなることが予想されます。そうなれば量産効果で低価格化されることになるでしょうし、他社の参入やヴァリエーションも多く生まれてくることでしょう。その時に大切なことは、どの教材であってもプログラミング教育の基礎となることです。

 しかし、ビジネス上の戦略で用いられる言語の仕様が必ずしも統一されるわけではありません。かなりマイナーなプログラミング言語であるLabVIEWを選択したEV3 Labもその典型です。
 またプログラミングの世界では技術の進歩の早さにより、テキストもまた日進月歩の書き換えが求められる傾向もあります。それはともすれば、学んだことが陳腐化しやすいということでもあります。しかしそれでは初等教育としてのプログラミング教材としてはふさわしいとは言えず、技術の進化があろうとも変わらない本質的な部分に中心をあてる必要があると私は考えています。そのためその時代時代のポピュラーとなる言語や教材に縛られない汎用的な手段として構造化チャートの一つであるPADを併記することにしました。(もちろん、そうであっても実際のロボットが動かなければ、教科書としての意味が薄れますので実際のEV3 Classroomのコードも記載してあり、必要に応じてそれらは書き換えられる宿命はあります。しかし本質部分をブラックボックス化して学ぶよりも顕在化して学ぶことでその時々の最適な教材への適応もしやすくなると考えています。)

 小中学生のプログラミング初学者は学んだ知識や技術をそのまま流用できる「知の互換性」が重要になります。ありていに言えば「学んだことがそのまま他のジャンルで使える」ということです。その点で言えば、今回扱うEV3 ClassroomはPADと親和的なスクラッチベースの言語ですから、ロボットプログラミングと他のプログラミング方法をつなげるものとして最適なもののひとつと言えるでしょう。


 なお、本稿は既にEV3は廃版となったため、校内で使用していた資料を適時修正したうえで公開したものです。古くなった情報もあるかと思いますがそれらはできるだけ削り、今もそのまま役立つものを残しました。読者の何らかのきっかけになれば著者としては望外の喜びです。


本稿の内容は一通り理解できれば、EV3 Classroomの命令ブロックの基本はマスターできると思います。

 そして、より深く理解するためには各サンプルプログラムを1つ1つの命令ごとに机上で紙とペンでその結果をそのつど書きだしてトレース(追跡)をしてみましょう。また書く代わりに音読することでもよいです。

 これらの作業を机上トレースと言うのですが、こうしたことを繰り返すことで自然と頭の中にプログラミング的思考が養うことができるのでぜひ取り入れてみてください。特に初心者は、サンプルコードを一読だけしてそれでわかったつもりになりがちですので注意が必要です。なぜなら、いざ自分で作るとなるとそうした浅い理解では何をどうしていいかわからない状況になってしまいやすいからです。こうしたことを防ぐためには(一部の天才的な人を除いて)やはり最低限の努力は必要です。この部分の努力をするかしないかがプログラミングを習得できるかいなかの分かれ道なのですから……

 プログラミング言語の命令やソフトの仕組みをおぼえただけではまだプログラムは組めません。やはり一定のやり方や処理の方法(処理の順番や組み合わせ)をある程度は覚えないとならないからです。これらはアルゴリズムやデザインパターンなどと呼ばれています。そこで次のステップに進む段階になった方は、入門~初級レベルのアルゴリズムを学んでみましょう。


もくじ

【EV3 Classroom入門】1-1 モーターを動かす(単位は、回転/度/秒)
https://tsukurium.net/ev3/ev3-classroom1-1-1/

【EV3 Classroom入門】1-2 モーター単体を連続で動かす(ループ処理)
https://tsukurium.net/ev3/ev3-classroom-1-2/

【EV3 Classroom入門】モーター制御1-3 モーター単体を停止させる
https://tsukurium.net/ev3/ev3-classroom-1-3/

【EV3 Classroom入門】1-4 指定したポートのモーターのスピードを設定
https://tsukurium.net/ev3/ev3-classroom-1-4/

【EV3 Classroom入門】1-5 停止時のブレーキの方法を指定する
https://tsukurium.net/ev3/ev3-classroom-1-5/

【EV3 Classroom入門】1-6 スピードを指定してモーターを動かす
https://tsukurium.net/ev3/ev3-classroom-1-6/

【EV3 Classroom入門】1-9 モーターの角度のカウントをリセットする
https://tsukurium.net/ev3/ev3-classroom-1-9/

【EV3 Classroom入門】1-10 指定したモーターの度数やスピードを取得
https://tsukurium.net/ev3/ev3-classroom-1-10/

【EV3 Classroom入門】2-1 車体の制御 前進と後退 その1
https://tsukurium.net/ev3/ev3-classroom-2-1/

【EV3 Classroom入門】2-3 車体の制御 ループ処理で車を前進・後退
https://tsukurium.net/ev3/ev3-classroom-2-3/

【EV3 Classroom入門】2-5 車体の制御 移動スピードを設定する
https://tsukurium.net/ev3/ev3-classroom-2-5/

【EV3 Classroom入門】2-8 車体の前進・後退・左右(旧ステアリング)
https://tsukurium.net/ev3/ev3-classroom-2-8/

【EV3 Classroom入門】2-9 車体の制御 左右に曲がる
https://tsukurium.net/ev3/ev3-classroom-2-9/

【EV3 Classroom入門】3-1 画面表示 画像を表示する
https://tsukurium.net/ev3/ev3-classroom-3-1/

【EV3 Classroom入門】3-3 画面表示 文字や数字を表示する
https://tsukurium.net/ev3/ev3-classroom-3-3/

【EV3 Classroom入門】3-5 表示クリア、LED表示の処理
https://tsukurium.net/ev3/ev3-classroom-3-5/

【EV3 Classroom入門】4-1 音を鳴らす処理
https://tsukurium.net/ev3/ev3-classroom-4-1/

【EV3 Classroom入門】4-3 音を鳴らす処理
https://tsukurium.net/ev3/ev3-classroom-4-3/

【EV3 Classroom入門】5-1 プログラム開始時のイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-1/

【EV3 Classroom入門】5-2 カラーセンサーのイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-2/

【EV3 Classroom入門】5-3 タッチセンサーのイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-3/

【EV3 Classroom入門】5-4 超音波センサーによるイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-4/

【EV3 Classroom入門】5-8 ジャイロセンサーのイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-8/

EV3 Classroom入門】5-9 本体のボタンが押された時のイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-9/

【EV3 Classroom入門】5-10 指定した条件でのイベント処理
https://tsukurium.net/ev3/ev3-classroom-5-10/

【EV3 Classroom入門】5-11 メッセージを受け取った時の処理
https://tsukurium.net/ev3/ev3-classroom-5-11/

【EV3 Classroom入門】5-14 タイマーが(X)秒より大きい場合の処理
https://tsukurium.net/ev3/ev3-classroom-5-14/

【EV3 Classroom入門】6-1 指定した条件だけ待つ、ループ処理1
https://tsukurium.net/ev3/ev3-classroom-6-1/

【EV3 Classroom入門】6-3 ループブロック系の処理
https://tsukurium.net/ev3/ev3-classroom-6-3/

【EV3 Classroom入門】6-4 条件分岐
https://tsukurium.net/ev3/ev3-classroom-6-4/

【EV3 Classroom入門】6-5 プログラムやスタック(ブロックの塊)停止
https://tsukurium.net/ev3/ev3-classroom-6-5/

【EV3 Classroom入門】6-6 その他(break,continue等)
https://tsukurium.net/ev3/ev3-classroom-6-6/

【EV3 Classroom入門】7-1 カラーセンサー(反射光)
https://tsukurium.net/ev3/ev3-classroom-7-1/

【EV3 Classroom入門】7-5カラーセンサー(色モード)の処理
https://tsukurium.net/ev3/ev3-classroom-7-5/

【EV3 Classroom入門】7-8 カラーセンサー(周辺光モード)の処理
https://tsukurium.net/ev3/ev3-classroom-7-8/

【EV3 Classroom入門】7-10 タッチセンサーの処理
https://tsukurium.net/ev3/ev3-classroom-7-10/

【EV3 Classroom入門】7-12 超音波センサーの処理
https://tsukurium.net/ev3/ev3-classroom-7-12/

【EV3 Classroom入門】7-15 赤外線センサーとビーコンの処理
https://tsukurium.net/ev3/ev3-classroom-7-15/

【EV3 Classroom入門】7-25 ジャイロセンサーの処理
https://tsukurium.net/ev3/ev3-classroom-7-25/

【EV3 Classroom入門】7-33 本体のボタンの処理
https://tsukurium.net/ev3/ev3-classroom-7-33/

【EV3 Classroom入門】7-34 タイマーの処理
https://tsukurium.net/ev3/ev3-classroom-7-34/

【EV3 Classroom入門】8-1 乱数の生成
https://tsukurium.net/ev3/ev3-classroom-8-1/

【EV3 Classroom入門】8-2 四則演算の処理
https://tsukurium.net/ev3/ev3-classroom-8-2/

【EV3 Classroom入門】8-6 値の比較、比較演算子
https://tsukurium.net/ev3/ev3-classroom-8-6/

【EV3 Classroom入門】8-9 論理演算子
https://tsukurium.net/ev3/ev3-classroom-8-9/

【EV3 Classroom入門】8-12 文字に関する処理
https://tsukurium.net/ev3/ev3-classroom-8-12/

【EV3 Classroom入門】8-14 その他の計算(あまり、四捨五入など)
https://tsukurium.net/ev3/ev3-classroom-8-14/

【EV3 Classroom入門】9-1 変数の処理
https://tsukurium.net/ev3/ev3-classroom-9-1/

【EV3 Classroom入門】10-1 リスト(配列)の処理
https://tsukurium.net/ev3/ev3-classroom-10-1/

【EV3 Classroom入門】11-1 マイブロック(関数)の処理
https://tsukurium.net/ev3/ev3-classroom-11-1/


入会、または、体験会のお申込み

プログラミング教室「ツクリウム」ではスクラッチやPythonなどを学ぶ、小学生、中学生、高校生、主婦層やシニアなどの初心者向けの講座を通学形式やオンライン形式で開講しています。
お問いあわせ・ご入会・体験会のお申込みは下記のリンクからお願いいたします。

画像をクリックするとお問い合わせページにジャンプします。

お問い合わせアイコン