🚗 PIC18F 手排檔位遙控車系統 - 一個完整模擬汽車換檔運作邏輯的微控制器專案
原始碼連結: GitHub - ManualCarController
YouTube 影片: 專案演示
本專案是一個搭載 PIC18F 微控制器 的手排檔位遙控車系統,透過藍牙(HC-06)無線遙控,實現了完整的汽車換檔機制模擬。與市面上常見的直驅遙控車不同,本專案挑戰「實體機械換檔」設計,利用步進馬達驅動自製的齒條與連桿機構。
- 油門控制 - 10 段前進 / 後退速度調整。
- 機械換檔系統 - 2 檔位自動轉換邏輯(1 檔 / 2 檔)。
- 手動檔位校準(Reset) - 精確控制步進馬達,重新設定齒輪初始位置。
- OLED 即時顯示 - 使用 SSD1306 顯示當前時速與檔位。
- 數位鑰匙 - 以可變電阻作為車輛啟動開關。
- 狀態指示 LED - 顯示馬達正反轉及相對速度感。
ManualCarController/
├── main.c # 主程式入口
├── Makefile # 編譯組態檔
├── nbproject/ # NetBeans 專案設定
└── setting_hardaware/ # 硬體驅動層 (HAL)
├── adc.c/h # ADC 類比數位轉換驅動
├── ccp.c/h # CCP 捕捉/比較/PWM 模組
├── gear_shifting.c/h # 換檔邏輯
├── I2C.c/h # I2C 通訊協定
├── interrupt_manager.c/h # 中斷處理管理
├── pin_manager.c/h # 腳位功能配置管理
├── setting.c/h # 系統初始設定
├── SSD1306.c/h # OLED 顯示器驅動
├── timer.c/h # 定時器管理
└── uart.c/h # 序列埠 (UART) 通訊驅動
- 前進 (a~j): 輸入 10 段速度,PWM 輸出 0~500 給 CCP1(直流馬達)。
- 後退 (l~u): 輸入 10 段速度,PWM 輸出 0~500 給 CCP2。
- LED 指示燈會根據正反轉與速度感改變亮度或狀態。
輸入 A/B 進行檔位切換
- 1 檔 → 2 檔:步進馬達正向旋轉,推動連桿。
- 2 檔 → 1 檔:步進馬達反向旋轉,拉回連桿。
系統會記錄前一次檔位,判斷馬達移動方向與旋轉時間。
- 步進馬達控制精度:0.1 秒為最小單位。
- OLED 即時顯示當前檔位狀態。
輸入: R + rdxrty
- rd: 方向 (0=右, 1=左,由車頭向車尾看)
- rt: 時間倍數 (以 0.1 秒為單位)
範例: Rd 表示向右移動 0.1 秒
R1d3 表示向左移動 0.3 秒
用於手動微調步進馬達,確保齒輪咬合在精確位置。
- 使用可變電阻 (RA0) 作為啟動開關。
- 需轉動至正中央(指定區間)才能解鎖並操控車輛。
- 模擬真實汽車插進鑰匙轉動的互動體驗。
即時輸出內容:
- 換檔時: "Gear: [gear_num]"
- 變速時: "Speed: [speed_num]"
- 校準時: "Reset Gear mode"
- 馬達 A: 直流馬達(動力/油門)- 透過 CCP1, CCP2 進行 PWM 控制。
- 馬達 B: 步進馬達(換檔機構)- 透過 RD6, RD7 腳位控制訊號。
- 馬達驅動板: L9110 雙通道馬達驅動模組。
Main Loop (主迴圈)
├── 讀取藍牙輸入 (UART)
├── 判斷工作模式
│ ├── 模式 1: 油門控制
│ ├── 模式 2: 換檔邏輯
│ └── 模式 3: 檔位校準
├── ADC 採樣 (可變電阻鑰匙)
├── I2C 輸出至 OLED
└── 中斷處理 (Interrupts)
├── Timer1: 步進馬達精確計時
├── UART: 藍牙接收中斷
└── 外部中斷
藍牙模組 (HC-06)
↓
[PIC18F MCU]
├─→ PWM (CCP1/CCP2) → L9110 → 直流馬達 (動力)
├─→ GPIO (RD6/RD7) → 步進馬達驅動 → 步進馬達 (換檔)
├─→ ADC (RA0) ← 可變電阻 (鑰匙)
├─→ I2C (SDA/SCL) → SSD1306 OLED
├─→ GPIO → LED1, LED2 (狀態燈)
└─→ UART (RX/TX) ← 藍牙連線
供電系統:
2 顆 3.7V 鋰電池 (總電壓 7.4V) → 降壓模組 → 5V (MCU 與周邊)
→ 7.4V 直供 (馬達驅動板)
指令: a~j (前進 10 段) 或 l~u (後退 10 段)
效果:
- 調整直流馬達轉速。
- PWM Duty Cycle (佔空比) 0~500。
- LED 燈號隨轉速與方向變化。
指令: A 或 B
效果:
- 自動判斷「當前檔位」與「目標檔位」之關係。
- 步進馬達帶動連桿機構位移。
- 根據上一次檔位紀錄,自動計算馬達需轉動的時間。
- OLED 顯示更新後的檔位。
指令: R + rdxrty (rd: 方向 0/1, rt: 0.1 秒倍數)
效果:
- 精確控制步進馬達的微幅移動。
- 可調整齒輪至任何指定位置以修正機械誤差。
小組名稱: PIC18F Manual Car - 第十組
| 成員 | 主要貢獻 |
|---|---|
| 余嘉憲 | 換檔機構設計、OLED 顯示、操縱邏輯與韌體撰寫、換檔 Debug、電路設計、車體 CAD 設計 |
| 丁泓元 | OnShape 車體建模、馬達控制邏輯、藍牙通訊韌體、電路設計 |
| 曾令城 | 變速機構實作、車體組裝、流程圖繪製、文件整合、可變電阻鑰匙設計 |
| 黃威誠 | 車體切割、結構強化、零件加工、電路焊接 |
- PIC18F 微控制器
- HC-06 藍牙模組
- SSD1306 OLED 顯示螢幕
- L9110 雙通道馬達驅動模組
- 直流馬達 (動力源)
- 步進馬達 (換檔動力)
- 3.7V 鋰電池 × 2
- 降壓模組 (5V)
- 濾波電容
- 齒輪組、傳動軸、軸套
- 優塑板 (車體架構)
- 齒條與連桿機構
- MPLAB X IDE / MPLAB C18 編譯器
- OnShape (3D 建模)
- 車輛通電: 開啟電源後,轉動可變電阻至中點位置(啟動數位鑰匙)。
- 藍牙配對: 手機連線至 HC-06 (預設配對碼為 1234 或 0000)。
- 發送指令: 開啟「藍牙終端機 (Bluetooth Terminal)」App 發送指令。
| 指令 | 功能 | 備註 |
|---|---|---|
a~j |
前進 1~10 速 | 速度遞增 |
l~u |
後退 1~10 速 | 速度遞增 |
A |
切換至 1 檔 | 低速檔 |
B |
切換至 2 檔 | 高速檔 |
R + rdxrty |
檔位校準 | 用於修正齒輪位置 |
- 自製模擬手排變速箱:
- 不同於一般遙控車直接驅動,本專案實作了機械式的變速結構。
- 使用步進馬達搭配齒條,達成物理上的檔位切換。
- 數位鑰匙系統:
- 整合 ADC 功能,利用可變電阻模擬發動車子的過程,增加趣味性。
- 硬體整合與保護:
- 在電路上加入濾波電容,防止馬達啟動或卡死時產生的突波導致藍牙斷訊或 MCU 重啟。