松田孝先生が前校長を務めた小金井市立前原小学校では、IchigoJam(IchigoDake)とカムロボで、「フィジカルコンピューティング」について学びます。ではその「フィジカルコンピューティング」とは何なのでしょうか。どうやら秘密は3つのセンサーにありそうです。

「フィジカルコンピューティング」とは

「フィジカルコンピューティング」とは、現実世界であるフィジカル空間とコンピューターとの間に対話をつくり出すことです。

そしてその対話をつくり出すのが、センサー技術です。センサーを使えば、フィジカル空間にあるさまざまな情報を量として感知でき、その量を使ってプログラミングすることで、LEDライトやモーター、スピーカーなどの出力を制御できます。

Society5.0の象徴的技術であるIoTど真ん中の社会を生きる子どもたちにとって、センサーを介して人とコンピューターが結びついている感覚を研ぎ澄まし、コンピューターと豊かにコミュニケーションできる力を育むことは、一人一人のキャリア形成にとって非常に重要です。IoTセンスは、Society5.0の社会の形成者となる子どもたちに必要な資質・能力でもあります。

前原小が創り出した全部IchigoJam BASICのプログラミング授業体系の特徴は、まさにこのフィジカルコンピューティングを小学校の中学年で存分に体験することにあります。

基板であるIchigoJam(IchigoDake)は、各種センサーとさまざまなアクチュエーター(モーターなど)とをコンピュータープログラムで連動させられます。この連動プログラムの作成は、子どもたちを熱中させ、試行錯誤しながらプログラミングの技能を学ぶ場を拓きます。

ビジュアルからテキストへの移行

本連載の第4回で紹介したIchigoJam BASICのカード型プログラミング言語(Cutlery Apps)では、変数を定義してそこに値を代入したり、条件文をプログラムしたりすることはできません。プログラミング初学者が、プログラム処理の基本要素である順次実行と繰り返しを学ぶのに適したカード型言語ですが、残念ながら(というよりむしろ幸いに)センサー値を活かしたプログラムを作成することはできません。

低学年でCutlery Apps を使って楽しくプログラミングして、それなりの満足感を抱いていた子どもたちに、センサー制御のプログラムで動くロボットを見せれば、予想だにしなかった動きに一瞬驚き、すぐに「なぜ?」と反応します。ここにDesire(願望、欲望)が醸成されて、その動きを実現したくなるのは必然です。

カムロボに搭載されている3つのセンサー

カムロボの正式名称は、カムプログラムロボットで株式会社タミヤが開発した工作シリーズのロボットです。そのロボットの駆動部分のカムの代わりにナチュラルスタイルの松田(まった)さんが、拡張ボードを取り付けてIchigoJam BASICのプログラミングで制御できるようにしました。

そして現在、カムロボには3つのセンサーが搭載されています。センサーは身の回りの様子を目的に応じて測定して、それを電気信号やデータに変換する装置です。そのセンサーが感知した量を手がかりに、カムロボの動きを制御するプログラムを作成することで、子どもたちは条件文のプログラムに習熟することになります。IchigoJam BASICは、各種センサーが取得した値を0〜1023の間の数値で返してくれるのです。

カムロボに搭載されているセンサーの1つが、距離センサーです。この距離センサーは、赤外線で障害物との距離を量(電圧)として感知します。赤外線を発光して障害物に反射して返ってくる光を受け取ることで電圧が生じる仕組みとなっています。実測してみると、障害物が近くにあるとその値は700〜900、遠くになれば30〜50位の値を返してきます。

2つ目のセンサーが、光センサーです。このセンサーも光を発して、その反射の強さを量(電圧)として感知します。これも実測してみると、黒色は280前後の値、白色は600近い値を表示することがわかります。ただし周りの明るさによって同じ色でも測定値が変化するので、光センサーを扱う時には注意が必要です。

そして3つ目が、加速度センサーです。加速度センサーを使うと、「前後、左右、上下」の立体的な動きを測れ、ロボットの傾きや動き(移動、振動、衝撃)がわかります。加速度センサーはスマートフォンにも内蔵されていて、歩数を測ったり睡眠の様子を知らせたりしてくれます。またデジカメや自動車のエアーバックが作動するために活用されるなどして、私たちの生活に欠くことのできないものとなっています。

実測してみると、地球の中心に向かう重力に対しての傾きを測るZ軸の値は、平坦では530くらい、上向きになれば600〜700くらい、下向きでは300〜400くらいです。

※製品として発売される際には、この加速度センサーは内蔵される予定です。

変数の理解と条件文(IF文)への習熟

上で紹介した各種センサーが取得する値から、閾値(しきいち)を設定して条件文(IF文)を作成すれば、自動運転、ライントレース、ひっくり返り防止のカムロボをプログラムできます。そしてこのプログラムを作成するにあたっては、「変数」というプログラミングにおいて極めて重要な考え方を子どもたちに伝えられるのです。

変数とは、箱のようなものでそこに数字や文字を入れることができ、IchigoJam BASICでは変数の名前をA〜Zで名づけることができます。(以下のプログラムにおいて、行番号10のD=ANA(2)というプログラムは、Dという箱(変数)に、ANA(2)(アナログポート2が取得した値)を=(代入)して、という命令となっています。)

この中学年で体験するセンサーを使ったフィジカルコンピューティングは、テキストプログラミングへの移行を必然とさせるだけでなく、低学年での順次実行や繰り返しに加え、「変数」と「IF文」のプログラムに習熟させることにもなるのです。

たとえば、距離センサーを使って以下のプログラムを実行すれば、カムロボは障害物を検知すると自動的に止まります。たった4行のプログラムですが、Cutlery Appsでは実行できないこの動きを、子どもたちには何としても実現しようと慣れない手つきでキーボード入力に挑むのです。筆者は、このプログラムは、子どもたちをテキストプログラミングへ誘う最高のプログラムだと思っています。

 10 D=ANA(2)
 20 IF D < 500 OUT 33
 30 IF D > 500 OUT 0
 40 GOTO 10

光センサーや加速度センサーでも上記とほぼ同様のプログラムで、ライントレースやひっくり返り防止のプログラムが作成でき、子どもたちはフィジカルコンピューティングの世界に魅了されていきます。

【黒のラインをトレースして動くカムロボ】

 10 D=ANA(2)
 20 IF D < 500 OUT 1
 30 IF D > 500 OUT 32
 40 GOTO 10

【障害物に乗り上げてもひっくり返る前に止まるカムロボ】

 10 D=ANA(0)
 20 IF D < 700 OUT 33
 30 IF D > 700 OUT 0
 40 GOTO 10

箱を障害物に見立てて、自動運転プログラムの作成に挑戦中

黒と白の光の強度をもとにライントレースするカムロボ

【コラム】「OUT 33」って?

上に例示したプログラムをみると、カムロボを前進させるのが「OUT 33」であることがわかります。同様に「OUT 0」は止まれで、ライントレースのプログラムから「OUT 1」が右に曲がる、で「OUT 32」が左に曲がる、であることが予想できます。

なぜ前進が「OUT 33」で、止まれが「OUT 0」なのでしょうか。「OUT 1」はありますが「OUT 2」、さらには「OUT 50」などのプログラムはないのでしょうか。こんな疑問がすぐに生じてきます。

それは、カムロボの左右2つのモーターに、それぞれ電気を流すコードが「OUT」のどのポートに差し込まれているかに関係します。

左のモーターは「OUT 1」と「OUT 2」につながっていて、右のモーターは「OUT 5」と「OUT 6」につながっています。「OUT 1」と「OUT 6」がオンであれば、2つのモーターが回って前進します。このことを「OUT 6〜OUT 1」の順に数字(ONが1で、OFFが0)で表すと、「100001」となります。これを二進数に見立てて、10進数に変換すると「33」となるのです。

では「OUT 18」はどうなるのでしょう? 「18」を二進数で表すと「010010」となりますので、「OUT 33」とまったく反対の動き、つまりカムロボは後進するのです。ぜひ試してみてください。テキストプログラムは、子どもたちにSTEAM(この場合は数学ー二進数)への関心を誘うきっかけともなります。

またセンサーを扱うことで、赤外線に対する興味や加速度についてはその傾きだけでなく重力や重力加速度などについても、子どもたちに興味・関心を抱かせるきっかけとなるのです。

次回は、筆者が書き表した全部IchigoJam BASICの授業体系の実践事例書である「プログラミングでSTEAMな学びBOOK」がフレーベル館より刊行(11月27日)されますので、その内容を紹介することで、これからの小学校プログラミング教育の新しい展開を考えていきたいと思います。

コメントを読む・書く

This article is a sponsored article by
''.