教育制度改革により、2020年から小学校の学習指導要領が改定され英語教育が拡充し、プログラミング教育もスタートしているわけですが、プログラミングについては、

 【 算数 】

   ■ プログラミング言語を使用して図形を描く


 【 理科 】
  
   ■ プログラミングで電気を扱う


と言うカリキュラムが用意されています。算数のカリキュラムは、BASICが普及している時代のLOGOと同じようなものになりますから、アルゴリズムを考えるものになっています。

 これについては、 【 図形の特徴に着目する 】 ことで描き方が解るようになっていますが、

  ■ 線がどのように変化しているのか?
  ■ 頂点同士はどういった位置関係なのか?

を考えることになりますが、多角形の場合 【 辺の集合 】 になっているので、

  ■ 辺はどのような変化で繋がっているのか?
  ■ どうすれば、多角形になるのか?

を考えることになります。こうした思考が 【 アルゴリズム 】 を考える上では必要になりますが、LOGOを使った時に行う最初の段階で行う内容が理科のカリキュラムに含まれています。

 こうしたアルゴリズムについては、現在は、

 

  
でブロックを使いながら学習できるようになっていますから、考え方自体はオンラインサービスで予習をすることが出来ます。

 学校で使用するものは少し異なるかもしれませんが、現在は、

  ■ アプリケーション : Scratch
  ■ デバイス制御   : MAKE CODE
  
をオンラインで使用できるので、小学校で使用するものを事前に体験して置くことも可能ですが、前述のように

  ■ アルゴリズム : Hour Of Code

があるので、動きを考えながら実装することも可能になっています。

 Scratch3の場合、インストールしておけばオフラインでも動作するので、インタネット接続環境がなくてもブロックをつないでプログラミングができるようになっていますが、基本的に学校のカリキュラムの予習をしておくことも出来ます。

 

 

 

  MAKE CODEのブロック

 

 前述のようにMakeCodeではマイコン制御のコードを書いてシミュレーターで動かすことができるようになっています。

 

 

 MAKE CODEもScratchと同様にブロックを使いますが、ドット絵を描いてゲームを作れるARCADEも用意されています。

 

 小学校のプログラミングではブロックを使って処理を実装しますが、ブロックの特性は共通しており、

  ■ イベントブロック
  ■ 処理を行うブロック
  ■ 分岐・反復のブロック

の三種類を使用することになります。。イベントのブロックは、



のようなブロックになっており、内部にブロックを格納する仕様になっています。

 MAKE CODEの場合、
 
   ■ 最初だけ
   ■ ずっと
 
 が用意されていますが、これらは、
 

 
 のような役割で使用することになります。MakeCodeには、
 

 

のようなイベントも用意されていますが、内容は異なるもののScratchでもイベント単体で動作するものが用意されています。


 この中に処理を実装することになりますが、処理については、



のようなブロックを使うことになります。これらは 1つのブロックに1つの処理が実装されている ので、これを繋いで処理を行うことになります。ブロックには、記入可能な箇所がありますが、ここが関数の引数(ひきすう)になっているので、必要な値を追加できるようになっています。

 判定やループについては、



のようになっており、処理の流れで使用できるように

  ■ 接続
  ■ 包含

の療法が用意されています。このブロックで、

  ■ 分岐
  ■ 反復

を実装することになります。
 

 

 

  処理の実装

 


 プログラミング言語で処理を実装する場合には、流れを考える必要がありますが、 【 順序立てて処理を行う 】 ことになります。


 このような 【 順番に処理をする方法 】 のことを 【 順次 】 と言いますが、ブロックを使用した言語の場合、ブロックを繋ぐことで流れを作ることが出来ます。処理の流れは上から順番に行うので、処理の流れに沿って順番にブロックを繋いでいくことになります。



こうして繋いだ処理は、ループに包含できるので



のように出来ますが、此の状態にすると

 【 実装した処理を4回繰り返す 】

ことができるようになります。プログラミング言語では、ループ処理のことを 【 反復 】 と言いますが、これを追加すると

 【 メインループ内で指定回数分の繰り返し 】

を行う事ができるようになります。

 ブロックを見てもらうと色がグレーになっていますが、MAKE CODEでは実行不能なブロックは此のように表示されます。これをずっとに包含すると



のように色が付きますが、実行可能な状態だと、このように処理に色が付く仕様になっています。

 

 

 

  処理で使用するブロック

 


 MAKE CODEもScratchと同様に

  ■ 変数の宣言
  ■ 関数の利用
  ■ 配列の利用

ができるようになっていますが、小学校ではこうした処理は使用しません。

 配列については、 【 集合 】 と同じなので、小学校だと等差数列で数字の並びがでていますが、こうした複数の数字をまとめて管理する際に配列を使用します。

 変数と関数は中学校のカリキュラムになりますが、変数については、 【 ○=1 】 のように値の決まっていないものに値を入れて、その対象物を呼び出すようなものになります。

 小学校の算数だと 【 □+2=5 】 のような穴埋め問題の□の部分が変数に該当しますが、この形をアルファベットに変更した構造のものが 【 方程式 】 になります。

 その為、先程の式を方程式に置き換えるとは 【 a+2=5 】 のような表記になります。この場合、aには3が当てはまるわけですが、処理を行う場合には、小学校六年生で学習する比例・反比例のように法則性のある値の集まりも存在するので、これに対応する場合だと、上記の形では対応できません。というのも、この方程式の形は、小学校の比例・反比例で使用する

 【 xの値が解っている時のyの値を求める式 】

だからです。比例や反比例の場合、

 【 xの値と一緒にyの値も変化する 】

ので、穴埋め問題のような形にすると 【 □+3=○ 】 のような形になります。この場合、□に数字を入れると、計算結果の○の値も変化しますが、これをグラフの座標軸に置き換えると、 

 【 x+3=y 】

のような形になります。関数では、この順番を逆にして扱うので、

 【 y=x+3 】

のようにして使用することになります。これが、関数になりますが、関数の場合

  ■ 法則性 : 関数の式
  ■ 結 果 : 方程式

になっているので、変数xに3を代入した場合を想定すると

  ■ 法則性 : y=x+3
  ■ 結 果 : y=3+3 (解:6)

のようになります。一次関数は正比例になりますが、スタートラインが違うと同じ法則性でも結果が変わります。この時の初期値を指定する際に 【 x=0の時の値 】 を指定します。これを関数に追加するので、変数xを使った関数とは別に定数のグラフを加算した構造になっています。

 これが、中学校の関数になりますが、高校だと同じ関数でも 【 f(x)=x+3 】 のように書くことができるので、先程と同じものを出題する場合でも

  ■ 関数 : f(x)=x+3
  ■ 代入 : f(3)

の記述だけで意味が通じるようになります。むしろ、


【 問 】 f(x)=x+3のときの以下の下位を求めよ

  ■ f(3)
  ■ f(5)
  ■ f(8)


のような状態で、変数xの値を代入して回を求める問題を出題できるようになっています。

 この行蔵を見ると、

  ■ 関数の宣言をし、内容を記述する
  ■ 関数に値を代入して処理を実行する

と言う構造になっていますが、これがプログラミング言語の関数の仕組みと全く同じなので、基本的な考え方はこの形で示した関数の行蔵になっています。その為、

  ■ 関数の実装
  ■ 引数を追加して実行する

と言う形で処理を行えるようになっていますが、数学の関数が変数で制御できる処理を一つの構造体として管理できるようになっているように、プログラミング言語では、法則性ではなく 【 処理を行うアルゴリズム 】 を実装して、関数の実行時に関数内に指定した 【 引数 】 を参照して処理を行うことができるようになっています。

 この時に

  ■ 引数を実装して関数の実行
  ■ 引数を関数で受け取る
  ■ 引数を使用して処理の実行
  ■ 戻り値を使用して関数内の値を出力

と言う流れで処理を行います。Pythonだとinput関数と同様に関数の戻り値はそのままでは使用できないので、変数に関数を代入する形で変数に格納することで使用することになります。

 この変数を関数の実行で使用することで表示や処理に使用することができるようになっています。

 こうした処理をブロックを使用して使えるようになっているわけですが、

  ■ 処理で使用する変数
 
のように

  ■ 変数名
  ■ 値

同士を紐付けして、値を変数名で呼び出せるようにしたり、複数の値を変数の中に登録してインデックスで呼び出すこともできるようになっています。
 

 

 

  電気と制御

 


 小学校の理科では電気が登場しますが、電気で動く物を乾電池などのように小さな電力で動作雨するものを使用して電気の流れと電気で動くものの関係背を理解するようになっています。こうした電気で動くものを動かす時の最小構成は

  ■ 電気で動くもの
  ■ 配線(電線)
  ■ 電池

で構成できるのですが、これを極性のない豆電球の挙動で確認する場合には、

  ■ 豆電球
  ■ 配線(電線)
  ■ 電池


 【 電池 】 ─▷ 【 豆電球 】


のような状態になります。回路だとバッファで繋いでいる状態になりますが、家庭用の証明の場合、常に点灯しているわけではないので遮断する必要があります。この場合、


【 ■ 電源がオフの状態 】

   【 電 池 】
      ┃
      ▽
    (遮 断)
      ┃
      ▽
   【 豆電球 】


【 ■ 電源がオフの状態 】

   【 電 池 】
      ┃
      ▽
    (接 続)
      ┃
      ▽
   【 豆電球 】


のような状態になっています。これが接点による管理になりますが、この時に使用するのが人が操作を行うスイッチになります。この時のスイッチには、

  ■ タクトスイッチ
  ■ トグルスイッチ

の2つがありますが、

  ■ キーボードのキー
  ■ インターホンのボタン
  
のように押している時だけ反応するようなものを扱う際にはタクトスイッチを使用します。

 これに対して、屋内証明のように 【 点灯している状態を維持する 】 ような条件だと、状態の固定いが必要になりますから、状態を固定できる行蔵を持ったトグルスイッチを使用することになります。

 マインクラフトのブロックだと、

  ■ 感圧版 : タクトスイッチ
  ■ レバー : トグルスイッチ

が同じような挙動になっていますが、これを間に入れることで 【 操作 】 を実装することができるようになります。

 装置の場合、基本的に動いた状態を想定するので、豆電球の場合だと点灯している状態を基準に考えます。その場合、 【 通電すると点灯する 】 と言う条件になりますから、破壊しないレベルの電流と電圧を何かしらの方法で伝達する必要があります。豆電球はLEDほどではありませんが、小さな電流で動作してくれるので、この場合だと電池で対応することが出来ますが、この通電時の状態を基準に動作を考えることになります。

 豆電球の場合、極性を考えなくてもいいので、 【 出力の状態 】 として扱うことができるのですが、此の時の豆電球の状態を

  ■ 消灯 : 0
  ■ 点灯 : 1

で考えた場合、動作している状態は 【 1 】 ということになります。そのまま、豆電球と電池を繋いだ状態は 【 点灯の維持 】 ですから、 【 1を維持する 】 のと同じ意味を持ちます。

 ここにスイッチを追加すると、

  ■ オフ : 0
  ■ オン : 1

を操作で実行できるようになるので、常に1が維持される状態とは異なり 【 変化 】 を追加できるようになります。これが、 【 判定 】 になりますが、プログラミング言語の分岐に該当するものになります。此の構造は、

【 ■ スイッチを含む回路 】

   【 電 池 】
      ┃
      ▽
   【 スイッチ 】
      ┃
      ▽
   【 豆電球 】


のような状態になりますが、小学校の理科では、


   【 電 池 】
      ┃
      ▽
   【 スイッチ 】
      ┃
      ▽
   【 マイコン 】(判定用)
      ┃
      ▽
   【 豆電球 】


と言う構造で処理を考えることになります。micro:bitにしても別のマイコンにしても、直列と並列のように入力が2つあるので、 【 ボタンの組み合わせ 】 で状態を考えることができるようになっています。

 この場合、回路を繋いだ直列回路の状態になっていますから、電池の部分がボタンに変わっただけなので、選択肢としては

  ■ マイコンのボタンで動作する仕組み

を考えることになります。これが基本ですから、2つのボタンに対して条件を組み合わせると、

  ■ 直流
  ■ 交流

のような挙動を実装することが出来ます。この場合、分岐のブロックを用意して

  ■ 直流 : かつ(∧)
  ■ 交流 : または(∨)

の判定を追加すると電池の組み合わせと同じように2つのボタンを使った組み合わせを使用できるようになります。

 電池の場合だと 【 電池の有無 】 と言う判断ですが、マイコンのボタンの場合だと、

  ■ ボタンA
  ■ ボタンB

と言う異なるものん組み合わせでの動作の制御になります。この場合、

  ■ 入力デバイス1
  ■ 入力デバイス2

と考えることが出来ますから、入力自体を入れ替えることも出来ます。
  
 この考え方ですが、デバイスの入力は

 【 何かしらの条件で通電している 】

と言う状態ですから、その対象物を変えても通電の検知ができれば動作することになります。その為、ボタンのような接点の変わりに 【 センサー 】 を使用することも出来ます。

 センサーには

  ■ 音
  ■ 明るさ
  ■ デバイスの傾き
  ■ 温度

などを検知できるものがありますが、小学校で使用しているマイコンはマイコンのチップだけでなく操作などが行えるパーツの実装された 【 ワンボードマイコン 】 になっているのでほとんどの場合、入出力の操作と処理が実装できる演算部分が実装されたものになっています。

 この辺りは、

  ■ Arduino
  ■ Raspberry PI Pico

でもそういった仕様になっていますが、Raspberry PI Picoは簡素な仕組みなので、

  ■ LED
  ■ タクトスイッチ

が用意されているので、本体だけでも入出力を使った処理ができるようになっています。

 この2つのデバイスを並列化して数を多くすると

  ■ ディスプレイ
  ■ キーボード

になりますが、micro:bitのように実装機能が多いものだと、センサーから表示まで一通り行えるようになっていますが、マイコンの場合、GPIO経由でデバイスからの信号の入出力ができるので、センサーを追加することでセンサーが反応した状態で動作するような仕組みをじそすすることができるようになります。

 この時の確認用のパーツが豆電球になりますが、LEDを実装した製品だとLEDの点灯の処理になります。マイコンとセンサーを外部に用意した場合、

  ■ 入力 : 外部のセンサー
  ■ 出力 : 豆電球

になるので、GPIOの端子を入力と出力で衣装して運用することになりますが、この構造にすると制御工学で登場する

  ■ センサー
  ■ コントローラー
  ■ アクチュエーター

の状態に分けて処理の内容を理解することが出来るので、役割分担も含めて構造物の処理の理解を深めることができるようになっています。

 Arduinoの場合だとC言語やPythonでスケッチを書いて実装することになりますが、この時に

  ■ 設定 : setup()
  ■ 処理 : Loop()

と言う関数が用意されているので、この中に必要なものを実装して動かすことになります。当然、コンパイルを行ったあとにファイルをArduinoに送ることになりますが、コードを書いてコンパイルをコナってマイコンに送るという流れはどのマイコンでも同じなのでmidro:bitやM5 Stackなどでも同様の処理が生じます。

 ブロックを使った場合では処理を実装しやすくなっていますが、UIが違うだけで実装するまでの流れは同じです。

 算数では、PC上で動くものを扱うので、 【 アプリケーションの動作 】 を扱いますが、理科では、デバイス側の挙動になるので、 【 周辺機器やリモコンなどと同じ制御の方法 】 について体験することになります。

 現在は、小学校のカリキュラムで

  ■ OS上で動くアプリケーション
  ■ デバイスの制御

という制御方法が異なるものを体験し、実際にプログラミミングを行って動かすことができるようになっています。

 

 

 

  MAKE CODEと処理

 

 MAKE CODEでmicro:bitを使用した場合、シミュレーター上で

 

  ■ センサー

  ■ ボタン

  ■ 接点

 

を入力として使用できるようになっているので、

 

 

のような機能を追加して実際にマウスで操作して除隊の変化を加えることが出来ます。また、デバイスの追加もできるので

 

 

のようなことも出来ます。更に、シミュレーター内で端末同士の通信も行えるので

 

 

のようなことも出来ます。