BBC micro:bit によるデータロギング

濱田龍義(日本大学/OCAMI)

qr_for_msfd38

https://knxm.github.io/reveal.js/msfd38.html

MSFD38 2025.09.15 名古屋大学

BBC micro:bit

Author:Gareth Halfacree from Bradford, UK
  • v1 : 2016年2月
  • 2017年8月国内販売
  • v2 : 2020年10月
  • 2020年11月国内販売
  • スイッチサイエンス
  • 3366円(税込)
  • USB,BLE
  • 光,温度,加速度,磁力(方角),音などのセンサーを内蔵

(教)コンピュータ実習

夏季集中講義3日間 (2017-2026?)

高等学校指導要領 理科

  • 各科目の指導に当たっては,観察,実験の過程での情報の収集・検索,計測・制御,結果の集計・処理などにおいて,コンピュータや情報通信ネットワークなどを積極的かつ適切に活用すること。

中学校学習指導要領 理科

  • 各分野の指導に当たっては,観察,実験の過程での情報の検索,実験,デー タの処理,実験の計測などにおいて,コンピュータや情報通信ネットワーク などを積極的かつ適切に活用するようにすること。

BBC Microcomputer System

BBC Micro BBC Micro manual Figure 1
  • BBC Micro(WikiPedia)
  • primrosebank.net
  • Acorn Computers
    → Arm Holdings plc
  • 1981-1994
  • CPU: MOS 6502
  • ModelA(16KB, £299) , ModelB(32KB, £399)
  • 133055円 〜 177555円 (1£445円, 1981)
  • NEC PC-8001 (168000円, 1979-1983)
  • 国立大学授業料14.4万円→18万円→21.6万円

BBC micro:bit

  • 1台3360円(税込)
  • 2016年2月 v1 英国
  • 2017年8月 v1 日本
  • 2020年10月v2
  • v1: 16KB RAM
  • v2: 128KB RAM
  • 光,音,加速度,磁力センサー内蔵
BBC micro:bit

BBC micro:bit v1.3 仕様

micro:bit overview 1.3
  • SoC: Nordic nRF51822
    • Arm Coretex-M0 32bit
    • Flash ROM: 256KB
    • RAM: 16KB
    • Speed: 16MHz
    • BLE (Bluetooth Low Energy)

BBC micro:bit v2.0 仕様

micro:bit overview 2.0
  • SoC: Nordic nRF52833
    • Arm Coretex-M4 32bit with FPU
    • Flash ROM: 512KB
    • RAM: 128KB
    • Speed: 64MHz
    • BLE (Bluetooth Low Energy)

Microsoft MakeCode

makecode

The micro:bit Python editor

Python editor

PCとの接続方法

WebUSB

  1. ダウンロードボタン
  2. PCと接続
  3. ペアリング
  4. ファイルのダウンロード

USBドライブとしてダウンロードも可能

入力

makecode input

その他→「磁力(μT)」,「傾斜(°)」

シリアル通信

makecode serial

cf.) micro:bitプロジェクト集「シリアル通信の基本」

シミュレーター機能

makecode serial

データを表示 シミュレーター

makecode serial

データを表示 デバイス

makecode serial

シリアル通信

  • 以前はTeraTermやPuTTyを利用
  • MakeCode単体でシリアル通信可能
  • CSV, TXTファイルへの保存可能
  • USBケーブルが必要

無線 (radio)

makecode serial

2台のmicro:bitにダウンロード

無線とシリアル

makecode serial

2台のmicro:bitにダウンロード

シリアル通信と無線通信

  • 電池ボックスを利用
  • 離れた場所にも対応
  • MakeCodeのデータ表示機能を利用
  • CSV, TXTファイルへの保存可能
  • 無線の届く距離やタイミングが問題
  • シリアルや無線の取り扱いは少し面倒

datalogger (V2 only)

データロガー作成手順

  1. フラグ変数 logging を定義
  2. 列名を定義 (set columns 列名)
  3. 値を列名に記録 (log data column 列名 value 値)
  4. フラグ変数 logging の真偽値をボタンAで変更
  5. ボタンA+Bで記録を削除 (delete log)
  6. 記録が溢れた場合の処理 (条件 on log full)
  7. 動作モードの表示も追加 (♥,✕,💀)
  8. 記憶容量有限 → 記録する頻度調整

1. 「最初だけ」

makecode_first
  • フラグ変数 logging を偽に
  • 列名をxと設定

2. 「Aが押されたとき」

makecode_button A
  • フラグ変数 logging を反転
  • 真ならばハート表示
  • 偽ならば表示を消す

3. 「100ミリ秒ごとに」

makecode_100ms
  • フラグ変数 logging が真
  • 加速度 x を列 x に記録

4. 「A+Bが押されたとき」

makecode_AB
  • アイコン×を表示
  • ログを消去
  • フラグ変数 logging を偽に
  • 列名をxと設定

5. 「on log full」

makecode_logfull
  • フラグ変数 logging を偽に
  • アイコン💀を表示

ブロック全体

makecode_all MakeCode : accel_log

JavaScript


let logging = false
logging = false
datalogger.setColumnTitles("x")
loops.everyInterval(100, function () {
    if (logging) {
        datalogger.log(datalogger.createCV("x", input.acceleration(Dimension.X)))
    }
})
input.onButtonPressed(Button.A, function () {
    logging = !(logging)
    if (true) {
        basic.showIcon(IconNames.Heart)
    } else {
        basic.clearScreen()
    }
})
input.onButtonPressed(Button.AB, function () {
    basic.showIcon(IconNames.No)
    datalogger.deleteLog()
    logging = false
    datalogger.setColumnTitles("x")
})
datalogger.onLogFull(function () {
    logging = false
    basic.showIcon(IconNames.Skull)
})
	

Python (makecode)


logging = False
datalogger.set_column_titles("x")
def on_every_interval():
    if logging:
        datalogger.log(datalogger.create_cv("x", input.acceleration(Dimension.X)))
loops.every_interval(100, on_every_interval)
def on_button_pressed_a():
    global logging
    logging = not (logging)
    if True:
        basic.show_icon(IconNames.HEART)
    else:
        basic.clear_screen()
input.on_button_pressed(Button.A, on_button_pressed_a)
def on_button_pressed_ab():
    global logging
    basic.show_icon(IconNames.NO)
    datalogger.delete_log()
    logging = False
    datalogger.set_column_titles("x")
input.on_button_pressed(Button.AB, on_button_pressed_ab)
def on_log_full():
    global logging
    logging = False
    basic.show_icon(IconNames.SKULL)
datalogger.on_log_full(on_log_full)

ファイル:MY_DATA.HTM

MY_DATA.HTM

Visual preview

MY_DATA.HTM

datalogger

micro:bit create AI

micro:bit create AI
ご清聴ありがとうございました