基於 STM32 的無線控制小桌寵

基於 STM32 的無線控制小桌寵

60 多年過去了,儘管輝光管已經停產,有很多工程師仍然對它情有獨鍾。我用 8 塊液晶顯示屏製作了一個擬輝光管時鐘,感受復古元素的美感,表達對過去經典的敬意。

小桌寵是一款智能桌面機器人,它擁有在水平方向上的移動能力,並具備上下、左右、前後的運動能力,可以在桌面上自由行走並做出簡單的動作。這款智能桌面機器人既可用於教育和娛樂,也可作爲簡單的辦公輔助工具。

演示視頻

本項目旨在設計一款成本低、結構簡單的無線控制小桌寵。我充分利用現有的材料,並採用簡單的機械設計,結合微控制器和無線通信模塊,致力打造一款經濟實惠、易於製作和維護的智能桌面機器人。該小桌寵不僅是一款富有趣味的娛樂設備,更是一個能夠展示無線通信和微控制技術的實用項目。

在設計中,機身承載框被設計作爲軀幹,用於收納 PCB 和 SG90 舵機的多餘線路。此舉可提升整體結構的穩定性,並確保外觀整潔。通用四肢件在 SG90 舵機普通擺臂的基礎上進行仿生設計,使其具備上下、左右、前後的獨立運動能力,並可在水平方向移動。

電源方面,我採用了 18650 電池(見圖 1),輸出電壓爲 3.7V,並採用了 TP4056 充電模塊(見圖 2)進行充放電管理。主控芯片選用了意法半導體 F1 系列的 STM32F103C8T6模塊(見圖 3),該模塊採用 ARM Cortex-M3 32 位 RISC 核 心, 運行頻率可達 72MHz,具備豐富的外設接口,易於 PCB 佈局與焊接,並支持多種低功耗模式,廣泛用於嵌入式系統。

圖 1 18650 電池

圖 2 TP4056 充電模塊

圖 3 STM32F103C8T6 模塊

此外,我還採用了 nRF24L01 無線通信模塊(見圖4),作爲一款低成本、低功耗的 2.4GHz 無線收發器,該模塊適用於中短距離無線通信。在用戶交互方面,我採用了 0.96 英寸 OLED顯示屏(見圖 5),爲小桌寵提供生動的表現力,此模塊適用於對功耗有限制的小型電子設備,具備優秀的顯示效果和易用的通信接口。舵機部分我選擇了 SG90 舵機(見圖 6),這種體形小巧、價格低廉的舵機能夠在小型機械結構和電子設備控制中提供經濟、方便的解決方案。

圖 4 nRF24L01 無線通信模塊

圖 5 0.96 英寸 OLED 顯示屏

圖 6 SG90 舵機

在系統的調試方面,我添加了LED 和微動按鍵,這些部件能夠便於進行調試。

材料清單見附表,基本工具、耗材如電烙鐵、焊錫絲等則不再進行介紹。

機械結構

外觀設計

通過多次測試,我確定整個機器的外觀大小爲 62.9mm×99mm×99mm。這一大小經過精心改良,旨在滿足小桌寵設計的需求。受限於電池大小、主控模塊大小以及舵機大小,目前我難以對此設計進行進一步改進。

PCB設計

我使用了立創 EDA(專業版)作爲 PCB 設計工具,這是一款易於上手的 PCB 繪製軟件,其模塊化設計可以充分利用主控模塊。同時,這樣的設計也進一步降低了復刻和維修的難度。值得一提的是,本設計並未使用主控模塊的全部引腳,並且主控模塊可拆卸,以避免在項目擱置時主控模塊閒置。電路佈局和 PCB 外觀如圖 7 所示。

圖 7 電路佈局和 PCB 外觀

建模過程

PCB 設計完成後,我根據 PCB大小進行外殼設計,並使用 PLA 材料通過 3D 打印技術打印外殼。PLA 材料在保證結構強度的同時,進一步降低了製造成本。考慮到舵機的大小和走線,我對外殼進行了適當的下挖設計,以確保舵機的安裝,外殼模型如圖 8 所示。

圖 8 外殼模型

接下來,進行通用四肢件的設計,我參考了市面上的 4 足仿生機器人。我計劃在模型關節處採用 120°固定關節的設計方式,通過編程解決行走和姿態控制的問題。考慮到 4 個通用四肢件的方向存在差異,我採用挖空設計,以便後續打印。最終的通用四肢件模型如圖 9 所示,提供了更好的機械穩定性和靈活性,爲小桌寵的運動提供了更多可能。

圖 9 通用四肢件模型

電路設計

我設計的整體電路如圖 10 所示。

圖 10 整體電路

程序設計

我選擇 C 語言作爲主要編程語言, 並 在 Keil 5 中 進 行 開 發, 通 過Keil 5 編譯小桌寵的程序,採用 STLink 仿真燒錄器進行燒錄。開發過程基於 STM32 標準庫展進行,這一設計具備高度的可移植性,使得未來項目的開發更加便捷。

在算法部分,我借鑑了 4 足機器人步態數據,以行走步態(見圖 11)爲藍本,並根據行走步態的格式進行編寫。通過控制舵機在不同相位下的不同旋轉角度,小桌寵順利實現了行走步態。

圖 11 行走步態

我通過 final.h 對所有使用的程序進行封裝。這種做法不僅增強了程序的安全性,還有助於更好地管理各個模塊,提高了程序的可維護性和複用性,從而使程序更加穩定和易於擴展。

final.c 包含對各個模塊的定義,並負責校準舵機角度。通過硬件仿真,可以識別並解決舵機誤差,確保舵機能夠按預期運行,具體如程序 1 所示。

程序 2 介紹了前進步態函數,爲了確保能夠實時響應操作,我精確設計了各項函數的延遲。這一步驟的實施有助於確保小桌寵能夠在各種情況下做出即時而準確的反應,從而增強了其互動性和穩定性。

程序 3 主要負責 nRF24L01 模塊通過 SPI 協議進行通信,用於接收控制信號。這一模塊確保小桌寵能夠可靠地接收並解析來自遙控器或其他控制設備的指令,從而實現對小桌寵的靈活操控。

程 序 4 負 責 舵 機 PWM 控 制 信號的初始化和佔空比。在該模塊中,我 將 舵 機 控 制 周 期 設 定 爲 20ms,佔 空 比 設 定 爲 2.5%~12.5%, 對 應0°~180°,以便進行模塊化編寫。

程序 5 負責控制板載 LED,實現所需的各種 LED 效果。在實際演示中,僅在自檢時向 LED 發送全亮指令,以確保其正常工作,這一設計能夠爲小桌寵的不同狀態提供視覺指示,並進一步增強其交互性。

程 序 6 是 OLED 顯 示 函 數, 通過 I2C 協議通信,以實現用戶交互。這一模塊的設計使得小桌寵能夠通過OLED 顯示屏向用戶展示各種信息和狀態,提升用戶體驗。

結語

最 後, 我 把 機 械 結 構、PCB、電池等部件進行組裝,然後上電並燒錄編譯好的程序。通過與任意使用nRF24L01 模塊的遙控器進行通信,我可以發送指令,實現對小桌寵的無線控制。大家可以掃描文章開頭的二維碼觀看演示視頻。現在可以好好欣賞智能小桌寵(見圖 12)啦!

圖 12 智能小桌寵