文系（経営学部）の授業におけるobnizの活用

## はじめに

　日本に限らず今の大学は理系と文系に分かれています。文系の学生がコンピュター・サイエンスやプログラミングに触れる機会は限られています。コンピュータや数学への苦手意識から文系の選択をする学生も少なくありません。しかし現代社会においてはICT抜きでは1日として生活することはできません。文系の学生たちにとっても、社会人になりビジネス実務を遂行する際には、ICTを使いこなすことは必須要件になることでしょう。

私たちは青山学院大学 経営学部の学生たちを対象に、先端のICTに触れ自らシステムを作ってみるハンズオンを中心とした講義を行っています。その狙いは、以下の２つです。

- 身の回りにどのような先端技術が活用されているか、その仕組みを直感的に理解できる能力を養う

- 自ら先端技術を取り入れ未来志向の視点から社会システムや企業システムの仕組みをデザインできる素養を身につける

## 授業設計のポイント

　将来、ソフトウェア開発者になるための専門教育ではなく、プログラミング経験が全くなく、またこの先もプログラミングの仕事につく可能性も低い経営学部の学生が受講者であることから、以下に述べるポイントで授業を設計しました。

- 話題になっている先端技術を広く取り上げる
- 取り上げる技術とその応用事例に関する講義、自らシステムを構築するハンズオン、グループで取り組むまとめのワークショップ、の３構成とする
- 動きのあるハードウェアを組み入れ楽しく学ぶことができる
- いわゆるキーボード入力によるコーディングは避け、グラフィカルプログラミング言語を用いる
- オープンソースを活用し、低廉なコストでの教材を目指す
- 環境構築が容易なシステムを利用する

## 授業の概要

　授業は、経営学部の3・4年生が対象で、前期・後期に分かれた通年、週1回1.5時間の授業枠となっています。一人一台Windows PCの使用が可能なPC教室で行っています。ハンズオンやワークショップは5名のグループで分かれて取り組みます。グループの数は8グループ、受講者は計40名になります。

　取り上げるテーマは、組み込みマイコンプログラミング、IoT、AI、VR・AR、そして文系SEのためのシステム工学基礎です。前期では組み込みマイコンのプログラミングとIoT、後期でAIとVR・ARを取り上げ、前期と後期それぞれの最後に総合演習に取り組んでもらいます。

　最近では文系である経営学部でもSE志望の学生が少なくありません。そんな学生たちのためにSEの業務がどういうものなのかを知ってもらうため、各授業の初めに短いシステム工学の基礎の講義を設けいます。

## カリキュラム内容

### 組み込みマイコンのプログラミング

使用機器	：	micro:bit

使用言語	：	Scratchライクのブロックプログラミング言語

製作目標	：	ジャンケンゲーム、歩数計、ストップウォッチ、カップ麺タイマー

取組内容　：	ガジェット作りを通してループ、条件分岐、変数の使い方などプログラミングの基礎を学びます

### IoTの基礎

使用機器	：	obniz

使用言語	：	Scratchライクのブロックプログラミング言語

製作目標	：	座席予約システム

取組内容　：	インターネットを介して機器を制御できることの効用を理解します

### IoTの仕組み

使用機器	：	micro:bit、Raspberry Pi、IBM Cloud

使用言語	：	Scratchライクのブロックプログラミング言語（micro;bit）
							Node-RED（Raspberry Pi、IBM Cloud）

製作目標	：	マルチポイントの加速度測定とダッシュボード表示

取組内容　：	センサー、マイコン、エッジサーバー、クラウドプラットフォームの役割を理解する

### 前期総合演習

使用機器	：	obniz、IBM Cloud、Googleスプレッドシート

使用言語	：	Scratchライクのブロックプログラミング言語（obniz）
							Node-RED（IBM Cloud）

製作目標	：	在籍確認システム

取組内容	：	システム構築からデータ収集、解析とレポート作成までの一連の流れを学習する

### AIの基礎

使用機器	：	Google Teacable Machine、Scratch3

使用言語	：	Scratch

製作目標	：	画像認識を利用した自動レジシステム

取組内容	：	AIの仕組みと学習、推論の流れを理解する

### AIの応用システム

使用機器	：	obniz

使用言語	：	Scratchライクのブロックプログラミング言語

製作目標	：	自動走行カート

取組内容	：	カート作りを通して手動運転、ルールベースの自動運転、AIによる自動運転の違いを理解する

### AR

使用機器	：	Raspberry Pi、Windows PC

使用言語	：	Processing（Windows PC）
							Node-RED（Raspberry Pi）

製作目標	：	温度センサーのAR表示

取組内容	：	ARの仕組みと応用について学ぶ

### VR・メタバースの体験

使用機器	：	oculus quest 2

使用言語	：	特になし

製作目標	：	Horizon Workroomsを使ったプレゼンテーション

取組内容	：	ソーシャルVRを体験し、来るべき仮想社会について考える

### 後期総合演習

使用機器	：	micro;bit、Raspberry Pi、IBM Cloud、Googleスプレッドシート

使用言語	：	Scratchライクのブロックプログラミング言語（micro:bit）
							Node-RED（Raspberry Pi、IBM Cloud）

製作目標	：	ビーコンを利用した顧客行動分析

取組内容	：	システム構築からデータ収集、解析とレポート作成までの一連の流れを学習する

## obnizを利用した在籍確認システム

　 obnizを利用した教材の具体的な内容を前期総合学習として取り組んだ在籍確認システムを例にとり紹介します。

　オフィスで出勤者の在籍確認ができるシステムをobnizを使って作ります。システムの全体構成は下図の通りです。
![IoT演習課題_在席ログ分析_システム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1195936/4dfde4a5-a6d2-41f6-e4a4-947d4d7fa021.png)
obnizに接続された赤外線センサーで、席に人が座っているかどうかをモニタリングします。
![IoT演習課題_在席ログ分析_センサーの配置.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1195936/a7fca70b-74b0-8ca8-a009-29168daf32a1.png)
この赤外線距離センサーとobnizのセットを合計9セット作り、大学構内にあるオフィスに協力してもらい1週間にわたってデータを採取させてもらいました。

　プログラムはIBM Cloud上のNode-REDに集約されています（下図参照）。
![Node-RED_プログラム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1195936/a5774216-ec17-19af-5650-0c36418214f1.png)
　画面に見えているのは2セット分だけですが、このフローを9セット作成します。
　Node-REDはIBMが開発した、主としてIoTシステムの構築するための開発プラットフォームです。ノードと呼ばれるプロックを線で繋ぐことでプログラミングを行うことができます。現在はオープンソース化されています。IBM Cloud上にはインストール済みのインスタンスが提供されており、これを利用することでクラウドシステムを容易にすることができます。Node-REDでは、コミュニティで開発されたさまざまなライブラリを利用することができます。今回は、node-red-contrib-obnizとnode-red-contrib-google-sheets、node-red-dashboadの3つの拡張ライブラリを利用しています。node-red-contrib-obnizを利用すると、Node-REDだけで個別のobnizを直接制御することができるようになります。node-red-contrib-google-sheetsを使うと、Google Sheets APIを介して、Googleスプレッドシートにデータを書き込むことができます。node-red-dashboadは、Web UIやメーターゲージ、タイムチャートを簡単に作成できる便利なライブラリです。

　Node-REDに関しては、[Node-RED日本ユーザー会のHP](https://nodered.jp/)、node-red-contrib-obnizについては[Qiita記事](https://qiita.com/wicket/items/e150e78cd787da03493e)、node-red-contrib-google-sheetsについては[enebularブログの記事](https://blog.enebular.com/nodes/letsuse-google-spreadsheet-node/)、node-red-dashboadについては[Qiita記事](https://qiita.com/takeyan/items/fff5e8d64da25220a0c0)を参考にしてください。

　下図は本システムで表示した各座席のリアルタイムデータです。オフィスの座席に人がいるかどうかが、どこからでも確認することができます。学生達はこれを見ながら、データに異常があると、センサーやobnizの接続をチェックするなどを行なっていました。システム運用の苦労についても、実感できたのではないかと思います。
![ダッシュボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1195936/53cd30fa-777d-e357-9a0c-53efa940f0ba.png)

　学生さん達には、GoogleスプレッドシートをCSV形式でダウンロードしExcelで分析を実施し、各座席の1週間の在籍状況をレポートにまとめて提出してもらいました。実際にデータを採取してみると、電源が抜けてデータの欠損が生じたり、障害物（多くが椅子の背もたれ）と座っている人との区別がつかない、ばらつきがあるデータをどう解釈するかといった解析を難しくする問題が発生しました。またCSVデータをExcel形式に変換する方法、タイムスタンプ付きのデータのグラフ化などでも苦労していました。ハンズオンでIoTシステムを作るだけでなく、実際のデータを採取しデータ分析まで行うことで、より理解が深まったと思います。
## 教材としてみた時のobnizの良いところ

今回の授業では、IoTの基礎、AIの応用システム、前期総合演習の２つの課題でobnizを使用しました。大学の授業でobnizを教材として使用した感想を以下にまとめます。

<u>obnizの良いところ</u>

- 様々なセンサー、アクチュエーターがIOに挿すだけで使える
  対応しているハードウェアが豊富で線をIOに挿すだけで簡単に使えます。今回は赤外線距離センサーとLED、DCモーターを使用しましたが、特にDCモーターが線を挿すだけで作れるところは重宝しました。
- USB電源とWiFiが繋がる環境さえあれば使える
  WiFiが使えインターネットに接続できる環境であれば、同じくインターネットに接続されたPC、タブレット、スマホがあれば開発できます。今回の授業は、PC教室で行っており各自一台用意されたPCをそのまま使用してプログラミングを行いました。授業ではRaspberry Piも使用しましたが、Raspberry Piの場合、キーボード、マウス、ディスプレイを繋ぐ必要がありセットアップに手間がかかりました。
- 開発環境やツールをインストールする事なしに使える
  開発環境がクラウドに集約されており、特別なソフトをインストールする必要がありません。設定変更やアプリケーションのインストールに制約があるPC教室のPCでも問題なく開発を行うことができます。
- Web UIが簡単に作成できる
  obnizではWeb UIが簡単に作成できます。学生達にとっては、身近なスマホで制御できることが新鮮に感じられたようです。特に自動走行カートの実習では、楽しそうにスマホを使ってカートを操縦していました。
- 個人に紐づいたアカウントを作らなくても開発が進められる
  クラウドベースのシステムでは、ユーザー登録をしなければ使用できないものも少なくありません。授業では、IBM Cloud、Cluster、Oculus（Meta）Quest2も使っていますが、いずれも個人に紐づいたユーザー登録が必要です。無料で作れるとは言っても授業のためだけに学生にアカウントの作成を求めるのは無理があります。obnizはobniz IDに紐づいた形で開発環境が提供されています。これは毎年、学生が入れ替わる学校での利用にはとても適しています。
- ブロックプログラミングで開発ができる
  obnizはScratchに似たブロックプログラミングで開発ができます。これは文系の学生さんにプログラミングを教えるには重要なことです。テキストベースのコーディングを行うとタイピングミスの修正だけで授業が終わってしまいます。

<u>obnizで苦労したこと</u>

- obnizの管理
  複数のobnizを使う場合、それぞれの管理をきちんと行う必要があります。今回の授業ではグループに1台で実習を行いましたが、複数回の授業にまたがる時には、どのグループがどのobnizを使っているのかを管理しておく必要があります。ファームウェアのバージョンも揃えておくべきでしょう。ここで少し面倒なのは、個々のobniz IDは電源を入れてWiFiが繋がらないと確認できないことです。
- WiFiの環境
  大学や企業ではWiFiの利用に一定の制限をかけた運用をしていることが少なくありません。大学のPC教室には学生が使えるWiFi環境が提供されていますが、学籍番号に紐づいたSSID、パスコードでの運用になっています。この情報を不特定の人が使用するobnizに設定することは好ましくないと考えました。そこで、今回の授業では専用のモバイル・ブロードバンドルーターを持ち込み、obnizはそれを介してインターネットに接続することにしました。
- obnizの接続数
  今回はグループに1台のobnizという形で授業を行いました。使用したobnizは計9台です。できれば一人1台としたいところですが、一つの教室で40台となるとWiFiの接続が不安定になると予想されます。何台使えるかは、どんな使い方をするかにも関係すると思います。一度、徐々に台数を増やしていきどこまでが限界かを試してみたいと考えています。
- 排他処理
  上にも関係することですが、グループメンバーで一つのobnizを使っており、同時に複数の人がプログラムを書き込んだり、実行しようとすると衝突が発生します。グループの中の一人のPCでやってくださいと説明はしますが、学生さんはいろいろなことをやってしまいます。また可能ならプログラミングは一人一人やる方が教育効果は高いでしょう。obnizにエミュレーターのような機能があれば、プログラミングは各自、エミュレーター上で行い、できた人から順番に実機で動作確認というような進め方できるかもしれません。これは、プログラムの問題なのか、ハードウェア（結線）の問題なのかを切り分けるのにも有効かもしれません。
  昨年の授業で学生作ったNode-REDのプログラムがまだ動いていてAPIをつかんでしまっており、obnizが使えないというトラブルも発生しました。最初、原因がわからず解決にとても苦労しました。授業でobnizを使うときには、obnizの管理メニューも使って排他処理ついても考えておく必要があります。
- 配線の抜け
  obnizのIOは手軽に使えて良いのですが、1週間の実験中に、ちょっとしたことですぐに抜けてしまい苦労しました。次回は、ケーシングやコネクタを改良したいと感じています。

結論としてまとめますと、obnizは文系の大学でIoTを教える教材としてとても有効だということです。文系の大学生だけでなく、理科系でも1、2年次では使えると思います。IT教育は文理共通の新しいリベラルアーツ、一般教養科目として取り入れるべきだと考えています。私たちは、さらに改良を重ねてより良い授業を設計していく予定です。また、社会人向けにも、リカレント教育などで、コーディングが不要のIoTハンズオン実習のニーズはあり、それに向けたコンテンツ開発にも着手したいと考えています。