• Elvis Tsang

MODI 物聯網入門應用 (5):智能開關

每當提到物聯網、智能家居等關鍵詞,其中一個最常見的就是智能燈光、開關等用作控制家中電器。市面上亦有很多類似的產品,無論是機械式開關控制還是電子式。本文將會介紹如何使用 MODI 模組化電子積木平台 製作一個簡單的機械式智能開關,用以控制各種標準的燈光或電器開關。


我們設計智能開關,其中一個必不可缺的元素就是智能化。市面上很多產品都是使用手機應用程式來控制,我們今次會嘗試一個不同的方向,以拍手聲控的形式來控制開關。另外由於我們不能直接控制電器的電路,所以只能使用機械系統來控制燈光或電器本身已經有的開關。下圖是我們完成品的示意圖,可以給大家一個概念我們將會如何控制開關。

以上示意圖僅供參考,一切以實際產品為準

我們今次需要以下模組來實現上述功能:

  1. 傳聲器模組 (Microphone Module) - 量度音量和頻率

  2. 電機模組 (Motor Module) - 控制開關

  3. 電機控制模組 (Motor Control Module) - 控制電機

  4. 電源模組 (Battery Module) - 提供電源

  5. 網絡模組 (Network Module) - 連接電腦和手機App以及用以編程

傳聲器模組 (Microphone Module) 可以量度聲音的音量和頻率,因此我們可以用來判定是否有拍手聲。一般來說,低沉的拍手聲音的頻率相對集中在 200 - 400Hz 之間,所以如果傳聲器模組量度到這個頻率範圍的音量足夠高的話,可以認為是有拍手聲。


除了以上的模組外,我們還需要一個連接在電機模組的連接件用於按下開關按扭,這個部件可以透過 3D 打印或者其他方式自制,只要能夠安裝上電機軸而且能夠按下開關即可。


將所有模組連接好後,將網絡模組 (Network Module) 連接到電腦並打開 MODI Studio。


由於傳聲器模組對頻率的感應範圍是 50 - 400Hz,所以如果檢測到的頻率是 200Hz 以上已經代表符合我們的條件。我們在這個例子中假設拍手時的音量達到傳聲器模組量度上限的 50% 或以上,實際數字需要透過實驗來獲取。此外,我們利用一個名為 state 的變量 (Variable) 來代表現時開關需要開啟或關閉,state = 0 代表關閉而 state = 1 代表開啟。所以每次拍手時,state 的數值應該在 1 和 0 之間變換,這部分的代碼可以依照下圖實現:

值得注意的是,所有變量的初始數值都是 0,所以電機的初始位置應該是關閉開關的角度。

MODI 電機模組可以由 0 至 280度之間轉動,而它的初始位置為 0 度,或者 0%。我們假設電機需要轉動 12.5% (即35度) 才可以開啟開關,而轉回 0% 時則會關閉。我們利用另一個變量 - target_angle 來計算實際需要的角度對應的百分比。由於 state = 1 時,target_angle 應該是 12.5,而state = 0 時,target_angle 則是 0。所以我們可以用以下方式計算 target_angle 並控制電機的角度:

完成後點擊 "Upload" 即可上傳代碼到 MODI 模組。


除了本文所提到的聲控開關,我們還可以透過其他 MODI 模組實現不同的智能控制方式,有興趣的可以自行研究如何實現以下幾種不同的控制方法:

  1. 運動感應-當系統感應到有人在某個範圍內活動時即自動打開/關上開關,可應用在燈光控制

  2. 溫度感應-當溫度高於或低於某個數值時自動打開/關上開關,可應用在風扇或冷氣控制

  3. 無線按鈕-當有人按下連接到另一個網絡模組的按鈕後,無線控制電機打開/關上開關。