----------------------------------------------------------------------
　　　　Interface2022年5月号
　　　　特集 第1部 IoTサイコロ Ver1.1 (M5Stack Core2版版) のプログラム・データ
　　　　ダウンロード・データ
　　　　Interface編集部
　　　　CQ出版(株)
　　　　公開：2022年3月25日
----------------------------------------------------------------------

====================================
ダウンロード・サービスご利用者各位
====================================
　毎度，小誌ご愛読を賜り，誠にありがとうございます．
　このたびはダウンロード・サービスをご利用いただき，誠にありがとうございます．
　筆者のご厚意により，本記事の関連データをこのアーカイブに収録しました．

================
概要
================
　このアーカイブには，表題の記事の中で作成したプログラム・ファイルやデータ・ファイルが収録されています．
　詳しくは該当記事を参照してください．
　アーカイブは，ZIP形式によって圧縮されています．

================
動作確認
================
　プログラムは筆者の元で動作を確認済みです．

=================
アーカイブの内容
=================
・main.ino
・dice_record.py
・record_m5.txt
・plot_record.py
・convert_data.py
・sense_m5.npy
・preprocessing.py
・input_m5.npy
・label_m5.npy
・learning.py

=================
内容物の補足
=================
本アーカイブは、IoTサイコロ Ver1.1 (M5Stack Core2版) のプログラム・データ類になります。

main.ino
	M5Stack Core2 の Arduino環境プログラムです。
	ライブラリは、M5Core2 ver 0.1.0 , ESP32 BLE Arduino ver 1.0.1 を利用しています。
	micro:bit のBLEインターフェースと互換性ある設計です。(Nordic UART Serviceの実装)
	10msecサンプリング周期で、350点の3軸加速度と3軸角速度を取得します。
	BLE(Nordic UART Service) 通信でデータ送受信します。
	データフォーマットは、10進数ASCII文字でカンマ区切りで、
		1番目x軸加速度, 1番目y軸加速度, 1番目z軸加速度,
      		1番目x軸角速度, 1番目y軸角速度, 1番目z軸角速度,
      		....
      		350番目x軸加速度, 350番目y軸加速度, 350番目z軸加速度,
      		350番目x軸角速度, 350番目y軸角速度, 350番目z軸角速度,
	各10進数整数値は、加速度1024 が 1[g] に対応します。角速度8192 が 2000[dps] に対応します。
	(注) BLE通信は低速なので、データ転送に数秒かかります。
	     SDカードのデータ保存へと、改造した方が快適です。

dice_record.py
	PC側の python プログラムです。M5Stack と通信して、サイコロ投擲データを収集します。
	Anaconda python3系のインストールに加え、pip install bleak で、bleak ライブラリをインストールしておきます。
	PCからのキー入力をスタートトリガとして、データサンプリングします。
	連続して試行を繰り返し、試行毎に1行の CSVフォーマットで "record_m5.txt" にファイル保存します。
	データフォーマットは、上記と同じです。最後のカンマは除外します。

record_m5.txt
	dice_record.py で取得した、6面体サイコロの投擲データの一部サンプル(84投擲試行分)です。
	データフォーマットは、10進数ASCII文字でカンマ区切りで、
		1番目x軸加速度, 1番目y軸加速度, 1番目z軸加速度,
      	1番目x軸角速度, 1番目y軸角速度, 1番目z軸角速度,
      	....
      	350番目x軸加速度, 350番目y軸加速度, 350番目z軸加速度,
      	350番目x軸角速度, 350番目y軸角速度, 350番目z軸角速度,
	各10進数整数値は、加速度1024 が 1[g] に対応します。角速度8192 が 2000[dps] に対応します。
	全ての試行データは別途 numpy バイナリとして公開します。
	(注) 一部分の投擲データです。全データはサイズ巨大なので、バイナリ sense_m5.npy で公開します。

plot_record.py
	PC側の python プログラムです。
	dice_record.py で収集したデータファイル "record_m5.txt" を可視化するプログラムです。

convert_data.py
	PC側の python プログラムです。
	dice_record.py で収集したデータファイル "record_m5.txt" をスケール変換して、
	numpy バイナリファイル "sense_m5.npy" に変換します。

sense_m5.npy
	6面体サイコロの 2302回の全試行データを、numpy バイナリ形式で公開します。
	dice_record.py で収集した全データを、convert_data.py によりスケーリングして、numpy バイナリ化しています。
	numpy array への復元は、 array_data = numpy.load('sense_m5.npy')  です。
	3次元のデータで、Shape = (2302, 350, 6) です。
	2302回の投擲試行、350点サンプル/試行、6軸を意味します。
	6軸は順に、[X軸加速度, Y軸加速度, Z軸加速度, X軸角速度, Y軸角速度, Z軸角速度] です。
	単位は、加速度 [g] と 角速度 [k dps = 1000度/s] です。

preprocessing.py
	PC側の python プログラムです。
	試行データ sense_m5.npy を元に、入力データと教師データを生成します。
	入力データと教師データは、numpy バイナリファイルに保存します。
	入力データは input_m5.npy に保存します。最初の接地衝撃点より手前の60点サンプルです。
		入力データの Shape = (2289, 60, 6) です。
		6軸は順に、[X軸加速度, Y軸加速度, Z軸加速度, X軸角速度, Y軸角速度, Z軸角速度] です。
		単位は、加速度 [g] と 角速度 [k dps = 1000度/s] です。
	教師データは label_m5.npy に保存します。最後の静的安定サンプル点での加速度データから、出目を算出しています。
		教師データの Shape = (2289,) です。one-hotエンコーディングしていません。
		出目は 0-5 として、実際の目の数から1減算しています。
	試行回数 2302回より減ったのは、最初の接地衝撃点より前のサンプリング点が60点未満の無効なデータを除外したためです。

input_m5.npy
	preprocessing.py により生成された、AIへの入力データの numpy バイナリファイルです。
	numpy array への復元は、 input_data = numpy.load('input_m5.npy')  です。
	入力データの Shape = (2289, 60, 6) です。

label_m5.npy
	preprocessing.py により生成された、AIへの教師データの numpy バイナリファイルです。
	numpy array への復元は、 label_data = numpy.load('label_m5.npy')  です。
	入力データの Shape = (2289,) です。

learning.py
	PC側の python プログラムです。
	入力データと教師データから、ディープラーニングにより学習します。
	ここでは、簡単な構造のニューラルネットワーク構造を例示します。
	def make_model() 内の keras モデルを自由に変更してみてください。

===========
著作権
===========
　収録したプログラム，データおよびドキュメントなどの著作権は，各著作権者（すなわち筆者）にあります．
　Copyright (C) 2022 Tadashi Kato

============
免責
============
(1)プログラムやデータの使用により，使用者に損失が生じたとしても，著作権者とＣＱ出版(株)は，その責任を負いません．
(2)プログラムやデータにバグや欠陥があったとしても，著作権者とＣＱ出版(株)は，修正や改良の義務を負いません．



