香港学習塾 epis Education Centre

わかば深圳教室 教室長ブログ

教室長末木千尋

2011年12月に香港へ赴任。旧九龍教室、わかば深圳教室とで合計6年間勤務をし、2017年から再び深圳へ。きめ細やかなサポートには定評があり、時間が経つのも忘れついつい話し込んでしまうことも。本気で立ち向かう生徒の守護神として頼れるアネゴ的存在であるスエキチ先生は、衣食住どれをとっても刺激の絶えないここ深圳での生活がお気に入り。暑さには弱いが辛さには強い。好物は山椒のたっぷり入った激辛料理全般だとか。

ハンディーファンプログラミング&はんだ付けワークショップ

はんだ付けをしたことがない子がほとんど。


前回まではお掃除ロボットをプログラミングするワークショップを開催してきましたが、今回は暑すぎる夏の必須アイテムハンディーファンの基盤を半田付けしてプログラミングしてしまおうということでハンディーファンハックに挑戦しました。講師は今回も日本から来ていただいたOPENFORCEの河野先生。何回か参加している子供達からは「博士」と呼ばれている河野先生。今回も胸元にファンをつけた白衣姿で見た目だけでも子供達を喜ばせてくれます。


1時間もするとはんだ付けもプロ級

なぜか参加者は女子ばかり。ハンディファンはやはり女子アイテムなのか?深圳で女子が半田付けをしている姿はものづくりの新時代の到来を感じさせてくれます!
まずははんだ付けの練習をかねて河野博士の特製のPro Micro(Aruduino)とモータードライバをのせた基板に抵抗、LEDテープ(NeoPixel)を接続して、Ardublockでプログラミングします。LED1つを点灯させるところからスタートして全体を光らせたり、色を変えたりできるようにしました。


Pro Micro(Aruduino)でLEDを光らせる

LEDの点灯ができたところで、次はモーターの制御をします。今回はモーターをボタンスイッチで制御するのではなく、ファンに息を吹きかけファンを回転させることによりモーターを起動します。モーターの回転数(風力)は、その時の息の強さ(モーターの回転数)によって決まるように設定しました。

息を吹きかけるとファンが回り始めること、息の強さで回転数が変わるので、子供達は何度も何度も息を吹きかけて試していました(遊んだ?)。


Ardublockでプログラミング

このプログラミングを終えて基板をハンディーファンの中に収納して完成!
なのですが、基板を収める時にケーブルの長さを考慮せずに触っているとはんだ付けした部分が外れてしまうこと、最後にカバーを無理やり装着することでどこかのケーブルが外れてしまうことなど、初めて分解、ハックした子供達には想定できない難関が待っており、最後の最後は河野博士修理センターがフル稼働するという大変な事態を乗り越えてのワークショップ終了となりました。


カバーを付け直せば完成!だけど・・・。

今回は身近にある機械を分解してプログラミングすることで今までブラックボックスだった物が制御可能、改造可能であることや、深圳では河野博士が作ってくれたよう特注の基板も短時間ではるかに安い価格で作ることができることも実体験として知ることができました。

温度による制御、音による制御も可能ということで、次回のワークショップも楽しみです!河野博士また次回もよろしくお願いします!


深セン華強北でお掃除ロボットプログラミング!

お掃除ロボットを分解して基盤にプログラムをアップロード!

深センのイノベーションの震源地である福田区にある超巨大電気街「華強北」のコワーキングスペースで、お掃除ロボットを分解、再プログラミングしてロボットカーにしてしまおうという、「お掃除ロボットHack」イベントが開催され、epis深圳教室の生徒たちと一緒に参加してきました。


深セン市華強北のコワーキングスペース。ここからアイディア商品が誕生する。

お掃除ロボットをプログラミングするウォーミングアップとして、Arduino(アルデュイーノ )という、学生がコンピューターサイエンスを学習するために開発されたマイコンボードを使ってLEDを点灯させることから始めました。プログラムはビジュアルプログラミング言語でブロックを組み立てます。


Arduinoをブロックでプログラミング。

今回プログラミグをしたお掃除ロボットには、Arduinoのような基盤が使われているので、
LEDを点灯させるのと同じ要領でプログラミングをすれば、お掃除ロボットをプログラミングすることができます。
子供達には先生からお掃除ロボット制御のお題が与えられ、課題をクリアすべく一人一人がプログラミング に挑戦しました。
まずは、お掃除ロボットの右側の車輪(モーター)を回転させることからはじめ、その後、前進、右回転など少しずつ課題をクリアするためにプログラミング をしました。


様々なハプニングが起こることこそが醍醐味!?

プログラミングが正しくても、右の車輪と左の車輪が同じように回転しなかったり、床が平らではないためにまっすぐ進んでくれなかったりすることもあるなど、ハードウェアを制御することはプログラミング正しくても上手くいかないことも学びました。

今回はモーターを制御しコースを走らせたところで終了となりましたが、次回6月にはお掃除ロボットが搭載している各種センサー類も使ってのプログラミングということで次回も楽しみです!



micro:bitでプログラミング × STEM 夏期講習特別授業

micro:bitを乗せたqbitとコントローラー


わかば深セン教室のSRコースの夏期講習9日目、10日目は、毎月1回授業内で学習しているmicro:bitとJavascriptを夏休み特別授業ということで、micro:bitをqbitという2輪自立型のロボットのガジェットに連結させプログラミングをしました。
いつもはmicro:bitだけを使って、ボタンやセンサーを利用したプログラミングをしてきましたが今回はmicro:bitを一人あたり2枚ずつ使用し、1枚はロボットと連結、1枚はコントローラーに連結させました。
ロボット用のmicro:bitには、コントローラーから送信された情報を受信したときにどのように動作するのかをプログラミングしておき、コントローラー用のmicro:bitにはコントローラーを操作した時に、ロボット側のmicro:bitにどのような情報を送信するのかをプログラミングしました。
「if」、「if else」などのコードも見慣れてきましたし、micro:bitでのJavascript入力は入力補助機能もあるので、みんなどんどん打てるようになってきています。
ロボット、コントローラーも自分たちで組み立て、iPadでコードを入力、入力が終わったら、micro:bitとiPadをBluetoothでペアリングして、2枚のmicro:bitにデータを送信します。
こういった一連の作業を終えたら、やっとロボットをコントローラーで制御できるようになります。
コントローラーとロボットを識別するためのコードを間違えてしまっているため、他の人のロボットにつながってしまい、教室内が一時大混乱に陥ってしまいましたが、そんな経験もプログラミングを学ぶ上では重要な体験と言えます。
生徒一人一人が様々な問題をクリアして、やっと辿り着いたサッカー大会。
自分たちが組み立て、コードを入力したロボットでのサッカーゲームは買ってきたロボットで遊ぶのとは大違いだったようです。うまく動かなかったり、ドテっと転んだりするのも、自分たちで作った物なので、かわいく、おもしろく見えたようです。

参考のため、今回使用したコードを下に記載しておきます。




コントローラー用のコード

handlebit.handlebitInit()
radio.setGroup(1)
basic.forever(() => {
if (handlebit.getHandleSensorValue(handlebit.HandleSensorValue.JOYSTICK_X1) < 50) {
   radio.sendNumber(1)
   basic.pause(50)
} else if (handlebit.getHandleSensorValue(handlebit.HandleSensorValue.JOYSTICK_X1) > 200) {
   radio.sendNumber(2)
   basic.pause(50)
} else if (handlebit.getHandleSensorValue(handlebit.HandleSensorValue.JOYSTICK_Y1) < 50) {
   radio.sendNumber(3)
   basic.pause(50)
} else if (handlebit.getHandleSensorValue(handlebit.HandleSensorValue.JOYSTICK_Y1) > 200) {
   radio.sendNumber(4)
   basic.pause(50)
} else {
   radio.sendNumber(5)
   basic.pause(50)
})

qbit用のコード

qbit.qbitInit()
radio.setGroup(1)
radio.onDataPacketReceived( ({ receivedNumber }) => {
  if (receivedNumber == 1) {
    qbit.setMotorSpeed(-50, 50)
  } else if (receivedNumber == 2) {
    qbit.setMotorSpeed(50, -50)
  } else if (receivedNumber == 3) {
    qbit.setMotorSpeed(50, 50)
  } else if (receivedNumber == 4) {
    qbit.setMotorSpeed(-50, -50)
  } else if (receivedNumber == 5) {
    qbit.setMotorSpeed(0, 0)
})


micro:bitでプログラミング × STEM vol.4

4月のmicro:bitは「Yes、Noボタン」のプログラミングをしました。
クイズ番組で使われるような、正解のときには「ピンポーン」、不正解のときは「ブブー」という音を出しつつ、正解なら「チェック」不正解なら「バツ」を表示し、さらに、正解数をカウントしようというものです。
実際のプログラムは、以下のように大きく3つのパートに分けてプログラムしました。

ボタンAを押すと「Yes」のアイコンを表示し、メロディーを流す


let correct = 0
input.onButtonPressed(Button.A, () => {
correct += 1
music.beginMelody(music.builtInMelody(Melodies.PowerUp), MelodyOptions.Once)
basic.showIcon(IconNames.Yes)
})

ボタンBを押すと「No」のアイコンを表示し、メロディーを流す


input.onButtonPressed(Button.B, () => {
music.playTone(131, music.beat(BeatFraction.Quarter))
music.rest(music.beat(BeatFraction.Sixteenth))
music.playTone(131, music.beat(BeatFraction.Whole))
basic.showIcon(IconNames.No)
})

micro:bitを傾けると「Yes」のカウント数を表示する


input.onGesture(Gesture.LogoUp, () => {
basic.showNumber(correct)
})

授業の様子。

そもそも入力自体に慣れていない子供達が未だに慣れない手つきながらも、補助入力機能を駆使しながら、根気よく、効率よく入力できるようになってきました。
ボタンを押したら音を出す、ボタンを押したらLEDにアイコンを表示させるなど、「◯◯◯をしたら◯◯◯をする」というプログラミングの根本的な部分も理解し始めています。
今はまだ基本の入力だけですが、少しずつ自分なりにプログラムを変えてみることもできるはずです。次回がまた楽しみです。




micro:bitでプログラミング × STEM

micro:bitとコーディング中プログラム


わかば深セン教室のSRコースでは、毎月1回micro:bitというマイコンボードを使ってプログラミングを学びます。今回は、春期講習の3日目に、友達同士の相性を図る「ラブメーター」なる装置のプログラミングをしました。
コードは簡単で、二人の人が手をつなぎながら「0端子」と「GND端子」に触れると、micro:bitのLEDディスプレイにランダムに0〜10の数が表示され、それがその二人の相性になっちゃうという装置です。


micro:bitにコードを転送中

この講座での狙いは、将来のプロのプログラマーを育てるということではなく、プログラミングもしながら「手で触れて物作り」をして、問題解決能力、想像力などを伸ばすことにあります。そして何よりプログラミングを楽しんでほしいと思っています。
micro:bitには、加速度センサー、地磁気センサー、温度センサー、光センサーが実装されており、それらの機能を活用して自作の百葉箱、エレキギターなども作ることができます。


友達と手をつないで相性チェック!

特にここ深圳では「華強北」超巨大電子部品街があるので、micro:bitの拡張性を生かした、深圳でしかできないプログラミング教育、STEM教育ができます。せっかく深圳にいるのですから、楽しくテクノロジーに触れながら深圳ならではの学習をしましょう!