11. 案例 08:智能太陽檢測窗簾

難度:level auto_fit

11.1. 目標


製作一個會偵測屋外陽光並自動開關的智能太陽檢測窗簾。

11.2. 背景


甚麼是智能太陽檢測窗簾?

智能太陽檢測窗簾會根據偵測到的陽光量自動收起或放下來。

運作原理

在屋外安裝一個光度傳感器,當它偵測到強光(Light > 70)時,代表會有陽光照射到房屋。 於是窗簾會放下來,以減少熱能傳導到屋內。如此一來可以減少能量損失,並節省空調的能源。

auto_fit

11.3. 重點知識

在這個案例的編程部分,會運用到一個「flag」的概念。這是用來檢查窗簾是否已經放了下來,避免繼續放下窗簾。

11.4. 所用部件


pic_90

11.5. 組裝步驟


步驟一

這個案例以「大房子模型」作為基礎。

auto_fit

步驟二

用縲絲批將窗簾鐵杆安裝到360ᵒ舵機上,以製作窗簾。

pic_90

步驟三

將窗簾紙布剪成 8cm*8cm 的正方形。

pic_90

步驟四

用膠水將剪好的紙布黏在窗簾鐵杆上。

pic_90

步驟五

把萬用黏土膠搓成長條。

pic_90

步驟六

將捏好的萬用黏土膠黏在窗簾的底部。

pic_90

步驟七

用 M2*10 毫米螺絲及螺母把製作好的窗簾 (舵機) 安裝到 B1 模型上。

pic_90

步驟八

蓋上 B1 和 C1 模型。

pic_90

步驟九

用 M4*10 毫米螺絲及螺母把光度傳感器安裝到 C1 模型上。

pic_90

步驟十

組裝完成!

pic_90

11.6. 線路連接


  1. 連接光度傳感器到 P1 端口

  2. 連接360ᵒ舵機到 P2 端口 pic_80

11.7. 編程(MakeCode)


步驟一. 初始化 OLED顯示屏並建立變數

  • OLED 初始化 寬128 高64加入到當啟動時,以啟動 OLED 顯示屏

  • 建立變數curtainOn,並將其設為false auto_fit

步驟二. 建立窗簾控制函式「openCurtain」

  • 建立函式openCurtain

  • 在函式裡,控制連接端口上的 360°舵機的速度和方向,例如轉動360度舵機以順時針方向速度高接口 P2

  • 加入暫停讓它有幾秒鐘的時間轉動 (取決於您設定的速度)

  • 用同樣方式停止 360°舵機,例如轉動360度舵機以順時針方向速度停止接口 P2

  • 將變數curtainOn設為true pic_80

步驟三. 建立窗簾控制函式「closeCurtain」

  • 建立函式 closeCurtain

  • 這個函式與上一個函式相似,但方向和狀態相反

  • 控制連接端口上的 360°舵機的速度和方向,例如轉動360度舵機以逆時針方向速度高接口 P2

  • 加入暫停讓它有幾秒鐘的時間轉動 (取決於您設定的速度)

  • 用同樣方式停止 360°舵機,例如轉動360度舵機以逆時針方向速度停止接口 P2

  • 將變數curtainOn設為false pic_80

步驟四. 取得光度數值

  • 重複無限次中,用變數 light 設為取得光度傳感器數值接口 P1

  • 透過清除顯示在每次刷新前先清除顯示

  • 顯示數字 light在顯示屏上顯示數值 pic_90

步驟五. 檢查光度數值並作出反應

  • 重複無限次加入一個巢狀的如果語句

  • 將第一個條件設為light 70 curtainOn = true

  • 第一個 If 段代表陽光較強,需關掉窗簾,所以加入呼叫closeCurtain

  • 將第二個條件設為light < 40 curtainOn = false

  • 第二個 If 段代表陽光較弱,需打開窗簾,所以加入呼叫openCurtain pic_90

完整答案

MakeCode: https://makecode.microbit.org/_d184i0bPygjJ

你可以從以下網頁中下載HEX檔案:

11.8. 結果


當光度傳感器感測到屋外的光度較強時,舵機會轉動放下窗簾。而當光度不強時,舵機會反方向轉動,收起窗簾。

auto_fit

11.9. 思考


Q1. 除了陽光量之外,還有什麼條件可以用來決定收起還是放下窗簾呢?