# シャミ多機能拡張ボード 利用マニュアル
本ドキュメントは、シャミ多機能拡張ボード (Xia mi Multi-functional Expansion Board for micro:bit)の概要、特徴、利用方法について説明します。
# 1. 本ドキュメントの目的
- シャミ多機能拡張ボードの概要説明
- シャミ多機能拡張ボードの仕様説明
- シャミ多機能拡張ボードに関する利用方法の説明
# 2. 概要
シャミ多機能拡張ボード (Xia mi Multi-functional Expansion Board for micro:bit)は、micro:bit V2用の多機能拡張ボードです。
コンパクトなレイアウトに、拡張コネクター、各種センサー・モジュール、モータードライバー、外部電源接続コネクター等が、予めオンボードで用意されています。モーター・サーボやハスキーレンズなども接続できるので、初心者の学習はもちろん、中上級者の需要にも応えられる拡張ボードです。
※ 拡張ボードには、信号機LED、温度湿度センサー、ポテンションメーター(可変抵抗器)、赤外線炎センサー、赤外線受信モジュール、RGBライト、OLEDディスプレイ、リレーモジュール、モータードライバーが搭載されています。
STEAM教育においては、この拡張ボード一枚で、学年や様々なレベルに合わせた、中長期に広い用途での利用が可能です。
micro:bitの基本機能を学ぶだけでなく、プログラミング以外に電子工作学習、ロボットカーやメカナムホイールロボットの制御や、課題解決型制作などにもご利用が可能です。
# 3. 購入方法
参考:シャミ多機能拡張ボード (Xia mi Multi-functional Expansion Board for micro:bit)は、当社ウェブストアにてご購入が可能です。
当社はmicro:bitの公認正規販売店です。国内のmicro:bit利用推進を行っております。
micro:bit専門ストア「イフティニー ストア(iftiny store)」 (opens new window)にて、各種micro:bit関連製品の販売をしております。
# 4. 特徴
- 豊富な拡張コネクター
- micro:bit V2に最適な各種モジュールを配置
- 高度に統合された拡張ボード
- STEAM教育に最適
- 中長期間の系統的な学習に最適(初学時から中上級レベルまで対応)
- オンボードの金属保護カバー付きOLEDディスプレイ搭載
- ポテンションメーター(可変抵抗器)が搭載されており、ライトの明るさやサーボの角度、モーターのスピードをコントロールすることが可能
- 搭載されている信号機LEDモジュールで、交通信号機の模擬コントロールや交通信号の時間カウントをOLEDディスプレイに表示させることも可能。
- オンボードのステータスインジケーター付きのリレーが搭載されており、植物の自動給水機などに利用することが可能
- オンボード搭載の温度湿度センサーを使って、現在の温度湿度をOLEDディスプレイに表示させることが可能
- 4つのモーター駆動用ターミナルブロックが用意されているため、ロボットカーの製作にも最適
- モーターの回転方向を示すインジケーターがあるため、駆動プログラムが作成しやすく、メカナムホイールロボットプラットフォームの制御基板として使用することも可能
- 拡張ボードの前方に2つのWS2812 RGBライト、炎センサーが搭載されている
- 2種類の超音波距離センサー(SR04超音波センサー、URM10 超音波センサー)を簡単に接続できるコネクターが配置されている
※ 下記は超音波センサーの装着イメージです。micro:bit本体と超音波センサーは本製品に付属していないため、別途ご購入する必要があります。
- 7組の3.3V GPIOポート、4組の5V GPIOポート、2組の3.3V I2Cポート、1組の5V I2Cポート、豊富なIO拡張ポートを搭載
- 各種拡張ポートは3.3Vと5V両方に対応し、5Vは外部電源を利用することで、AIカメラやサーボなどに十分な電源供給が可能
- マイクロUSB(5V)、 ターミナルブロック(6V-12V)の2種類の電源供給が可能。ターミナルブロック(6V-12V)は18650リチウム電池を利用することも可能なので、複数のサーボ、モーター、ハスキーレンズ(AIカメラ)など高出力の追加デバイスをストレスなく利用できる。また、ターミナルブロック(6V-12V)の電源オン・オフ用スイッチも用意されている
- 背面に各種ポートの情報をシルク印刷されいるので、手軽に確認が可能
# 5. 仕様
項目 | 詳細 | ピン | 数量 |
---|---|---|---|
型番 | PPDF-MBT0042 | ー | ー |
動作電圧 | 5V (マイクロUSB) | ー | 1 |
外部電源 | 6V〜12V(電源スイッチは、外部電源のみを制御) | ー | 1 |
リレーモジュール | オンボードステータスインジケーター付き | P9 | 1 |
赤外線受信機 | ー | P13 | 1 |
RGBライト | WS2812 | P15 | 2 |
赤外線火炎センサー | アドレス:0x10 | I2C(P19/SCL, P20/SDA) | 1 |
温度湿度センサー | アドレス:0x38 | I2C(P19/SCL, P20/SDA) | 1 |
ポテンションメーター(可変抵抗器) | アドレス:0x10 | I2C(P19/SCL, P20/SDA) | 1 |
信号機LED | 赤・黄・青のセット アドレス:0x10 | I2C(P19/SCL, P20/SDA) | 1 |
OLEDディスプレイ | 解像度:128 x 64 (金属保護カバー付き) アドレス:0x3C | I2C(P19/SCL, P20/SDA) | 1 |
モータードライブ | モーター駆動ターミナルブロック アドレス:0x10 | I2C(P19/SCL, P20/SDA) | 1 |
GPIO (5V) | 外部電源を利用することで、より強力な駆動能力を提供 | P0, P1, P2, P8 | 4 |
GPIO (3.3V) | micro:bitの内部電源を利用 | P0, P1, P2, P8, P12, P14, P16 | 7 |
I2C拡張ポート (3.3V) | ー | I2C(P19/SCL, P20/SDA) | 2 |
HuskyLens用ポート (5V) | 外部電源を利用することで、より強力な駆動能力を提供 ※ 5VのI2C対応センサー・モジュールも利用可能 | I2C(P19/SCL, P20/SDA) | 1 |
SR04超音波センサー用ポート | ー | 5V, P0, P1, GND | 1 |
URM10超音波センサー用ポート | ー | 5V, P0, P1, GND | 1 |
寸法 | 57mm x 87mm (モジュール本体) | ー | ー |
重量 | 59g(パッケージや収納袋を含める) | ー | ー |
製品パッケージ | あり(紙製)135 x 75 x 25mm | ー | ー |
# 6. ボードの配置
# 7. 利用方法
下記はシャミ多機能拡張ボードの各機能を利用する際のプログラミング例です。
また、より簡単にプログラミングを行えるように、Makecode向けシャミ多機能拡張ボード用のパッケージ(拡張機能)が用意されています。
プログラミングの際ご利用ください。
# 7.1. MakeCode専用パッケージのインポート
MakeCodeで初めからプログラミングする場合、シャミ多機能拡張ボード用のパッケージをインポートする必要があります。
その場合、MakeCodeでプロジェクトを作成し、「拡張機能」にて下記のURLを入力して、パッケージをインポートしてください。
- Makecode用パッケージ: https://github.com/DFRobot/pxt-DFRobot_xia_mi_Board
下記各「MakeCodeプログラミング例(ブロック)」には、予めパッケージがインポートされています。そのままmicro:bitに書き込むことでご利用が可能です。
# 7.2. RGB LEDライトの利用
本製品は、2つのRGB LEDライトを付属しています。 本サンプルプログラムでは、赤色、緑色、青色の順に点灯し、その後ピンクと黄色を交互に点滅表示させます。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.setBrightness(100)
xiamiBoard.showColor(0xff0000)
basic.pause(1000)
xiamiBoard.showColor(0x00ff00)
basic.pause(1000)
xiamiBoard.showColor(0x007fff)
basic.pause(1000)
xiamiBoard.ledBlank()
basic.forever(function on_forever() {
xiamiBoard.setIndexColor(0, xiamiBoard.rgb(200, 0, 200))
xiamiBoard.setIndexColor(1, 0x000000)
basic.pause(1000)
xiamiBoard.setIndexColor(1, xiamiBoard.rgb(255, 255, 0))
xiamiBoard.setIndexColor(0, 0x000000)
basic.pause(1000)
})
# MakeCodeプログラミング例(python)
xiamiBoard.set_brightness(100)
xiamiBoard.show_color(0xff0000)
basic.pause(1000)
xiamiBoard.show_color(0x00ff00)
basic.pause(1000)
xiamiBoard.show_color(0x007fff)
basic.pause(1000)
xiamiBoard.led_blank()
def on_forever():
xiamiBoard.set_index_color(0, xiamiBoard.rgb(200, 0, 200))
xiamiBoard.set_index_color(1, 0x000000)
basic.pause(1000)
xiamiBoard.set_index_color(1, xiamiBoard.rgb(255, 255, 0))
xiamiBoard.set_index_color(0, 0x000000)
basic.pause(1000)
basic.forever(on_forever)
# 7.3. 信号機
本サンプルプログラムでは、3秒おきに赤・黄・緑のLEDライトを順に点灯させます。 擬似的に簡易的な信号機を作れます。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.initXiaMiBoard()
basic.forever(function () {
xiamiBoard.LED(1, 0, 0)
basic.pause(3000)
xiamiBoard.LED(0, 1, 0)
basic.pause(3000)
xiamiBoard.LED(0, 0, 1)
basic.pause(3000)
})
# MakeCodeプログラミング例(python)
xiamiBoard.init_xia_mi_board()
def on_forever():
xiamiBoard.LED(1, 0, 0)
basic.pause(3000)
xiamiBoard.LED(0, 1, 0)
basic.pause(3000)
xiamiBoard.LED(0, 0, 1)
basic.pause(3000)
basic.forever(on_forever)
# 7.4. 温度・湿度計
本サンプルプログラムでは、温度・湿度センサーを利用し、取得した現在の温度・湿度値をOLEDディスプレイに表示します。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.initXiaMiBoard()
basic.forever(function () {
xiamiBoard.OLEDshowUserText("temperature:" + xiamiBoard.readAHT20(AHT20.TEMP) + " C", 0, 0)
xiamiBoard.OLEDshowUserText("humidity:" + xiamiBoard.readAHT20(AHT20.HUM) + " %", 1, 0)
})
# MakeCodeプログラミング例(python)
xiamiBoard.init_xia_mi_board()
def on_forever():
xiamiBoard.ole_dshow_user_text("temperature:" + str(xiamiBoard.read_aht20(AHT20.TEMP)) + " C",
0,
0)
xiamiBoard.ole_dshow_user_text("humidity:" + str(xiamiBoard.read_aht20(AHT20.HUM)) + " %",
1,
0)
basic.forever(on_forever)
# 7.5. ポテンションメーターによるサーボの制御
本サンプルプログラムでは、ポテンションメーター(可変抵抗器)を使用して、P0ポートに接続したサーボの角度を制御します。 また、ノブの位置とサーボの回転角度をリアルタイムでOLEDディスプレイに表示します。
ロボットや各種自動装置を作成する際に利用が可能です。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
let angle = 0
xiamiBoard.initXiaMiBoard()
basic.forever(function () {
xiamiBoard.OLEDclear()
basic.pause(500)
})
basic.forever(function () {
angle = pins.map(
xiamiBoard.readAngle(),
0,
1023,
0,
180
)
xiamiBoard.OLEDshowUserNumber(xiamiBoard.readAngle(), 0, 0)
xiamiBoard.OLEDshowUserNumber(angle, 1, 0)
pins.servoWritePin(AnalogPin.P0, angle)
})
# MakeCodeプログラミング例(python)
angle = 0
xiamiBoard.init_xia_mi_board()
def on_forever():
xiamiBoard.ole_dclear()
basic.pause(500)
basic.forever(on_forever)
def on_forever2():
global angle
angle = pins.map(xiamiBoard.read_angle(), 0, 1023, 0, 180)
xiamiBoard.ole_dshow_user_number(xiamiBoard.read_angle(), 0, 0)
xiamiBoard.ole_dshow_user_number(angle, 1, 0)
pins.servo_write_pin(AnalogPin.P0, angle)
basic.forever(on_forever2)
# 7.6. 赤外線リモコンによるリレーモジュールの制御
本サンプルプログラムでは、赤外線リモコンを使用して、リレーモジュールを制御します。
リモコンのボタン「1」を押すとリレースイッチON、ボタン「0」を押すとリレースイッチOFFにすることが可能です。
※ 電源オン・オフのみのサンプルプログラムです。 ※ 植物の自動水やり機を作成する際、ポンプを接続することで、ポンプの電源操作で利用することが可能です。
- リレーについて
リレー(relay、継電器)は、受け取った電気信号で電気回路のオン/オフや切り替えを行う部品です。
小電力の入力によって大電力のオン/オフを制御できるため、安全性(感電の防止など)、省電力性や操作性を向上させます。そのためリレーは、広範囲な目的で、家電、制御機器、通信機器などの身近な機器に多用されています。
- 赤外線リモコンのキー配置
赤外線リモコンにキーに対応する整数(キー値の下2桁)があらかじめ設定されています。
赤外線リモコンによって異なるため、ここでは、弊社ウェブストアで販売している赤外線リモコンを例として使用します。
※ シャミ多機能拡張ボードのMakeCode用追加パッケージをご利用の場合、該当ブロックにリモコンボタンに該当する10進数整数を入力してください。
参考:赤外線リモコン(Infrared remote controller)は、当社ウェブストアにてご購入が可能です。
当社はmicro:bitの公認正規販売店です。国内のmicro:bit利用推進を行っております。
micro:bit専門ストア「イフティニー ストア(iftiny store)」 (opens new window)にて、各種micro:bit関連製品の販売をしております。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.IR_callbackUser(function (message) {
if (message == 22) {
basic.showIcon(IconNames.Happy)
xiamiBoard.setRelay(RELAY.CLOSE)
}
if (message == 12) {
basic.showIcon(IconNames.Asleep)
xiamiBoard.setRelay(RELAY.DISCON)
}
})
xiamiBoard.initXiaMiBoard()
# MakeCodeプログラミング例(python)
def on_ir_callbackuser(message):
if message == 22:
basic.show_icon(IconNames.HAPPY)
xiamiBoard.set_relay(RELAY.CLOSE)
if message == 12:
basic.show_icon(IconNames.ASLEEP)
xiamiBoard.set_relay(RELAY.DISCON)
xiamiBoard.IR_callbackUser(on_ir_callbackuser)
xiamiBoard.init_xia_mi_board()
# 7.7. 火災警報器
本サンプルプログラムでは、火炎センサーの約20cm前でライターの火をつけ、火炎を検知するとOLEDディスプレイに火炎強度値が表示されます。
また、火炎強度が一定値を超えた時にアラーム音を鳴らし、値が低くなるとアラームを停止します。
※ ご注意事項:火を使用する際は、安全性をご確認うえご利用してください。
※ ご利用に関する事故等について、当社では一切責任を負いませんので、ご了承ください。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.initXiaMiBoard()
basic.forever(function () {
xiamiBoard.OLEDshowUserNumber(xiamiBoard.readFlre(), 0, 0)
if (xiamiBoard.readFlre() > 200) {
music.ringTone(294)
} else {
music.stopAllSounds()
}
})
basic.forever(function () {
xiamiBoard.OLEDclear()
basic.pause(500)
})
# MakeCodeプログラミング例(python)
xiamiBoard.init_xia_mi_board()
def on_forever():
xiamiBoard.ole_dshow_user_number(xiamiBoard.read_flre(), 0, 0)
if xiamiBoard.read_flre() > 200:
music.ring_tone(294)
else:
music.stop_all_sounds()
basic.forever(on_forever)
def on_forever2():
xiamiBoard.ole_dclear()
basic.pause(500)
basic.forever(on_forever2)
# 7.8. 超音波距離センサーによる距離測定
本サンプルプログラムでは、超音波距離センサーで測定した距離をOLED画面に表示します。
※ 予め別途ご用意されているSR04超音波センサーを超音波センサー用ポートに挿入する必要があります。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.IR_callbackUser(function (message) {
if (message == 22) {
basic.showIcon(IconNames.Happy)
xiamiBoard.setRelay(RELAY.CLOSE)
}
if (message == 12) {
basic.showIcon(IconNames.Asleep)
xiamiBoard.setRelay(RELAY.DISCON)
}
})
xiamiBoard.initXiaMiBoard()
# MakeCodeプログラミング例(python)
def on_ir_callbackuser(message):
if message == 22:
basic.show_icon(IconNames.HAPPY)
xiamiBoard.set_relay(RELAY.CLOSE)
if message == 12:
basic.show_icon(IconNames.ASLEEP)
xiamiBoard.set_relay(RELAY.DISCON)
xiamiBoard.IR_callbackUser(on_ir_callbackuser)
xiamiBoard.init_xia_mi_board()
# 7.9. モーター駆動
本サンプルプログラムでは、モータードライバーを利用し、4つのモーター駆動用ターミナルブロックにモーターを接続し、モーターの正転・逆転を繰り返します。
※ 別途四つのモーターをご用意する必要があります。
# MakeCode ブロック
# MakeCodeプログラミング例(JavaScript)
xiamiBoard.initXiaMiBoard()
basic.forever(function () {
xiamiBoard.OLEDclear()
basic.pause(500)
})
basic.forever(function () {
xiamiBoard.motorRun(MOTOR.ALL, DIRECTION.CW, 100)
basic.pause(1000)
xiamiBoard.motorRun(MOTOR.ALL, DIRECTION.CCW, 100)
basic.pause(1000)
})
# MakeCodeプログラミング例(python)
xiamiBoard.init_xia_mi_board()
def on_forever():
xiamiBoard.ole_dclear()
basic.pause(500)
basic.forever(on_forever)
def on_forever2():
xiamiBoard.motor_run(MOTOR.ALL, DIRECTION.CW, 100)
basic.pause(1000)
xiamiBoard.motor_run(MOTOR.ALL, DIRECTION.CCW, 100)
basic.pause(1000)
basic.forever(on_forever2)