# 卒研経過報告(Eチーム)#12
タンジブルなプログラミングデバイスCU-Brick(キューブリック)に関する研究
team member : 子安,鈴木,堀
[GitHub](https://github.com/KoyasuJunya/cu-brick-tangible-master)
[先週のメモ](https://hackmd.io/@Eteam/ry7ZyFW6d)
# 実験日:7月16日(金)
7月20日(火)発表分
## 前回まで
前回は単純なプログラムを作り、1マス分の電圧の計測を行った。そしてその結果を計測した。
## 今回の目標
1*2マスの直列回路を考え、組んでみる。加えて1*2マスのボードを読み取れるようにプログラムを改良し、結果を測定する。
## 実験
### 1. 回路
1*2の回路を直列に組むにあたって、四つのpinを用いて回路を組む事にした。

### 2. 各端子の電圧
今回はpinを選ぶ基準として、各pinの電圧値を参考にした。3.3Vあるアナログ、デジタルpinを二つずつ選び、回路に組み込んだ。
| 端子 | 電圧(V) | 機能 |
| - | - | - |
| 3 | 3.3 | analog |
| **0** | 0.3 | analog |
| 4 | 3.3 | analog |
| 5 | 3.3 | digital |
| 6 | 3.3 | digital |
| 7 | 3.3 | digital |
| **1** | 0.3 | analog |
| 8 | 0.0 | digital |
| 9 | 0.0 | digital |
| 10 | 3.3 | analog |
| 11 | 3.3 | digital |
| 12 | 0.0 | digital |
| **2** | 0.3 | analog |
| 13 | 0.0 | digital |
| 14 | 0.0 | digital |
| 15 | 0.0 | digital |
| 16 | 0.0 | digital |
| 19 | 3.3 | digital |
| 20 | 3.3 | digital |
### 3. コード
1*1マスの回路に使用したプログラムを改良して使用出来るようにした。
```c=
//実サイズ
#include"MicroBit.h"
#define TATE 2
#define YOKO 2
#define ID_READ_BUTTON 10
//読み取りボタンインスタンスのID7
#define MUX_READ 4
//マルチプレクサで拡張するピンの数
uint16_t board[TATE][YOKO];
MicroBit uBit;
MicroBitButton readButton(MICROBIT_PIN_P19, ID_READ_BUTTON, MICROBIT_BUTTON_ALL_EVENTS, PullUp);
//読み取りルーチン
void read(){
static MicroBitPin digitalOut[YOKO]={uBit.io.P5, uBit.io.P6};
static MicroBitPin analogRead[TATE]={uBit.io.P3, uBit.io.P4};
//ここから読み取り
for(int i = 0; i < YOKO; i++){
digitalOut[i].setDigitalValue(1);
board[i][i] = analogRead[i].getAnalogValue();
digitalOut[i].setDigitalValue(0);
}
}
//読み取りボタン押されたら実行
void OnButton(MicroBitEvent){
uBit.display.disable();
read();
uBit.display.enable();
//値を表示(デバッグ用)
for(int i=0; i < 1; i++){
for(int j=0; j <YOKO; j++){
if(board[i][j]<10){
uBit.serial.send(" ");
}else if(board[i][j] < 100){
uBit.serial.send(" ");
}else if(board[i][j] < 1000){
uBit.serial.send(" ");
}else{
uBit.serial.send(" ");
}
uBit.serial.send(board[j][j]);
}
uBit.serial.send("\r\n\r\n");
}
uBit.serial.send("------------------------------------------------------");
uBit.serial.send("\r\n\r\n");
}
int main(){
uBit.init();
uBit.messageBus.listen(ID_READ_BUTTON, MICROBIT_BUTTON_EVT_CLICK,OnButton, MESSAGE_BUS_LISTENER_DROP_IF_BUSY);
while(true){
uBit.sleep(1000);
}
}
```
### 4.計測方法について
基本的には1*1マスで行った実験と同条件で計測する。値の計測はTeraTermを使用し、基準となる抵抗R1,R2は510Ωで固定、R11,R21には220Ω,510Ω,2200Ω,6800Ωの四種類の抵抗を使用して各抵抗の値を測定する。
前回と違い、今回は一度に二つの抵抗を読み取るので、抵抗の組み合わせを全て試しながら計測をする。
・計測の様子

### 5. 期待値と結果
実験の結果、抵抗の組み合わせが原因で計測結果が変わるという事はなかった。しかし1*1マスの時と違い誤差が大きかった。下の画像は四種類の抵抗の組み合わせを変えて測定した時の測定結果である。
・220Ωと510Ω

・220Ωと2200Ω

・220Ωと6800Ω

・510Ωと2200Ω

・510Ωと6800Ω

・2200Ωと6800Ω

それぞれの期待値と実際に測定した値、誤差は下記の表の通り。
| | 220Ω | 510Ω | 2200Ω | 6800Ω |
| ------ | ---- | ---- | ----- | ----- |
| 期待値(0~1023) | 714 | 511 | 192 | 71 |
| 測定値(0~1023) | 574 | 446 | 182 | 70 |
| 誤差 | 140 | 65 | 10 | 1 |
測定した結果、どのような組み合わせでも測定値自体は安定して計測することが出来たが、抵抗が小さくなる程期待値との誤差が激しくなる事が分かった。
### 6. まとめ
1*2マスの実験は、前回目標に掲げていた2*2マスの直列回路を実現するための前段階として計画していたが、思っていたよりも時間がかかってしまったため、2*2マスに挑戦することが出来なかった。
しかしマスを増やして測定した時に、各抵抗の測定値にどのような変化が表れるのかについて知る事が出来た。
## 次回の目標
・更にマス数を増やして実験を行い、誤差がどうなるのかについて調査をする。
[](https://i.imgur.com/mTp3m9c.png)