首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

藍牙遙控小車製作實錄(二):Arduino 控制邏輯與串口指令解析

     編輯:關於C語言

專案現狀

車體機械結構已搭建完成,包含底盤、雙電機驅動輪、萬向輪、Arduino UNO 主控板、L298N 電機驅動模組、HC-05/HC-06 藍牙模組、電池盒。

硬體接線對照表

模組信號Arduino 腳位說明
L298NENA5 (PWM)左電機速度控制
IN16左電機方向
IN27左電機方向
IN38右電機方向
IN49右電機方向
ENB10 (PWM)右電機速度控制
HC-05/06TXD0 (RX)藍牙發送 → Arduino 接收
RXD1 (TX)Arduino 發送 → 藍牙接收 (需分壓)
VCC/GND5V/GND供電

控制邏輯代碼


const int ENA = 5, IN1 = 6, IN2 = 7, IN3 = 8, IN4 = 9, ENB = 10;
char cmd;

void setup() {
    pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENB, OUTPUT);
    Serial.begin(9600); // 藍牙模組預設波特率
}

void loop() {
    if (Serial.available()) {
        cmd = Serial.read();
        switch (cmd) {
            case 'w': // 前進
                digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
                digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
                analogWrite(ENA, 200); analogWrite(ENB, 200);
                Serial.println("Forward");
                break;
            case 's': // 後退
                digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
                digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
                analogWrite(ENA, 200); analogWrite(ENB, 200);
                Serial.println("Backward");
                break;
            case 'a': // 左轉 (左輪後退/停、右輪前進)
                digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
                digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
                analogWrite(ENA, 150); analogWrite(ENB, 150);
                Serial.println("Turn Left");
                break;
            case 'd': // 右轉
                digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
                digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
                analogWrite(ENA, 150); analogWrite(ENB, 150);
                Serial.println("Turn Right");
                break;
            case 't': // 停止
                digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
                digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
                analogWrite(ENA, 0); analogWrite(ENB, 0);
                Serial.println("Stop");
                break;
            default:
                Serial.print("Unknown cmd: "); Serial.println(cmd);
        }
    }
}

指令協定定義

字元動作差速邏輯
w前進雙輪同速前進
s後退雙輪同速後退
a左轉左輪後退/低速,右輪前進 (原地旋轉或大彎)
d右轉右輪後退/低速,左輪前進
t停止雙輪剎車 (輸出低電平)

常見問題與優化

  1. 藍牙波特率不匹配:HC-05 出廠 9600/38400/115200,需 AT 指令配置或嘗試常見值
  2. 電機抖動/不轉:PWM 頻率過低、電池電壓不足、L298N 發熱保護、接線虛焊
  3. 串口衝突:Arduino UNO 僅一組硬體串口 (D0/D1),上傳程式時需斷開藍牙模組 TX/RX,或使用 SoftwareSerial 移至其他腳位
  4. 增強功能:PID 速度閉環、超聲波避障、手機 APP 介面 (App Inventor/MIT AI2)、電量監測、OLED 狀態顯示

總結

本篇完成了從硬體接線到基礎運動控制的閉環。核心在於 L298N 方向邏輯 (IN1/IN2, IN3/IN4) 與 PWM 速度控制 (ENA/ENB) 的協調,以及串口非阻塞輪詢解析單字元指令。下一步可引入狀態機管理複雜行為、編碼器閉環控速、雙核/RTOS 架構提升實時性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved