17. 物聯網案例 08: 智能交通燈

程度: level

* 詳情參考 附錄:物件與物件間的溝通

  • 本案例分為兩部分:發送者及接收者。要完成這案例,需要兩套組裝。 auto_fit

17.1. 發送者


17.1.1. 目標


製作一個可以向其他設備反映該地區有沒有塞車的系統。

17.1.2. 背景


如何向其他 micro:bit 傳送訊號?

發送者和接收者連接至同一個頻道,容許 Wi-Fi 訊號在之間傳遞。當發送者發出”trafficjam”,接收者會因應訊號作出反應。

發出者運作原理

當光度傳感器長期回饋過低數值,這代表有車停在此處,即公路上有塞車發生。發送者傳送”trafficjam”至 microbit。反之則發送”nojam”。

auto_fit

17.1.3. 所有部件


auto_fit

17.1.4. 線路連接


  • 連接光度傳感器和 IoT:bit 的 P0 端口。

    auto_fit

*注意

  1. 根據顏色連接接線和端口

  2. P0 內建線路予蜂鳴器。在使用 P0 端口予其他外接設備時遇上問題,建議查看位於 IoT:bit 右上的蜂鳴器開關狀態

17.1.5. 編程 (MakeCode)


步驟一. 啟動 OLED,IoT:bit 和連接至 Wi-Fi

  • 啟動 OLED,IoT:bit 和連接至 Wi-Fi

  • 宣告新變數light2並設值為 0 auto_fit

步驟二. 在連接至 Wi-Fi 後顯示剔號

pic_60

步驟三. 檢查交通狀況

  • 在「重復無限次」加入”如果…那麼”並以WiFi connected?為前設

  • light2取得光傳感器數值接口 P0

  • 清除顯示

  • 新行顯示”字串組合 Light: light2

  • 等待 6 秒 auto_fit

步驟四. 當交通擠塞發出提示

  • 在邏輯內加入新”如果…那麼”,以”ligh12 < 10”為前設

  • 在 「如果…那麼」 裡面添加 Wifi Sender send Channel的訊息,分別依照交通情況來傳送 『trafficjam』 或 『nojam』 auto_fit

完整答案

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

你可以在以下網頁下載HEX檔案

17.1.6. 結果


光度傳感器用以偵測有沒有出現塞車。當光度正常, 「nojam」 會被送出。

auto_fit

當光度過低, 「trafficjam」 會被送出。

auto_fit

17.1.7. 思考


Q1. 我們可以用超音波距離傳感器偵測有否塞車嗎?

17.2. 接收者


17.2.1. 目標


製作一個能接收訊號並控制交通燈的交通系統。

17.2.2. 背景


如何接收另一個 micro:bit 的訊號?

讓發送者和接收者連接至同一個頻道。然後讀取訊息。

接收者運作原理

當收到”trafficjam”訊號,代表有塞車狀況出現。交通燈會轉為紅色。反之則會維持綠色。

auto_fit

17.2.3. 所用物資


auto_fit

17.2.4. 組裝步驟


步驟一

用 M4*10毫米螺絲及螺母把交通燈組裝到 G1 模型上。組裝 G1 和 G2。

auto_fit

步驟二

組裝完成!

auto_fit

17.2.5. 線路連接


  • 連接交通燈和 IoT:bit 的 P0 端口

    auto_fit

*注意:

  1. 根據顏色連接接線和端口

  2. P0 內建線路予蜂鳴器。在使用 P0 端口予其他外接設備時遇上問題,建議查 看位於 IoT:bit 右上的蜂鳴器開關狀態

17.2.6. 編程 (MakeCode)


步驟一. 啟動 OLED,IoT:bit 連接至 Wi-Fi

  • 啟動 OLED,IoT:bit 和連接至 Wi-Fi

  • 宣告新變數oldmsg為” “。 auto_fit

步驟二. 加入”tsuenwan”頻道

  • 在”當WiFi連接後”加入剔號和”加入到頻道tsuenwanauto_fit

步驟三. 接收 Wi-Fi 訊息

  • 在”當從頻道收到訊息”加入清除顯示

  • 新行顯示 ”字串組合”訊息: receivedmessage”」」 pic_70

步驟四. 宣告新函式(TurnRed)

  • TurnRed函式中加入Control traffic light at P1

  • 等待兩秒

  • 轉顏色為黃色,等待兩秒

  • 轉顏色為紅,等待兩秒 auto_fit

步驟五. 宣告新函式(TurnGreen)

  • TurnGreen函式中加入”Control traffic light at P1”

  • 轉為紅色,等待兩秒

  • 轉為黃色,等待兩秒

  • 轉為綠色,等待兩秒 auto_fit

步驟六. 設定交通燈初始狀態

  • 在「當啟動時」加入TurnGreen pic_60

步驟七. 轉變交通燈狀態

  • On WiFi Receiver received加入”如果…那麼”

  • “receivedMessage ≠ oldmsg”為前設

  • 設”oldmsg” = receivedMessage

  • 在邏輯裏加入”如果…那麼”,”receivedMessage = trafficjam”為前設

  • 呼叫TurnRed

  • 將“receivedMessage = nojam”設為否則前設

  • 在否則內呼叫TurnGreen auto_fit

完整答案

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

你可以在以下網頁下載HEX檔案:

17.2.7. 結果


交通燈會根據 Wi-Fi 訊息轉變顏色。

  • 如接收到”nojam”,燈會轉綠。

  • 如接收到”trafficjam”,燈會轉紅。

    auto_fit

17.2.8. 思考


Q1. 試就顏色添加音效?

Q2. 如果我們不加入邏輯檢查新舊訊息,會發生甚麼?