わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

micro:bitでじゃんけん

 先週木曜,実験室の授業は,1年生向けのIoT実験の2回目でした.
 micro:bitのさらなる活用を図ります.1回目は,https://makecode.microbit.org/を使用して各自のPCでプログラミングと動作確認を行い,後半にはmicro:bitをつないで,教員側で用意したプログラムを実行してもらいました.2回目は,資料を見て(または自分で考えて)一つ一つ作成し,micro:bitうしの通信や,圧電ブザーを接続して曲の演奏などを行いました.micro:bitやケーブルその他の機器は貸し出しとなり,最初(班ごとに機器を入れたボックスの内容)と同じにして返却することを,毎回,実施しています.
 授業内容は昨年までと同じ,と言いたいのですが,いくつか変更がありました.まず授業の回数が変わりました.昨年度までは7回を1セットとして,課題を提供していましたが,今年度は5回が1セットです.学部内の改編により,メジャー名が変更され,教員も変動がありました*1.IoT実験の昨年度の2回分のコンテンツ(スライド,デモ動画,プログラムなど)は,手元に保存していましたが,昨年度の1回目(7回のうち第4回)の分を他の先生に渡し,自分は昨年度の2回目(第5回)を作り直して,授業で取り組んでもらったのでした.
 昨年度の資料では,「じゃんけん」は授業の最後の演習課題でした.仕様が書かれていて,各自でプログラムを作成するのでした.
 9月に少し時間をとって,今回,「じゃんけん」は授業の前半,それもmicro:bitうしの通信を行う最初の演習課題としました.プログラムのスクリーンショットを資料に掲載し,班の全員が,無線のグループ設定を変更した上で同一のプログラムを完成させて,それぞれのmicro:bitに転送すれば,遊べるようにしました.
 プログラムのスクリーンショットの前のスライドに書いた,このじゃんけんプログラムの仕様は,以下の通りです.

  • 自分の手は「G」「C」「P」で表す(それぞれ,グー・チョキ・パーに対応する).初期状態はGで,Aボタンを押すことで G → C → P → G → …と変更する(LEDで表示する).
  • A+Bボタンを押すと,同じ無線番号の機器に自分の手を送信する.
  • 通信を受け取ったら,その取得値と,自分の手と比較して勝敗を判定し,「WIN」「LOSE」「DRAW」のいずれかを1回表示する.

 プログラムの用意(それと仕様の決定)にあたり,考慮することが1点,ありました.班の人数です.2人のところも,3人のところもありました.
 それを踏まえて,上記のプログラムは,「3人じゃんけん」を行っていません.同じ無線のグループの3人(同じプログラムの入った3つのmicro:bit本体)で,1人がA+Bボタンを押すと,残りの2人は送信者の手を表す数値を受け取り*2,自機で保持する手の数値と比較します.結局のところ,送信者と受信者による「2人のじゃんけん」を,各受信機が行います.
 画面を見てプログラムを完成させることにも,何点か配慮しました.送信者と受信者を区別しない,共通のプログラムとすることで,同じ班の誰かが作成を間違えていたときに,PCの画面を相互に見て,違い(そして修正すべき箇所)が分かるようにしました.それと,「G → C → P → G → …と変更」や「取得値と,自分の手と比較して勝敗を判定」では,剰余を含む少し複雑な式を,ブロックエディター上で構成する必要があります.スクリーンショット(を含むPDFファイル)を拡大すれば,ブロックの構成がきちんと分かるのを確認するとともに,式の内容と,Pythonで書いたときの式を,テキストボックスとして添えました.
 巡回していて,資料の通りに作ったはずなのにうまく動作しないという問い合わせは,ありませんでした.remainderという単語に戸惑う,学生どうしの会話を耳にし,リメインダーと言って,ナニナニをコレコレで割ったときの余りのことですよと,アドバイスしました.
 1つの実験室に,学生50名弱,同じ体験演習の担当で参観またはお手伝いに来てくださった教員が4名,TAが4名という授業でした.4時半の開始時には,西日が差していましたが,6時に終了して戸締まりを行い,廊下に出て外を見ると,空は真っ暗でした.

*1:この改編に伴い,教員は,メジャーに所属するのではなく,学部・学科(システム工学科)よりも小さくメジャーよりも大きい,「領域」に所属するものとなっています.しかしそれでは,各メジャーで学ぶ内容などが,学生に分かりにくいといったことから,前期の紹介講義と,後期の体験演習では,教員はメジャーに振り分けられ,担当しています.

*2:事前の動作確認で,送信者が送った手を受け取るという処理は,行われませんでした.ブロックエディター上の「無線で数値を送信 ナニナニ」は,ナニナニの値だけでなく,無線のグループや送信機などの情報も含めて送信していて,「無線で受信したとき コレコレ」の処理時にフィルタをかけているものと思われます.