溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么制作藍牙+紅外循跡小車

發布時間:2022-01-13 10:29:38 來源:億速云 閱讀:208 作者:iii 欄目:互聯網科技
# Python怎么制作藍牙+紅外循跡小車

## 一、項目概述

藍牙+紅外循跡小車是結合無線控制與自動巡線功能的智能機器人項目,適合作為Python物聯網(IoT)和嵌入式開發的入門實踐。本項目將使用:

- **Python**作為主控語言(樹莓派/Raspberry Pi Pico)
- **HC-05/HC-06藍牙模塊**實現手機遠程控制
- **TCRT5000紅外傳感器**實現黑線檢測
- **L298N電機驅動模塊**控制直流電機
- **PWM調速技術**實現精準運動控制

## 二、硬件準備清單

| 組件 | 型號 | 數量 | 備注 |
|------|------|------|------|
| 主控板 | Raspberry Pi 4B/Pico | 1 | 推薦使用Pico W(內置藍牙) |
| 藍牙模塊 | HC-05/HC-06 | 1 | 若用Pico W可省略 |
| 紅外傳感器 | TCRT5000 | 5 | 建議呈"一"字排列 |
| 電機驅動 | L298N | 1 | 支持雙電機控制 |
| 直流電機 | TT馬達 | 2 | 帶減速齒輪箱 |
| 車輪 | 65mm橡膠輪 | 2 | 配套TT馬達使用 |
| 電池 | 18650鋰電池組 | 1 | 7.4V輸出 |
| 車體底盤 | 亞克力/3D打印 | 1 | 建議長15cm寬10cm |

![硬件連接示意圖](https://example.com/smart_car_diagram.png)

## 三、電路連接詳解

### 3.1 主控板與L298N連接
```python
# Raspberry Pi 4B引腳示例
L298N    ->  RPi GPIO
ENA      ->  GPIO18 (PWM)
IN1      ->  GPIO23
IN2      ->  GPIO24
IN3      ->  GPIO27
IN4      ->  GPIO22
ENB      ->  GPIO17 (PWM)
GND      ->  共地

3.2 紅外傳感器陣列連接

# TCRT5000接法(從左到右編號1-5)
Sensor1 -> GPIO5
Sensor2 -> GPIO6
Sensor3 -> GPIO13
Sensor4 -> GPIO19
Sensor5 -> GPIO26
VCC     -> 3.3V
GND     -> 共地

3.3 藍牙模塊接線

HC-05    ->  RPi
TX       ->  GPIO15 (RXD)
RX       ->  GPIO14 (TXD)
VCC      ->  5V
GND      ->  GND

四、Python核心代碼實現

4.1 初始化設置

import RPi.GPIO as GPIO
import time
import serial

# 引腳定義
MOTOR_PINS = {
    'ENA': 18, 'IN1': 23, 'IN2': 24,
    'ENB': 17, 'IN3': 27, 'IN4': 22
}
IR_SENSORS = [5, 6, 13, 19, 26]

# 初始化GPIO
GPIO.setmode(GPIO.BCM)
for pin in MOTOR_PINS.values():
    GPIO.setup(pin, GPIO.OUT)
for sensor in IR_SENSORS:
    GPIO.setup(sensor, GPIO.IN)

# PWM初始化
pwm_a = GPIO.PWM(MOTOR_PINS['ENA'], 1000)
pwm_b = GPIO.PWM(MOTOR_PINS['ENB'], 1000)
pwm_a.start(0)
pwm_b.start(0)

# 藍牙串口
bluetooth = serial.Serial("/dev/ttyS0", 9600, timeout=1)

4.2 電機控制函數

def motor_control(speed_left, speed_right, direction_left, direction_right):
    """控制雙電機運動
    :param speed: 0-100 PWM占空比
    :param direction: 0停止 1正轉 2反轉
    """
    # 左電機控制
    if direction_left == 0:
        GPIO.output(MOTOR_PINS['IN1'], GPIO.LOW)
        GPIO.output(MOTOR_PINS['IN2'], GPIO.LOW)
    elif direction_left == 1:
        GPIO.output(MOTOR_PINS['IN1'], GPIO.HIGH)
        GPIO.output(MOTOR_PINS['IN2'], GPIO.LOW)
    else:
        GPIO.output(MOTOR_PINS['IN1'], GPIO.LOW)
        GPIO.output(MOTOR_PINS['IN2'], GPIO.HIGH)
    pwm_a.ChangeDutyCycle(speed_left)

    # 右電機同理
    ...

4.3 紅外循跡算法

def line_following():
    sensor_values = [GPIO.input(s) for s in IR_SENSORS]
    
    # 傳感器狀態判斷
    if sensor_values == [0,0,1,0,0]:  # 居中
        motor_control(60, 60, 1, 1)
    elif sensor_values[0] == 1:       # 極左偏
        motor_control(30, 80, 1, 1)
    elif sensor_values[-1] == 1:      # 極右偏
        motor_control(80, 30, 1, 1)
    # 更多狀態判斷...
    else:
        motor_control(0, 0, 0, 0)    # 停止

4.4 藍牙指令處理

def bluetooth_handler():
    while True:
        cmd = bluetooth.readline().decode().strip()
        if cmd:
            print(f"Received: {cmd}")
            if cmd == 'F':  # 前進
                motor_control(70, 70, 1, 1)
            elif cmd == 'S':  # 停止
                motor_control(0, 0, 0, 0)
            # 更多指令...

五、系統整合與優化

5.1 多線程控制

import threading

def main():
    # 創建線程
    bt_thread = threading.Thread(target=bluetooth_handler)
    lf_thread = threading.Thread(target=line_following)
    
    # 啟動線程
    bt_thread.daemon = True
    lf_thread.daemon = True
    bt_thread.start()
    lf_thread.start()
    
    while True:
        time.sleep(0.1)

5.2 PID算法優化

class PIDController:
    def __init__(self, Kp, Ki, Kd):
        self.Kp = Kp
        self.Ki = Ki
        self.Kd = Kd
        self.last_error = 0
        self.integral = 0
    
    def compute(self, error, dt):
        self.integral += error * dt
        derivative = (error - self.last_error) / dt
        output = self.Kp*error + self.Ki*self.integral + self.Kd*derivative
        self.last_error = error
        return output

pid = PIDController(0.5, 0.01, 0.2)

六、常見問題解決

  1. 藍牙連接失敗

    • 檢查AT指令模式:按住HC-05按鍵上電,LED慢閃進入AT模式
    • 使用minicom測試串口通信
  2. 紅外誤檢測

    • 調節TCRT5000上的電位器
    • 增加軟件去抖:
      
      def read_sensor(pin):
       return GPIO.input(pin) if sum([GPIO.input(pin) for _ in range(5)]) >= 3 else 0
      
  3. 電機抖動

    • 確保PWM頻率在1kHz以上
    • 添加濾波電容(100μF)到電機電源

七、項目擴展方向

  1. 添加OLED顯示屏

    • 使用SSD1306顯示實時傳感器數據
  2. 接入物聯網平臺

    • 通過MQTT協議上傳數據到Home Assistant
  3. 視覺增強

    • 配合OpenCV實現顏色識別跟蹤
  4. ROS集成

    • 將小車作為ROS節點開發

八、完整代碼獲取

項目完整代碼已開源至GitHub:

git clone https://github.com/username/smart-car-python.git

(注:實際字數約2800字,完整3950字版本需補充更多技術細節和調試日志) “`

這篇文章包含了: 1. 完整的硬件配置清單 2. 詳細的電路連接說明 3. Python核心代碼實現 4. 系統優化方案 5. 常見問題解決方法 6. 項目擴展方向

如需達到3950字,可以: 1. 增加每個傳感器的原理說明 2. 補充PID參數調試過程 3. 添加具體的性能測試數據 4. 擴展藍牙APP開發內容 5. 加入3D打印車體的設計文件說明

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女