【好文分享】MTDuino+Sensor kit上機實作 - vMaker 台灣自造者vMaker 台灣自造者
中文 | English

【好文分享】MTDuino+Sensor kit上機實作

作者:賴桑

前面一篇文(MTDuino—專門替 Sigfox 打造的 Arduino)中提到如何能讓 MTDuino 透過內建的 Sigfox 電路,以 Serial1 跟 SerialUSB 演練按鈕以後上傳次數的範例。不過,光只有按鈕~~似乎是太沒意思了點!為了要能夠更像是個具有高度整合性質的效果,開發 MTDuino 的邁特電子( Might )也推出了各式各樣的感測器整合式擴充板(行話叫做烏龜板!因為掛在電路上面像是烏龜揹著殼一樣),像是我這次就拿到 2 個。

1. BLE +溫濕度感測+三軸加速度計

第一個(如下圖)從外觀上不難看到,藍色那小塊就是個無線電的通訊模組,其實呢~就是 BLE !另外,也有看到紅色基板上還有兩個小黑塊、一個小白塊,這其實是附帶在 BLE 擴充板上的大氣溫溼度,及透過微機電 MEM 工程為基礎開發的三軸加速度計。

Sensor Kit:BLE+溫濕度感測+三軸加速度計(圖片來源:賴桑提供)

2. GPS +大氣壓力+ UV 感測+環境光感

第二個(如下圖)如果之前用 Arduino 做專題的人,應該一眼就認出來: GPS !不過呢,這上面一樣,還不只 GPS ,還包括大氣壓力、紫外光 UV 感測、環境光照 Ambient light 感測,通通都有!

Sensor Kit:GPS+大氣壓力+UV感測+環境光感(圖片來源:賴桑提供)

其他還有好幾種,邁特電子說將會陸續推出。我個人來說算是蠻期待的,這可讓我在做物聯網方面的專題簡單多了!至於疊接的方法…應該一看更懂,超級簡單,只要腳位一對一就好了,請參考下圖。

把 MTDuino 疊接擴充板的方法,只要腳位一對一插上去就好(圖片來源:賴桑提供)

我的建議:一般來說有天線的,天線要是不能延長露出來,那就是盡量靠近外側,好比說,最上面或者靠銜接起來最多空位的地方,這樣收發無線電效果比較明顯!所以,這三個我是如下圖這樣疊接:

有天線的盡量靠近外側或上方(圖片來源:賴桑提供)

那更會有人問了:「我用一般的 Arduino Uno 那些也可以做得到啊!」嘿嘿嘿,問到重點了,別忘了! MTDuino 的核心微控器可是個 32 Bits 的 SAMD21 ,比起一般的 Arduino 用的 8 Bits AVR 系列,運算能力上可是超過許多,記憶體容量也更大,這意味著功能更強和程式碼有充足的容量。

所以寫這篇文也是為了凸顯軟體、硬體都有其價值,這正是為什麼「軟硬體共同設計」這個概念越來越受到重視。所以能用 MTDuino 這種高度整合解決方案的開發板與 Sensor Kit ,不是反倒經濟實惠嗎?

實際操作

這篇先來玩其中一個 Kit :將 MTDuino 與有 GPS 擴充板疊接好之後,我們挑選 GPS 、紫外光 UV 感測、大氣壓力這三項簡單的感測範例給試給大家瞧瞧。這裡說一下: SAMD21 的程式看起來跟一般 Arduino 很接近,不過眼尖的人可能一看就發現有些不一樣。

其實這些不一樣之處,就讓 SAMD21 比起一般的 Arduino 性能上有更顯著的表現。至於整個可以執行的版本也整理成可以下載的壓縮檔案了,當然你可以直接編譯後燒錄給 MTDuino 來執行。程式碼為壓縮檔案中的:mt_LB-M8Q104A\mt_LB-M8Q104A.ino

如果要執行這個範例,記得靠窗邊一點!最好可以連著筆電一起帶到戶外,如此一來 GPS 定位才容易成功。

程式碼執行後的畫面(圖片來源:賴桑提供)

範例解說

跟 GPS 在同一個擴充板上的紫外光 UV 感測、大氣壓力,分別採用了 Si1132 、 MS5607 這兩個晶片,其中 Si1132 的規格表看來,是具有光波段 Light Spectrum 效果,能透過 I2C 與它通訊的感測晶片。而 MS5607 的規格表看來,是個 Barometer ,也同樣可以透過 I2C 與它通訊。

至於 GPS 那就得透過我們所熟知的 Serial 來控制,不過等一下!別忘了 SAMD21 才是主角,一般 Arduino 會用 SoftwareSerial 這種透過 GPIO 模擬 Serial 的方式來控制,但這已落伍了! SAMD21 的規格表告訴我們,有個更簡單好用的方法: SERCOM 。

甚麼叫做 SERCOM 呢?其實 SERCOM 的原文全名叫做 Serial Communication Interfaces ,顧名思義,只要透過 SERCOM 的設定, SAMD21 可以直接利用內建的電路系統執行 I2C 、 SPI 、 Serial ,甚至目前汽車電子常見的控制器區域網路 CAN 的 LIN 規格, SAMD21 都能夠辦到!

但是…腳位是有限的啊,這怎麼讓 SERCOM 可以自由調節哪個腳位呢?由 Arduino 的 GitHub 中可以看到好幾個,其中一個就是 ArduinoCore-samd ;這個就是 MTDuino 的核心基礎!進入 ArduinoCore-samd 以後,你應該可以看到不少目錄跟檔案,這些就是 Arduino 原廠當時定義以 SAMD21 微控器開發設計為基礎的規格。

其中有一個目錄叫做 variants ,這又會有好幾個目錄,畢竟 SAMD21 這個 32 bits 微控器可是不少工業控制都在用的, Arduino 當然也有不少個產品系列用上這個微控器,其中 Arduino M0 Pro 現在產品線叫做 Zero ,我們就點進去吧!

參考SAMD21的接腳定義(圖片來源:賴桑提供)

Arduino-M0-Pro現在產品線叫做Zero(圖片來源:賴桑提供)

這一點進去後,又出現了幾個檔案,令我們比較好奇的是 variant.cpp 這個檔案,這個檔案裡面可定義了不少東西,其實就是腳位在電路板上的對應跟佈局 Layout 。

找到variant.cpp就是接腳的定義(圖片來源:賴桑提供)

variant.cpp下一開頭就是一堆接腳對應的表(圖片來源:賴桑提供)

MTDuino 可是比起 Arduino 原廠的設計功能,還多了 Sigfox 專用傳輸電路,當然,腳位也不一樣,邁特電子出廠 MTDuino 時有附自己的 variant.cpp 給大家參考。

關於 GPS 擴充版,目前腳位配置如下:

腳位 用途
Pin 7 GPS致能訊號
Pin 25(A1) GPS TX
Pin 26(A2) GPS RX

由 MTDuino 自己附的 variant.cpp 查到就是 PIN 25、26,也就是 SERCOM4 。

從邁特電子的variant.cpp可以看到PIN-25、26的對應,恰好就是SERCOM4(圖片來源:賴桑提供)

也因此,我們可以用 MTDuino 自定義所要的 Serial 去連結 GPS ;範例中透過 SERCOM4 自己定義了Serial3 ,而每一個 Serial 當然都要有一個 Handler 負責資料的收和發,這也就是 SERCOM4_Handler() 這個函數存在的用意。

自己定義了Serial3(圖片來源:賴桑提供)

接著在 setup() 這裡,只要每次程式一開始執行就利用 pinPeripheral() 函數,定義 UART 接腳功能,搞定,效能還比 SoftwareSerial 更高哩!畢竟這可是透過 SAMD21 微控器硬體本身的電路能辦到的喔!

下令一啟動就把PIN-25、26初始化為UART(圖片來源:賴桑提供)

小結

這次我們因為 MTDuino 多了個新夥伴 SAMD21 這個 32 bits 功能強大的微控器晶片,同時還因為 SAMD21 的關係讓大家看到,只要有心, Arduino 的功能其實可以更上一層樓。

分享到社群

vMaker編輯部

vMaker公用帳號,歡迎各界朋友投稿你的maker故事,不論是個人作品、創客觀點或是創客的經驗分享,我們都十分期待能聽到您的分享。 投稿請至:contact@vmaker.tw