實驗目的
練習用 Arduino 讀取 DMT DMARD03 三軸加速度計並透過 Serial port 把感測值印到電腦端。
這篇用的是利順精密(Domintech, DMT) 的 DMARD03 數位三軸加速度計(Accelerometer),在此要特別感謝彥陽科技 Johnny 與 Edison,謝謝你們提供我 DMARD03 模組。
材料
- Arduino Pro 3.3V model 或 Arduino Pro Mini 3.3V model x 1
- 利順精密 DMARD03 加速度計 x 1
- 4.7K 歐姆電阻 x 2
- 單心線 x N
利順 DMARD03 是一數位三軸加速度計,感測能力為正負 3G,工作電壓為 2.4V ~ 3.6V,通訊介面可使用 SPI 與 I2C。DMARD03 的應用有:
- 人體動作介面: 如 PS3 及 Wii 遙桿,AirMouse, PC-Game 手柄
- 自由落體偵測(Free fall detection): 如硬碟保護
- 手持裝置方向定位功能(Tilt sensing): 如手機或平板電腦幕自動翻轉
- 導航,電子羅盤: 如智慧型手機電子羅盤、適地性服務(Location-Based Service)、GPS 航位推算(dead reckoning)
▲ 資料來源: 利順精密
加速度計又稱重力感測器(Gravity Sensor, G-sensor)。
接線
DMARD03 AN001 (Application Note) 這份手冊提供了 I2C 和 SPI 兩種應用電路的接法,我們選用 I2C 最簡單的接法,電路圖如下:
所以,我們只要:
- 把 1, 4, 5, 17, 19 接到 Arduino 的 GND
- 把 2, 3, 11, 12, 13 接到 Arduino 的 +3.3V
- 然後把 14 接到 Arduino 的 SCL,而 16 接到 Arduino 的 SDA,並且在這兩支接腳上各接一顆 4.7K 歐姆的提升電阻連到 +3.3V
實際接法可參考底下用 Fritzing 繒製的電路原型:
在這個實驗中,SCL 接腳用 Arduino 的 pin 2,而 SDA 接腳則用 Arduino 的 pin 3,你也可以使用其它腳位,但是程式要配合調整。
要特別注意一件事,由於 Arduino 大部份的板子如 UNO, Duemilanove 等,它們的工作電壓都是 5V,如果拿這些板子直接跟 DMARD03 接在一起,可能會把 DMARD03 給弄壞,這是因為 DMARD03 的工作電壓是 2.4V ~ 3.6V,所以你必須使用 Arduino Pro 或 Arduino Pro Mini 3.3V 的板子來跟 DMARD03 界接。
要用工作電壓為 5V 的 Arduino 當然也是可以的,只不過你必須處理 3.3V 與 5V 的邏輯準位轉換(Level Shift)。這部份可以參考 Philips 的 AN97055 這份手冊。
如上圖,AN97055 提供的方法是利用 MOS-FET 電晶體和提升電阻以便讓兩個不同邏輯準位的電路能相容運作。因為手邊沒有 MOS-FET 電晶體,所以我沒有實際進行實驗。
安裝 DMARD03 函式庫
點這裏下載 DMARD03 函式庫,然後把檔案解壓縮放到 Arduino 速寫簿(Sketchbook)資料夾的 Libraries 資料夾底下即可。Arduino 速寫簿(Sketchbook)資料夾的預設位置是在「我的文件 > Arduino」這個地方:
▲ 把 DMARD03 資料夾放在「我的文件 > Arduino > Libraries」底下即可
程式
底下這支程式示範如何讀取 DMARD03 加速度計(DMT_G_Sensor.pde):
用 Arduino IDE 編譯程式,把程式上傳到 Arduino 板子上,然後打開 Serial Monitor,你就會看到從 DMARD03 傳回來的三軸加速度(Accerleration),如下圖:
資料
根據 DMARD03 AN001 手冊的說明,理論上,在靜止狀態下 DMARD03 六個方向讀出的感測值應該會像下圖一樣:
a) Y 軸朝上,Y 值為 –256 (-1G)
b) Y 軸朝下垂直於地平線,Y 值為 256 (1G)
c) X 軸朝上,X 值為 -256 (-1G)
d) X 軸朝下垂直於地平線,X 值為 256 (1G)
e) Z 軸朝上(即 DMARD03 正面朝上),Z 值為 -256 (-1G)
f) Z 軸朝下垂直於地平線(即 DMARD03 正面朝下),Z 值為 256 (1G)
其中,加速度值除以 256 就是重力,單位為 G (1G = 9.8m/s²)。
而實際測量的結果如下表:
角度 | X 軸 | Y 軸 | Z 軸 |
---|---|---|---|
-90 度 (朝上) | -276 | -315 | -295 |
90 度(朝上,垂直於地面) | 235 | 192 | 207 |
結果並不一致,很可能是有什麼因素造成偏移,所以大概得做個校準(Calibration)把偏移值補償回來。以 X 軸為例,256 – 235 ~= 20,X 軸應該大約補償個 20 就可以了。
終於有中文版的 三維方向測試!! 感謝提供
回覆刪除請問一下用I2C不是要接在analog pin 4,5上嗎?
回覆刪除還是其實也可以接在digital pins上來運作?
analog pin 4,5 是 hardware I2C/TWI 介面
回覆刪除DMARD03 library 的 I2C 通訊是用軟體實作的
所以任何 digital pins 都可以。
請問是否有將硬體I2C用軟體實作的範例教學呢?
回覆刪除我手邊有個感應器也想要將它轉成軟體I2C實作,但是不太懂轉換的原理...
你可以試試這個 I2C Library:
回覆刪除I2C Master Interface
http://homepage.hispeed.ch/peterfleury/avr-software.html
這個是根據 AVR300 application note 寫出來的 software i2c library。照文件說明,只要調整 i2cmaster.S 的 SDA 和 SCL 腳位應該就可以試了。
Hi there thanks a lot for your blog post about the DMARD03 and Arduino it helpt me a lot. My setup is a bit different but your arduino library helped a lot. Thanks again. Also a made a blog post about it hope U do not mind
回覆刪除http://www.protorabbit.nl/?p=118
@Pieter3D, you're welcome. :)
回覆刪除