電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>可以噴灑微滴酒精的小型機(jī)器人構(gòu)建

可以噴灑微滴酒精的小型機(jī)器人構(gòu)建

2022-11-07 | zip | 0.23 MB | 次下載 | 免費(fèi)

資料介紹

描述

抽象的

辦公室、餐廳、圖書(shū)館有許多共享工作空間。人們來(lái)來(lái)去去。在這次 COVID-19 大流行中,我們需要確保這些工作空間在其他人來(lái)使用它們之前是清潔和消毒的。該項(xiàng)目將應(yīng)用 AWS IOT 技術(shù)和 H/W M5Stack CORE2 for AWS 來(lái)控制機(jī)器人在人們離開(kāi)工作區(qū)后噴灑酒精并用 UV-C 燈清潔地板。

項(xiàng)目描述

我們計(jì)劃建造一個(gè)小型機(jī)器人,它可以噴灑微滴酒精,同時(shí)機(jī)器人會(huì)攜帶紫外線消毒器,以確保工作空間的清潔和安全。用戶通過(guò)掃描餐桌上的二維碼開(kāi)始使用工作區(qū),完成后只需按下移動(dòng) Web 上的“完成”按鈕。AWS IOT 將計(jì)算使用持續(xù)時(shí)間并命令機(jī)器人開(kāi)始使用 UV-C 射線和酒精噴霧進(jìn)行清潔。同時(shí),此用法將保留在 Dynamo DB 中。如果感染了 COVID-19 的人以前使用過(guò)此工作區(qū),此數(shù)據(jù)庫(kù)將用于歷史跟蹤。

(注意***我們計(jì)劃使用 PIR 傳感器來(lái)檢測(cè)人來(lái)并使用 Alexa 來(lái)獲取用戶的姓名。但是 PIR 傳感器非常不可靠,用戶需要一直坐在桌旁,這不實(shí)用。對(duì)于 Alexa , 沒(méi)有簡(jiǎn)單的方法將語(yǔ)音轉(zhuǎn)換為文本。由于時(shí)間限制,我們選擇將解決方案與建議的解決方案稍微改變一下。)

系統(tǒng)架構(gòu)

這個(gè)項(xiàng)目有兩個(gè)部分。

1)客戶端,使用M5 stack Core 2來(lái)控制所有機(jī)器人的動(dòng)作,如前進(jìn)、后退、左右轉(zhuǎn)、噴酒精和控制紫外線。檢查所有傳感器以防止與物體碰撞和跌倒檢測(cè)。當(dāng)用戶使用完工作區(qū)后,該機(jī)器人將由 AWS IOT 控制。AWS IOT 會(huì)將工作區(qū)占用標(biāo)志更新為 false(意味著工作區(qū)現(xiàn)在可用) CORE2 將更新使用時(shí)間并開(kāi)始機(jī)器人清潔。完成清潔后,機(jī)器人將停止工作,工作空間可供下一個(gè)人使用。

2)服務(wù)器端使用AWS上的一些服務(wù)。用戶開(kāi)始掃描桌面上顯示的二維碼注冊(cè)姓名。該網(wǎng)站是一個(gè)簡(jiǎn)單的靜態(tài)網(wǎng)站,存儲(chǔ)在 Amazon S3 AWS 上。當(dāng)用戶按下注冊(cè)按鈕時(shí),javascript會(huì)將信息傳遞給存儲(chǔ)在API網(wǎng)關(guān)上的Restful API。API 網(wǎng)關(guān)將調(diào)用 AWS lambda 在 AWS IOT 上更新設(shè)備或獲取設(shè)備影子的設(shè)備狀態(tài)。AWS IOT 更新工作區(qū)和機(jī)器人的狀態(tài),并在用戶使用完工作區(qū)后發(fā)布到 Dynamo DB。

我們可以用下圖總結(jié)所有活動(dòng)

poYBAGNkfy2ATt-eAAB1riDoDEY541.png
?

先決條件

因?yàn)檫@個(gè)項(xiàng)目需要很多技術(shù)的基礎(chǔ)。通過(guò)完成以下教程,您應(yīng)該熟悉這些技術(shù)。

  • AWS 服務(wù)(S3、API 網(wǎng)關(guān)、Lampda、AWS IOT)您可能需要查看每項(xiàng)服務(wù)的教程。這些 AWS 服務(wù)的 Google 教程。
  • 熟悉platformIO和Core2forAWS的開(kāi)發(fā)環(huán)境。轉(zhuǎn)到https://edukit.workshop.aws/en/getting-started.html以獲取教程,按照說(shuō)明直到主題 3 智能恒溫器。這將確保您可以連接到 AWS 服務(wù)并通過(guò)所有安全檢查。我們的項(xiàng)目是從這個(gè)項(xiàng)目擴(kuò)展而來(lái)的。
  • 從 S3 -> API-> Lampda->AWS IOT 的應(yīng)用流程。本教程對(duì)于讓您了解每個(gè) AWS 服務(wù)之間的流程非常有用。https://iot-esp32.workshop.aws/en/module3.html項(xiàng)目實(shí)施

硬件實(shí)現(xiàn)

對(duì)于硬件構(gòu)建,我們需要添加額外的兩個(gè) M5stack 模塊(M5Stack DC Motor 和 M5Stack Proto)DC 電機(jī)模塊帶有四個(gè)用于樂(lè)高電機(jī)的連接器,非常適合我們的快速原型。我們使用原型模塊將 CORE2 總線連接到 14 針插座。這些模塊可以按順序堆疊,但要注意堆疊的順序

Core 2 --> Proto --> DC Motor --> M5GO2(自帶core2)

?
?
?
pYYBAGNkfzCAe4T3AABqyB9XUSc108.png
?
1 / 3 ? M5Stack core2 總線圖
?

************************************使用 < > 查看更多圖片 ********* ************************

我們?cè)谶@個(gè)項(xiàng)目中使用的端口

  • 用于 UV-C LED 的 GPIO32
  • GPIO27 酒精噴霧
  • 用于紅外傳感器的 GPIO13、GPIO36
  • GPIO 33、26 用于跌倒檢測(cè)
  • 用于 PIR 的 GPIO 19
  • GPIO3、GPIO1、GPIO35(未使用)
  • 5V引腳
  • 3V引腳
  • 接地引腳

在 Core2 上使用 GPIO 對(duì)我來(lái)說(shuō)非常棘手。您需要考慮許多限制。這是我可以從數(shù)據(jù)表中收集的一些信息。

  • 應(yīng)避免使用這些端口 GPIO1、GPIO3、GPIO12、GPIO15,因?yàn)樗鼈兛赡苡糜谡{(diào)試和閃存。
  • 端口 34 - 39 只能用于 I/P,沒(méi)有上拉/下拉
  • 端口不是 5V 容差,這意味著如果您的傳感器是 5V 傳感器類型,您需要使用電平轉(zhuǎn)換器并且某些電平轉(zhuǎn)換器無(wú)法正常工作,如果您想避免出現(xiàn)問(wèn)題,請(qǐng)確保購(gòu)買優(yōu)質(zhì)的。

對(duì)于電平轉(zhuǎn)換器,我將它放在一個(gè)單獨(dú)的盒子中,其中包括 PIR 傳感器、繼電器模塊以及傳感器和外圍設(shè)備的所有連接,如圖所示。

pYYBAGNkfzaAaXAkAAEf901kjiU886.png
控制箱
?

有兩個(gè)設(shè)備需要兩個(gè)繼電器來(lái)打開(kāi)/關(guān)閉。因?yàn)槲覀兪褂迷谑袌?chǎng)上銷售的商業(yè)廣告。需要進(jìn)行一些修改。

酒精噴霧

我們使用便攜式酒精噴霧,只需 2 美元即可輕松購(gòu)買。本設(shè)備配有內(nèi)置電池。我們只是從按鈕開(kāi)關(guān)并聯(lián)到我們的插座,如圖所示。

?
?
?
poYBAGNkfzmAGaNZAABFQ4jkhUs633.png
?
1 / 2
?

UV-C LED

請(qǐng)注意,并非所有的紫外線都能殺死病毒。您需要使用比普通 UV Led 更昂貴的 UV-C 產(chǎn)品。UV-C 對(duì)眼睛和皮膚有危險(xiǎn)。請(qǐng)確保您在實(shí)驗(yàn)過(guò)程中不要暴露在這種光線下。我買了手機(jī)UV-C盒子,取出UV-C模塊。對(duì)于這個(gè)模塊,我需要連接外部電池(1x 18650 Battery 3.7V)因?yàn)殡姵卦诤凶永锾罅恕?/font>如圖所示,我從啟動(dòng)開(kāi)關(guān)到插座并聯(lián)接線。

?
?
?
pYYBAGNkfzuAM9NCAABJLEVhNRk614.png
?
1 / 3 ?拆卸前
?

電池盒

核心 2 無(wú)法為兩個(gè)電機(jī)提供足夠的電力。我們需要一個(gè)單獨(dú)的電池來(lái)驅(qū)動(dòng)直流電機(jī)。我為 2x 18650 選擇電池盒。這將連接到直流電機(jī)模塊。您必須使用 3.7 V 的電池來(lái)驅(qū)動(dòng) UV-C 模塊。我沒(méi)有這個(gè)的照片。您可以選擇任何您喜歡的電池盒。

機(jī)器人框架

因?yàn)槲覀兪褂脴?lè)高電機(jī),所以我選擇使用樂(lè)高構(gòu)建機(jī)器人框架。如果你不是樂(lè)高迷。您可以根據(jù)可用的材料和想象力選擇任何電機(jī)和框架。這是我使用樂(lè)高的機(jī)器人框架的圖片。

?
?
?
poYBAGNkfz6AaR-CAAD58772ELU226.png
?
1 / 5
?

傳感器

在這個(gè)項(xiàng)目中使用了四個(gè)傳感器,兩個(gè)在前面用于跌倒檢測(cè)和碰撞檢測(cè),另外兩個(gè)在后面。我使用兩種不同類型的紅外傳感器進(jìn)行跌倒檢測(cè)和碰撞。如圖所示。

poYBAGNkf0eAWOpxAACUfQ7nX9E900.jpg
?

使其與樂(lè)高兼容。我把樂(lè)高板貼在傳感器的背面。對(duì)于這個(gè)技巧,您可以使用小塑料蓋作為盒子的家用電燈開(kāi)關(guān)。

完成所有接線并安裝所有傳感器、組件。這是消毒機(jī)器人的最終說(shuō)明。

?
?
?
pYYBAGNkf0qADH4gAADlqvbmuo0328.png
?
1 / 5
?

軟件實(shí)施

軟件實(shí)現(xiàn)有很多部分。了解更多概念。您可能需要開(kāi)始學(xué)習(xí)這兩個(gè)教程

  • 了解有關(guān)此項(xiàng)目中使用的 AWS IOT 概念和工具的更多信息。

https://iot-esp32.workshop.aws/en/introduction.html

  • 了解有關(guān)許多 AWS 服務(wù)流程的更多信息。

https://iot-esp32.workshop.aws/en/module3.html

更完整的源碼請(qǐng)到github https://github.com/wtos03/HealthySpaces

我將僅提取一些代碼片段以進(jìn)行解釋。

網(wǎng)頁(yè)

該頁(yè)面將用于注冊(cè)工作區(qū),如下圖所示

poYBAGNkf0yAFOeuAABUSoeS69Q727.png
?

用戶開(kāi)始選擇注冊(cè)地點(diǎn)。此選項(xiàng)菜單將幫助將名稱轉(zhuǎn)換為 AWS IOT 中使用的事物名稱。

<select name="roomNames" >
            <option value="0123a8024945e75c01">    Binary Roomoption>
            <option value="TT">    Analog Roomoption>
select>

用戶輸入姓名并按注冊(cè)按鈕后。網(wǎng)頁(yè)將發(fā)布帶有 Jason 格式數(shù)據(jù)的請(qǐng)求(工作空間狀態(tài)的名稱和 wsOccupancy 標(biāo)志)以預(yù)定義 Web API 影子狀態(tài)(參見(jiàn) 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 標(biāo)志將設(shè)置為 false 并發(fā)布到與注冊(cè)過(guò)程相同的 API。

如果用戶按下 Occupy 按鈕來(lái)檢查 Workspace 的狀態(tài),網(wǎng)頁(yè)將向預(yù)定義的 Web API 影子狀態(tài)發(fā)送獲取請(qǐng)求。此 API 將返回可用或已占用的工作區(qū)狀態(tài)。

$("#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");
               }
            });
        });

靜態(tài)網(wǎng)頁(yè)的優(yōu)點(diǎn)是您可以在任何支持Javascript的網(wǎng)絡(luò)瀏覽器下在本地網(wǎng)頁(yè)上運(yùn)行它。無(wú)需 Web 服務(wù)器托管此服務(wù)。但是要分享這個(gè)網(wǎng)頁(yè),我們可以上傳到 S3 存儲(chǔ)桶并將它們標(biāo)記為靜態(tài)網(wǎng)頁(yè)。通過(guò)將此文件 (index.html) 上傳到 S3 存儲(chǔ)桶并啟用為靜態(tài)網(wǎng)站托管。定義公共訪問(wèn)權(quán)限或僅特定組的權(quán)限。并復(fù)制 Bucket 網(wǎng)站端點(diǎn)以在網(wǎng)頁(yè)上使用。在這個(gè)例子中是

http://cleanws.com.s3-website-us-west-2.amazonaws.com

我們可以翻譯此 URL 以創(chuàng)建 QR 碼或放入 NFC 標(biāo)簽,以供人們來(lái)到工作區(qū)時(shí)訪問(wèn)。

蘭普達(dá)功能

在創(chuàng)建 API 網(wǎng)關(guān)之前,我們需要先創(chuàng)建 Lampda。因?yàn)?API 需要 Lampda 函數(shù)名指向。

我們需要?jiǎng)?chuàng)建兩個(gè) Lampda 函數(shù)

  • Shadow_Status_Check 此函數(shù)通過(guò)獲取 wsOccupancy 標(biāo)志的值來(lái)檢查 AWS IOT 的狀態(tài)。如果 true 將返回值“Occupied”以顯示在網(wǎng)頁(yè)上。如果 false 將返回值“可用”。該標(biāo)志將從報(bào)告的影子狀態(tài)中讀取。
  • Shadow_Update 此函數(shù)使用 wsOccupancy 和 userName 的值更新 IOT 設(shè)備影子的狀態(tài)。

這些源代碼是用 python 3.8 編寫(xiě)的。確保這兩個(gè)功能有權(quán)訪問(wèn) AWS IOT 服務(wù)(在左側(cè)的配置和權(quán)限選項(xiàng)卡下

pYYBAGNkf1GAaMa6AABoYw9WUr0401.png
?

所有源代碼都位于 LampdaFunctions 目錄下

API網(wǎng)關(guān)

讓網(wǎng)頁(yè)輕松訪問(wèn) AWS IOT 服務(wù)。我們可以定義連接到 Lampda 函數(shù)的 API。Lampda 功能可以連接到 AWS IOT 服務(wù)。我們無(wú)法創(chuàng)建 Web API 來(lái)直接連接到 AWS IOT。(我不知道原因,但我認(rèn)為這是安全問(wèn)題)要?jiǎng)?chuàng)建 API,您需要?jiǎng)?chuàng)建資源影子狀態(tài)和兩個(gè)方法 get 和 post。

“獲取方法”鏈接到“Shadow_Status_Check”Lampda 函數(shù)。

“發(fā)布方法”鏈接到“Shadow_Update Lampda”功能。

pYYBAGNkf1SAb0XeAADm9fjZryQ290.png
?

?

AWS 物聯(lián)網(wǎng)

我們沒(méi)有在 AWS IOT 服務(wù)器上進(jìn)行太多配置。大多數(shù)在客戶端完成的任務(wù)都是由 CORE2 模塊完成的。確保正確設(shè)置所有配置和安全性。在開(kāi)始這部分工作之前,請(qǐng)?jiān)?/font>https://edukit.workshop.aws/en/getting-started.html運(yùn)行這兩個(gè)教程 Cloud Connected Blinky 和 ??Smart Thermostat 。

ThingName 將使用每個(gè)設(shè)備唯一的設(shè)備 ID 自動(dòng)創(chuàng)建。

CORE 2 將開(kāi)始連接 AWS IOT Shadow 服務(wù)并在數(shù)據(jù) userName 和 wsOccupancy 標(biāo)志上注冊(cè)增量更改

// 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");
}

這兩個(gè) Actuator 將注冊(cè)回調(diào)函數(shù),如下面的數(shù)據(jù)結(jié)構(gòu)。

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);

計(jì)算開(kāi)始和停止使用時(shí)間之間的時(shí)間差。我們需要先正確設(shè)置時(shí)間。為了方便設(shè)置和方便,我們使用 ntp 協(xié)議來(lái)設(shè)置時(shí)間,它在 ntptime.h 中定義并在 ntptime.c 中實(shí)現(xiàn)。當(dāng) CORE2 將 wsOccupancy 的更新 delta 狀態(tài)從 false 變?yōu)?true 時(shí),CORE2 將在 LED 條上打開(kāi)紅色,獲取 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");
}

如果用戶使用完工作區(qū)。wsOccupancy 的 delta 標(biāo)志將從 true 變?yōu)?false,這將觸發(fā)獲取 stopUsageTime,以 HH:MM 格式計(jì)算時(shí)間差,停止 LED 條并將機(jī)器人狀態(tài)更改為“開(kāi)始清潔”

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 行指定的每個(gè)特定時(shí)間發(fā)送報(bào)告設(shè)備影子

vTaskDelay(pdMS_TO_TICKS(1000));    Line 461

發(fā)電機(jī)數(shù)據(jù)庫(kù)

該數(shù)據(jù)庫(kù)將繼續(xù)使用工作區(qū)。一旦用戶完成使用工作區(qū)并且 CORE2 完成計(jì)算使用時(shí)間,我們將發(fā)布到 DB。您需要為保存的數(shù)據(jù)創(chuàng)建表,定義主鍵。有關(guān)更多信息,請(qǐng)?jiān)L問(wèn)此網(wǎng)站以了解更多如何在 Dynamo DB 中存儲(chǔ)設(shè)備數(shù)據(jù)

https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html

要發(fā)布到數(shù)據(jù)庫(kù),我們需要在左側(cè)的規(guī)則選項(xiàng)卡下定義規(guī)則來(lái)處理物聯(lián)網(wǎng)數(shù)據(jù)。規(guī)則查詢將使用 SQL 語(yǔ)句開(kāi)始發(fā)布到數(shù)據(jù)庫(kù)。這需要改進(jìn) SQL 語(yǔ)句以僅在用戶完成時(shí)發(fā)布。

SELECT state.reported.userName, state.reported.temperature, state.reported.startUsageTime, state.reported.stopUsagetime, state.reported.durationHandler FROM '$aws/things/0123a8024945e75c01/shadow/update/accepted'

機(jī)器人控制

這是我們從 aws_iot_task 注冊(cè)單獨(dú)進(jìn)程的另一個(gè)任務(wù)

xTaskCreatePinnedToCore(&robot_task, "robot_task", 2048, NULL, 3, NULL, 1);
xTaskCreatePinnedToCore(&aws_iot_task, "aws_iot_task", 4096*2, NULL, 5, NULL, 0);

robotStatus 標(biāo)志將用于控制機(jī)器人的狀態(tài)。如果用戶離開(kāi)工作區(qū),狀態(tài)將變?yōu)殚_(kāi)始清潔,機(jī)器人將開(kāi)始清潔,直到完成或其他用戶進(jìn)入。這部分尚未完全實(shí)施。當(dāng)機(jī)器人撞到東西或幾乎要??摔倒時(shí),只需簡(jiǎn)單的服務(wù),如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和掉頭。實(shí)現(xiàn)機(jī)器人移動(dòng)算法需要更多的時(shí)間來(lái)開(kāi)發(fā)和測(cè)試。

使用 i2c 協(xié)議的直流電機(jī)驅(qū)動(dòng)器在目錄組件 /dc-motor/m5-dcmotor.c 中實(shí)現(xiàn)

項(xiàng)目測(cè)試

因?yàn)槲业脑O(shè)備在截止日期前三天停止工作。(CORE2 無(wú)法重新編程。引導(dǎo)信息顯示 PSRAM 讀取錯(cuò)誤) 屏幕像這樣出現(xiàn)垃圾。

pYYBAGNkf1eAC1SMAABeD3xupmI581.png
?

我不能有視頻來(lái)展示項(xiàng)目的最終工作。但是在開(kāi)發(fā)期間。所有功能(電機(jī)運(yùn)動(dòng)、傳感器。和打開(kāi)設(shè)備的繼電器都已經(jīng)過(guò)測(cè)試并且運(yùn)行良好。除了 GPIO 有時(shí)會(huì)在傳感器上讀取錯(cuò)誤。

AWS 和 CORE2 之間的邏輯已經(jīng)過(guò)測(cè)試。當(dāng)用戶按下完成按鈕時(shí)機(jī)器人開(kāi)始工作,并在發(fā)生新注冊(cè)時(shí)停止工作。唯一錯(cuò)過(guò)測(cè)試的一件事是在打開(kāi) UV-C 和酒精噴霧時(shí)進(jìn)行傳感器檢查。

正如您在此視頻中看到的,AWS 部件工作正常。

?

以史為鑒

我從這個(gè)項(xiàng)目中學(xué)到了一些技巧。對(duì)其他人進(jìn)一步發(fā)展而不是再次嘗試和錯(cuò)誤將是有用的。

  • CORE2 中的許多設(shè)備共享相同的 i2C 總線,這有時(shí)會(huì)導(dǎo)致問(wèn)題。例如,我的直流電機(jī)控制和 MPU6886 協(xié)同工作有問(wèn)題。
  • 在項(xiàng)目快完成時(shí)升級(jí)開(kāi)發(fā)環(huán)境或拉新庫(kù)是一個(gè)壞主意。這導(dǎo)致我的項(xiàng)目完全停止。我無(wú)法及時(shí)解決問(wèn)題。
  • 端口 ESP32 不是 5v 容差。不能直接連接 5 V 傳感器。
  • FreeRtos 取決于任務(wù)計(jì)劃。這會(huì)影響您的實(shí)時(shí)操作。我在從輸入端口讀取值以及調(diào)整時(shí)間延遲或添加更多任務(wù)時(shí)遇到問(wèn)題。我從讀取端口得到了不同的行為。
  • AWS 中有很多安全設(shè)置。這給我?guī)?lái)了很多問(wèn)題,直到我決定打開(kāi)所有安全性。這將是一個(gè)很大的安全漏洞。黑客可以使用您的 API 來(lái)管理 AWS IOT。我希望亞馬遜將在安全設(shè)置方面進(jìn)行更多改進(jìn),使其集中且易于設(shè)置和理解

我希望你覺(jué)得這個(gè)項(xiàng)目很有用。建議復(fù)制并粘貼此項(xiàng)目的某些部分,以幫助您更快地開(kāi)發(fā)項(xiàng)目。我會(huì)很高興聽(tīng)到這個(gè)消息。謝謝你。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)