跳至主要内容

從感測器觸發水果品質檢測

本課程的手繪筆記概述

手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看大圖。

課前測驗

課前測驗

簡介

物聯網應用程序不僅僅是單一設備捕獲數據並將其發送到雲端,更多時候是多個設備一起工作,使用感測器從物理世界捕獲數據,根據這些數據做出決策,並通過執行器或可視化與物理世界進行交互。

在本課程中,您將學習如何架構複雜的物聯網應用程序,結合多個感測器、多個雲服務來分析和存儲數據,並通過執行器顯示響應。您將學習如何架構一個水果品質控制系統原型,包括使用接近感測器觸發物聯網應用程序,以及該原型的架構。

在本課程中,我們將涵蓋:

🗑 這是本項目中的最後一課,因此在完成本課程和作業後,不要忘記清理您的雲服務。您將需要這些服務來完成作業,因此請確保先完成作業。

如有需要,請參考清理項目指南以獲取相關指示。

架構複雜的物聯網應用程序

物聯網應用程序由許多組件組成。這包括各種事物和各種互聯網服務。

物聯網應用程序可以描述為事物(設備)發送數據生成洞察。這些洞察生成行動以改進業務或流程。例如,一個引擎(事物)發送溫度數據。這些數據用於評估引擎是否按預期運行(洞察)。洞察用於主動優先安排引擎的維護計劃(行動)。

  • 不同的事物收集不同的數據。
  • 物聯網服務提供對這些數據的洞察,有時會用來自其他來源的數據進行增強。
  • 這些洞察驅動行動,包括控制設備中的執行器或可視化數據。

參考物聯網架構

參考物聯網架構

上圖顯示了一個參考物聯網架構。

🎓 參考架構是一個示例架構,您可以在設計新系統時參考。在這種情況下,如果您正在構建一個新的物聯網系統,您可以遵循參考架構,適當地替換您自己的設備和服務。

  • 事物是從感測器收集數據的設備,可能與邊緣服務交互以解釋這些數據,例如用於解釋圖像數據的圖像分類器。設備的數據被發送到物聯網服務。
  • 洞察來自無伺服器應用程序,或來自對存儲數據的分析。
  • 行動可以是發送給設備的命令,或是允許人類做出決策的數據可視化。

參考物聯網架構

上圖顯示了這些課程中涵蓋的一些組件和服務,以及它們如何在參考物聯網架構中鏈接在一起。

  • 事物 - 您已經編寫了設備代碼來捕獲感測器數據,並使用自定義視覺在雲端和邊緣設備上分析圖像。這些數據被發送到物聯網中心。
  • 洞察 - 您已經使用 Azure Functions 來響應發送到物聯網中心的消息,並將數據存儲在 Azure Storage 中以供稍後分析。
  • 行動 - 您已經根據雲端做出的決策和發送給設備的命令控制了執行器,並使用 Azure Maps 可視化數據。

✅ 想一想您使用過的其他物聯網設備,例如智能家居設備。該設備及其軟件涉及哪些事物、洞察和行動?

這種模式可以根據需要擴展到大或小,添加更多的設備和更多的服務。

數據和安全

在定義系統架構時,您需要不斷考慮數據和安全。

  • 您的設備發送和接收哪些數據?
  • 如何保護和保護這些數據?
  • 如何控制對設備和雲服務的訪問?

✅ 想一想您擁有的任何物聯網設備的數據安全性。這些數據中有多少是個人數據,應該在傳輸過程中或存儲時保持私密?哪些數據不應該存儲?

設計水果品質控制系統

現在讓我們將事物、洞察和行動的概念應用到我們的水果品質檢測器中,設計一個更大的端到端應用程序。

想像一下,您被賦予了在加工廠中構建水果品質檢測器的任務。水果在傳送帶系統上運行,目前員工花時間手工檢查水果並在到達時移除任何未成熟的水果。為了降低成本,工廠老闆希望有一個自動化系統。

✅ 隨著物聯網(以及技術總體上)的興起,手工工作被機器取代是一個趨勢。做一些研究:估計有多少工作會因物聯網而消失?有多少新工作會因構建物聯網設備而創造?

您需要構建一個系統,當水果到達傳送帶時檢測到它,然後拍照並使用在邊緣運行的 AI 模型進行檢查。結果然後發送到雲端存儲,如果水果未成熟,則發出通知以便移除未成熟的水果。

事物檢測水果到達傳送帶的檢測器
拍照並分類水果的相機
運行分類器的邊緣設備
通知未成熟水果的設備
洞察決定檢查水果的成熟度
存儲成熟度分類的結果
確定是否需要警報未成熟水果
行動發送命令給設備拍照並使用圖像分類器檢查
發送命令給設備警報水果未成熟

原型設計您的應用程序

水果品質檢查的參考物聯網架構

上圖顯示了此原型應用程序的參考架構。

  • 一個帶有接近感測器的物聯網設備檢測到水果的到來。這會向雲端發送一條消息,表示檢測到水果。
  • 雲端中的無伺服器應用程序向另一個設備發送命令,拍照並分類圖像。
  • 一個帶有相機的物聯網設備拍照並將其發送到在邊緣運行的圖像分類器。結果然後發送到雲端。
  • 雲端中的無伺服器應用程序存儲此信息,以便稍後分析未成熟水果的百分比。如果水果未成熟,它會向另一個帶有 LED 的物聯網設備發送命令,警告工廠工人有未成熟的水果。

💁 整個物聯網應用程序可以作為單一設備實現,所有啟動圖像分類和控制 LED 的邏輯都內置在內。它可以使用物聯網中心僅跟踪檢測到的未成熟水果數量並配置設備。在本課程中,它被擴展以演示大規模物聯網應用程序的概念。

對於原型,您將在單一設備上實現所有這些。如果您使用的是微控制器,則需要使用單獨的邊緣設備來運行圖像分類器。您已經學習了構建此應用程序所需的大部分內容。

從感測器觸發水果品質檢查

物聯網設備需要某種觸發器來指示水果何時準備好進行分類。一個觸發器可以是通過測量到感測器的距離來測量水果在傳送帶上的正確位置。

接近感測器發送激光束到香蕉等物體並計算光束反射回來的時間

接近感測器可以用來測量從感測器到物體的距離。它們通常發送一束電磁輻射,例如激光束或紅外光,然後檢測反射回來的輻射。從激光束發送到信號反射回來的時間可以用來計算到感測器的距離。

💁 您可能在不知不覺中使用過接近感測器。大多數智能手機在您將其靠近耳朵時會關閉屏幕,以防止您用耳垂意外結束通話,這是通過接近感測器實現的,檢測到通話期間屏幕附近有物體並禁用觸摸功能,直到手機距離一定距離。

任務 - 從距離感測器觸發水果品質檢測

按照相關指南,使用您的物聯網設備使用接近感測器檢測物體:

用於水果品質檢測器的數據

原型水果檢測器有多個組件相互通信。

組件之間的通信

  • 接近感測器測量到水果的距離並將其發送到物聯網中心
  • 從物聯網中心到相機設備的控制相機的命令
  • 圖像分類的結果被發送到物聯網中心
  • 從物聯網中心到帶有 LED 的設備的控制 LED 的命令,以在水果未成熟時發出警報

在構建應用程序之前,最好先定義這些消息的結構。

💁 幾乎每個有經驗的開發人員在其職業生涯中的某個時刻都花費了數小時、數天甚至數週來追蹤由於發送的數據與預期數據之間的差異而引起的錯誤。

例如 - 如果您正在發送溫度信息,您將如何定義 JSON?您可以有一個名為 temperature 的字段,或者您可以使用常見的縮寫 temp

{
"temperature": 20.7
}

compared to:

{
"temp": 20.7
}

您還必須考慮單位 - 溫度是以°C還是°F表示?如果您使用消費設備測量溫度並更改顯示單位,則需要確保發送到雲端的單位保持一致。

✅ 做一些研究:單位問題如何導致價值1.25億美元的火星氣候探測器墜毀?

考慮一下為水果品質檢測器發送的數據。您將如何定義每條消息?您會在哪裡分析數據並決定要發送哪些數據?

例如 - 使用接近感測器觸發圖像分類。物聯網設備測量距離,但決策在哪裡做出?設備是否決定水果足夠接近並發送消息告訴物聯網中心觸發分類?還是它發送接近測量值並讓物聯網中心決定?

這類問題的答案是 - 視情況而定。每個用例都不同,這就是為什麼作為物聯網開發人員,您需要了解您正在構建的系統,它是如何使用的以及檢測到的數據。

  • 如果決策由物聯網中心做出,您需要發送多個距離測量值。
  • 如果您發送太多消息,會增加物聯網中心的成本,以及物聯網設備所需的帶寬(尤其是在擁有數百萬設備的工廠中)。它還可能會減慢您的設備速度。
  • 如果您在設備上做出決策,您需要提供一種方法來配置設備以微調機器。

使用開發者設備模擬多個物聯網設備

要構建您的原型,您需要讓您的物聯網開發套件像多個設備一樣運行,發送遙測數據並響應命令。

在樹莓派或虛擬物聯網硬件上模擬多個物聯網設備

使用像樹莓派這樣的單板電腦時,您可以同時運行多個應用程序。這意味著您可以通過創建多個應用程序來模擬多個物聯網設備,每個應用程序對應一個“物聯網設備”。例如,您可以將每個設備實現為單獨的Python文件並在不同的終端會話中運行它們。

💁 請注意,某些硬件在同時被多個應用程序訪問時無法正常工作。

在微控制器上模擬多個設備

在微控制器上模擬多個設備更為複雜。與單板電腦不同,您無法同時運行多個應用程序,您必須在單個應用程序中包含所有獨立物聯網設備的邏輯。

一些使這個過程更容易的建議是:

  • 為每個物聯網設備創建一個或多個類 - 例如名為DistanceSensorClassifierCameraLEDController的類。每個類可以有自己的setuploop方法,由主setuploop函數調用。
  • 在一個地方處理命令,並根據需要將它們定向到相關的設備類。
  • 在主loop函數中,您需要考慮每個不同設備的時間。例如,如果您有一個設備類需要每10秒處理一次,另一個需要每1秒處理一次,那麼在您的主loop函數中使用1秒延遲。每次loop調用觸發需要每秒處理一次的設備的相關代碼,並使用計數器來計算每次循環,當計數器達到10時處理另一個設備(然後重置計數器)。

移動到生產

原型將構成最終生產系統的基礎。當您移動到生產時,一些差異將是:

  • 堅固的組件 - 使用設計用於承受工廠噪音、熱量、振動和壓力的硬件。
  • 使用內部通信 - 一些組件將直接通信,避免跳到雲端,只將數據發送到雲端存儲。這取決於工廠設置,可以是直接通信,也可以通過使用網關設備在邊緣運行部分物聯網服務。
  • 配置選項 - 每個工廠和用例都不同,因此硬件需要可配置。例如,接近感測器可能需要在不同距離檢測不同的水果。與其硬編碼觸發分類的距離,您希望這可以通過雲端配置,例如使用設備雙胞胎
  • 自動水果移除 - 而不是用LED警告水果未成熟,自動設備將其移除。

✅ 做一些研究:生產設備與開發者套件在其他方面有何不同?


🚀 挑戰

在本課程中,您已經學習了一些有關如何架構物聯網系統的概念。回想一下之前的項目。它們如何適應上面顯示的參考架構?

選擇一個到目前為止的項目,並考慮設計一個更複雜的解決方案,將多個功能結合在一起,超出項目中涵蓋的內容。繪製架構並考慮所有需要的設備和服務。

例如 - 一個結合GPS和傳感器的車輛跟踪設備,用於監控冷藏卡車中的溫度、發動機開關時間和駕駛員身份。涉及哪些設備,涉及哪些服務,傳輸的數據以及安全和隱私考慮?

課後測驗

課後測驗

回顧與自學

💁 幾乎每個有經驗的開發人員在其職業生涯中的某個時候都花費了數小時、數天甚至數週來追蹤由於發送的數據與預期的數據之間的差異引起的錯誤。

例如 - 如果您正在發送溫度信息,您將如何定義 JSON?您可以有一個名為 temperature 的字段,或者您可以使用常見的縮寫 temp