跳到主要內容區

【輕鬆堆疊】MTDuino+Sensor kit上機實作

報導日期: 2019-05-30 瀏覽人數: 951

【輕鬆堆疊】MTDuino+Sensor kit上機實作

作者:賴桑

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

 

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

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

Sensor Kit:BLE + 溫濕度感測 + 三軸加速度計

Sensor Kit:BLE + 溫濕度感測 + 三軸加速度計
 

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

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

Sensor Kit:GPS + 大氣壓力 + UV 感測 + 環境光感

Sensor Kit:GPS + 大氣壓力 + UV 感測 + 環境光感
 

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

把 MTDuino 疊接擴充板的方法,只要腳位一對一插上去就好

把 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 的規格表 (另開新視窗下載PDF檔)看來,是具有光波段 Light Spectrum 效果,能透過 I2C 與它通訊的感測晶片。而 MS5607 的規格表(另開新視窗下載PDF檔)看來,是個 Barometer,也同樣可以透過 I2C 與它通訊。

至於 GPS 那就得透過我們所熟知的 Serial 來控制,不過等一下!別忘了 SAMD21 才是主角,一般 Arduino 會用 SoftwareSerial 這種透過 GPIO 模擬 Serial 的方式來控制,但這已落伍了!SAMD21 的規格表 (另開新視窗下載PDF檔)告訴我們,有個更簡單好用的方法: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的接腳定義

參考SAMD21的接腳定義
 

Arduino-M0-Pro 現在產品線叫做 Zero

Arduino-M0-Pro 現在產品線叫做 Zero
 

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

找到 variant.cpp 就是接腳的定義

找到 variant.cpp 就是接腳的定義
 

variant.cpp 下一開頭就是一堆接腳對應的表

variant.cpp 下一開頭就是一堆接腳對應的表
 

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

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

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

從邁特電子的 variant.cpp 可以看到 PIN-25、26 的對應,恰好就是 SERCOM4

從邁特電子的 variant.cpp 可以看到 PIN-25、26 的對應,恰好就是 SERCOM4
 

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

自己定義了 Serial3 ​

自己定義了 Serial3
 

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

下令一啟動就把 PIN-25、26初始化為 UART

下令一啟動就把 PIN-25、26初始化為 UART
 

小結

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

 

(本文轉載自MakerPRO (另開新視窗)原文連結 (另開新視窗);責任編輯:葉佳錚)