---
# System prepended metadata

title: BAR02
tags: [控制組]

---

###### tags: `控制組`
# BAR02
writer: 江承翰、徐冠東
email: neoblacktea.ee10@nycu.edu.tw
BAR02 是一個可以監測溫度和壓力的感測計，但在實際上我們會拿來用的只有壓力的部分。
所以這份筆記會著重於如何去使用它，以及歸零。
## 來源
https://reurl.cc/vkemMN
這個是購買 BAR02 的網站，裡面要注意的是它的 datasheet 和 example code，分別在 Technical Details 和 Guides裡

## Pin-out for Stm32
Vin -> 3v3
SDA1 -> PB9
SCL1 -> PB8
GND -> GND

![image](https://hackmd.io/_uploads/Hyllem5K6.png)


PCB
![image](https://hackmd.io/_uploads/rk0Kuf8Y6.png)

Stm32 pin-out
![image](https://hackmd.io/_uploads/Bk7NC-5Yp.png)

Device pin-out

![image](https://hackmd.io/_uploads/H1x2uGIYp.png)


## Command
在 datasheet 裡重要的是 commands，裡面會寫要如何讓 stm32 給感測器指令以及如何接收感測器回傳的指令

使用微控制器(stm32)讀取感測器的值會需要以下步驟
1. 傳遞指令給 Sensor
    - 傳遞 Device address (可從 Datasheet 取得)
    - 傳遞 Command 給 Sensor (Write)
2. 接收 Sensor 回傳值 (Optional)
    - 傳遞 Device address 
    - 接收 Sensor 值 (Read)
    >Note: 若回傳值超過一個 byte，需用 buffer 接收

- ### 範例一: Reset Command 
![](https://i.imgur.com/OkFjtsr.png)
以上為在 datasheet 上擷取的，前面填的是device address，通常都是固定的，後面一碼填的是要讀取或是寫入，再後面是你的指令，以下是指令的對照

![](https://i.imgur.com/bx8cYze.png)

以下圖為例，一份訊息，有時候讀取會有2或甚至3串的8-bits的address，在code中使用"<<8"去shift每一串的address，並使用buffer容器去做存取的動作。
![](https://i.imgur.com/ZcgsHuK.png)
![](https://i.imgur.com/iWtuZpB.png)



### example code
網站提供的example code有Arudino和Python的範例，我們選Arduino的，比較接近C++

## 使用debug功能
在HackMD與google共用的檔案教學中，就可以知道如何一步步地安裝stm32的環境(中間的設定會花點時間)，並且安裝VsCode的debug功能去觀察測量的數值，一開始的bar02深度測量有問題，換裝新的後，數值變得比較正常，然後初始的測量值會有點奇怪，所以特別用for迴圈，進行歸零、校正的動作。


## 歸零
有仔細去看code會發現它算深度的方式是把量到的壓力值減掉一大氣壓再除液體密度算深度，這樣的問題是氣壓不會永遠是氣壓會隨地區和時間變化，所以要把這個誤差修正，我們的做法是再多加一個offset，這個offset的計算方式是在一開始的時候計算，最後算深度時再扣除
![](https://i.imgur.com/fd5zy79.png)
上圖為例，實際測量後會發現，前10個測量資料會不精確、比較奇怪，所以一開始先連續讀取10個資料(做洗掉的動作)，之後再重新讀第11~20個資料，並做平均的動作，此平均值作為depth_offset的初始值。
