從Adafruit Industries買了三軸加速度感測器ADXL335分線板,ADXL335的工作電壓是3.3V,這塊分線板加入了穩壓器,所以可接5V電源。可量測正負3g的加速度,由三個腳位類比輸出XYZ三軸的加速度,-3g是0V、0g是1.65V、3g是3.3V。
分線板的Vin接Arduino的5V腳位。
分線板的3Vo接Arduino的AREF腳位。
分線板的GND接Arduino的GND腳位。
分線板的Xout接Arduino的A0腳位。
分線板的Yout接Arduino的A1腳位。
分線板的Zout接Arduino的A2腳位。
分線板上也標示出XYZ軸的方向。
因為ADXL335輸出的類比電壓介於0~3.3V,所以我們將3Vo腳位(3.3V)接到Arduino的AREF腳位,作為參考電壓準位。
底下是程式碼:
#define X_PIN A0
#define Y_PIN A1
#define Z_PIN A2
void setup(){
Serial.begin(19200);
// 注意,在呼叫analogRead之前必須先呼叫analogReference
analogReference(EXTERNAL);
}
// 將類比輸入的值轉成g
float toG(float v){
return v * 6 / 1023 - 3;
}
void loop(){
int x = analogRead(X_PIN);
int y = analogRead(Y_PIN);
int z = analogRead(Z_PIN);
Serial.print("X: ");
Serial.print(x);
Serial.print(", Y: ");
Serial.print(y);
Serial.print(", Z: ");
Serial.print(z);
Serial.print("; X: ");
Serial.print(toG(x));
Serial.print("g, Y: ");
Serial.print(toG(y));
Serial.print("g, Z: ");
Serial.print(toG(z));
Serial.println("g");
delay(100);
}
然後搖動ADXL335,應可得到類似下列的輸出訊息:
X: 499, Y: 485, Z: 615; X: -0.07g, Y: -0.16g, Z: 0.61g
X: 506, Y: 443, Z: 589; X: -0.03g, Y: -0.40g, Z: 0.45g
X: 490, Y: 486, Z: 630; X: -0.13g, Y: -0.15g, Z: 0.70g
X: 502, Y: 506, Z: 641; X: -0.06g, Y: -0.03g, Z: 0.76g
X: 524, Y: 534, Z: 638; X: 0.07g, Y: 0.13g, Z: 0.74g
X: 505, Y: 541, Z: 621; X: -0.04g, Y: 0.17g, Z: 0.64g
X: 512, Y: 549, Z: 602; X: 0.00g, Y: 0.22g, Z: 0.53g
X: 502, Y: 536, Z: 616; X: -0.06g, Y: 0.14g, Z: 0.61g
X: 473, Y: 529, Z: 624; X: -0.23g, Y: 0.10g, Z: 0.66g
X: 462, Y: 512, Z: 624; X: -0.29g, Y: 0.00g, Z: 0.66g
X: 442, Y: 500, Z: 621; X: -0.41g, Y: -0.07g, Z: 0.64g
X: 443, Y: 522, Z: 605; X: -0.40g, Y: 0.06g, Z: 0.55g
X: 488, Y: 541, Z: 598; X: -0.14g, Y: 0.17g, Z: 0.51g
X: 524, Y: 512, Z: 626; X: 0.07g, Y: 0.00g, Z: 0.67g
當然啦,這些是資料規格表上書寫的數字,工廠出產的每一顆晶片或多或少都會有些許不同,所以必須進行校準,不過若是不在乎精確數值的情況,便可省略。
想請問,return v * 6 / 1023 - 3;怎麼來的!? 感激不盡>//<
ReplyDelete因為-3g是0V、0g是1.65V、3g是3.3V。
Delete而且分線板的3Vo接Arduino的AREF腳位。
v會是介於0~1023的值(對應代表0V~3.3V)。
* 6 / 1023後轉成0~6g,-3後得到-3g~3g的值。
請問為什麼乘上六就是對應0~6G啊?
Delete我加速度計是+-1.5G
800mV/g
是不是要把它改成 v*3/800-1.5 ?
v會介於0~1023,對應0V~3.3V,又對應到-3g~+3g。
Delete所以先* 6 / 1023後,對應到0~6g,然後-3對應到-3g~+3g。
至於你的情況,光這樣無法判斷,
要看你的腳位讀到的是什麼。
您好 我使用的是 MMA7361三加速度計 以下是產品說明
Deletehttp://wiki.dfrobot.com.cn/index.php/MMA7260%E4%B8%89%E8%BD%B4%E5%8A%A0%E9%80%9F%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8%28Arduino%E5%85%BC%E5%AE%B9%29_%28SKU:_DFR0143%29
v的初始數值是X=350上下浮動 Y, Z是430上下浮動
並請問 針腳插在A0~A5上 v就會是介於0~1023的值嗎?
還有 MMA7361加速度計 供應電壓是5V 好像不同於ADXL335的是3.3V
Delete根據你給的網頁,MMA7361的供電電壓是3.3-8V。
Delete如果是±1.5g的話,輸出應會介於0.45V~2.85V,
若是使用Arduino的類比腳位來量測,因為解析度是10 bits,
所以若把參考電壓調成3.3V,那麼量測到的值應該會介於139~883。
沒用過MMA7361,只是根據你給的網頁的資料。
請問
Delete為何 輸出應會介於0.45V~2.85V?
參考電壓 是甚麼意思?
如何計算出139~883?
謝謝
還有
Delete供電電壓是3.3-8V 不是代表給予加速度計的電壓可以介於3.3-8V之間嗎?
給予3.3V和5V輸出會有差別嗎?
你給的網頁寫的。
Delete1g是2.45V,0g是1.65V,差了0.8V,所以1.5g應該是2.85V。
Arduino的類比輸入腳位,會以參考電壓為上限,譬如Uno預設為5V,那麼就會把0~5V對應到0~1023。
若參考電壓是3.3V,那麼-1.5g(0.45V)就會量測到139.5。1.5g(2.85V)則是883.5。
根據網頁寫的,供電電壓是可以介於3.3-8V之間。
輸出會有差別嗎? 不知道,網頁沒寫。
謝謝您的解答
Delete嗨!我要做一個實驗,要用到三軸加速器,但設計電路與寫程式我是門外漢,可以請您協助嗎?謝謝!
ReplyDeletesam47215@gmail.com.tw
不懂你的意思。
Delete有問題就請留言,盡量回答。
請問版大有做過測傾角的實驗嗎,有的話可以分享一下嗎^^
ReplyDelete測傾角的實驗?
Delete根據x y z的g值找出傾斜角度嗎?是不是用個數學運算式就可以算出來呢?
基本傾角實驗沒那麼簡單
ReplyDelete準確的傾角需要用到 六軸, 才能準確的知道現在的角度...
而移動中的物件(快速) 還須靠GPS才能準確地知道傾角-..-
我目前也在研究這方面, 不過實力太低了, 所以還在努力
以上資訊我是靠APM(一塊以arduino MEGA 2560 為基礎而開發的飛控板(多軸機使用)...看它裡面CODE跟朋友解說得知的
哇,有高手發聲為我們解惑了,謝謝。
Delete不過基本的傾角還是靠加速度計就能實現啦-.-
ReplyDelete只是移動中物件比較繁瑣一點
p.s 有事情想請教版主, 不知有甚麼聯絡方式較好呢?
有問題請直接留言,謝謝。
Delete不方便直接給聯絡方式。
板主你好><不好意思打擾您了~~
ReplyDelete有一個問題想問你
就是我程式碼都照著寫 電路也應該是沒接錯
但是每次跑出來都只有
X: 1023, Y: 1023, Z: 1023; X: 3g, Y: 3g, Z: 3g
用ADXL345也一樣情況
不知道到底哪裡出錯了QQQ
拜託救救困擾很久的新手
光這樣也不知道哪裡出錯。
Delete有記得共同接地嗎?
This comment has been removed by the author.
ReplyDelete請問為什麼要加analogReference(EXTERNAL);
ReplyDelete我加這行後值顯示是X: 1023, Y: 1023, Z: 1023; X: 3g, Y: 3g, Z: 3g
不加平放值是X: 348, Y: 348, Z: 425; X: -0.96g, Y: -0.96g, Z: -0.51g
為什麼X Y g值不會歸0?
因為ADXL335輸出XYZ三軸的加速度,-3g是0V、0g是1.65V、3g是3.3V。
Delete介於0~3.3V,所以分線板的3Vo接Arduino的AREF腳位,並且加上analogReference(EXTERNAL);,
以AREF腳位的電壓為準。
否則一般板子會以5V為準。
> 為什麼X Y g值不會歸0?
因為ADXL335不完美,因為你沒辦法讓它呈現完全靜止、無加速度的狀態。
那我要如何在加了analogReference(EXTERNAL);後出現值?
Deletewhat?
Delete你不是有值了嗎?
那直視沒加analogReference(EXTERNAL);時才有的
Delete有加analogReference(EXTERNAL);時是出現X: 1023, Y: 1023, Z: 1023; X: 3g, Y: 3g, Z: 3g
你的Arduino板子是哪一塊?
Delete分線板的3Vo有接Arduino的AREF腳位嗎?
一直讀到1023的話,代表一直讀到3.3V。
哪裡出錯了呢?
This comment has been removed by the author.
DeleteSORRY我找到錯了我這顆沒有3Vo這腳位
Delete嘿。
Delete那麼,請你先看你的是哪一顆加速計晶片/模組,
查它的x y z軸輸出的訊號為何,是不是類比訊號,若是的話上下電壓界限為何,
然後連接線路,做相對應的修改。
每個感測器的用法,各自不同。
Delete請找出晶片型號,到網路上找找有無介紹文。
我是用http://www.playrobot.com/accelerometers/909-adxl335-pin.html這顆
Delete工作電壓:DC 3V ~ 5V
加速度測量範圍為 ±3g
我是用UNO板vcc接5v,所以-3g是0V、0g是2.5V、3g是5V??
公式是v * 5 / 1023 - 2.5??
This comment has been removed by the author.
ReplyDelete也是ADXL335,但模組不同。
Delete根據你給的網頁,無法得知該產品的輸出是不是介於0~5V、還是介於0~3.3V,請向該公司詢問。
> -3.3g是0v,0g是2.5v,3.3g是5v?
不是,哪來的3.3g ?
> v * 5 / 1023 - 2.5?
不是。
這是他給的產品相關資料https://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf
Delete那是ADXL335的資料規格表。
Delete我說的是模組產品本身的規格,你買的產品是sparkfun設計的。
需要知道的是
X_OUT, Y_OUT, Z_OUT的輸出電壓,上下界限為何?
對應到哪個範圍的加速度(應該是-3g ~ 3g)。
xyz輸出電壓,是否隨VCC而改變。
如果對方沒給,可以自己做試驗找出來。
對方沒給,請問我該怎麼做?
Delete接線後,假設以3.3V供應給模組,
Delete然後使用analogRead讀取xyz輸出,
(假定你的板子是5V)
翻轉模組,觀察analogRead輸出的數值,
如果數值介於0 ~ 675之間,那就應該代表xyz的輸出介於0~3.3V。
那麼,就可以使用本篇的線路與程式。
(小修改 Arduino的AREF接到3.3V)
對方沒給,請問我該怎麼做?
Delete已回答。
Delete規格表 -1g 0g 1g
DeleteX 423 -0.52g 354 -0.92g 280 -1.36g
Y 426 -0.51g 360 -0.88g 283 -1.34g
Z 427 -0.50g 351 -0.94g 284 -1.33g
這是我測出的數值,我是以https://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf第12頁下方的方法測試
請問analogRead輸出的數值不是介於0-1023嗎?
g值不是介於+-3g嗎?
這樣上方的公式試用嗎?
不斷翻轉模組,找出最大最小值各為何。
Delete> 請問analogRead輸出的數值不是介於0-1023嗎?
要看你輸入的電壓值上下限是多少,
若是0~3.3V,那就應該得到約0~675。
> g值不是介於+-3g嗎?
那麼,0~675就對應到-3g ~ +3g
> 這樣上方的公式試用嗎?
你是說我這篇的程式吧。
如果模組輸出的是0到3.3V的話,可用。
知道了,感謝您的幫忙
Delete要如何讓他轉換成速度與位置
ReplyDelete請參考
Deletehttp://forum.arduino.cc/index.php?topic=47523.0
恩好謝謝
Delete我想請問輸入完程式碼後,下方顯示:[無法得知程式大小:java.io.IOException: Cannot run program "C:\Users\米??\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2/bin/avr-size": CreateProcess error=2, 系統找不到指定的檔案。0]
ReplyDelete是代表哪裡出錯了?
Arduino IDE的問題吧,無能為力。
Delete建議,換個版本。
不好意思我想請問一下,這個可以做出角度控制嗎?
ReplyDelete例如我用arduino做一台自走車,然後我想要讓他轉30度或60度或90度的角度
可以。
Delete你好,想要請教一下,我們監控視窗裡面出現的XYZ都是1023,不管怎麼搖晃數字都不會改變,不知道是怎麼一回事,我是用杜邦線接到uno上面,用的加速規是GY-61
ReplyDelete你只告訴我結果,沒給任何資訊,我只能亂猜,呵呵。
Delete電路?程式?
硬體線路錯了?程式錯了?
程式碼是參考你文章上面的程式碼,把Serial.begin(19200)改成Serial.begin(9600),其他的都沒有變動
Delete下面是圖片連結
https://drive.google.com/drive/folders/0B8llM0YvgY3CTkNIcG9QM3NDRkE?usp=sharing
我們vcc接在5V;x_out 接在A0;y_out接在A1;z_out接在A2;gnd接在gnd
把Uno的3.3V腳位,接到Uno的AREF腳位。
Delete成功了!!謝謝你
Delete但是想要請教為甚麼要把3.3V接到AREF呢
這篇文章有寫。
Delete我看到了! 謝謝你
Delete如果我是用ADXL345,請問我可以套用這個範例嗎?(硬體接法:NANO板+vcc-5V腳位、GND-GND腳位、SCL&SDA-A0~A5腳位)
ReplyDelete不行。
Delete請參考https://learn.adafruit.com/adxl345-digital-accelerometer
謝謝。測試後首先,VCC是5V(因為我的NANO擴充版上只有5V),
Delete然後網頁上的範例是序列窗上按任何鍵後,會出現感測器當下xyz的加速度:
Accel Minimums: 0.00 0.00 0.00
Accel Maximums: 0.12 0.20 1.14;
但是我的結果是:
Accel Minimums: -2.86 -0.47 0.00
Accel Maximums: 9.30 2.28 9.61, 請問我的實驗結果是不是有錯誤?
你執行的是校準程式吧,
Delete> 會出現感測器當下xyz的加速度
你的值當然會跟他的不一樣。
不是應該執行範例程式sensortest嗎?
另外因為範例檔上的兩個函數庫"Adafruit_ADXL345_U.h"和"Adafruit_Sensor.h"因為網頁上沒有zip檔可以下載, 打開範例後我從"草稿碼/加入檔案"開啟這兩個檔案, 不知道這種方式有沒有影響序列窗結果...
DeleteArduino IDE從1.6.2版起,有程式庫管理員Library Manager,使用它就能安裝程式庫,不需要自己手動抓。
DeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete請參考sensortest.pde的內容如下:
ReplyDelete!DOCTYPE html、html lang、head、link rel......不大像ARDUINO語法, 比較像是網頁語法。
並且因為"找到無效的程式庫"而無法上傳, 結果如下:
Arduino:1.8.2 (Windows 7), 開發板:"Arduino Nano, ATmega328"
Property line '' in file C:\Program Files (x86)\Arduino\libraries\Adafruit_ADXL345_U\library.properties is invalid
開發板 Arduino Nano 編譯錯誤。
在C:\Program Files (x86)\Arduino\libraries\Adafruit_ADXL345_U: Missing 'version' from library裡找到無效的程式庫
在C:\Program Files (x86)\Arduino\libraries\Adafruit_Sensor: Missing 'version' from library裡找到無效的程式庫
在C:\Program Files (x86)\Arduino\libraries\Adafruit_ADXL345_U: Missing 'version' from library裡找到無效的程式庫
在C:\Program Files (x86)\Arduino\libraries\Adafruit_Sensor: Missing 'version' from library裡找到無效的程式庫
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
請問還有哪個步驟出錯?
sensortest.pde的內容是:
Delete#include
#include
#include
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
...
> Missing 'version' from library裡找到無效的程式庫
應該是程式庫沒裝好。
原來是我之前下載library的方式有錯,已經可以打開sensortest範例檔了,
ReplyDelete謝謝葉大!
你好,請問我該如何將ADXL335的加速度數值存取並使用matlab去讀取呢?
ReplyDelete請問 ADXL345 與 ADXL335 有什麼差異?
ReplyDelete有類似 ADXL335 更高 g 數的模組嗎?
謝謝.
您好,請問如何讓三軸在靜止的情況下G值為零
ReplyDelete