研究筆記 - GaussToys

最後編輯:2016-04-07 建立:2016-03-07 歷史紀錄

 

Mini GaussSense - ONE sensor for ALL

我們期待極速自造工具能精巧便攜、具有許多功能、可以重覆使用、可以自由擴展來適應不同的需求,最重要的,我們當然希望它很容易使用。

Mini GaussSense是值得您期待的優雅解決方案。小盒子裡的微型磁場感應器和磁鐵,正是極速自造的獨門配方。小小一顆便支援多種功能,足以取代滿滿一箱的傳統電子零件!連接Arduino和下載免費的軟件開發工具包後,一切神奇運作!兼容麵包板的設計,不僅能夠重覆使用、自由擴展,也節省您的時間!

Mini GaussSense,簡潔有力的自造工具箱。

 

大帥黃Youtube 介紹(以一打十)Mini GaussSense - The Simplest Maker's Toolkit, Ever!

 

基本資料

 

媒體

 

介紹文

CHIA-CHUN W研究論文

 

 

社群支援

YouTube頻道影片

 

WUULONG S*

 

 

Mini GaussSense - 10 series

 

Bring up

開箱

 

CHIA-CHUN W

 

按官網步驟走一次

  1. 開始使用 GaussSense
    1. 下載 Arduino Code, 並上傳(驗證使用 Fayaduino Uno +Arduino 1.6.5 )
    2. 下載 Processing 並按指示安裝(驗證使用 Processing 2..2.1 )
  2. Example/Basic/* 都執行正常
    1. UI 工作正常
    2. Console 會輸出類似
    • South: ~ 30 gauss. (x,y)= (213,54)
    • North: ~ 17 gauss. (x,y)= (378,378)
  3. 照片

 

 

WUULONG S基礎研究

  • PIN : A0, D2/D3/D4/D5

 

  • 簡述整體
    • UI 在每一次 draw 一開始,就先 readSerialData, 就是往 serial 發出 'a', 拿回 16 int, 持續將資料收下來,讓後面UI library 中提供的演算法就算,然後畫出來
  • Arduino Code:
  • Serial port 有來要東西就 sense 然後吐到 serial port
  • Serial protocol spec?
    • In: ‘a' , out: 16 個 int
  • void loop()
  • {
  • if (checkSerialPort()) {
  • getGaussSenseData(); // Get data from all GaussSense modules
  • sendGaussSenseData(); // Write data to the serial port
  • }
  • }
    • in: 'w' 就會依照命令設定對任意設定的 port, 做 digital write('d'), or analog write('a'), or servo write('s')
    • 編碼是 wxxxxxxxx\n,
      • dPPV : digital write, (PP) port (V) value
      • aPPVVV: analog write, (PP) port (VVV) analog value
      • sPPVVV: servo write, (PP) port (VVV) servo value

 

  • Processing:
  • 主物件初始化
  • gs = new GaussSense(this, GaussSense.GSType.GAUSSSENSE_MINI, 1, 1, Serial.list()[Serial.list().length - 1], 115200);

 

  • 主要物件

GaussSense/src/gausstoys/core/GaussSense.java

  • public class GaussSense
  • //Method that's called just after beginDraw()

public void pre() {

if(this.serialManager.isConnected()) {

this.serialManager.readSerialData();

 

  • public class SerialManager

public void readSerialData() {

this.serialData.clear();

while( this.serial.available() > 0) {

int data = (byte)this.serial.read();

this.serialData.add(data);

}

this.serial.clear();

this.serial.write('a');

}

 

Arduino 跟 GaussSense 之間如何運作

 

  • GaussSense 內部應有 16 個感測元件,用 4 個 GPIO 選擇是哪一個,而 Analog output 則是那個單一元件的 analog output

 

  • 感測值被預減 512, 又被限制在 +-127 (不知為何)
  • RONG-HAO LRH: 預減 512是將sensor值置中並把值限定在255階。當沒有任何外部磁場時,檢出電壓會約位於供電電壓的一半。ATMega32U4內建的10-bit ADC提供1024階解析度,故需要將值預先減半。點陣圖一般為256階,所以我們將感測值限制在 +-127。如果不需要點陣圖輔助,可以使用完整的1024階。
    wuulong sheu有懂!

WUULONG S感測值如何轉換成有意義的訊息

  • 個別的感測值,其實對應用不是那麼方便使用,需要聯合所有的感測值,再經過個別特殊的演算法,才能知道發生了什麼事情。

 

  • 目前這些演算法在 Processing 的 library 中
  • 先 study 個別範例
  • e1: e1_HelloGaussSense
    • 根據目前 16 個感測值,經過 UpSampling, 特殊演算法,對應到螢幕上來顯示
    • gs.drawRawData2D(width, height);
      • drawUpsampledData2D
        • 先做 Upsampling, 然後將每個 sample, 畫出來。 width, height 就是 Upsampling 的參數, sampleRate default = 1
      • upSampleRawData(int imgWidth, int imgHeight, int sampleRate)
        • this.upSampleData = Upsampler.upSampling(this.hallSensorData, sampleRate);

LinkItONE 也能用?

  • 是的,簡單的範例已驗證
  • Arduino code 看起來應該在簡單的範例是能用的,但是第一次試 Processing 中, Demo 不能動。再確定 Arduino 也能動的時候,再試一次

 

  • 原因是 Processing code 中,固定找最後一個 serial port 來使用

 

gs = new GaussSense(this, GaussSense.GSType.GAUSSSENSE_MINI, 1, 1, Serial.list()[Serial.list().length - 1], 115200);

 

  • 在 LinkItONE 接入時, 正確要使用 [4] /dev/cu.usbmodem1421 (此為 mac 環境)
  • Serial.list()[Serial.list().length - 1] => Serial.list()[3]
  • 就可以正常了

Found 10 serial device(s).

[1] /dev/cu.ARD_SPP-

[2] /dev/cu.Bluetooth-Incoming-Port

[3] /dev/cu.EV3-SerialPort

[4] /dev/cu.usbmodem1421

[5] /dev/cu.usbmodem1423

[6] /dev/tty.ARD_SPP-

[7] /dev/tty.Bluetooth-Incoming-Port

[8] /dev/tty.EV3-SerialPort

[9] /dev/tty.usbmodem1421

[10] /dev/tty.usbmodem1423

 

純 Arduino Sensor 值觀察

磁鐵放在上面,藍面向上,置中

66 127 127 49 127 127 127 127 127 127 127 127 53 127 127 41

66 127 127 49 127 127 127 127 127 127 127 127 54 127 127 42

66 127 127 49 127 127 127 127 127 127 127 127 54 127 127 42

66 127 127 49 127 127 127 127 127 127 127 127 54 127 127 41

66 127 127 49 127 127 127 127 127 127 127 127 53 127 127 42

=> 藍上是127

=> index 1,4,13,16 應該在角落

 

磁鐵放在上面,紅面向上,置中

-18 -127 -127 -53 -127 -127 -127 -127 -127 -127 -127 -127 -13 -127 -127 -44

-18 -127 -127 -53 -127 -127 -127 -127 -127 -127 -127 -127 -13 -127 -127 -44

-18 -127 -127 -53 -127 -127 -127 -127 -127 -127 -127 -127 -13 -127 -127 -44

-18 -127 -127 -53 -127 -127 -127 -127 -127 -127 -127 -127 -13 -127 -127 -44

-17 -127 -127 -53 -127 -127 -127 -127 -127 -127 -127 -127 -12 -127 -127 -44

=> 紅上是-127

=> index 1,4,13,16 應該在角落

 

磁鐵距離約一公分,藍面向上,置中

55 57 51 37 38 71 63 54 36 76 43 27 35 29 43 21

55 57 51 37 37 72 63 54 36 76 43 27 35 29 42 21

55 57 51 37 38 72 64 55 37 77 43 27 35 29 43 21

55 57 52 37 38 72 64 55 37 77 43 27 35 29 43 21

55 58 52 38 38 72 64 55 36 77 44 28 35 29 43 21

 

磁鐵距離約一公分,紅面向上,置中

-7 -26 -31 -19 -39 -32 -39 -19 -35 -19 -54 -36 -9 -33 -15 -16

-7 -26 -32 -20 -39 -32 -39 -19 -35 -19 -54 -36 -9 -33 -16 -17

-7 -27 -32 -20 -40 -32 -40 -19 -35 -19 -54 -36 -9 -33 -15 -17

-7 -27 -32 -20 -39 -32 -40 -20 -35 -19 -54 -36 -9 -33 -15 -16

-7 -27 -32 -20 -39 -32 -40 -20 -35 -19 -55 -36 -9 -33 -15 -16

 

磁鐵放在上面,藍面向上,放左下角 (靠 Power PIN)

-6 33 127 127 -29 -4 127 127 -23 -3 -27 17 -3 -23 -10 -22

-6 33 127 127 -29 -4 127 127 -24 -3 -26 17 -3 -23 -11 -23

-6 33 127 127 -29 -4 127 127 -23 -3 -27 17 -3 -23 -10 -22

-6 33 127 127 -30 -5 127 127 -23 -3 -27 17 -3 -23 -10 -22

-6 33 127 127 -30 -4 127 127 -23 -3 -27 17 -3 -23 -10 -22

=> index 4 在左下角

 

磁鐵放在上面,藍面向上,放右下角

127 127 6 -9 127 126 -11 2 -1 4 -29 -16 -15 -26 -2 -7

127 127 6 -8 127 126 -11 2 -1 4 -29 -16 -14 -25 -2 -6

127 127 6 -8 127 126 -11 2 0 4 -30 -16 -14 -25 -2 -6

127 127 6 -8 127 125 -11 2 0 4 -29 -16 -14 -26 -2 -6

127 127 6 -8 127 125 -11 2 -1 4 -30 -16 -14 -26 -2 -6

=> index 1 在右下角

 

磁鐵放在上面,藍面向上,放左上角

8 -7 -16 -17 -26 -12 35 127 -32 24 127 127 -19 31 127 127

8 -7 -16 -17 -26 -13 35 127 -32 24 127 127 -19 32 127 127

8 -7 -16 -17 -26 -12 35 127 -32 24 127 127 -19 32 127 127

8 -7 -16 -17 -26 -13 35 127 -32 24 127 127 -19 31 127 127

8 -7 -16 -17 -26 -12 35 127 -32 24 127 127 -19 31 127 127

=> index 16 在左上角

磁鐵放在上面,藍面向上,放右上角

-8 -12 -6 2 74 10 -13 5 127 127 -26 -22 127 127 14 -17

-8 -12 -6 2 75 10 -14 5 127 127 -26 -22 127 127 14 -18

-8 -12 -5 2 75 10 -14 4 127 127 -25 -23 127 127 14 -18

-8 -12 -6 2 74 11 -13 4 127 127 -26 -22 127 127 14 -18

-8 -12 -6 2 74 10 -14 5 127 127 -25 -22 127 127 14 -18

=>index 13 在右上角

=> 排列應該是這樣, 4 在 POWER PIN, 1 在 D3

16 15 14 13

12 11 10 9

8 7 6 5

4 3 2 1

 

地磁感測的觀察

思路是先將被限制的感測值放開,看看能夠觀察到什麼

  • 最起碼試試可不可以當作指南針用

地表磁力約在 0.26 - 0.65 高斯,希望看到感測值在這附近,即使有 offset, 也希望能看到在八個方位能看到將近 2.65 的值差

0.26/(150.0/1024)

1.7749333333333335

>>> 0.65/(150.0/1024)

4.437333333333333

 

沒有下 constrain(v, -127, 127) 的值

21 14 11 13 -6 16 12 21 -6 24 -7 -3 9 -7 13 3

21 14 12 12 -6 16 12 21 -6 24 -7 -3 9 -6 13 3

21 14 12 13 -6 16 12 21 -6 24 -7 -3 9 -6 13 3

21 14 12 13 -6 16 13 22 -6 24 -7 -3 9 -7 13 3

21 14 12 13 -6 16 12 21 -6 24 -7 -2 9 -7 12 3

 

=> 沒看到預期接近 0, 在拿感測器轉 360 度的實驗中,觀測不到任何值有明顯的差2 的現象

RONG-HAO LRH:請使用processing example code e1 進行觀測,啟用後按enter可將所有值歸0

接著移動sensor,應該可以看到相當微小的差異,值在0-4之間

(您也可以在processing中使用用float[][] rawData = gs. getRawData() 後,再使用println(rawData)在console看到4x4的值)

然後您就可以自由將rawData乘上某個常數把值放大,或者使用更高解析度的ADC看到更細緻的結果。

    wuulong sheu謝謝!會試試看。但是我不覺得會有效,因為聽起來 processing 做的是歸零,數值放大,這跟我直接觀測 console 的某個 sensor 值,去看他有沒有 diff >=2 的情況是一樣的。問題是 console 中的數值, diff <=1, 所以我才覺得奇怪。現在想到,我搞錯一個概念了,我本來以為會看到 0.26 - 0.65 高斯的變化,那是錯的,你說是不同區域間的差異。所以也可能要觀察的是 0-0.26 的值,那一定得用物理放大或是高解析的 ADC 了

 

WUULONG S不同磁鐵的觀察

  • 做這個觀察是想了解是否所需要的磁鐵是特製的,是否隨便拿來的磁鐵都能使用,以及如果使用其他磁鐵是否有什麼東西需要注意的

 

  • 隨便拿手上拿得到的先觀察一下
  1. 隨便的磁鐵都能讓 GaussSense 感測到磁場的變化 => 一般磁鐵也能用
  2. 磁鐵強一點,感測到的數值會比較高,無法感測的距離也比較長
    1. RONG-HAO LRH: 可以把Arduino code中的 +/-127的限制放寬成+/-512 就可以減輕飽和問題。ps. Arduino當中可看到放寬後數值,但是如果要用processing的範例,必須在把+/-512 map回 +/-127 (e.g. 512/4 = new value)
  3. WUULONG S所附的磁鐵約和一般比較強的磁鐵是類似的
    1. RONG-HAO LRH: 所附的磁鐵應該是比較弱的喔 銀色的磁鐵才是比較強的
  4. WUULONG S有一種按下去比較軟的磁鐵,磁力很弱,而且可以看出磁力的分布比較奇特
    1. RONG-HAO LRH: 軟磁鐵運用的是交叉沖磁法,製造較簡易,但feature較複雜,不適用我們的演算法。

WUULONG S自製磁力感測 study