基於 STM32 的智能馬桶系統設計與實現【源碼分享】【免費】
智能馬桶主控板軟硬件設計全解析(STM32F0 + HAL + FreeRTOS + Flutter App)
一、項目背景與概述
隨着智能家居的發展,智能馬桶已成為家庭衞浴場景中的高頻智能產品。相比傳統馬桶,智能馬桶在即熱式加熱、安全保護、清洗模式、健康監控等方面具備更高的技術要求。本項目基於 STM32F0 系列 MCU 設計了一款完整的智能馬桶主控系統,功能覆蓋電控加熱、風機控制、閥體控制、藍牙通信、健康數據上報等模塊,同時提供配套 Flutter 手機 App 用於交互。
項目採用 ST HAL 庫 + FreeRTOS 架構,具備良好的擴展性,方便後期加入 WiFi 聯網、用户習慣模型、自定義温控策略等功能。
源碼分享
免費開源
https://blog.csdn.net/weixin_52908342/article/details/155538872
二、硬件設計(PCB)
硬件架構上包含以下功能模塊:
- STM32F0 主控(核心控制邏輯)
- 即熱式加熱模塊控制
- DC 電磁閥與脈衝閥驅動電路
- 風機驅動與温度檔位控制
- 藍牙模塊(可替換為 2.4G 模塊)
- 電源管理(12V/5V/3.3V)
- 按鍵輸入與安全檢測
1. PCB 注意事項與優化建議
在實際調試中發現幾個可進一步優化的點:
✔ 12V MOSFET 控制端建議加下拉電阻
Q1 ~ Q5 的控制端加入適當的下拉電阻,可避免上電初期 MCU 未初始化時導致 MOSFET 漏觸發的問題。
✔ 藍牙模塊可替換為 2.4GHz(nRF24L01)
原藍牙方案在協議和移動端兼容性方面稍有限制,推薦使用 2.4G,減少配對與信號干擾問題,同時能更輕量地接入數據庫。
✔ 部分電阻標值需根據實際設計校準
早期設計中部分阻值未統一,調試時已根據情況校準,後續可按 wiki 文檔更新 PCB。
三、軟件架構設計(STM32 主控)
本系統採用 FreeRTOS 構建任務體系,將智能馬桶的各模塊功能拆分為獨立任務,使邏輯清晰、可維護性更強。
軟件架構如下:
| 模塊 | 功能 |
|---|---|
| 加熱控制任務 | 即熱式模塊啓停、温度 PID 控制、安全過温保護 |
| 水路控制任務 | 脈衝閥控制、大/小沖水邏輯、停電保護策略 |
| 風機與風温任務 | 檔位調節、風温控制 |
| 按鍵任務 | 本地物理按鍵事件解析、防抖處理 |
| 藍牙通信任務 | 與 Flutter App 交互、健康數據上報 |
| 系統監控任務 | 看門狗、錯誤監控、定時器溢出兜底處理 |
主控基於 HAL 庫開發,對應 IO 控制清晰簡潔,適合快速維護與移植。
四、手機 App(Flutter)設計
項目提供一個 Flutter 編寫的簡單調試/控制 App,用於藍牙配對、遠程操作、健康數據查看等功能。
1. 藍牙 ID 配置
修改 conBan.dart 中的藍牙 ID 即可完成配對:
var _BTid = "00:15:83:00:AB:00";
如果不知道設備 ID,可直接運行調試模式,App 會自動 scan 並打印掃描到的藍牙地址,在控制枱查看後填入即可。
2. 健康數據時間戳問題
當前 APP 的時間戳可能存在誤差,推測為手機本地設置或藍牙傳輸的緩存延遲問題。由於後續計劃加入 WiFi + 雲端同步,因此暫未深入修復。
未來調整方向:
- 控制協議與數據協議分離
- 引入個人習慣記錄(如温度偏好 / 風温偏好 / 座圈温度等)
- 健康數據通過 WiFi 上傳,藍牙只負責實時控制
五、已知問題與後續優化計劃
1. 按鍵邏輯順序錯誤(已修復)
原始按鍵事件的優先級與觸發順序不正確,導致長按/短按邏輯錯亂。已在最新版中修復邏輯。
2. 按鍵事件與電池 hold 動作衝突
由於按鍵 IO 與 hold 電池供電邏輯共用部分通道,可能導致:
- 沖水動作中斷電 → 沖水無法停止
- 需要再次按下按鍵才能恢復
臨時解決方案:
除停電衝水外,不持續 hold dcs_pin。
後續計劃:
將脈衝閥驅動電路獨立,使用 6V 驅動即可保持穩定的沖水能力,並實現停電時仍可大/小衝。
3. 風温檔位切換會導致計時器停止
原因:計時器設置了“為0後自動停止”,切換檔位時觸發該邏輯導致停止。
將在項目收尾後統一更新。
六、項目總結
這是一個從硬件到軟件、從 MCU 到移動端完整實現的智能馬桶控制系統。核心亮點包括:
- 基於 STM32F0 + FreeRTOS 的模塊化架構
- 支持即熱式模塊的實時温控
- Flutter App 簡易交互,藍牙直連體驗
- 全套可複用的 PCB + 軟件方案
- 結構開放,適合繼續擴展成更完整的智能家居產品
該項目仍在持續更新,更多內容可查看 wiki,也歡迎提出建議或進行二次開發。