講師の皆さんへ

はじめに

CHIRIMEN for Raspberry Pi 3 (以下、CHIRIMEN Raspi3) と本チュートリアル (以下、本教材) を用いて IoT プロトタイピングやプログラミングの教育をする講師の皆さんに注意して頂きたいことをまとめています。

学校での講義・ハッカソンイベント・プログラミング塾などで利用する際には、先生やメンター・チューターなどのスタッフの皆さんはこちらもご覧ください。

始めに簡単にまとめると次の通りです:

以下、教材の目的や意図した使い方、躓く人が多く講師側が意識すべきポイントなどを説明します。

教材としての目的

本教材は JavaScript の初学者もしくはプログラミング未経験者であっても簡単にソフトウェア・ハードウェア・電子回路すべてを同時に楽しく、ホンモノのプログラムとプロトタイピングを通じて学べる環境を意図して作られています。

また、本教材では実際のプログラミングやプロトタイピング開発を行っていく上で必要となる実用的な技術を、ホンモノのプログラムとプロトタイピング機材を用いて、実践的に習得もらうことを目的としています。

これまでもプログラミング教材としては Scratch や NodeRed のように学習用に GUI で簡単な操作でできる環境、プロトタイピング教材としては MESH のように簡単で安全に使えるツールなどは存在しました。しかしこれらはいずれも実践的技術の習得という意味では課題がありました。

一般的なプログラミング言語を用いて学習すれば、そのまま同じ言語で多様な Web サービスやアプリと実際に連携することも、本格的なプログラミング言語の学習に繋げていくことも可能です。電子工作ショップで一般的に入手可能なセンサーや機材を用いて学習すれば、安価で様々なデバイスを使ったプロトタイピングを実践してプロダクト開発へと繋げていくことも可能です。

一方で実践的なプロトタイピングを行うためには単にソフト・ハード・回路の知識が必要なだけでなく、開発環境の構築、複数のプログラミング言語の習得、コンパイル、サーバとクライアントの通信モデルなど多数の知識が必要となり、初学者が始めるには非常にハードルが高いものでした。そのため、本教材ではブラウザを開くだけで開発ができ、JavaScript の単一プログラムで全てを制御できる環境を用意しています。

Web を通じて多様な情報、ノウハウ、サービスが使える今こそ、Web の標準言語である JavaScript を用いてプログラミングとプロトタイピングを学ぶことが、最初のハードルを低く抑えて高い学習意欲を保ちつつ、実践的な応用に繋げられる知識を習得していくのに役立つと考えて作られた教育環境が CHIRIMEN for Raspberry Pi 3 です。

学習方法と進行方法

本チュートリアルは初学者でも講師に教えられることなく、順に読みながら試すことで独学できるように意図して書かれています。初学者は特に多くのことを聞いても理解が追いつきませんので、聞くだけの座学を長く設けず、すぐに各自読みながら手を動かして試させることをお薦めします。

講師一人あたりに数人程度までの小規模で学習する場合はどのようなスタイルでも問題ありませんが、人数が多く学習速度・進捗にバラツキがみられるようになってくるほど、講師と同時に全員で進行するのは難しく時間もかかります。従って、できる人は自分で次に進めていき、本文に書かれていないが example が用意されているデバイスも順次自由に試してもらうことをお薦めします。

また、ソフトウェア・ハードウェア・電子回路の全てを同時並行で学ぶことになるため、いずれか単独で学習するときよりも、講師から見たら些細なことで躓く人が多く出てきます。

若年層やプログラミング未経験者などを対象とするときは特に、コードを手入力させたりせず、jsbin/jsfiddle にチュートリアル本文のコードをコピペしたり、各チュートリアルページ末尾からリンクしているステップ毎の完成版ページや example ページ で用意されているサンプルコードを元に書き換える方法で学習させることをお薦めします。

できた人は自由に先に進めたりチュートリアル外のサンプルを試したりコードを書き換えたり、あるいは Tips 集 などを見て独創的な応用を考えるようにしてもらいつつ、講習会として取れる時間に応じて途中までを全員で進めるような学習の仕方を想定して書かれています。

総務省が学生や若者を対象に実施する IoT システム開発のスキルアップイベント「Web×IoT メイカーズチャレンジ」、Mozilla Festival でのワークショップ、慶應義塾大学や中央大学の講義などで使われた経験からすると、1 時間程度しかない場合は最初の L チカだけ、半日〜1 日程度あれば基礎編の終わりまで、2-3 日あれば応用編までを全員 (小中学生から大人まで) で進行可能です。

講師が事前に入念な準備をすることで 2 日で発展編まで含めて実施したケースもありますが、一般的には応用編までを皆が実施し、各自が作りたいものを考えて作っていく上で必要と興味に応じて発展編やチュートリアル外の exmaple を試していくことを想定しています。

この教材で学べること・学べないこと

本教材では初学者でも簡単にソフトウェア・ハードウェア・電子回路を学べることを意図していますが、基礎知識全てを学べることを意図した作られているものではありません。

スクラッチから独力でプログラムを書けるようになるための JavaScript の基礎構文やデバッグの仕方であったり、オームの法則から始まる電子回路の基本であったりといったことを一から全て本チュートリアルだけで学ぶことは想定していません。学びたい内容に応じて、Appendix や本文中のリンクで紹介している教材などを利用して別途学習して頂く必要があります。

また、初学者向けで最初に時間がかかる開発環境のセットアップ、実際にハードを動作させるまでに用意すべきステップを最小限にするため、機材を繋いでブラウザを開くだけですぐに実際のデバイスを動作させたり、ブラウザ上でコードを書き換えるだけで即時反映させたりできるようにしています。逆に本教材では開発環境のセットアップなどについては学習できません

イベントなどでの利用時の注意

ワークショップやハッカソンなどで CHIRIMEN Raspi3 を使用する際には主催・運営側で注意すべきことがいくつかあります。

Raspberry Pi 3 の故障・破損

Raspberry Pi 3 はイベント中に故障する消耗品として考える必要があります。ピンに力を入れすぎて曲げた、micro SD カードスロット、micro USB 端子、HDMI 端子などが物理破損した、回路・配線のミスでショートさせるなどして過電流が流れたなど、簡単なミスで故障して使えなくなります。慣れない利用者が使用する場合には初期不良でなく破損した場合も原因を把握しておらず「最初は動いていたが動作しなくなった」などと申告されることもありますが、故障させることも含めて学習として受け入れ、予備を用意した体制でイベントを実施するように

DC Fan の故障

下記の「躓く人が多いポイント」にも記載していますが、DC Fan には極性があり、逆指しすると短時間で故障します。「電子工作では不注意で機材の破損や怪我に繋がること」を学習する意図で作られていますが、運営側としてはその点を参加者に十分注意するように指導するか、DC Fan については予備を多めに準備しておく必要があります。

必要機材の確保

経験のないまたは浅い参加者に機材確保を任せると、センサーやモータなどを使用する上で一緒に必要となる機材の手配を忘れることが多くあります。例えば圧力、水分などのアナログセンサーだけを用意して ADC や抵抗などを用意していないと Raspberry Pi 3 には ADC が搭載されていないため利用できません。機材手配時には分かる人が相談に乗って不足がないように指導する体制を用意するか、運営側で十分な予備機材を用意して対応するようにしてください。

躓く人が多いポイント

Typo

初学者は大量に Typo します。特に、モバイルディスプレイなどで視認性が低い場合や、英語が得意でない人はかなり Typo します。

コンソールを見れてエラー行を表示すれば自分でも気づくはずですが、初学者はそれもすぐにはできません。講師一人あたりに数人程度までの小規模で行うのでない限り、写経しながら学ばせるのは非常に時間もかかるし難しくやる気を削ぐためお薦めできません。

実際の開発現場でも調べてサンプルをコピーして編集するのが当然の時代ですから、チュートリアル本文からコードをコピペしたり、各チュートリアル末尾でリンクしているステップ毎の完成版ページを開いたり、example ページの jsbin ページを開いて編集したり、ローカル gc ディレクトリ配下にあるファイルを編集したりしながら学習させてください。

自分でコードを書く場合、VS Code のようなリッチなエディタ環境だと便利ですが、Raspi で Chromium との同時起動するのはかない重たくなります。ブラウザ内で動作する jsbin/jsfiddle のようなオンラインエディタを使う他に、部分的なコードであればブラウザのコンソールを開いてそこでコードを書くと保管などもされて有用です。

タクトスイッチの使い方

タクトスイッチには 2/4pin の 2 種類がありますが、チュートリアル中の各回路図ではいずれか一方だけを使用し、図によって敢えて異なるピン数のものを利用しています。これは同じ回路配線を考え配線することで学習することを意図したものですので、機材セットとしては 2/4 ピンのタクトスイッチを両方用意して回路図通りに配線させるのではなく、一方のみを用意すれば十分です。

具体的には GPIO 編 で 4 ピンだけ持っている人は「3. マウスクリックのかわりにタクトスイッチを使ってみる」の 2 ピン回路図で、2 ピンタクトスイッチだけ持っている人は「4. LEDのかわりにCPUファンを回してみる」の 4 ピン回路図で引っかかることが多くあります。本文の説明を読んで各自配線を考えるように指導してください。

タクトスイッチの回路図についての学習は不要だから多人数がミスなく短時間で試すことを優先する場合は、タクトスイッチを両方用意するか、チュートリアルの回路図をいずれかに統一して書き直してからご利用ください。

DC Fan の極性

DC Fan には極性があり、逆指ししたまま電流を流すと短時間で発熱し故障します。LED を抵抗無しで接続すると一瞬で燃えて壊れるのと同様に、電気回路は間違えると壊れるということを知ってもらうことを意図しています。

ショートなどで過電流を流すと Raspi もすぐに壊れますし、プログラムのように単にエラーになって繰り返し試せるのではなく、不可逆な破壊が起きることを教えてください。故障させたくないのであれば DC Fan にダイオードを挟んで逆指し時には電流が流れない機材をご用意ください。

非同期処理 (Async/Await)

非同期処理は初学者が学ぶプログラミングとしては難しいものですが、非常に重要なため回避していません。記法としては同期プログラミング同様に読み書きしやすい Async/Await を採用しているため「非同期処理は await で受け、await を使う関数は async で定義する」ことだけができれば問題ありません。

一方、Promise などは使わないし解説していません。JavaScript 非同期プログラミングを一式学習させる上で有効な教材ではないことにもご注意ください。

その他のセンサー機材について

チュートリアル 3 の「I2C 応用編 (その他のセンサー)」では本文中に例として光センサー、測距センサー、三軸加速度センサーを採り上げていますが、これらは多数ある I2C デバイスのセンサーの中の一例に過ぎません。

具体的に挙げたこの 3 つのセンサーの使い方を学習するのが目的ではなく、いろいろなセンサーを回路図とサンプルコードを使って動かしてみることで、サンプルが何処にあるのか知って自ら試す能力を身につけつつ、各センサーの実挙動を把握して具体的に CHIRIMEN Raspi3 で何ができるのかというイメージを持つことが目的です。

本文で解説はされていないがその他のモジュールとして紹介、リンクされている example ページ に掲載された各種デバイスを可能な限り多数種用意し、受講者が順番に試せるようにしてください。

本文の 3 つのセンサーを人数分用意するのではなく、いろいろなセンサーを少しずつ用意して皆がそれぞれ異なる順番で試すように指示・誘導してください。例えば、6〜10 種類くらいのデバイスを 1〜3 個ぐらいずつまとめた「いろいろセンサーパック」を 4〜6 名くらい毎に割り当てて、そのグループ内で回して使ってもらうようにしてください。

なお、機材は購入だけでなくピンヘッダの半田付けなど事前可能と動作確認が必要となります。特に GP2Y0E03, PCA9685 などは面倒ですのでご注意ください。

フィードバック

本教材を使っていて多くの人が躓く、困ったポイント、改善して欲しいポイントなどがあれば是非 Github Issues にご報告や直接プルリクエストを送ってください。

CHIRIMEN Raspi3 環境だけでなく本教材もオープンソーススタイルで、利用される講師の皆さんがお気づきの点を共有することで改善を続けていきたいと考えています。