電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>如何用相機(jī)制作Wi-Fi坦克

如何用相機(jī)制作Wi-Fi坦克

2023-06-25 | zip | 0.30 MB | 次下載 | 免費(fèi)

資料介紹

描述

你想要自己的遙控坦克嗎?我將描述使用智能手機(jī)通過 Wi-Fi 控制的相機(jī)創(chuàng)建坦克的過程。

我想傳達(dá)的主要思想是,你不應(yīng)該重復(fù)這個(gè)項(xiàng)目,而是根據(jù)你在這里閱讀的內(nèi)容,使你自己的項(xiàng)目獨(dú)一無二。我將向您展示我的坦克示例,但此處概述的原則可應(yīng)用于創(chuàng)建其他類似的遙控車輛。

有用的信息

我會(huì)這樣寫輔助信息。此信息無需閱讀但仍然有用

?

?

?

poYBAGSBohKASSVmAAFxZhtGQJQ570.jpg
我的坦克的主要部件
?

船體和底盤

您可以在車輛上放置什么以及如何放置由車體決定,越野能力和速度取決于底盤。例如,如果你想在街上享受賽車的樂趣,你應(yīng)該選擇一個(gè)有很大間隙的底盤,最好有某種懸掛系統(tǒng),但如果你的設(shè)備只在你房子的平坦地板上行駛,并且沒有克服這種困難的反抗- 坦克障礙物如毛圈墊,那么你可能不會(huì)打擾 - 任何底盤都可以。

在我的坦克中,我使用了一個(gè)玩具坦克的船體,將里面所有多余的東西都磨碎了,以增加有用的體積。我用熱熔膠填充了所有不必要的孔。變速箱電機(jī)已經(jīng)安裝在玩具坦克上。

為了便于進(jìn)入,我將船體的上部更換為帶鉸鏈的金屬艙口,其中包含坦克的主要部件。艙門下方是發(fā)動(dòng)機(jī)艙——兩個(gè)電機(jī)+齒輪和一個(gè)帶有兩個(gè)電池的電池艙。艙口鉸鏈?zhǔn)羌揖咩q鏈(可能是一個(gè)殘酷的解決方案,但這正是我想要的)。

ESP-32-Cam(帶天線的白盒子)的外殼是紅外運(yùn)動(dòng)傳感器 (BV-201) 的倒置外殼。它足夠?qū)挸?,分為兩部分,可以輕松更換其中的東西。

pYYBAGSBohaAc0RhAAOxGjbXglE960.jpg
?

供電系統(tǒng)(車載網(wǎng)絡(luò)

您設(shè)備的可靠性及其自主運(yùn)行的持續(xù)時(shí)間取決于該系統(tǒng)。您必須確保整個(gè)設(shè)備在任何甚至最惡劣的條件下都能穩(wěn)定供電。當(dāng)一切都以最大程度打開時(shí),電壓不應(yīng)下降到會(huì)發(fā)生故障或重啟的水平。

有幾種方法可以實(shí)現(xiàn)電源穩(wěn)定性:

  • 創(chuàng)造條件,使得不可能使用超過設(shè)備所能提供的能量——例如,軟件保護(hù)或物理限制。
  • 電源部分的獨(dú)立電源——電機(jī)和強(qiáng)大的消費(fèi)者與智能部分——微控制器、傳感器分開。這樣,如果電源部分出現(xiàn)電壓驟降,例如,由于電機(jī)卡住,您將避免控制器 - 微控制器的電壓驟降。
  • 提供某種針對(duì)電壓驟降的短期保護(hù)在大多數(shù)情況下會(huì)有所幫助并且易于實(shí)施。一個(gè)例子是微控制器的電力電容器。

主要思想是微控制器的電壓驟降非常糟糕,因?yàn)檫@意味著失去對(duì)整個(gè)機(jī)器的控制,以及所有后果......

坦克電池由一對(duì)2000mAh鋰電池組成。然后電池連接到一個(gè)DC-DC升壓轉(zhuǎn)換器MT3608,為車載電源網(wǎng)絡(luò)形成一個(gè)穩(wěn)定的5.1V。需要 0.1V 的余量來減少電壓驟降對(duì)電線和二極管的影響。

poYBAGSBohiATbZMAABoOrXS668942.jpg
我的坦克的電流消耗
?

從上面的值可以看出,最大的消耗者是發(fā)動(dòng)機(jī),此外,根據(jù)坦克行駛的地形,發(fā)動(dòng)機(jī)的功耗也不均勻。

坦克上所有連接的設(shè)備均由來自穩(wěn)定器的 5V 供電。那些需要 3.3V 的傳感器由于功耗低,由 Arduino Nano 上的穩(wěn)定器供電。帶有 ESP-32 的電路板有一個(gè)穩(wěn)定器,可將輸入 5V 轉(zhuǎn)換為 ESP 所需的 3.3V。

在 Arduino 和 ESP 板的電源電壓輸入附近,有帶鎖定二極管的電解電容器。由于二極管,電源電壓降低,例如,對(duì)于 ESP,必須使用肖特基二極管(因?yàn)樗碾妷航岛苄。?/font>但是,這種小電容容量可確保在電機(jī)運(yùn)行或電池電量耗盡時(shí)的短暫功率驟降期間為微控制器供電。沒有這個(gè),他們會(huì)凍死或重啟。這一措施使坦克的電池壽命延長(zhǎng)了約 40%。

電機(jī)上有 0.1 μF 陶瓷電容器以抑制電刷火花并消除電源中的干擾。阻塞電容器也靠近每個(gè)微控制器板上的電源輸入,以防止干擾。

微控制器

對(duì)于我的坦克,我決定將邏輯分為兩部分。一個(gè)微控制器將處理來自傳感器的數(shù)據(jù)、移動(dòng)電機(jī)和做其他“簡(jiǎn)單的事情”。第二個(gè)微控制器將處理攝像頭并通過 Wi-Fi 與外界通信

  • ESP-32 是帶攝像頭的電路板形式——我需要一些便宜的東西,它可以使用 Wi-Fi 并且能夠與攝像頭一起工作。這是我找到的最佳選擇。
  • 作為 Arduino Nano 開發(fā)板的 ATmega328p 是尺寸完美的開發(fā)板,具有許多空閑引腳和所有必要的接口。傳感器讀取和電機(jī)控制等任務(wù)的經(jīng)典可靠選擇。
poYBAGSBohuAGRXvAAFIGST1X08711.jpg
?

為什么我選擇了兩個(gè)微控制器:

  • 我想要 Wi-Fi 連接的最大響應(yīng)速度,因此 ESP 上的任何額外任務(wù)都會(huì)給它帶來額外的負(fù)載,即使它是雙核的,這也可能導(dǎo)致額外的延遲,這是不允許的奢侈。
  • 不幸的是,ESP-32-CAM 模塊外形中的 ESP-32 板的空閑引腳非常少,其中一些是為其他需要保留的。
  • 某些 Arduino 庫(kù)在 ESP 上運(yùn)行不佳。
  • 我喜歡這種職責(zé)分離的想法。

ESP-32 和 GPIO0 的有趣錯(cuò)誤

在刷入 ESP-32 之前,有必要將其置于啟動(dòng)模式。這是通過將 GPIO0 引腳短接到 GND 來完成的。油箱上有一個(gè)開關(guān)(紅色開關(guān)),可以讓ESP進(jìn)入固件模式或普通模式。但是我遇到了一個(gè)記錄不完整的錯(cuò)誤/功能。在正常工作模式下,此引腳上會(huì)產(chǎn)生一些特殊的高頻信號(hào),違反這些信號(hào)會(huì)導(dǎo)致整個(gè) ESP 出現(xiàn)各種毛刺。雖然觸點(diǎn)有一個(gè)內(nèi)部上拉電源,但它無助于減少通向開關(guān)(約 7 厘米)的電線中的干擾,因此偶爾會(huì)出現(xiàn)電路板凍結(jié)。通過斷開引腳上的電線,問題就消失了。我發(fā)現(xiàn)這是一個(gè)罕見的錯(cuò)誤(可能是我的電路板有缺陷)。更換電路板對(duì)我有幫助。

軟件和固件

我使用了 Arduino 框架,因此您在 Arduino 和 ESP 上獲得了一個(gè)單一的生態(tài)系統(tǒng),盡管 ESP 有自己的框架和出色的文檔。

本項(xiàng)目使用espressif32平臺(tái)3.2.1版本,因?yàn)楦哂谠摪姹酒茐牧藘?nèi)存分配算法,會(huì)導(dǎo)致ESP重啟。這僅適用于我的情況,因?yàn)槲沂褂枚喾N協(xié)議,例如 HTTP、SSE、Websocket 和頻繁的數(shù)據(jù)傳輸。在其他情況下,一切正常。

坦克操作算法。這些是一般意義上的工作周期。我的圖表不能稱為對(duì)實(shí)際發(fā)生的事情的準(zhǔn)確描述,因?yàn)樽詈每创a。我只展示主要方面。

pYYBAGSBoh6AfYTXAAF5lVQrxc8506.jpg
?
poYBAGSBoiGAEN2sAAEaXA2Kw7Y292.jpg
?

錯(cuò)誤保護(hù)。由于錯(cuò)誤和崩潰是不可避免的,尤其是在調(diào)試期間,我不得不做一些優(yōu)雅的 hack 并將其稱為“錯(cuò)誤保護(hù)”。

看門狗之類的東西。看門狗是一個(gè)硬件定時(shí)器,它一直倒計(jì)時(shí),如果計(jì)數(shù)到零,它會(huì)重置微控制器。在正常操作中,微控制器應(yīng)定期重置看門狗,使其時(shí)間恢復(fù)到原始狀態(tài)。如果微控制器突然開始思考并且沒有時(shí)間復(fù)位,看門狗將拉動(dòng)復(fù)位開關(guān) - 簡(jiǎn)單有效。

Arduino 會(huì)很快耗盡 RAM。我決定放一個(gè)看門狗來跟蹤電路板,如果發(fā)生什么事就重新啟動(dòng)它。不幸的是,Arduino Nano 有這樣一個(gè)本機(jī)引導(dǎo)加載程序?qū)崿F(xiàn),我的板將進(jìn)入永久重啟(Arduino WDT 引導(dǎo)循環(huán))。你可以通過刷新另一個(gè)引導(dǎo)加載程序(如optiboot)來解決這個(gè)問題,但這個(gè)解決方案太無聊了,所以我決定用 ESP-32 來組織看門狗。

pYYBAGSBoiSASU9gAAFmpgzvGDA288.jpg
?

在 ESP 上一切都比在 Arduino 上無聊得多,有兩種防止錯(cuò)誤的保護(hù)措施。第一個(gè)通過使用集成看門狗 4 秒來防止在密集數(shù)據(jù)傳輸期間發(fā)生 RAM 溢出。如果出現(xiàn)死機(jī),電路板將重新啟動(dòng),并且重新啟動(dòng)的速度甚至讓人感覺不到 Wi-Fi 連接中斷(不需要重新連接)。

第二個(gè) - 掉電檢測(cè)器已關(guān)閉。這樣做是為了在 5V 電壓的條件下,可以工作更長(zhǎng)時(shí)間。現(xiàn)在,萬(wàn)一由于缺電而真正掉電,電路板將凍結(jié),但這可以通過防止電機(jī)過載的軟件保護(hù)(更多內(nèi)容見下文)和最重要的 - 延長(zhǎng)電池壽命來補(bǔ)償,因?yàn)?a target='_blank' class='arckwlink_none'>檢測(cè)器的閾值有點(diǎn)高估。

電機(jī)過載保護(hù)。盡管名稱如此,但這種軟件保護(hù)并不保護(hù)引擎,而是保護(hù)車載電源網(wǎng)絡(luò)免受電壓驟降到臨界水平的影響。由于發(fā)動(dòng)機(jī)是油箱上最大的能量消耗者,我做了一個(gè)保護(hù),當(dāng)電壓低于一定水平時(shí) - 停止發(fā)動(dòng)機(jī)(從而減少電流消耗),這可以避免大多數(shù)重啟或掛起電源。

電機(jī)過載保護(hù)算法在Arduino上實(shí)現(xiàn),電壓由其內(nèi)部ADC測(cè)量。這是算法的樣子:

  • 在某個(gè)時(shí)間間隔(5 毫秒)測(cè)量電池電壓。
  • 如果電壓低于閾值,并且在上次測(cè)量中沒有這種情況,它只會(huì)記住這個(gè)事實(shí)。
  • 如果電壓低于閾值,并且在上次測(cè)量中也低于閾值,則會(huì)觸發(fā)保護(hù)并停止電機(jī)。

我試圖通過電機(jī)的平穩(wěn)加速來緩和瞬態(tài)電壓驟降的影響(在改變運(yùn)動(dòng)側(cè)的那一刻),但這沒有明顯的效果(可能在大型電機(jī)上它會(huì)給出更好的結(jié)果),而且由于電機(jī)加速時(shí)存在延遲,因此失去了動(dòng)態(tài)控制。

聲音信號(hào)。聲音警報(bào)是一件很酷的事情,它們會(huì)讓我知道水箱是否出了什么問題,或者它是否準(zhǔn)備好工作了。

我總共有四聲嗶嗶聲:

  • “通知” - 最響亮的。這是為了嚇唬街上的人(所以他們不會(huì)不小心踩到坦克)。可以從控制應(yīng)用程序手動(dòng)調(diào)用此信號(hào)。
  • “警告”——發(fā)生了一些事情,但并不嚴(yán)重,例如引擎因電壓過低而停止。
  • “錯(cuò)誤”——有什么東西壞了,如果不進(jìn)行干預(yù)或重新啟動(dòng),坦克就無法再工作。
  • “好”——意味著一切都很好。目前用作坦克已準(zhǔn)備就緒的指示器。

所有信號(hào)都由一組四個(gè)部分組成。每個(gè)部分存儲(chǔ)聲音的頻率和持續(xù)時(shí)間,一個(gè)特殊的功能在信號(hào)發(fā)聲期間切換頻率。該報(bào)警系統(tǒng)易于實(shí)施且易于擴(kuò)展。

坦克控制終端(應(yīng)用程序)

這是一個(gè)提供以下功能的應(yīng)用程序:運(yùn)動(dòng)控制、查看來自傳感器的數(shù)據(jù)、進(jìn)行診斷和調(diào)整水箱。該應(yīng)用程序是使用游戲引擎 Unity 制作的。Unity 不是為此任務(wù)而設(shè)計(jì)的,因?yàn)樗吘故怯螒蛞妗?/font>我選擇 Unity 只是為了好玩。

poYBAGSBoieAHFceAAMJnC7Egfo992.jpg
?

  • Wi-Fi 允許通過智能手機(jī)進(jìn)行控制。
  • 我喜歡技術(shù)本身。
poYBAGSBoiuAE8GYAAM0VO6CpC4669.jpg
?

與罐體的連接方式有兩種:

  • 外部中繼器天線 - 這種天線的質(zhì)量?jī)?yōu)于智能手機(jī)中的天線。
  • 如果您使用 Wi-Fi 標(biāo)準(zhǔn):802.11n,將帶寬從 40 MHz 降低到 20 MHz 是有意義的。據(jù)我了解,這種情況很少見,這完全是因?yàn)槲蚁矚g廉價(jià)組件。網(wǎng)上有貼個(gè)防靜電袋之類的解決辦法,但實(shí)際上,這些辦法都不是很有效。我花了好幾個(gè)小時(shí)想辦法解決這個(gè)問題,并將天線換成外置天線,我什至在 ESP 船體周圍包裹了箔紙,雖然它更多的是保護(hù)它免受街上隨機(jī)噪音的影響,而且它也很漂亮。

    數(shù)據(jù)傳輸協(xié)議。儲(chǔ)罐和控制終端之間的數(shù)據(jù)交換通過三種協(xié)議進(jìn)行:

    • HTTP – 只有客戶端可以啟動(dòng)通信會(huì)話,服務(wù)器不能首先向客戶端尋址。它傳輸來自傳感器、控制和配置命令的數(shù)據(jù)。
    • WebSocket (WS) – 允許您從服務(wù)器向客戶端雙向發(fā)送數(shù)據(jù),反之亦然。它用作建立通信模式并將數(shù)據(jù)從 ESP 和 Arduino 傳輸?shù)饺罩镜某跏肌?a href='http://ttokpm.com/tags/pi/' target='_blank' class='arckwlink_none'>ping”。
    • Server-Sent Events (SSE) – 根據(jù)客戶端-服務(wù)器訂閱的原理工作,但僅以一種方式工作,即從服務(wù)器到客戶端。將來自傳感器的一些數(shù)據(jù)傳輸?shù)浇K端,這些數(shù)據(jù)會(huì)快速更新。
    poYBAGSBoi2AdFgdAADpnBRHl9k778.jpg
    ?

    使用的主要協(xié)議是 HTTP。WebSocket 和 SSE 我選擇使用它們來收集經(jīng)驗(yàn)。所以,用例有點(diǎn)牽強(qiáng),你可以很容易地沒有它們。此外,本機(jī)異步 Web 服務(wù)器非常快。

    WS和SSE的選擇基于兩個(gè)因素:

    • 它們?cè)试S您將數(shù)據(jù)從服務(wù)器直接發(fā)送到客戶端。使用 HTTP,客戶端必須輪詢服務(wù)器。
    • 理論上,由于數(shù)據(jù)冗余和不必要的通信會(huì)話較少,它們比 HTTP 工作得更快。

    ESP-32 上的數(shù)據(jù)更新率。ESP 對(duì)其可以處理的數(shù)據(jù)量有一定的限制,大約每秒 15 個(gè)數(shù)據(jù)包。如果超過此限制,數(shù)據(jù)將被丟棄,并在 UART 中顯示“錯(cuò)誤:排隊(duì)的消息太多”條目。請(qǐng)注意,這里每秒的連接數(shù)比數(shù)據(jù)量的影響更大。

    因?yàn)槲蚁胍斓膫鬏?,所以我決定嘗試使用 WS 和 SSE 繞過它。我的流量幾乎總是同質(zhì)的,所以一切都在相同的條件下進(jìn)行了測(cè)試。這是我得到的結(jié)果:

    • WebSocket——連接數(shù)限制與HTTP服務(wù)器類似。除了直接從服務(wù)器傳輸?shù)娇蛻舳送?,沒有其他好處。
    • SSE - 允許您將傳輸限制稍微增加每秒 3-5 個(gè)數(shù)據(jù)包。
    • 這兩種協(xié)議都不如 HTTP 服務(wù)器穩(wěn)定。例如,有時(shí),ESP-32 可能會(huì)在流量過大時(shí)重啟或死機(jī),作為提醒:“不要搞亂繞過限制”。如果你不過分,你可以使用它。

    三種協(xié)議的響應(yīng)速度是一樣的,傳輸同樣的數(shù)據(jù)不能說HTTP比WS或者SSE慢。這意味著最終實(shí)施比選擇任何這些協(xié)議進(jìn)行控制或任何其他需要低延遲的協(xié)議更重要。

    數(shù)據(jù)傳輸原理。數(shù)據(jù)以字符串形式傳輸。有的打包成JSON格式,有的按原樣傳輸。

    ESP-32 托管一個(gè)異步 HTTP 服務(wù)器。它通過 HTTP GET 請(qǐng)求進(jìn)行通信。終端通過請(qǐng)求發(fā)送控制命令。參數(shù)中有一個(gè)數(shù)字,它對(duì)應(yīng)于坦克的運(yùn)動(dòng)側(cè)。相機(jī)或 Arduino 設(shè)置以類似方式傳輸。終端定期輪詢來自傳感器的數(shù)據(jù),從 ESP 接收最后接收到的 JSON 格式的傳感器讀數(shù)作為響應(yīng)。

    WebSocket - 向終端發(fā)送服務(wù)消息以記錄并確認(rèn) Arduino 設(shè)置已被接受。

    SSE 用于一個(gè)目的:從 Arduino 接收到數(shù)據(jù)后,立即將更新后的傳感器數(shù)據(jù)快速發(fā)送到終端。

    從傳感器傳輸數(shù)據(jù)。傳感器分為兩組:

    • 慢速傳感器 - 以特定時(shí)間間隔更新并從 Arduino 傳輸?shù)?ESP。控制終端(應(yīng)用程序)定期請(qǐng)求此數(shù)據(jù)。更新頻率為兩秒一次。通過 HTTP GET 請(qǐng)求傳輸。
    • 快速傳感器 - 以一定間隔更新(比慢速傳感器快)并由 Arduino 傳輸?shù)?ESP,然后立即發(fā)送到控制終端。更新率為每秒 2.5 次。通過 SSE 傳輸。

    內(nèi)部溝通。Arduino-ESP。Arduino開發(fā)板和ESP-32-Cam使用UART協(xié)議進(jìn)行通信。起初,我自己制作了數(shù)據(jù)傳輸?shù)慕鉀Q方案,但是當(dāng)要管理的數(shù)據(jù)太多時(shí),我意識(shí)到使用現(xiàn)成的解決方案要好得多。

    這個(gè)解決方案是很棒的庫(kù)SerialTrasfer,它承擔(dān)了數(shù)據(jù)傳輸?shù)摹芭K”工作:組織正確的數(shù)據(jù)包傳輸、校驗(yàn)和計(jì)數(shù)并允許您傳輸簡(jiǎn)單的數(shù)據(jù)類型和結(jié)構(gòu),這正是我所需要的,因?yàn)槲掖鎯?chǔ)數(shù)據(jù)來自結(jié)構(gòu)中的傳感器。

    ESP-32 有幾個(gè)板載硬件 UART,與 Arduino 不同,它可以很容易地重新配置為其他引腳。UART_0 保留用于調(diào)試和刷新固件,UART_1 用于 Arduino 通信。

    數(shù)據(jù)傳輸?shù)?UART 速度設(shè)置為 76800 波特/秒。在此速度下,由于 Arduino 微控制器的 16 MHz 時(shí)鐘頻率和 ESP 的 320 MHz 時(shí)鐘頻率,傳輸錯(cuò)誤最少。該解決方案可以在很大程度上保證 ESP 和 Arduino 之間傳遞正確的數(shù)據(jù),而無需檢查和復(fù)制它們。

    由于 Arduino Nano 微控制器 (ATmega328) - 8 位和 ESP-32 - 32 位的不同架構(gòu),您需要使用內(nèi)存對(duì)齊,以便數(shù)據(jù)(枚舉、結(jié)構(gòu))在兩個(gè)平臺(tái)上都能被正確接受。為此,我使用屬性“attribute((packed))”。

    鑒于 ESP-32 (3.3V) 和 Arduino (5V) 邏輯電平的不同電壓,它們之間的 UART 通過電平轉(zhuǎn)換器連接。

    UART數(shù)據(jù)傳輸原理:

    • 數(shù)據(jù)成對(duì)傳輸:“數(shù)據(jù)類型”和“有用數(shù)據(jù)”,最后一個(gè)可以不存在,因?yàn)橛袝r(shí)僅存在傳輸事實(shí)就足夠了,例如需要更新的信號(hào)看門狗定時(shí)器。
    • 共有8種數(shù)據(jù)類型:“傳感器讀數(shù)”、“控制命令”、“蜂鳴器類型”、“看門狗”、“日志消息”、“快速傳感器讀數(shù)”、“Arduino設(shè)置”、“讀取Arduino設(shè)置”。
    • 在發(fā)送方準(zhǔn)備一條消息,開頭是數(shù)據(jù)類型,如果需要,后面是有用的數(shù)據(jù)。
    • 接收方收到消息,根據(jù)消息類型,可能有:一些動(dòng)作或解包數(shù)據(jù)。
    pYYBAGSBojCAO3L5AAF77O3fpT0928.jpg
    ?

    這個(gè)簡(jiǎn)單的數(shù)據(jù)傳輸系統(tǒng)易于擴(kuò)展,允許您傳輸不同類型的數(shù)據(jù)并引入了一點(diǎn)冗余,因?yàn)閿?shù)據(jù)類型只是 Enum,即通常的數(shù)字。

    您不僅可以使用 UART,例如 SPI,或 I2C,或其他數(shù)據(jù)傳輸協(xié)議。我之所以選擇 UART,是因?yàn)樗泻芎玫奈臋n,易于使用,而且仍然需要它來進(jìn)行調(diào)試。

    傳感器

    各種場(chǎng)合都有大量的傳感器,它們需要測(cè)量所有存在的和不存在的物理量。它們是您設(shè)備的“眼睛和耳朵”。有了它們,您的設(shè)備就可以感知現(xiàn)實(shí)。

    水箱上有許多傳感器:

    • DHT-11 模塊溫度計(jì)和濕度計(jì)。不是很準(zhǔn)確,但便宜且易于使用。我認(rèn)為在坦克(帶遙測(cè))上應(yīng)該有一個(gè)經(jīng)典的傳感器 - 一個(gè)溫度計(jì)。
    • 霍爾傳感器 A3144,作為轉(zhuǎn)速計(jì)。一個(gè)小的釹磁鐵安裝在左側(cè)軌道的驅(qū)動(dòng)鏈輪上,一個(gè)霍爾傳感器放置在船體上靠近它的位置。傳感器讀取經(jīng)過它的每個(gè)磁鐵,并據(jù)此計(jì)算驅(qū)動(dòng)鏈輪的轉(zhuǎn)數(shù)。知道鏈輪的直徑,您就可以準(zhǔn)確地知道油箱以什么速度通過了多遠(yuǎn)的距離。這種即興創(chuàng)作的準(zhǔn)確性讓你希望更好,但效果很酷。
    • 氣壓計(jì) BMP-280。允許您獲得大氣壓力并基于該氣壓計(jì)算海拔高度。傳感器有多種適用于所有場(chǎng)合的工作模式,但設(shè)置起來有點(diǎn)復(fù)雜。
    • MPU-6050加速度計(jì)和陀螺儀模塊。一種用于測(cè)量空間方向的良好、快速的傳感器。使用復(fù)雜的數(shù)學(xué)來工作,但這可以通過許多可用的庫(kù)來彌補(bǔ)。
    • US-025 超聲波測(cè)距儀(HC-SR04 的模擬)。用于顯示距坦克前方最近障礙物的距離。

    I2C 總線的有趣錯(cuò)誤

    一些傳感器(MPU-6050、BMP-280)通過 I2C 連接。有時(shí)由于這條總線,Arduino Nano 微控制器可能會(huì)凍結(jié)。我用示波器觀察了公共汽車上發(fā)生的事情,而不是近似平坦的矩形形狀,我看到了可怕的扭曲信號(hào)前端,更像是三角形,甚至是隨機(jī)噪聲。我檢查了幾塊木板,沒有水箱,但結(jié)果是一樣的。我一直不知道是什么原因造成的。也許是因?yàn)榱畠r(jià)的 Arduino 零件或其他原因。通過 1.3 kOhm 將總線強(qiáng)力上拉到電源有幫助。
    pYYBAGSBojSAUqRcAAX0SjFOHuU153.jpg
    ?

    。

    • ?

      在我的例子中,安裝了最便宜的相機(jī)版本。對(duì)于那些想用第一人稱視角 (FPV) 做類似事情的人,我建議購(gòu)買鏡頭視角為 120° 的相機(jī)版本,因?yàn)橥ǔ5?66° 會(huì)產(chǎn)生非??杀慕Y(jié)果——它只是缺乏視野。

      執(zhí)行器

      這就是讓您的設(shè)備活躍起來的原因。例如,在我的坦克上,它是由兩個(gè)電機(jī)驅(qū)動(dòng)的。它也可能是某種激光和伺服系統(tǒng)來指向??它。

      執(zhí)行器通常會(huì)消耗很大一部分機(jī)載功率。由于微控制器本身只能通過小電流,因此有必要通過特殊的“適配器”——驅(qū)動(dòng)程序來控制這些設(shè)備。

      驅(qū)動(dòng)器是連接微控制器、執(zhí)行器和電源的電路板。這個(gè)想法是微控制器只發(fā)送諸如“做這個(gè)或那個(gè)”之類的控制信號(hào),而驅(qū)動(dòng)器本身會(huì)弄清楚如何正確地啟動(dòng)執(zhí)行器。您也可以從微控制器生成信號(hào),但隨后必須制作所有電路并實(shí)施控制算法。使用現(xiàn)成的專用設(shè)備(驅(qū)動(dòng)程序)效率更高、速度更快。

      對(duì)于坦克,我使用了 L298N 驅(qū)動(dòng)器。可以使用更新和更高效的驅(qū)動(dòng)程序。但我喜歡使用這樣的舊東西,它有一個(gè)殘酷的外觀和一個(gè)大的,最重要的是在工作后溫暖的散熱器 - 它賦予了坦克的精神并且完全適合它的“從桌子上的東西建造”設(shè)計(jì)。

      一共有9條控制命令:

      • “動(dòng)”:前進(jìn),后退。
      • “轉(zhuǎn)”:左、右。
      • “轉(zhuǎn)身”:前左右、前右、后左、后右。
      • “停止。”

      考慮到坦克的電機(jī)略有不同,它們具有不同的直線運(yùn)動(dòng)最大 PWM 信號(hào)(電機(jī)的最大速度)。

      電機(jī)控制原理:

      • “停止”命令 - 向驅(qū)動(dòng)器發(fā)送信號(hào)以停止電機(jī)。
      • “移動(dòng)”命令 - 驅(qū)動(dòng)器向前或向后旋轉(zhuǎn)兩個(gè)電機(jī)。
      • “轉(zhuǎn)彎”命令——轉(zhuǎn)彎一側(cè)的發(fā)動(dòng)機(jī)向后旋轉(zhuǎn),第二個(gè)發(fā)動(dòng)機(jī)向前旋轉(zhuǎn)。這樣就實(shí)現(xiàn)了原地快速轉(zhuǎn)彎。
      • “Moving with a turn”命令 - 與轉(zhuǎn)彎相對(duì)的軌道電機(jī)以 100% 工作,而轉(zhuǎn)彎側(cè)的電機(jī)降低轉(zhuǎn)數(shù),例如 70%。這導(dǎo)致平穩(wěn)地轉(zhuǎn)向制動(dòng)履帶的一側(cè)。

      可以使用更激進(jìn)的制動(dòng)策略,例如倒車或鎖定電機(jī),但考慮到我的坦克質(zhì)量小且?guī)缀跬耆珱]有慣性,這太過分了。此外,變速箱會(huì)阻止自發(fā)運(yùn)動(dòng),而且這種制動(dòng)器會(huì)在短時(shí)間內(nèi)消耗大量能量。

      要轉(zhuǎn)彎,您可以關(guān)閉(停止)轉(zhuǎn)彎一側(cè)的履帶發(fā)動(dòng)機(jī)。通過這種方式,您可以在履帶制動(dòng)器周圍的位置實(shí)現(xiàn)良好的半徑轉(zhuǎn)彎。

      如您所見,控制執(zhí)行器并不復(fù)雜。您只需根據(jù)電流消耗和您要控制的設(shè)備類型選擇適合您任務(wù)的驅(qū)動(dòng)程序。

      照片展示

      ?
      ?
      ?
      poYBAGSBojiARu6IAARVlcUt-Cc975.jpg
      ?
      1 / 7 ?坦克 - 前視圖
      ?

      獎(jiǎng)金照片

      poYBAGSBojyAKlNuAAVMm_d_PJc617.jpg
      ?

      結(jié)論

      我在 GitHub 上的存儲(chǔ)庫(kù)中發(fā)布了 Arduino 固件、ESP-32 和 Unity 應(yīng)用程序的所有源代碼,如果您發(fā)現(xiàn)“有趣的解決方案”,請(qǐng)不要感到驚訝。我的目標(biāo)是向您展示原理本身,最好的方法是自己弄清楚并根據(jù)您獲得的知識(shí)制作自己的東西。

      寫這篇文章幫助我列出了我在創(chuàng)建坦克時(shí)的所有經(jīng)驗(yàn)。并記住在此過程中出現(xiàn)的所有錯(cuò)誤和缺陷的解決方案,您可以避免這些錯(cuò)誤和缺陷,并專注于尋找自己獨(dú)特的錯(cuò)誤并與社區(qū)分享。我真的希望我能激勵(lì)別人創(chuàng)造出這樣一件很酷的東西。


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

評(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元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(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開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  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ì)》 溫德爾著
  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)