プログラミング入門教育を教わった後の Arduino の活用効果について
土肥 紳一
東京電機大学 情報環境学部
dohi@chiba.dendai.ac.jp
概要：プログラミング入門教育は，一般的に受講者が所有するノート PC や大学が設置している情報端末などを活用して授業が行われる．この場合，標準出力はディスプレイ，標準入力はキーボードとなるが，何か物足りない．プログラミング入門教育で学習した知識を使って，気温を測ろうとしても，暗くなったら自動的に照明を点けようとしても，できない事に気が付く．この問題の本質を解決する物として，Arduino(アルドゥイーノ)が存在する．この活用によって，プログラミング入門教育で学習した知識を基に，発光ダイオード(LED)への出力，スイッチや光センサーからの入力等を容易に行えるようになり，プログラミングに対する興味を一層喚起できることが期待できる．本
論文では，2014 年 1 月に実施したエクステンションの中で，「コンピュータプログラミング A を教わった後のハードウェア入門」を開講し Arduino を活用した．その取組みと活用効果を述べる．

1 はじめに容易である．受講者の様子を図 1 に示す．

情報環境学部のプログラミング入門教育は，Java 言語を使い，テキストエディタとコマンドプロンプトを使って，白紙の状態からプログラムを入力し，コンパイル，実行を行うスクラッチプロ
グラミングに拘っている．その科目名は，「コンピュータプログラミング A」(以下「コンプロ A」と略)である．毎年，300 名近い受講者がおり，5 クラスに分割している．主な内容は，手続き型の入門を学ぶ．授業の前半では，変数，分岐，繰返し，配列，プログラム分割等の基本を学習する．後半
ではプログラム分割に重点を置き，引数，返却値を活用したメソッドを多く扱う流れになっている．
「コンプロ A」の目的は十分に達成できているが，習得した知識を使って，気温を測ろうとしても，暗くなったら自動的に照明を点灯しようとしても，ハードウェアの制御はできない事に気が付く．

2 Arduino の活用
Arduino は，イタリアで開発されたマイクロコンピュータである[1]．大学での利用も始まりつつある[2]．Arduino Uno がキットとして販売されており，価格は 4 千円程度である．学生諸君のお小遣いでも十分に手に入れることができる．気の利いた部品が一通り揃っており，さらに Arduino の統合環境は，受講者が所有するノート PC で実行できる．統合環境は Processing に似ており，Processing の文法は Java に似ている．
「コンプロA」を教わった後の受講者は，手続き型の基本を理解しているため，Arduino の統合環境の利用は

図 1 受講者の様子

3 エクステンションでの実施
情報環境学部では，エクステンションと言う制度を設けている．教員がテーマを公開し，希望するテーマに学生諸君が自主的に参加する．例年，授業の補講，基礎，応用・実践，資格試験関連，就職関連のテーマが取り上げられる．開催期間は，授業が終了した後の 1 月から 3 月であり，単位の認定は無い．筆者は「コンピュータプログラミン
グ A を教わった後のハードウェア入門」を担当した[3,4]．スケジュールと実施内容は，表 1 に示す．
開講時間は，14:30～16:20(途中 10 分の休憩)である．受講者は 20 名を想定し，Arduino Uno キットの他に，テキストとして「Arduino をはじめよう 第 2 版」を 20 セット準備した[5]．その他の特記事項として，半田付けはしない事，ハードウェアを初めて体験する人の参加を奨励した．応募者

loop 関数の定義は，setup 関数の実行後，無限は，ちょうど 20 名であった．SA や TA は居ない．に繰り返される．digitalWrite 関数は，指定したデジタルポートに HIGH または LOW を出力する．

表 1 スケジュール
日程
1 月 20 日
1 月 21 日
1 月 22 日

内容
統合環境 Arduino のインストール，LED の表示
スイッチを使った LED の表示
光センサーを使った LED の表示

デジタルポートが HIGH になった時に LED を点灯し，LOW になった時に LED が消灯する．プログラムの実行結果を，物理的に光の点灯と消灯で示すことができる．Arduino は最大で毎秒 1600万行の処理能力がある．LED の点灯直後に消灯すると，点滅が速すぎて目視できない．そこで delay

4 初日の実施内容
4.1 統合環境のインストール
初日は，本テーマの実施について主旨説明を行い，テキスト，Arduino UNO キットの配布を行った．取り扱う部品が小さいので，紛失しないよ
うに注意を喚起した．その後，Arduino の統合環
境をダウンロードし，受講者が所有しているノート PC にインストールした．受講者のノート PCは大半が Windows であったが，MacOS の受講者関数で点灯後と消灯後に 1000ms の遅延を入れる．
この短いプログラムには，「コンプロ A」で教わった知識，すなわち int 型，変数，変数のスコー
プ，メソッド(Arduino では関数)，引数，ブロック等々，多くの知識が活用されている．また，プ
ログラム入力に関する作法は重要である．
「コンプロ A」の授業では，ブロック内は一段字下げすることを徹底的に指導している．可読性の良いプログラムを記述する事は大変重要な事であり，も数名いた．統合環境は，これら 2 つの OS に対Adruino においても同様である．

応しており，特に問題は発生しなかった．

4.3 初日のアンケート調査結果

4.2 LED を 1 秒毎に点滅と消灯
最初に体験したプログラムを例 1 に示す．このプログラムは，13 番のデジタルポートに接続した
LED を 1 秒間点灯した後，1 秒間消灯し，これを無限に繰り返すものである．使用したパーツは，LED が 1 個 で あ る ． 極 性 に 注 意 し な が ら ，ArduinoUNO の 13 番のデジタルポートと GND

初日のアンケート調査結果を表 2 に示す．半田
付けの経験は 68.4%であった．高校以前に全員が体験しているものと考えていたが，予想に反する
結 果 と な っ た ． 電 子 工 作 の 経 験 者 は 31.6% ，Arduino を知っていた受講者は 10.5%であった．
「コンプロ A」で教わった知識は，全員が役立ったと回答し，本テーマの効果が窺える．

端子に直接接続する．
表 2 アンケート調査結果（初日）const int LED = 13;
void setup(){pinMode(LED, OUTPUT);}
void loop(){digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);}
例 1 LED が 1 秒毎に点滅するプログラム
プログラムは int 型の変数 LED をグローバル変数として定義し，13 を代入している．この変数はconst が指定されているため，値を変更できない．
setup 関数の定義は，プログラムの実行開始時に 1 度だけ実行される．pinMode 関数を使って，使用するデジタルポートを出力に設定する．

質問項目

はい(%)

半田付けを行った事はありますか．

68.4

電子工作を行ったことはありますか．

31.6

Arduino を知っていましたか．

10.5

Arduino のセットアップは理解できましたか．

100.0

Arduino とパソコンの関係は理解できましたか．

100.0

コンピュータプログラミングＡの知識は，役立ち

100.0

ましたか．
LED の電極（アノード，カソード）は，理解でき

100.0

ましたか．

(受講者の感想)・Android のアプリ開発をしていますが，ハードウェアのことについてはあまり触れたことがなかったので楽しいです．
・Arduino については，知ってはいましたが手は出していなかったので，いい経験になっています．3 日間で終わってしまうのは少し残念ですが，機会があれば自分でも購入して弄ってみたいと思いました．
・コンピュータで動かすことで少し実感がわきました．
・そもそもハードウェアってなんですか？

・まだ，ついていけそうです．
・難しいかと思っていたが，今日のところは意外と難しくなかった．
・面白そうな講義なので受けてよかったと思っている

感想の中には，Android のアプリを開発している受講者がおり，ハードウェアを触れることがでスイッチは 7 番のデジタルポートへ接続し，その状態を digitalRead 関数で読み取り，int 型のローカル変数 value へ代入する．
if 文を使って valueの値が HIGH に等しければ 13 番のデジタルポー
トへ HIGH を出力し，value の値が LOW に等しければデジタルポートへ LOW を出力する．

き，興味が喚起されていることが窺えた．また，「コンプロ A」の授業では，実行時のプログラ

Arduino の存在は知っていたものの，体験する機ムへの入力はキーボードを活用する．例えば気温会が無かったとの指摘があり，良い体験の機会とを入力し真冬日を判定したり，if 文を複数組み合なっている事が窺えた．

わせることによって点数に応じた成績評価を判定

4.4 初日の受講者の様子する例を取り上げている．Arduino ではスイッチ

初日は，統合環境のインストールと LED の表示の状態を if 文で判定できる事，デジタルポートかが主な内容であり，ハードウェアを扱う上で難しらの入力は HIGH もしくは LOW の 2 つしかないいものは無かった．LED は，極性のある部品であ事を体験した．

る．キットの中には，赤，青，緑の 3 色が用意さ5.2 トグルスイッチ機能の実装れている．非常に小さな部品であるが，想像以上

次の例はスイッチを 1 回押すと LED が点灯し，に明るく輝く事に興味深々であった．極性(アノーもう 1 回押すと消灯する，すなわちトグルスイッ

ドとカソード)の見分け方は，リード線の長い方がチの機能を実装する．使用したパーツは，5.1 節とアノード(陽極)，短い方がカソード(陰極)になる．

同じである．この例には「コンプロ A」では体験

別な見分け方として，発光ダイオードのカソードできない，重要な問題がたくさん隠されている．

側は少し欠けており，また内部の電極が大きい方プログラムは例 3 に示す．

がカソードである．
「コンプロ A」では気が付かな
い，LED 固有の特徴を受講者は体験できた．

5 二日目の実施内容
5.1 スイッチを使った LED の点灯と消灯
二日目は，スイッチを押すと LED が点灯し，スイッチを離すと LED が消灯する例から始めた．使用したパーツは，LED が 1 個，10KΩの抵抗が 1個，スイッチが 1 個，ジャンパー線が 3 本である．
LED の接続は，4.2 節と同じである．その他のパーツはブレッドボード上で接続する．実体配線図は省略した．プログラムは例 2 に示す．
const int LED = 13;
const int BUTTON = 7;
int value = 0;
void setup( ){pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);}
void loop(){value = digitalRead(BUTTON);
if(value == HIGH){
digitalWrite(LED, HIGH);} else {digitalWrite(LED, LOW);}}
例 2 スイッチを使った LED の点灯と消灯

const int LED = 13;
const int BUTTON = 7;
int value = 0;
int status = 0;
void setup(){pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);}
void loop(){value = digitalRead(BUTTON);
if(value == HIGH){
status = 1 - status;}
if(status == 1){
digitalWrite(LED, HIGH);} else {digitalWrite(LED, LOW);}}
例 3 トグルスイッチ機能の実装
スイッチの状態を digitalRead 関数で検出する
仕組みは例 2 と同じである．トグルスイッチの機能を実装するために int 型の変数 status をグローバル変数として宣言し，初期値は 0 を代入しておく．変数 status は，スイッチが 1 回押されると 1になり，もう一度押されると 0 になる．この仕組
みは status = 1 – status;で行っている．例 3 は「コンプロ A」を教わった後の考え方として，非常にif 文で old_value が LOW に等しく，かつ value素直なプログラムである．
受講者は上手く行くと信じて Arduino で実行すが HIGH に等しい事を if 文の条件式に記述するこるが，不安定な動作を体験する．主な原因は，とによって，スイッチが押された瞬間を検出できArduino が最大で毎秒 1600 万行の処理能力がある．この時，status の値を変更する．
「コンプロ A」

り，スイッチを押している間に，value が何度もの授業では，点数に応じた成績評価を行うプログ

HIGH になり，この結果 if 文が何度も実行される

ラムの中で，論理 AND 演算子&&を活用している．

ためである．このイメージを図 2 の●で示した．

Arduino の例ではスイッチが押された瞬間を検出

横軸が時間を示しており，スイッチが押されたこするために，&&を活用できる事を体験した．以上とによって波形が立ち上がり，この間，if 文が何の対策により，以前よりは改善されるものの，時々度も実行されてしまう．

不安定な動作が発生する事を，さらに体験する．

5.4 バウンシングの対策

1.0

5.3 節の主な原因は，スイッチが押された瞬間に，スイッチ内部の接点が短時間に振動し，ON と0.8OFF を繰り返す現象，すなわちバウンシングが発生するためである．バウンシングの発生によって

0.6

old_value が LOW に等しく，かつ value が HIGH

0.4に等しい瞬間を if 文が何度も検出し，不安定な動作をする．このイメージを図 3 の●で示した．

0.2020406080100t

図 2 スイッチを押した時のイメージ

5.3 トグルスイッチの実装方法の改善1.0

0.8

0.6

5.2 節の問題の解決策は，スイッチが押された瞬間を検出する事である．int 型の変数 old_value をグローバル変数として定義し，初期値は 0 を代入しておく．この変数は，value よりも 1 つ前の値

0.40.2を保存している．プログラムを例 4 に示す．
const int LED = 13;
const int BUTTON = 7;
int value = 0;
int old_value = 0;
int status = 0;
void setup(){pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);}
void loop(){value = digitalRead(BUTTON);
if((old_value == LOW) && (value == HIGH)){status = 1 - status;}
old_value = value;
if(status == 1){
digitalWrite(LED, HIGH);} else {digitalWrite(LED, LOW);}}
例 4 トグルスイッチの実装方法の改善

020406080100t

図 3 バウンシングのイメージ
1.00.80.650ms

0.4

遅延
0.2

020406080100t

図 4 遅延によるバウンシング対策のイメージ
バウンシングの対策は，スイッチが押された瞬間を検出した時に，バウンシングが治まるまで遅延を入れる事である．delay 関数を使って 50ms程度の遅延を入れ，やっと安定した動作になる．
例 5 は，loop
改善のイメージを図 4 の●で示した．

関数内の if 文のみを示した．

5.6 二日目の受講者の様子

if((old_value == LOW) && (value == HIGH)){status = 1 - status;
delay(50);}合による接触不良が発生した．特に，スイッチの不具合が目立った．具体的にはブレッドボードに部品が小さいため，受講者の力加減や器用さが求バウンシングはハードウェア固有の問題であり，「コンプロ A」の授業では出て来ない．しかし，スイッチが押された瞬間の検出やバウンシングの対応策は，ソフトウェアで行える事が興味深い．

5.5 二日目のアンケート調査結果
二日目のアンケート調査結果を表 3 に示す．抵
抗のカラーコードの読み方が理解できない人，バウンシングの意味と対策について，理解できない人が若干発生した．

められた．ジャンパーに使用する配線は単線を使っているが，ブレッドボードに抜き差ししているうちに単線が折れ，ブレッドボードに刺さったままになる事態も生じた．接触不良に関する原因の究明は，手間取った．
ブレッドボード上の配線は，電気的な接続が正しければ，色々な実体配線が存在する．この点は，同じ実行結果を得るためのプログラムは何通りかの記述方法がある事と同じである．自由度がある
ことに，戸惑う者がいた．抵抗はカラーコードによって抵抗値が表現されている．初めてカラーコ

アンケート調査結果（二日目）

質問項目

わなくて良い事は便利である．一方，接続の不具差し込んでも，浮き上がってくる事が多く，扱う

例 5 バウンシングの対策

表 3

ブレッドボードを使った配線は，半田付けを行はい(%)

ードの読み方を知る者がいた．

const の意味は，理解できましたか．

100.0

書画カメラのズーム機能は，小さな部品を拡大

変数のスコープは，理解できましたか．

100.0

して示すことができ，大変重宝した．またテキス

ブレッドボードの仕組みは，理解できましたか．

100.0

抵抗のカラーコードの読み方は，理解できました

94.7

トの上に，ブレッドボード，ArduinoUNO を乗せ，か．
ジャンパは，理解できましたか．

100.0

モメンタリ型プッシュボタンスイッチ(タクトスイ

100.0

テキストの実体配線図との関係を説明する工夫を行った．書画カメラ上の様子を図 5 に示す．

ッチ)は，理解できましたか．
if 文でスイッチの状態を判断する仕組みは，理解100.0

できましたか．
バウンシングの意味は，理解できましたか．

94.7

バウンシングの対策に delay 関数を使う方法は，89.5

理解できましたか．

(受講者の感想)・どうにか，ついて行けてます．
・バウンシングというものを初めて知った．面白い現象だと思う．
・思うように動かなかったので難しかったが，今日の内容はとても面白かった．
・少し難しかった・少し難易度は上がってきましたが，スイッチのバウンシン

図 5 書画カメラの様子

グは制御プログラムを作るうえで気を付けないといけないということは理解しました．
・抵抗のカラーコードの読み方を初めて知りました．あと，delay が 10~50 ミリ秒とありましたが，何度か試行してみて，50 よりも大きい値が必要だと感じました．

バウンシングの存在を初めて知ったとの感想が多かった．また，delay 関数の引数の値を大きくしないと正しく動作しないことが指摘されているが，バウンシング以外に接触不良も考えられる．

6 三日目の実施内容
6.1 LED の明るさを徐々に変更
三日目は，LED の明るさを徐々に変更する，フェードインとフェードアウトを行う例から開始した．使用したパーツは，LED が 1 個，270Ωの抵抗が 1 個，ジャンパー線が 2 本である．これらをブレッドボード上で接続する．実体配線図は省略
した．Arduino には，パルス幅変調(PWM Pulse

Width Modulation)の機能を利用できるデジタルポートがあり，analogWrite 関数を利用する事に6.2 CdS による LED の点灯時間の変更
Arduino にはアナログ入力のポートが装備されよって利用できる．フェードインとフェードアウている．このポートを活用する事によって，LEDトを行うプログラムを例 6 に示す．の点灯を制御することができる．接続するセンサ

const int LED = 9;void setup(){pinMode(LED, OUTPUT);}
void loop(){for(int i = 0; i < 255; i++){analogWrite(LED, i);delay(10);}for(int i = 0; i < 255; i++){analogWrite(LED, 256 - (i + 1));delay(10);}}
例 6 LED のフェードインフェードアウト
このプログラムは，PWM を利用できる 9 番のデジタルポートに接続した LED を 0 から 255 段
階の数字で，明るさを変更する．loop 関数の定義の中では，2 組の for 文を使って，0,1,2…254 と255,254…,2,1 の整数を作り出し，その整数をanalogWrite 関数の引数に指定する．delay 関数では 10ms の遅延を入れ，フェードインとフェードアウトが徐々に変化する事を目視できるようにしている．このような機能は，受講者のノート PCがスリープ状態に入った時に，LED が同様の表示を行う機種がある．偶然，多くの受講者の機種がこの機能を搭載しており，興味を喚起した．
「コンプロ A」の授業でも繰返しは for 文を重点的に学習する．例えば 1 から 10 まで 1 ずつ増加するプログラムや，逆に 10 から 1 まで 1 ずつ減少するプログラムである．for 文の記述に関して特に拘っている事は，10 回の繰り返しに対して，制御変数 i の初期値は必ず 0 にする事である．これによって for 文の記述は for(int i = 0; i < 10;i++)に統一でき，繰り返しの回数を変更する場合は，10 を他の数字や変数に置き換えるだけで済む．
例 6 では 2 つ目の for 文で 255,254…,2,1 の数を生成しているが，for(int i = 0; i < 255; i++)の部分は同じである．数が順に減る場合も，制御変数 i が増える中で減る仕組みを記述し，プログラムの可読性を重視している．もちろん，実行速度を競う
場合は，他の記述方法を検討する必要がある．

ーは硫化カドミウムセル(CdS)を利用する．CdS
は明るくなると抵抗値が減少し，暗くなると抵抗値が上昇する．この事を利用すると室内の明るさに応じて，LED の輝度を変化できる．CdS 以外に使用したパーツは，LED が 1 個，10KΩの抵抗が1 個，ジャンパー線が 3 本である．これらをブレッドボード上で接続する．実体配線図は省略した．
CdS による LED の明るさを変更するプログラム
を例 7 に示す．
const int LED = 13;
const int CDS = 0;
int value = 0;
void setup(){pinMode(LED, OUTPUT);}
void loop(){value = analogRead(CDS);
digitalWrite(LED, HIGH);delay(value);
digitalWrite(LED, LOW);
delay(value);}
例 7 明るさで LED の点滅時間を変更
このプログラムは，0 番のアナログポートに接続した CdS の抵抗値を analogRead 関数によって0 から 1023 の整数として取り出す．取り出した整数は int 型の変数 value に代入し，この変数をdelay 関数の遅延時間として利用する．
受講者は CdS を使うことによって，明るさを 0から 1023 の整数に変換できる事を初めて知る．
キーボードからの入力とは異なり，リアルタイムに次から次へと数値を得る事を体験した．

6.3 CdS による光スイッチの実現
CdS から入力された数値を analogWrite 関数の引数に利用すると，光スイッチを実現できる．13番のデジタルポートは 128 以上の整数になるとHIGH になり LED が点灯し，128 を下回るとLOW になり LED が消灯する．このプログラムを例 8 に示した．なお value の値は 0 から 1023 の整数になり，0 から 255 の整数に変換するために4 で割っている．loop 関数以外は，例 7 と同じため省略した．使用したパーツは，6.2 節と同じである．同じハードウェアを利用しているが，プログラムを書き換えるだけで光スイッチを実現できた．
void loop(){value = analogRead(CDS);
analogWrite(LED, value / 4);
delay(10);}例 8 光スイッチの実現

6.4 コンソールへの表示
Arduino は，ノート PC と USB ケーブルで接続し，Serial.begin 関数で通信速度を設定する事によってアナログポートの状態をモニタできる．このプログラムを例 9 に示した．
const int CDS = 0;
int value = 0;
void setup(){
Serial.begin(9600);}
void loop(){value = analogRead(CDS);
Serial.println(value);
delay(100);}
例 9 シリアルモニタへの表示
6.3 節のハードウェアを活用し，CdS から入力された数値を Serial.println 関数の引数に指定し，Arduino の統合環境でシリアルモニタを起動すると，明るさの変化によって数値が変わる様子を観測できるようになる．この様子を図 6 に示す．

6.5 三日目のアンケート調査結果
三日目のアンケート調査結果を表 4 に示す．ア
ナログの入出力，シリアル通信について若干理解できない人が出た．また，MOSFET は，説明だけに止めた為，88.9%の理解に止まった．
表 4

アンケート調査結果（三日目）

質問項目

はい(%)

パルス幅変調(PWM)は，理解できましたか．

100.0

LED のフェードインとフェードアウトの仕組み

100.0

は，理解できましたか．
光センサ(CdS セル)の働きは理解できましたか．

100.0

アナログ出力(analogWrite)は理解できましたか．

94.4

アナログ入力（analogRead）は理解できましたか．

94.4

シリアル通信は，理解できましたか．

94.4

MOSFET の働きは，理解できましたか．

88.9

今後 Arduino を購入し，ハードウェアの工作を行

50.0

いますか．

(受講者の感想)・3 回の講義でしたが，新しく学ぶことは多かったです．シリアル通信の知識を使って，今後色々と遊べそうです．
・いつか購入して弄ってみたいと思いました．
・このエクステンションプログラムで色々なことを学ぶことができた．エクステンションだけでなく普通の授業として，プログラミングとハードの関係の授業を開講してほしいと思った．
・このエクステンションを通してハードウェアとプログラミングの関係性が実感できた．
・シリアルモニタがとても好み
・ハードウェアと GUI を連結させた，簡単なゲームみたいなものを作成するような授業であれば，もっと面白かったと思います．
・ハードウェアの仕組みがわかり，ハードウェア特有の問題があることが初めて知り，勉強になりました．
・楽しかったです!!
・今回のプログラムで Arduino のことについて少し学ぶことができたのと，ハードウェアに対する興味が一段と高まったのでよかったと思います．今後も Arduino について，もっと学びたいと思いました．
・前よりも，プログラミングに対する自信も知識もつけることができました．
・面白い講義だった．受講してよかったと思っている．ハー
ドウェアの知識も少しは身についたと思う

普段の授業でも，プログラミングとハードウェアの関係について授業を行って欲しいとの要望があった． Arduino を購入し，ハードウェアの工作を行うと回答した割合が 50%になった事は，本テーマの効果を反映していると考えられる．

6.6 受講者の様子
図 6 シリアルモニターの様子

Arduino でプログラムが起動すると，時々刻々送られてくる数値データが，手で CdS を隠すことによって変化する事に，受講者は興味深々であっ

今回実施したテーマのモチベーションの関係を図た．「コンプロ A」では，プログラムへの入力は7 に示した．グラフ上のラベルが Arduino になっキーボードを使うが，リアルタイムにデータが入ているものが，今回測定した結果である．単年度

力され，時々刻々変化する事は受講者にとって新での開催のため，グラフ上では点として表示され鮮な様子であった．大きな電力が必要な装置を動る．
「コンプロ A」と異なる点は，エクステンショか場合は，USB で供給される電流では不足する．

ンの実施形態が集中講義形式である事，また前期

この場合は別に電源を準備し，これを制御するたから後期まで期間が短い事である．
「コンプロ A」

めMOSFET(metal-oxide-semiconductorと比較すると，前期，後期共に高い値であることfield-effect transistor)を使う．大きな電力を制御が分かった．エクステンションに参加する受講者しながら物を動かす仕組みは説明のみとした．まの潜在的なモチベーションの高さが窺える．

た CdS は，素子を手で少し隠しただけでは光を受

8 おわりにに光するため，ラインマーカのキャップを使って素プログラミング入門教育を教わった後の子を隠すと，顕著に反応が現れた．その他，ハーArduino の活用効果について述べた．
「コンプロ A」

ドウェアの特性に合わせて光スイッチの感度の微を教わった知識を活用する上で，Arduino の極め調整は，プログラムで行える事を体験できた．てシンプルな活用が効果的である事が分かった．

7 受講者のモチベーションの分析

if 文，for 文，変数，変数のスコープ等の知識がハ「コンプロ A」の授業では，受講者のモチベーードウェアを活用する上でどのように役立つのかシ ョ ン の 向 上 を 目 的 に SIEM(School ofを，体験を通じて学ぶことができた．さらに「コInformation Environment : ジーム)を実践してンプロ A」では体験できないハードウェア固有のいる[6]．これを活用すると，受講者のモチベーシ問題であるバウンシングに遭遇し，その解決策はョンを測定できる．モチベーションの測定は，初ソフトウェアで行える事を学んだ．

日と三日目に行った．授業毎のアンケート調査項

受講者は，今後，各自の専門に応じてハードウ目の中に，重要度「ハードウェアを学習することェアに関する専門科目を学ぶ事になる．
「コンプロは重要だと思いますか」，期待度「もっとハードウA」との係わりを理解し，興味が深まることを期

ェアの知識や技術を高めたいと思いますか」の設待したい．2014 年度も同様にエクステンションで問項目を設け，5 段階のリッカート尺度で回答を開催する予定であり，LED アレイ等を新しく導入求め，その積の平均で 1～25 に数値化する．

する計画である．今後は，このような取り組みを前期(初日)のモチベーションは 21.3，後期(三日目)は 20.3 であった．残念ながら前期から後期に継続しながら，プログラミング入門教育に対する一層のモチベーションの向上を目指したい．

かけて 1.0 低下した．
25.0

20.0

15.0
前期
中期

10.0

後期

5.00.0

図 7 モチベーションの様子「コンプロ A」では，授業の前期，中期，後期の 3 回に分けてモチベーションを測定している．
2004 年から 2013 年までのモチベーション推移と参考文献[1]Arduino をはじめようキット，
http://www.switch-science.com/catalog/181/[2]Arduino を用いたタイルプログラミング教材の開発，中川洋，中西通雄，コンピュータ利用
教育学会，PC カンファレンス講演論文集，
p172-p175，2014[3]コンピュータプログラミング A を教わった後のハードウェア入門，エクステンション，
http://dohi.chiba.dendai.ac.jp/~dohi/ext-arduino[4]エクステンションでのコンピュータプログラ
ミングＡを教わった後のハードウェア入門，土肥紳一，コンピュータ利用教育学会，PC カンフ
ァレンス講演論文集，p248-p251，2014[5]Arduino をはじめよう 第 2 版，オライリー[6]SIEM を導入したプログラミング入門教育におけるペンタブレットの活用，土肥紳一，宮川 治，今野紀子，大学 ICT 推進協議会，年次大会講演
会講演論文集，p399-p406，2011