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

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

実習室で使っている教材: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ボタンを押すと、黒枠の中の文字列がキーボードから入力されたことになります。