まっつん総研連絡用ブログ

プログラミング教育とかMSXとか。

実習室で使っている教材:教育版LEGO MINDSTORMS EV3

 プログラミング実習室で使っていたり、要望があれば使えるようにしている教材のうち、教育版LEGO MINDSTORMS EV3について書いてみます。

※「子ども向けプログラミング環境にはどのようなものがあるか」、また「そのプログラミング環境がどのようなものであるか」については、既にネットに情報があふれていますので、あくまで身の周りでどのように使っているかを書いています。

f:id:matsun-ri:20220214212914j:plain
LEGO MINDSTORMS EV3で組み立てたロボット

目次

概要

 レゴブロックで有名なレゴ社と、Scratch子ども向けプログラミングワークショップでScratchを選択する理由)で有名なミッチェル・レズニック教授のタッグが送る、テック好きな親御さん垂涎の的のロボット教材です(なにせ、品質なりに高いので)。
 これで何ができるのかを確認したいなら、YouTube あたりを“MINDSTORMS”で検索するのが一番でしょう。ロボットを理解するには動いているところを見ることです。

 MINDSTORMSシリーズは、やる気とパーツ次第で本当に何でも作れます。
 例えば、阪大レゴ部が自動紙飛行機折り機*1を作った際には、ニュースに取り上げられました。
www.youtube.com

 こういった機械を思いつきで作ろうとしても、かつては高専生や工学部生が学校の設備で金属を切断するところから始めなければならなかったのですが、MINDSTORMSの登場によって、プロトタイピングがずっと身近になりました。

開発環境

 利用できるプログラミング言語は、ブロックプログラミングのほか、C, Java, C#, mrubyなどのテキストプログラミングに対応しています。

 当初のブロックプログラミング環境は『EV3ソフトウェア*2でした。

f:id:matsun-ri:20220217212017j:plain
EV3ソフトウェアで書いた障害物回避のコード

 これはScratch Jr.のように、文字の書かれていないアイコンブロックを右方向に連結することでコーディングするものでした。
 ブロック(コード)に文字が使われていないので、利用者の母語にあまり左右されない利点がありますが、慣れないと理解しづらくもあります。

 その後『EV3 Classroom』がリリースされ、プログラミング環境が Scratchのようなテキストブロック形式になりました。

f:id:matsun-ri:20220217212206j:plain
EV3 Classroomで書いたライントレースのコード

 Scratch経験者なら EV3 を簡単に動かせるようになるでしょうし、EV3 Classroom がはじめてのプログラミング環境であったなら、Scratch もじきに使いこなせるようになるでしょう。*3

 とはいえ、少し残念な点もあります。

f:id:matsun-ri:20220217212922j:plain
簡体字っぽいフォント

 上の例では、特に「位」「進」「」が読めません。

オンラインテキスト

 プログラミングに関する紙の教本は、ユーザーガイド(取説)くらいしか附属しません。
 代わりに、EV3アプリやEV3 Classroomなどの開発環境に、これでもかというくらいの量のオンラインテキストが提供されます。しかも、生徒側のテキストだけでなく、教える側にとっての授業のためのヒントも提供されます。

 オンラインテキストは更新されることもあるのですが、EV3は既にサポートが終了しているため、将来的にはパソコンを買い替えた際などに EV3 Classroom がインストールできなかったり、インストールができてもテキストがダウンロードできなくなることもありえるのが気がかりです。

EV3 Classroomのチュートリアル

 EV3 Classroom には、数多くのレッスンプランがオンラインテキストで用意されています。

 はじめにというチュートリアルでは、

  • EV3本体 と EV3 Classroom(をインストールしたパソコン)の Bluetoothによる接続
  • モーターとセンサーをプログラミングによって制御(ソースコードが例示されます)
  • ドライビングベース(左右の車輪が別々のモーターに繋がっている車)の組立と制御(ソースコードが例示されます)

といった、EV3を操る最初の一歩を知ることができます。

 続いて、ユニットプランというレッスン集では、ロボットトレーナー、エンジニアリングラボ、スペースチャレンジといったレッスンが用意されています。

 ロボットトレーナーでは、EV3に含まれているモーターや各センサーを、順を追って実際に利用していきます。
 途中までは、ソースコードが例示されます。

  • 直進と回転(モーターの使用)
  • 物体と障害物(超音波センサーの使用)
  • つかんで離す(電動アームの作成。ただし、掴むというよりは引っ掛けるというほうが正しい)
  • 色と線(カラーセンサーの使用によるライントレース)
  • 角度とパターン(ジャイロの使用)
  • 工場で働くロボット(ブロックを移動させる、線に沿って進むなど、ロボットとしての具体的な動作を実現します。ここからはソースコードが例示されません
  • FIRST LEGO League(世界規模のロボット競技会)への誘い

 エンジニアリングラボでは、動作の精度、ギアチェンジ、摩擦係数、重力加速度を考慮したギミックを作成します。ソースコードが例示されます。

 スペースチャレンジでは、火星探査ミッションの実現のため、探査車や探査衛星、ロケット発射機を作ります。ただし、ソースコードは例示されません。またレゴ マインドストーム教育版に入っていないパーツを利用します。

 他に、基本セットモデルでは、以下の組み立て方と制御用のソースコードが例示されます。

  • ジャイロボーイ(ジャイロによって、セグウェイのように2輪だけで直立する車)
  • カラーソーター(ブロックの色を認識し、選り分けるアーム)
  • パピー(ロボット犬)
  • ロボットアームH25(ブロックを持ち上げるアーム)

 ここまで試すころには、EV3で思った通りのものが作れるようになるのではないでしょうか。

MakeCode for EV3

 以前、micro:bit実習室で使っている教材:BBC micro:bit)や MakeCode Arcade(実習室で使っている教材:Microsoft MakeCode Arcade )で紹介した Microsoft MakeCode は、EV3にも対応しています。
 MakeCode for EV3 では、ブロックプログラミングでプログラムを作成し、USB接続でMINDSTORMS EV3へプログラムを転送できます。

f:id:matsun-ri:20220217221421j:plain
MakeCode for EV3で書いたライントレースのコード

 ただ、上に示したコードのとおり、EV3の醍醐味であるモーター駆動系の命令が、なぜか日本語化されていません。*5

ロボットコンテスト

 EV3を利用して作られた自律型ロボットによる国際的なロボットコンテストが定期的に開催されています。
www.wroj.org

 既定の競技フィールドの上を、モーター制御や各種センサーを駆使して、荷物をルールに従って移動させ、ゴールまで到着する、といった内容で、様々な部門が用意されています。*6
 ロボットの機種は、EV3の他、前世代のNXT、次世代のSPIKE や Robot Inventorで参加が可能です。

次世代機

 EV3を購入した翌年には、LEGO SPIKE や MINDSTORMS Robot Inventor などの新機種へ移行するとのことで販売終了してしまいました。
 阪大レゴ部みたいな名だたる所でも、前世代の機種(NXTなど)を使っているようですし、ロボコンにも引き続き参加できるようなので、大事に使っていきたいと思います。

 新機種はドットマトリクス液晶もなく、単体でのオンブロックプログラミング*7もできないようなので、今後フルカラー液晶を搭載した後継機が出ない限り、EV3は精神的な頂点であり続けるかもしれません。*8

状況

 パソコン本体にお金を掛けなかったのが認められたのか、予算を通してもらえました*9

 最初に試しに作ったロボットは、チュートリアルの通りに作ったもので、左右の車輪をそれぞれ独立したモーターで動かすことができるものでした。
 その後、見様見真似でロボットアームを追加し、薬の空き箱くらいなら掴めるようになりました。

f:id:matsun-ri:20220214213443j:plain
ロボットアーム

 そこで、以下のようなプログラムを作ってみました。

  • 起動直後に360度回転し、自分の周囲にある空き箱を探す
  • 最も近い空き箱の方向に向く
  • 空き箱に向かって走る(最初は速く、近づいたら遅く)
  • ちょうどいい距離になったら止まる
  • 開いていたアームを閉じ、空き箱を掴む
  • そのまま180度回転する
  • 少し走る
  • アームを開いて空き箱を離す
  • 少しバックする

 このプログラムがうまく動くと、EV3で作ったロボットが、自律的に空き箱を探して走り、持ち運ぶように見えます。
 プログラムの作りこみが甘く、うまくいくときもあればいかないときもありますが、そこが子どもに人気の理由かもしれません。

 うち特有の問題としては、EV3の開発環境はWindows,Mac,iOS,Android,Chromeと幅広く対応しているものの、うち最大派閥のUbuntuには対応していないため、利用できるパソコンが限られる点が挙げられます。*10

 現在の常連である4・5年生は、ロボットよりもScratchプログラミングに夢中*11なのですが、新たに中学生たちがロボット作りに参加することになり、今後が楽しみです。

Tips

 Raspberry PiMicrosoft MakeCode for EV3にてプログラムを作成した場合、USB接続でEV3に流し込むことになりますが、USBケーブルを繋いだだけだとEV3が書込禁止ドライブとなり、せっかく作ったプログラムが書き込めないようです。
 書込可能にするには、ターミナルにて次の操作が必要です。

$ sudo mount -o remount,rw '/media/pi/0042-0042'
(下線部は環境に依るかも)

 なお、流し込む度に一旦切断されて再接続されるので、その都度操作が必要です。

*1:この名前は、完全ではありません。折るだけではなく自動的に発射までできてしまうからです。

*2:途中で『EV3 Lab』という名前に変わったようですが、その後すぐにEV3自体が販売終了になってしまったので、この名前はあまり見かけません。

*3:そもそも、Scratch開発者のレズニック教授が早くからMINDSTORMSの開発メンバーだったので、こうなることは必然だったのではないでしょうか。

*4:外国製アプリによくあるパターンですが、Scratchは、このあたりが丁寧に作られています。

*5:2022年2月現在。

*6:YouTubeで“WRO”を検索すると、公式による動画を観ることができます。

*7:EV3には本体の液晶画面を利用し、本体だけでプログラミングができるという、びっくりするような機能があります。

*8:外国でも似たような主張がされているようで、そういう人に向けて「新型がEV3より優れている理由」といった動画が作られています。

*9:そりゃ、本当ならノートパソコンが10台くらい欲しいところを、捨てられかけてるデスクトップパソコンを全部自分でキッティングして済ませたわけですし……。ああ、空からChromeBookが降ってこないかなあ。

*10:C言語などでの開発はできるようですが、MINDSTORMSを触りたい小学生全員にC言語を書かせるのは現実的ではないでしょう。

*11:こないだロボットを卒業したばかりだから、だったりして。

実習室で使っている教材:IchigoJam

 プログラミング実習室で使っていたり、要望があれば使えるようにしている教材のうち、IchigoJam について書いてみます。

※「子ども向けプログラミング環境にはどのようなものがあるか」、また「そのプログラミング環境がどのようなものであるか」については、既にネットに情報があふれていますので、あくまで身の周りでどのように使っているかを書いています。

f:id:matsun-ri:20220204231225j:plain
IchigoJam

目次

概要

 電源オンですぐスタートできる、日本生まれのプログラミング専用パソコンです。
 見た目は単なる小さなマイコンボードですが、IchigoJam別途パソコン類を必要とせず、単体でプログラミングができます。

キーボードを使ったテキストプログラミング

 IchigoJam は、長年にわたり使われているプログラミング言語“BASIC”を内蔵しており、電源を入れるだけでプログラミングを始めることができます。

 ところで、BASICはテキストベースのプログラミング言語なので、キーボード入力が必要です。
 対象が子どもの場合、キーボード入力の速度アルファベットへの慣れは個人差が大きいだけでなく、そもそも小文字を知らない場合も多いのです。一般的なプログラミング言語は小文字を多用しますが、キーボードには小文字が刻印されておらず、どのキーを押せば入力できるのかがわかりません。このため、キーボード入力は通常であればネックとなります。
 しかし、IchigoJam BASIC の命令は大文字だけ*1なうえに短めです。つまり、小文字を知らない参加者でも、大文字だけならキーボードの刻印を見れば入力できるのです。

 むしろ、IchigoJam BASIC でテキストプログラミングを始めてもいいかもしれないくらいです。*2
 『学校を変えた最強のプログラミング教育』くもん出版)によりますと、ある公立小学校では、4年生でIchigoJam BASICの入力に挑んだところ、子どもたちは一人で入力したり、友達と教えあいながら入力するなどして、完成したプログラムの動作を見届けたそうです。

電子工作への活用

 IchigoJam は電子工作用の端子を備えています。そして、IchigoJam BASIC には、端子を制御するための強力な命令を持っています。ですから、電子工作との相性は抜群です。
 IchigoJamの他に、LEDの1本でもあれば、その場でLチカ*3が試せます。

f:id:matsun-ri:20220205165748j:plain
IchigoJamに超音波センサーを接続

 端子として5V出力を備えているため、3Vでは動かない電子部品が利用できることもメリットです。
 IchigoJam自体は消費電力が少ないため、電子工作に載せてモバイルバッテリーや電池で動かすことに適しています。

ワークショップ用として

 IchigoJam本体は、完成品が2,200円、はんだ付けが必要な組立キットであれば1,650円*4から入手できます。
 このため、特にワークショップではんだ付けを含む組立から行う場合は、受講生に本体代を負担してもらいやすく、その場合はそのまま自宅に持ち帰って活用していただくことすら可能です。*5

f:id:matsun-ri:20220205172619j:plain
米子高専が主催したワークショップにて配布されたIchigoJam

 かなり極端な例だと思いますが、米子高専IchigoJam ワークショップに参加したところ、終了後になんと完成品の IchigoJam をもらってしまいました。
 「家で使ってもらった方が啓発になるし、いっそ広告宣伝費だと思って配ってしまえ!」ということができる程度の価格であることも、主催側としては大きな魅力の一つであると思います。

用意するもの

 IchigoJam本体のほかに用意するものは、以下のとおりです。

f:id:matsun-ri:20220205170003j:plain
米子高専が主催したIchigoJamワークショップ
  • 家庭用のテレビ(ビデオ入力端子で接続します)
  • USB接続のキーボード(利用できるものとできないものがあります。手持ちのキーボードを試してみて、使えないときは公式が動作保証をしている機種を購入するとよいでしょう)
  • USB充電器(出力はそれほど必要ないので、家庭で余っているもので充分です)

状況

自動運転車

 はじめてのプログラミング教室を実施した際には、まず、ロボット掃除機の再現と称して、Scratchでプログラミングを行いました。

 具体的には、

  • 画面に大量のクローンをばらまく
  • ロボット掃除機と称したバスケットボール*6が画面内を動く
  • クローンに当たったらクローンを消す(←掃除っぽい)
  • もし端についたら、跳ね返る(←ロボットっぽい)

のようなことを行いました。

f:id:matsun-ri:20220205175708j:plain
ロボット掃除機の再現(Scratch)
f:id:matsun-ri:20220205175802j:plain
ロボット掃除機の再現(Scratch) 実行後

 画面中のリンゴとエレクトーンは、掃除中に障害物となることを想定して配置しました(ロボット掃除機が当たると跳ね返ります)。

 その後、IchigoJam と超音波センサー、タミヤのギヤボックスなどを組み合わせて作った自動運転車を持ち出して、みんなの前で動かします。

f:id:matsun-ri:20220205170706j:plain
自動運転車(IchigoJamバージョン)

 障害物や壁をよけたりよけなかったりする様子に、子どもたちは興味津々です。

 そこで、自動運転車に積んだままの IchigoJam にプロジェクタとキーボードを接続し、中のプログラムリストを表示します。
 「これ、コンピューターなの!?」と興奮する子どもたち。

 あとで「自分でもやってみたい」と言われたものの、まだこの頃にはいい教材を知らなかったので、近隣のロボットプログラミング体験会を案内しました。
 今ならタミヤマイコンロボット工作セットなどを勧めるのですが……。

自動運転プラレール

 その後、自動運転車の制御は micro:bit実習室で使っている教材:BBC micro:bit)に譲り、プラレール車両と組み合わせて追突しないプラレール車両を作ってみました。

f:id:matsun-ri:20220204232609j:plain
画面は開発中のものです

 ループ線を敷いて、スピードが遅めの通常の車両を走らせ、その後ろにスピードが速い自動運転車両を走らせます。

 試したところ、割とうまく動き、ラッシュ時に前を走っている各駅停車がジャマになってノロノロ運転を強いられる特急を再現できました。

 ただ、環境やセンサーの微妙な角度で動きがかなり変化するようです。
 実習室に持ち込んだところなかなかうまくいかず、先行車両にゴツゴツ当たってしまいました。ちょっとでも超音波センサーに引っ掛かりやすくするため、先行車に折り紙で作った猫のお面をつけたりなどと努力はしたのですが。
 子どもたちに興味を持ってもらえたので、いずれリベンジしたいです。

ファームウェアのバージョンアップ

 購入当初の IchigoJam BASICは、様々な絵文字キャラクターが用意されているものの、絵を描くことができませんでした。
 その後、アップデートによって、線を描く命令が追加されました。
 アップデート用のファームウェアをパソコンからIchigoJamに流し込むため、USBシリアルケーブルを購入し、試しにラインアートっぽいものを作ってみました。

f:id:matsun-ri:20220205182349g:plain
ラインアート(あえて小文字でコーディングしています)

 また、USBシリアルケーブルを利用して、IchigoLatte*7や IchigonQuest*8などを試すことができました。
 2,000円のマシンが、ファームウェアを変えるだけで別物になるのは不思議な気持ちです。

サンプルコード

 ウェブサイト“IchigoJam web”でIchigoJam BASICでのプログラミングを試すことができます。
fukuno.jig.jp

 ラインアートのサンプルコードを用意しました。
 上のリンクをクリックしてIchigoJam Webのサイトを開き、真っ黒画面の2つ下にある黒枠の中に、下のソースコードをコピペしてください。
 その後、真っ黒画面の下にあるIMPORTボタンを押すと、真っ黒画面にプログラムが入力されます。*9
 念のため、Enterを2~3回押してから、F5キーを押すと、実行されます。

100 'LINE DEMO
110 SRND 0
120 P=RND(2)*2-1 : Q=RND(2)*2-1
130 V=RND(2)*2-1 : W=RND(2)*2-1
140 R=10 : S=8 : X=50 : Y=30
150 @MAIN
160 A=P:B=Q:C=R:D=S:GOSUB @SUB
170 P=A:Q=B:R=C:S=D
180 A=V:B=W:C=X:D=Y:GOSUB @SUB
190 V=A:W=B:X=C:Y=D
200 DRAW R,S,X,Y
210 WAIT 5
220 DRAW R,S,X,Y,0
230 GOTO @MAIN
240 @SUB
250 C=C+A : D=D+B
260 IF  C<0 THEN C= 0 : A= 1
270 IF 63<C THEN C=63 : A=-1
280 IF  D<0 THEN D= 0 : B= 1
290 IF 47<D THEN D=47 : B=-1
300 RETURN

余談

 IchigoJam は、ひとつのCPUで、プログラムの実行から画面表示用の信号の生成キーボード入力の管理などすべてを行っています。
 この仕組みを使って、MSX1マイナスくらいのスペックを実現することが技術的に可能かどうか、気になっています。
 具体的には、MSX BASICで書かれたものは何でも動き、カラー表示に対応、スプライト機能も搭載、ただし機械語プログラムは動かない、といったものです。
 現在、MSXシリーズ数十年ぶりの新機種・新規格であるMSX3の登場が期待されています。
 2000円で購入できるMSX1マイナスとの2本立てなんて、おもしろいのではないでしょうか。

IchigoJam開発者の福野泰介さんへのインタビューによると、IchigoJamは子どもの手にちょうどいいものにしたいため、あまり複雑なものにはしたくないようです。
weekly.ascii.jp

*1:昔のBASIC開発環境では、小文字で入力しても強制的に大文字化されましたが、IchigoJamは小文字で入力するとそのまま実行されるようです。

*2:いつの時代も、なぜかBASICを下に見る人(いわく「古い、遅い、インタプリタで動いてる」)はいます。 たしかに IchigoJam BASICは古典的なBASIC(行番号が必要だったり、構造化されていない)です。 しかし、そもそもメモリ容量が小さく、あまり大きなプログラムは作れないので、構造化プログラミングができないことが大きな問題になるとは考えにくいです。 なお、IchigoJam BASIC は単に古典的なだけのBASICでは決してなく、例えば強力なI2C操作ができる命令を備えています。

*3:マイコンの端子につないだLEDを、マイコンからの出力によってチカチカさせること。

*4:税別だと1,500円。つまりイチゴ00円。

*5:受益者負担にうるさい役所だと、現金の取扱が面倒なので大変だと思います。おそらく (1)前年度の予算編成時期から参加者数の上限を設定して購入予算を確保する (2)イベントの参加人数が確定したら、人数分の IchigoJam を購入する (3)調定決定書を起票し、納付書を作成する (4)当日のイベントで参加者に納付書を手交し、銀行窓口で納入してもらう(イベントの日は休日だと思うので後日) (5)当日のイベントで欠席者が出たら、減額調定を起票する (あるいは欠席でも払ってもらう)(6)もともと参加人数が少なく予算が余ったら、減額補正を議会に諮る……といった、昔から「ドッグイヤー」と呼ばれるICTの世界には似つかわしくない運用になるはずです。なので、自分では現金負担のあるイベントを実施したことはありません。

*6:とりあえず丸いものにしたかったのです。

*7:BASICではなくJavaScriptでプログラミングできる環境。

*8:ドラクエ風のコマンド選択式でコーディングする、ちょっとかわった環境。

*9:本来は真っ黒画面にキーボードでプログラムを入力をするのですが、IMPORTボタンを押すと、黒枠の中の文字列がキーボードから入力されたことになります。

実習室で使っている教材:BBC micro:bit

 プログラミング実習室で使っていたり、要望があれば使えるようにしている教材のうち、BBC micro:bit について書いてみます。

※「子ども向けプログラミング環境にはどのようなものがあるか」、また「そのプログラミング環境がどのようなものであるか」については、既にネットに情報があふれていますので、あくまで身の周りでどのように使っているかを書いています。


f:id:matsun-ri:20220130012051j:plain
micro:bitと箱

目次

概要

 イギリスで100万人の子どもに配られた、ワンボードマイコンです。
 イギリスの公共放送であるBBCが作ったこの micro:bit は、電子工作用の端子のほか、各種センサー(温度・光・加速度・方角)と 25個のLEDランプによるマトリックスを備えており、プログラミングによって利用することができます。

 プログラミングはパソコンで、以前に紹介した MakeCode Arcade でも使用した Microsoft MakeCode を利用します。
 MakeCodeには micro:bit のエミュレーション機能があるため、ある程度は micro:bit の動きを試しながら、プログラムを作成することができます。

f:id:matsun-ri:20220130012326j:plain
Microsoft MakeCodeによるmicro:bitプログラム開発

makecode.microbit.org

 MakeCodeを利用するので、ブロックプログラミングの他、プロが使っている JavaScriptPython といった本格的なプログラミング言語が利用できます。
 ブロックプログラミングというと、よく知らない人が下に見ることがありますが、MakeCode と micro:bit の組み合わせは、ミリ秒単位の超音波センサーを制御するために充分な精度が出せます。

 みんなが大好きな Scratch でもプログラミングができます。ただし、別途ソフトを事前にインストールするなどの事前準備が必要です。

 MakeCodeで作成したプログラムは、USBケーブルを経由して micro:bit に流し込むことで、実行することができます。*1
 いちどプログラムを流し込めば、パソコンがなくても単体で動く*2ので、手作り工作と組み合わせることができます。

 教本は割と多く出版されています。
 『micro:bitプログラミング 手づくり工作をうごかそう!』(翔泳社)など、工作と組み合わせた事例を扱っている本が多く、楽しめると思います。
 また、micro:bitのハードウェアを詳しく知りたい方は、『ビジュアル図解 micro:bitではじめるプログラミング&マイコンボード入門』(技術評論社)をご覧ください。micro:bitのハードウェアについて、メモリマップに至るまで細かく解説されています(たぶんワークショップで普通にプログラミングを楽しむためにはそこまで必要ないと思うのですが……*3)。

v1.5とv2

 購入した micro:bit の世代はv1.5でしたが、後にバージョンが上がり、2021年現在では micro:bit v2が出回っています。

 表面的なバージョンアップとして、v2にはタッチセンサー、マイク、スピーカーが追加されており、 micro:bit 単体でできることが増えました。*4

 内部的にも、Bluetoothの安定性向上や電子工作で利用できる電力の向上(90mA→190mA)、メインメモリが8倍(16kB→128kB)、処理速度がかなり(少なくともクロック周波数は16MHz→64MHz)向上するなど、かなりパワーアップしています。*5
 どうも、AIや機械学習micro:bitに応用することを見込んでいるようです。*6

 定価は変わりませんので、今から購入するなら、v2を選ぶべきでしょう。

状況

f:id:matsun-ri:20220130013449j:plain
電子工作

 最初は、試しに micro:bit単体と、micro:bitで使えるLED, マイク、ブザー、人感センサーなどがセットになったキットを別々に購入しました。

f:id:matsun-ri:20220130013534j:plain
ロボットカー(自動運転車)

 その後、距離センサー、micro:bit用モーター制御基板、タミヤのギヤボックスなどを買ってきて、寄せ集めでロボットカーを作りました。
 目の前の障害物を、自動的に避けて走る車です。

 モーターを動かしながらだと、距離の計測がうまくいかない*7ので、止まってから計測しています。
 計測に失敗したときはしばらく待機するように作っているので、そんな時に「もしも~し」とセンサーの前で手を振ると突然動き出したりするあたりが、子どもたちに人気の秘訣かもしれません。(たぶん)

 ワークショップの予算では、ソフトバンク系の会社が販売している『micro:bit アドバンスセット』を購入しました。
 micro:bit本体、本体を保護するカバー、単体で動かすための電池ボックス、スピーカー、距離センサーなどのほか、それらを活用するためのテキストがセットになっています。
 距離センサーが不要な場合は、省略されている『micro:bitはじめてセット』も販売されています。

 購入したセットに含まれている micro:bit は古いv1.5ですが、現在はv2にバージョンアップされている*8ほか、新たに温湿度センサーが追加されています。

 距離センサーとスピーカーを組み合わせれば、手を近づけたり話したりすると音階が変わるテルミンもどきや、いわゆる母ちゃん接近警報器が割と簡単に作れます。

 同梱されている距離センサーは、より正確には、ワニ口クリップやブレッドボード、はんだ付けなどが必要だったセンサー類の接続を、簡単にコネクタに差すだけで済むようにしたGroveシステムという規格(?)があり、それに対応した距離センサーと、micro:bitにGroveシステムのセンサーを接続するためのシールドのセットです。
 センサー、シールドともに、もともと電子工作パーツのショップなどで販売されている既製品なのですが、このシールドさえあれば、別途Groveシステムに対応した様々なセンサーを購入し、micro:bitで使うことができそうです。*9

 アドバンスセットは2台購入し、1台は主に展示用(テルミンでデモをしたりなど)とし、1台はその場で触ってもらえるように空けています。

サンプルコード

f:id:matsun-ri:20220130015323j:plain
落ちゲー

 MakeCode for micro:bit落ちゲーを作ってみました。

 micro:bitを左右に傾けることで上から落ちてくるドット(明/暗)を左右に動かし、同じ明るさのドットに重ねると消えます。
 消すとスコアが増え、スピードが上がります。
 ドットが上まで積みあがるとゲームオーバーで、得点が表示されます。

 スピーカー対応。ぜひ実機でお試しください。

https://makecode.microbit.org/_KVWCs2hHdHy0

*1:Bluetooth接続を使えば、スマホタブレットのアプリでプログラミングし、micro:bitに流し込めることになっているのですが、個人的にはつながらなくなるなどのトラブルがあったので、勧めていません。Bluetoothの機能が安定したといわれる micro:bit v2なら、うまくいくかもしれません。

*2:電源は必要です。100均で売られているような、単3乾電池2本で動くモバイルバッテリーで動きます。

*3:昔の『Inside (機種名)』とか『(機種名)テクニカル・ハンドブック』とかが楽しめる人は、読んだら楽しめると思います。僕はメモリマップなんて20世紀以来ぶりに見ました。

*4:v1.5では音を出すために、100均からスピーカーを買ってきてワニ口クリップで接続するひと手間が必要でした。それが工作感があってよかった、という意見もありそうですが……。

*5:『ビジュアル図解 micro:bitではじめるプログラミング&マイコンボード入門』によると、v1.5世代では LEDマトリックスを表示するためのCPU負荷がかなり高かったものが、v2では処理速度の向上で無理なく表示できるようになり、I/Oが余ってしまったそうです。

*6:https://microbit.org/new-microbit/

*7:micro:bit のせいではなく、モーターからのノイズ(モーター動作中は micro:bit のLED表示が激しく乱れます)と、センサーの選定を誤ったせいだと思います。電子工作で距離センサーとして使われる定番のセンサーである HC-SR04 は 5ボルトの電圧が必要ですが、micro:bitは3ボルトしか供給できません。5ボルトが供給できる他のワンボードマイコンIchigoJam)ではうまく動いていました。この記事を書いている現在は、互換品でもっと低電圧でも動く、US-100というセンサーが届くのを待っているところです。

*8:v1.5のセットは、おそらく在庫処分のため、ビックカメラの通販で一瞬だけ500円(!!)で売られたことがあるのですが、気づいた時にはもう売り切れていました。

*9:現行製品の『micro:bit アドバンスセット v2対応版』で追加された温湿度センサーは、Groveシステムに対応したセンサーのようです。

実習室で使っている教材:Microsoft MakeCode Arcade

 プログラミング実習室で使っていたり、要望があれば使えるようにしている教材のうち、MakeCode Arcadeについて書いてみます。

※「子ども向けプログラミング環境にはどのようなものがあるか」、また「そのプログラミング環境がどのようなものであるか」については、既にネットに情報があふれていますので、あくまで身の周りでどのように使っているかを書いています。

f:id:matsun-ri:20220123003917j:plain
MakeCode Arcadeの編集画面

目次

概要

 Microsoft MakeCodeは、コンピュータソフトウェアの大手であるマイクロソフトが提供しているプログラミング学習のためのプラットフォームで、7種類のプログラミング環境が用意されています。
 MakeCode Arcadeはその中の一つであり、いわゆるレトロゲームのようなプログラムを作ることを得意としています。

f:id:matsun-ri:20220123003951j:plain
MakeCode Arcadeの実行画面

 想定されている画面の解像度は160×128ドットです。
 いにしえのゲームボーイカラーの画面解像度が160×144なので、だいたい同じくらいです。

 キーボードやプログラミングに慣れていない場合は、マウスを使ったブロックプログラミングによってゲームが作れます。
 ブロックプログラミングに対応している点は、Scratchで育った子どもへの訴求力があるでしょう。

 教本は『10才からはじめるプログラミング MakeCode Arcadeで自分だけのゲームを作ろう』技術評論社)がおすすめです。
 先程の画面のシューティングゲームは、本を参考に、すぐに作れました(写経*1ではありません)。
 いにしえの80年代には、パソコン雑誌に掲載されている読者投稿プログラムを手で入力しながらノウハウを覚えた方もたくさんいらっしゃると思いますが、そういった雑誌数ヶ月分の効果がありそうです。

 キーボードを使えば、プロが使っているJavaScriptPythonといった本格的なプログラミング言語でゲームが作れます。
 また、マウスで作ったプログラムを、JavaScriptPythonに変換することができます。

f:id:matsun-ri:20220123004034j:plain
ブロックをJavaScriptに変換

 ブロックで作ったプログラムをJavaScriptに変換すると、JavaScriptを使いこなせるような気がするかもしれませんね。……というのは極端としても、ブロックとテキストの類似性に気づいてもらうことができそうです。

実行環境

 MakeCode Arcadeで作ったプログラムは、画面上で実行できるほか、URLをスマホに送ることで、スマホのブラウザ上でそのまま遊べます。

 さらには、別途販売されている専用のハンディゲーム機で動作させることができます。
 実機は、MakeCode Arcadeの世界では『コンソール』と呼ばれ、複数種類存在します。

f:id:matsun-ri:20220123004114j:plain
Meowbit

 写真は Meowbitという製品です。
 上下左右とABの各ボタンがあります。
 別売のリチウムイオンバッテリーは買っていないので、携帯機ながらUSBケーブルによる電源供給が必要な状態です。
 また、micro:bitとのピン互換があり、おそらくMakeCode Arcadeのコンソールとして以外にも多用途に対応できるよう作られているようです(が、使いこなせていません)。

 ブラウザ上のMakeCode Arcadeだときちんと動くプログラムでも、作りこみが甘いと、実機で動かしたときに重くなったり、メモリ不足で落ちたりすることがあります。バーチャルと実機の違いを理解することにつながりそうです。

 自分でゲームを作ったら、ゲーム専用機で動いているところを見たくなるのではないでしょうか。この点も訴求力があると思われます。*2

f:id:matsun-ri:20220123004146j:plain
Meowbitの箱

 Meowbitの箱です。

f:id:matsun-ri:20220123004212j:plain
「いやー さがしましたよ。」

 パッケージに、わりとのんきものの王子様っぽい御仁が描かれているのも愛嬌です。

 MakeCode Arcadeをはじめるには、対応ブラウザでMakeCodeの公式ウェブサイトにアクセスし、「Arcadeでプログラミングを始める」をクリックします。
www.microsoft.com

サンプルコード

 MakeCode Arcadeで作ってみたシューティングゲームです。
 ぜひ、エミュレータとコンソール(実機)の両方でお試しください。エミュレータだと不具合が起こらない場合でも、コンソールだと処理落ちする様子が見られるはずです。

https://arcade.makecode.com/58175-10484-36220-55752

*1:本やサイトに記載されているソースコードを愚直に入力すること。

*2:もっとも、今ではSwitchでゲームを開発できるソフトが複数揃っており、いい時代です。

実習室で使っている教材:Scratch Jr.

 プログラミング実習室で使っていたり、要望があれば使えるようにしている教材のうち、Scratch Jr.について書いてみます。

※「子ども向けプログラミング環境にはどのようなものがあるか」、また「そのプログラミング環境がどのようなものであるか」については、既にネットに情報があふれていますので、あくまで身の周りでどのように使っているかを書いています。

f:id:matsun-ri:20220121221718j:plain
Scratch Jr.

目次

概要

 Scratchはテキストブロックによってコーディングを行いますが、Scratch Jr.ではアイコンブロックを使用します。

 Scratch Jr.には、条件分岐や変数がありません。
 しかし、Scratchと同様に(イベントドリブンで言うところの)メッセージの概念を実装しており、複数のキャラクターを順序よく、あるいは同期して動かすこと、例えば、電子紙芝居で2人のキャラクターが交互に話をするようなプログラムが子どもでも作りやすくなっています。

 Scratchキャットも、Scratchと違ってとてもかわいいです(重要)。

 関連図書はScratchと違ってあまり出ていませんが、『5才からはじめるすくすくプログラミング』日経BP社)は、5才児にも読んでもらえるように本文がすべてひらがなで書かれています。*1

状況

 実習室は、当初はScratchの一本足打法で始めましたが、想定していなかった小学校1・2年の参加があったため、たまたま通販でセール中だった8インチタブレット*2を調達しました。

 7インチ程度の、いわゆる中華タブを持ってきた小学1年生もいました。子どもの指でも7インチでは画面が小さすぎるのと、タブレットが使い込まれていたせいかタッチパネルの感度が落ちていたようで、時々苦戦していました。

 最初はコーディングというよりは、ブロックを適当に繋げて遊んでいました。ブロックが繋がるときの感触が心地よいみたいです。
 繋げたブロック(=コード)を実行できることを教えると、ブロックの並べ方によってキャラクターが動きを変えることに気づきました。実行中に、実行部分のブロックがハイライト表示されるためです。
 これで、ブロックを繋ぎ変えてからプログラムを実行し始めました。

 さらに、ペイントエディタの存在に気づくと、熱心に絵を描きはじめました。そのうち「これ、動かせるのかな……?」と気になり、自分で描いた絵を自分で書いたプログラムで動かすようになりました。

 手元のタブレットが1台しかないので、数だけはある中古デスクトップパソコン(Ubuntuインストール済)でScratch Jr.を動かせるようにならないか、いろいろ試してみました。
 なにしろ古いデスクトップで、エミュレータではまともに動くことが期待できなかったので、ベアメタルで動作するAndroid-x86やCloudReadyなどの環境を試しました。
 しかし、レアな環境のせいかGooglePlayまでたどりつけなかったり、Scratch Jr.の起動までこぎつけたもののタッチ位置がずれていたりなどして、結局は使うことができませんでした。*3

 今のところ、小学校2年生以下の児童が初参加をする際には、なるべくタブレットを持参してほしい、とお願いしており、タブレットが足りなくて困るといったことは起きていません。

サンプルコード

 「Scratch Jr.では紙芝居しか作れないの?」と思われるかもしれませんが、工夫次第でゲームを作ることもできます。
 例えば、サッカーゲームを作ってみましょう。

f:id:matsun-ri:20220126211951j:plain
キャラクターの配置

 上のとおりにサッカーボールとサッカーのゴールを配置します。

f:id:matsun-ri:20220126212111j:plain
サッカーボールのスクリプト

 サッカーボールには、上のとおりスクリプトを組みます。
 「タッチされたら、10歩右へ進み、最初の場所に戻る」という内容です。

f:id:matsun-ri:20220126212244j:plain
ゴールのスクリプト

 ゴールには、上のとおりスクリプトを組みます。
 「旗が押されたら、ひたすら上下移動を繰り返す」という内容と、「他のキャラクターと当たったら、『ゴール!』といい、少し小さくなる」という内容です。

 スクリプトが完成したら、旗アイコンを押して実行します。
 動くゴールのタイミングを狙いながら、サッカーボールをタップすると、サッカーボールが飛んでいきます。

f:id:matsun-ri:20220126212923j:plain
ゴール!

 最初のうちはゴールが大きいので、外すのが難しいくらいですが……。

f:id:matsun-ri:20220126213003j:plain
小さくなったゴール

 ゴールするたびにゴールが小さくなり、だんだん難しくなります。

 変数こそありませんが、メッセージを使うなどしてキャラクターやステージを切り替えていけば、それなりのゲーム性を持ったものになるのではないでしょうか。

*1:刊行にあたって、カタカナまで読める子どもにとっては却って読みにくいのではないか、という点が悩みどころだったそうです。

*2:ヒント:密林、GooglePlay, 最近メモリが大きくなったタブレット

*3:このあたりのノウハウは、より美麗でなめらかな画面を求めるソシャゲーマーの方が詳しかったりするようです。