Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Manual Car Controller (手排遙控車控制器)

🚗 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) 通訊驅動

🔧 主要功能模組

1️⃣ 油門控制 (Throttle Control)

  • 前進 (a~j): 輸入 10 段速度,PWM 輸出 0~500 給 CCP1(直流馬達)。
  • 後退 (l~u): 輸入 10 段速度,PWM 輸出 0~500 給 CCP2。
  • LED 指示燈會根據正反轉與速度感改變亮度或狀態。

2️⃣ 機械換檔系統 (Gear Shifting)

輸入 A/B 進行檔位切換
- 1 檔 → 2 檔:步進馬達正向旋轉,推動連桿。
- 2 檔 → 1 檔:步進馬達反向旋轉,拉回連桿。

系統會記錄前一次檔位,判斷馬達移動方向與旋轉時間。

  • 步進馬達控制精度:0.1 秒為最小單位。
  • OLED 即時顯示當前檔位狀態。

3️⃣ 檔位校準模式 (Reset Gear)

輸入: R + rdxrty
- rd: 方向 (0=右, 1=左,由車頭向車尾看)
- rt: 時間倍數 (以 0.1 秒為單位)

範例: Rd 表示向右移動 0.1 秒
     R1d3 表示向左移動 0.3 秒

用於手動微調步進馬達,確保齒輪咬合在精確位置。

4️⃣ 數位鑰匙 (Digital Key)

  • 使用可變電阻 (RA0) 作為啟動開關。
  • 需轉動至正中央(指定區間)才能解鎖並操控車輛。
  • 模擬真實汽車插進鑰匙轉動的互動體驗。

5️⃣ I2C 顯示器驅動 (SSD1306 OLED)

即時輸出內容:
- 換檔時: "Gear: [gear_num]"
- 變速時: "Speed: [speed_num]"  
- 校準時: "Reset Gear mode"

6️⃣ 馬達驅動與控制

  • 馬達 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 直供 (馬達驅動板)

📊 工作模式詳解

模式 1️⃣ - 油門控制 (Throttle Mode)

指令: a~j (前進 10 段) 或 l~u (後退 10 段)
效果: 
  - 調整直流馬達轉速。
  - PWM Duty Cycle (佔空比) 0~500。
  - LED 燈號隨轉速與方向變化。

模式 2️⃣ - 換檔邏輯 (Gear Shifting Mode)

指令: A 或 B
效果:
  - 自動判斷「當前檔位」與「目標檔位」之關係。
  - 步進馬達帶動連桿機構位移。
  - 根據上一次檔位紀錄,自動計算馬達需轉動的時間。
  - OLED 顯示更新後的檔位。

模式 3️⃣ - 檔位校準 (Reset Gear Mode)

指令: 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 建模)

📖 使用說明

快速上手

  1. 車輛通電: 開啟電源後,轉動可變電阻至中點位置(啟動數位鑰匙)。
  2. 藍牙配對: 手機連線至 HC-06 (預設配對碼為 1234 或 0000)。
  3. 發送指令: 開啟「藍牙終端機 (Bluetooth Terminal)」App 發送指令。

指令表

指令 功能 備註
a~j 前進 1~10 速 速度遞增
l~u 後退 1~10 速 速度遞增
A 切換至 1 檔 低速檔
B 切換至 2 檔 高速檔
R + rdxrty 檔位校準 用於修正齒輪位置

💡 設計創新與挑戰

🏆 創新亮點

  1. 自製模擬手排變速箱:
  • 不同於一般遙控車直接驅動,本專案實作了機械式的變速結構。
  • 使用步進馬達搭配齒條,達成物理上的檔位切換。
  1. 數位鑰匙系統:
  • 整合 ADC 功能,利用可變電阻模擬發動車子的過程,增加趣味性。
  1. 硬體整合與保護:
  • 在電路上加入濾波電容,防止馬達啟動或卡死時產生的突波導致藍牙斷訊或 MCU 重啟。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages