資料介紹
描述
抽象的
辦公室、餐廳、圖書館有許多共享工作空間。人們來來去去。在這次 COVID-19 大流行中,我們需要確保這些工作空間在其他人來使用它們之前是清潔和消毒的。該項目將應用 AWS IOT 技術和 H/W M5Stack CORE2 for AWS 來控制機器人在人們離開工作區后噴灑酒精并用 UV-C 燈清潔地板。
項目描述
我們計劃建造一個小型機器人,它可以噴灑微滴酒精,同時機器人會攜帶紫外線消毒器,以確保工作空間的清潔和安全。用戶通過掃描餐桌上的二維碼開始使用工作區,完成后只需按下移動 Web 上的“完成”按鈕。AWS IOT 將計算使用持續時間并命令機器人開始使用 UV-C 射線和酒精噴霧進行清潔。同時,此用法將保留在 Dynamo DB 中。如果感染了 COVID-19 的人以前使用過此工作區,此數據庫將用于歷史跟蹤。
(注意***我們計劃使用 PIR 傳感器來檢測人來并使用 Alexa 來獲取用戶的姓名。但是 PIR 傳感器非常不可靠,用戶需要一直坐在桌旁,這不實用。對于 Alexa , 沒有簡單的方法將語音轉換為文本。由于時間限制,我們選擇將解決方案與建議的解決方案稍微改變一下。)
系統架構
這個項目有兩個部分。
1)客戶端,使用M5 stack Core 2來控制所有機器人的動作,如前進、后退、左右轉、噴酒精和控制紫外線。檢查所有傳感器以防止與物體碰撞和跌倒檢測。當用戶使用完工作區后,該機器人將由 AWS IOT 控制。AWS IOT 會將工作區占用標志更新為 false(意味著工作區現在可用) CORE2 將更新使用時間并開始機器人清潔。完成清潔后,機器人將停止工作,工作空間可供下一個人使用。
2)服務器端使用AWS上的一些服務。用戶開始掃描桌面上顯示的二維碼注冊姓名。該網站是一個簡單的靜態網站,存儲在 Amazon S3 AWS 上。當用戶按下注冊按鈕時,javascript會將信息傳遞給存儲在API網關上的Restful API。API 網關將調用 AWS lambda 在 AWS IOT 上更新設備或獲取設備影子的設備狀態。AWS IOT 更新工作區和機器人的狀態,并在用戶使用完工作區后發布到 Dynamo DB。
我們可以用下圖總結所有活動
先決條件
因為這個項目需要很多技術的基礎。通過完成以下教程,您應該熟悉這些技術。
- AWS 服務(S3、API 網關、Lampda、AWS IOT)您可能需要查看每項服務的教程。這些 AWS 服務的 Google 教程。
- 熟悉platformIO和Core2forAWS的開發環境。轉到https://edukit.workshop.aws/en/getting-started.html以獲取教程,按照說明直到主題 3 智能恒溫器。這將確保您可以連接到 AWS 服務并通過所有安全檢查。我們的項目是從這個項目擴展而來的。
- 從 S3 -> API-> Lampda->AWS IOT 的應用流程。本教程對于讓您了解每個 AWS 服務之間的流程非常有用。https://iot-esp32.workshop.aws/en/module3.html項目實施
硬件實現
對于硬件構建,我們需要添加額外的兩個 M5stack 模塊(M5Stack DC Motor 和 M5Stack Proto)DC 電機模塊帶有四個用于樂高電機的連接器,非常適合我們的快速原型。我們使用原型模塊將 CORE2 總線連接到 14 針插座。這些模塊可以按順序堆疊,但要注意堆疊的順序
Core 2 --> Proto --> DC Motor --> M5GO2(自帶core2)
************************************使用 < > 查看更多圖片 ********* ************************
我們在這個項目中使用的端口是
- 用于 UV-C LED 的 GPIO32
- GPIO27 酒精噴霧
- 用于紅外傳感器的 GPIO13、GPIO36
- GPIO 33、26 用于跌倒檢測
- 用于 PIR 的 GPIO 19
- GPIO3、GPIO1、GPIO35(未使用)
- 5V引腳
- 3V引腳
- 接地引腳
在 Core2 上使用 GPIO 對我來說非常棘手。您需要考慮許多限制。這是我可以從數據表中收集的一些信息。
- 應避免使用這些端口 GPIO1、GPIO3、GPIO12、GPIO15,因為它們可能用于調試和閃存。
- 端口 34 - 39 只能用于 I/P,沒有上拉/下拉
- 端口不是 5V 容差,這意味著如果您的傳感器是 5V 傳感器類型,您需要使用電平轉換器。并且某些電平轉換器無法正常工作,如果您想避免出現問題,請確保購買優質的。
對于電平轉換器,我將它放在一個單獨的盒子中,其中包括 PIR 傳感器、繼電器模塊以及傳感器和外圍設備的所有連接,如圖所示。
有兩個設備需要兩個繼電器來打開/關閉。因為我們使用在市場上銷售的商業廣告。需要進行一些修改。
酒精噴霧
我們使用便攜式酒精噴霧,只需 2 美元即可輕松購買。本設備配有內置電池。我們只是從按鈕開關并聯到我們的插座,如圖所示。
UV-C LED
請注意,并非所有的紫外線都能殺死病毒。您需要使用比普通 UV Led 更昂貴的 UV-C 產品。UV-C 對眼睛和皮膚有危險。請確保您在實驗過程中不要暴露在這種光線下。我買了手機UV-C盒子,取出UV-C模塊。對于這個模塊,我需要連接外部電池(1x 18650 Battery 3.7V)因為電池在盒子里太大了。如圖所示,我從啟動開關到插座并聯接線。
電池盒
核心 2 無法為兩個電機提供足夠的電力。我們需要一個單獨的電池來驅動直流電機。我為 2x 18650 選擇電池盒。這將連接到直流電機模塊。您必須使用 3.7 V 的電池來驅動 UV-C 模塊。我沒有這個的照片。您可以選擇任何您喜歡的電池盒。
機器人框架
因為我們使用樂高電機,所以我選擇使用樂高構建機器人框架。如果你不是樂高迷。您可以根據可用的材料和想象力選擇任何電機和框架。這是我使用樂高的機器人框架的圖片。
傳感器
在這個項目中使用了四個傳感器,兩個在前面用于跌倒檢測和碰撞檢測,另外兩個在后面。我使用兩種不同類型的紅外傳感器進行跌倒檢測和碰撞。如圖所示。
使其與樂高兼容。我把樂高板貼在傳感器的背面。對于這個技巧,您可以使用小塑料蓋作為盒子的家用電燈開關。
完成所有接線并安裝所有傳感器、組件。這是消毒機器人的最終說明。
軟件實施
軟件實現有很多部分。了解更多概念。您可能需要開始學習這兩個教程
- 了解有關此項目中使用的 AWS IOT 概念和工具的更多信息。
https://iot-esp32.workshop.aws/en/introduction.html
- 了解有關許多 AWS 服務流程的更多信息。
https://iot-esp32.workshop.aws/en/module3.html
更完整的源碼請到github https://github.com/wtos03/HealthySpaces
我將僅提取一些代碼片段以進行解釋。
網頁
該頁面將用于注冊工作區,如下圖所示
用戶開始選擇注冊地點。此選項菜單將幫助將名稱轉換為 AWS IOT 中使用的事物名稱。
<select name="roomNames" >
<option value="0123a8024945e75c01"> Binary Roomoption>
<option value="TT"> Analog Roomoption>
select>
用戶輸入姓名并按注冊按鈕后。網頁將發布帶有 Jason 格式數據的請求(工作空間狀態的名稱和 wsOccupancy 標志)以預定義 Web API 影子狀態(參見 url:下面)
$("#register").click(function(event){
currentvalue = document.getElementById('register').innerHTML;
yourName = document.getElementById('name').value;
// trying to add the value from text box
thingName = document.getElementById("roomNames").value;
console.log(thingName);
var mydata={"action":"on","wsOccupancy":true,"userName":yourName, "thingname":thingName};
console.log(mydata);
document.getElementById("status").innerHTML= `Workspace Usage : ${yourName}`;
document.getElementById("status").setAttribute("class","button is-rounded is-large is-fullwidth is-loading");
$.ajax( {
type: 'POST',
url:'https://u2gtqb6j39.execute-api.us-west-2.amazonaws.com/Dev/shadow-state',
contentType: 'application/json',
crossDomain: true,
processData: false,
dataType: "json",
data: JSON.stringify(mydata),
success:function(data) {
console.log(" on success");
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
},
error:function(data) {
console.log(" on fail;");
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
}
});
});
如果用戶按下 Finished 按鈕,wsOccupancy 標志將設置為 false 并發布到與注冊過程相同的 API。
如果用戶按下 Occupy 按鈕來檢查 Workspace 的狀態,網頁將向預定義的 Web API 影子狀態發送獲取請求。此 API 將返回可用或已占用的工作區狀態。
$("#status").click(function(event){
console.log("Checking Workspace status");
//check the status of Shadow
// thingName = "ESP32"
thingName = document.getElementById("roomNames").value;
console.log(`thingname=${thingName}`);
$.ajax( {
type: 'GET',
url:'https://u2gtqb6j39.execute-api.us-west-2.amazonaws.com/Dev/shadow-state',
contentType: 'application/json',
crossDomain: true,
processData: false,
dataType: "json",
data: `thingname=${thingName}`,
success:function(data) {
console.log("success");
console.log(data.status);
document.getElementById("status").innerHTML=data.status;
if (data.status == "Available" )
{
document.getElementById("status").setAttribute("class","button is-success is-rounded is-large is-fullwidth");
}
else{
document.getElementById("status").setAttribute("class","button is-danger is-rounded is-large is-fullwidth");
}
},
error:function(data) {
console.log("error");
}
});
});
靜態網頁的優點是您可以在任何支持Javascript的網絡瀏覽器下在本地網頁上運行它。無需 Web 服務器托管此服務。但是要分享這個網頁,我們可以上傳到 S3 存儲桶并將它們標記為靜態網頁。通過將此文件 (index.html) 上傳到 S3 存儲桶并啟用為靜態網站托管。定義公共訪問權限或僅特定組的權限。并復制 Bucket 網站端點以在網頁上使用。在這個例子中是
http://cleanws.com.s3-website-us-west-2.amazonaws.com
我們可以翻譯此 URL 以創建 QR 碼或放入 NFC 標簽,以供人們來到工作區時訪問。
蘭普達功能
在創建 API 網關之前,我們需要先創建 Lampda。因為 API 需要 Lampda 函數名指向。
我們需要創建兩個 Lampda 函數
- Shadow_Status_Check 此函數通過獲取 wsOccupancy 標志的值來檢查 AWS IOT 的狀態。如果 true 將返回值“Occupied”以顯示在網頁上。如果 false 將返回值“可用”。該標志將從報告的影子狀態中讀取。
- Shadow_Update 此函數使用 wsOccupancy 和 userName 的值更新 IOT 設備影子的狀態。
這些源代碼是用 python 3.8 編寫的。確保這兩個功能有權訪問 AWS IOT 服務(在左側的配置和權限選項卡下
所有源代碼都位于 LampdaFunctions 目錄下
API網關
讓網頁輕松訪問 AWS IOT 服務。我們可以定義連接到 Lampda 函數的 API。Lampda 功能可以連接到 AWS IOT 服務。我們無法創建 Web API 來直接連接到 AWS IOT。(我不知道原因,但我認為這是安全問題)要創建 API,您需要創建資源影子狀態和兩個方法 get 和 post。
“獲取方法”鏈接到“Shadow_Status_Check”Lampda 函數。
“發布方法”鏈接到“Shadow_Update Lampda”功能。
?
AWS 物聯網
我們沒有在 AWS IOT 服務器上進行太多配置。大多數在客戶端完成的任務都是由 CORE2 模塊完成的。確保正確設置所有配置和安全性。在開始這部分工作之前,請在https://edukit.workshop.aws/en/getting-started.html運行這兩個教程 Cloud Connected Blinky 和 ??Smart Thermostat 。
ThingName 將使用每個設備唯一的設備 ID 自動創建。
CORE 2 將開始連接 AWS IOT Shadow 服務并在數據 userName 和 wsOccupancy 標志上注冊增量更改
// register delta callback for workSpaceActuator and nameActuator
rc = aws_iot_shadow_register_delta(&iotCoreClient, &nameActuator);
if(SUCCESS != rc) {
ESP_LOGE(TAG, "Shadow Register userName Delta Error");
}
rc = aws_iot_shadow_register_delta(&iotCoreClient, &workSpaceActuator);
if(SUCCESS != rc) {
ESP_LOGE(TAG, "Shadow Register wsOccupancy Delta Error");
}
這兩個 Actuator 將注冊回調函數,如下面的數據結構。
jsonStruct_t nameActuator;
nameActuator.cb = userName_Callback;
nameActuator.pKey = "userName";
nameActuator.pData = &userName;
nameActuator.type = SHADOW_JSON_STRING;
nameActuator.dataLength = MAX_NAME_LENGTH;
jsonStruct_t workSpaceActuator;
workSpaceActuator.cb = occupancy_Callback;
workSpaceActuator.pKey = "wsOccupancy";
workSpaceActuator.pData = &wsOccupancy;
workSpaceActuator.type = SHADOW_JSON_BOOL;
workSpaceActuator.dataLength = sizeof(bool);
計算開始和停止使用時間之間的時間差。我們需要先正確設置時間。為了方便設置和方便,我們使用 ntp 協議來設置時間,它在 ntptime.h 中定義并在 ntptime.c 中實現。當 CORE2 將 wsOccupancy 的更新 delta 狀態從 false 變為 true 時,CORE2 將在 LED 條上打開紅色,獲取 startUsagetime 并將 robotStatus 更改為“Stop Clean”
if (*(bool *)(pContext->pData)) //True mean workspace is used
{
Core2ForAWS_Sk6812_SetSideColor(SK6812_SIDE_LEFT, 0xFF0000);
Core2ForAWS_Sk6812_SetSideColor(SK6812_SIDE_RIGHT, 0xFF0000);
Core2ForAWS_Sk6812_Show();
// Add starttime
getTimeStructure(&startTime);
strftime(startUsageTime, sizeof(startUsageTime), "%c", &startTime);
ESP_LOGI(TAG, "The current date/time in Thailand is: %s", startUsageTime);
strcpy(robotStatus,"Stop Clean");
}
如果用戶使用完工作區。wsOccupancy 的 delta 標志將從 true 變為 false,這將觸發獲取 stopUsageTime,以 HH:MM 格式計算時間差,停止 LED 條并將機器人狀態更改為“開始清潔”
else
{
Core2ForAWS_Sk6812_Clear();
Core2ForAWS_Sk6812_Show();
// Add stoptime
getTimeStructure(&stopTime);
strftime(stopUsageTime, sizeof(stopUsageTime), "%c", &stopTime);
ESP_LOGI(TAG, "The current date/time in Thailand is: %s", stopUsageTime);
// Find time difference
diffTimePeriod (stopTime,startTime,&diffTime);
sprintf(durationTime,"%d Hr: %d Min: %d Sec",diffTime.tm_hour,diffTime.tm_min,diffTime.tm_sec);
ESP_LOGI(TAG, "The workspace usage time is: %s \n", durationTime);
strcpy(robotStatus,"Start Clean");
}
CORE2 將在第 461 行指定的每個特定時間發送報告設備影子
vTaskDelay(pdMS_TO_TICKS(1000)); Line 461
發電機數據庫
該數據庫將繼續使用工作區。一旦用戶完成使用工作區并且 CORE2 完成計算使用時間,我們將發布到 DB。您需要為保存的數據創建表,定義主鍵。有關更多信息,請訪問此網站以了解更多如何在 Dynamo DB 中存儲設備數據
https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html
要發布到數據庫,我們需要在左側的規則選項卡下定義規則來處理物聯網數據。規則查詢將使用 SQL 語句開始發布到數據庫。這需要改進 SQL 語句以僅在用戶完成時發布。
SELECT state.reported.userName, state.reported.temperature, state.reported.startUsageTime, state.reported.stopUsagetime, state.reported.durationHandler FROM '$aws/things/0123a8024945e75c01/shadow/update/accepted'
機器人控制
這是我們從 aws_iot_task 注冊單獨進程的另一個任務
xTaskCreatePinnedToCore(&robot_task, "robot_task", 2048, NULL, 3, NULL, 1);
xTaskCreatePinnedToCore(&aws_iot_task, "aws_iot_task", 4096*2, NULL, 5, NULL, 0);
robotStatus 標志將用于控制機器人的狀態。如果用戶離開工作區,狀態將變為開始清潔,機器人將開始清潔,直到完成或其他用戶進入。這部分尚未完全實施。當機器人撞到東西或幾乎要??摔倒時,只需簡單的服務,如前進、后退、左轉、右轉和掉頭。實現機器人移動算法需要更多的時間來開發和測試。
使用 i2c 協議的直流電機驅動器在目錄組件 /dc-motor/m5-dcmotor.c 中實現
項目測試
因為我的設備在截止日期前三天停止工作。(CORE2 無法重新編程。引導信息顯示 PSRAM 讀取錯誤) 屏幕像這樣出現垃圾。
我不能有視頻來展示項目的最終工作。但是在開發期間。所有功能(電機運動、傳感器。和打開設備的繼電器都已經過測試并且運行良好。除了 GPIO 有時會在傳感器上讀取錯誤。
AWS 和 CORE2 之間的邏輯已經過測試。當用戶按下完成按鈕時機器人開始工作,并在發生新注冊時停止工作。唯一錯過測試的一件事是在打開 UV-C 和酒精噴霧時進行傳感器檢查。
正如您在此視頻中看到的,AWS 部件工作正常。
以史為鑒
我從這個項目中學到了一些技巧。對其他人進一步發展而不是再次嘗試和錯誤將是有用的。
- CORE2 中的許多設備共享相同的 i2C 總線,這有時會導致問題。例如,我的直流電機控制和 MPU6886 協同工作有問題。
- 在項目快完成時升級開發環境或拉新庫是一個壞主意。這導致我的項目完全停止。我無法及時解決問題。
- 端口 ESP32 不是 5v 容差。不能直接連接 5 V 傳感器。
- FreeRtos 取決于任務計劃。這會影響您的實時操作。我在從輸入端口讀取值以及調整時間延遲或添加更多任務時遇到問題。我從讀取端口得到了不同的行為。
- AWS 中有很多安全設置。這給我帶來了很多問題,直到我決定打開所有安全性。這將是一個很大的安全漏洞。黑客可以使用您的 API 來管理 AWS IOT。我希望亞馬遜將在安全設置方面進行更多改進,使其集中且易于設置和理解
我希望你覺得這個項目很有用。建議復制并粘貼此項目的某些部分,以幫助您更快地開發項目。我會很高興聽到這個消息。謝謝你。
?
- 由電話控制的小型機器人
- 語音機器人的構建
- 機器人的構建
- 機器人項目構建
- 構建機器人系統
- 小型機載計算機電源的設計
- 基于Matlab的機構與機器人分析資料下載 11次下載
- 基于DSP和PC的農業機器人控制系統 17次下載
- 基于DSP芯片的足球機器人實現與設計 26次下載
- 移動機器人的導航定位和地圖構建技術綜述 22次下載
- 如何才能實現移動機器人的導航定位和地圖構建技術 22次下載
- 小型仿人機器人系統的設計資料詳細說明 3次下載
- TMS320LF2407在小型機器人控制系統中的應用 6次下載
- 基于嵌入式視覺的移動式自重構微小型機器人
- 微小型自主偵察機器人控制系統設計
- 如何構建一個可充電酒精檢測儀 2114次閱讀
- 基于ATmega16構建的線跟隨機器人的完整電路圖 1789次閱讀
- 如何使用DonkeyCar平臺構建一個自主機器人 2114次閱讀
- 基于使用A4988驅動程序和HC-05 bt模塊構建自平衡機器人 2007次閱讀
- 基于TMS320F2812芯片實現移動機器人的導航和控制系統的應用方案 2705次閱讀
- 機器人對TF電機要求有哪些 1274次閱讀
- 面對疫情 醫療機器人能幫上什么忙? 2126次閱讀
- 教育機器人市場分析_教育機器人市場前景 5544次閱讀
- 協作機器人的起源_為什么需要協作機器人 8127次閱讀
- 仙知機器人自主研發用于移動機器人應用專業級客戶端軟件Roboshop 6069次閱讀
- 如何選擇機器人電機_機器人電機選擇舉例 1w次閱讀
- 軟體機器人 前所未見的機器人 3692次閱讀
- Python+樹莓派實現的微信拍攝機器人 1w次閱讀
- 如何使用HRMRP機器人平臺構建機器人應用系統 1629次閱讀
- 如何構建不傷害人類的工業機器人 1129次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多