您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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 |

## 三、电路连接详解
### 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 -> 共地
# TCRT5000接法(从左到右编号1-5)
Sensor1 -> GPIO5
Sensor2 -> GPIO6
Sensor3 -> GPIO13
Sensor4 -> GPIO19
Sensor5 -> GPIO26
VCC -> 3.3V
GND -> 共地
HC-05 -> RPi
TX -> GPIO15 (RXD)
RX -> GPIO14 (TXD)
VCC -> 5V
GND -> GND
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)
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)
# 右电机同理
...
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) # 停止
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)
# 更多指令...
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)
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)
蓝牙连接失败
minicom
测试串口通信红外误检测
def read_sensor(pin):
return GPIO.input(pin) if sum([GPIO.input(pin) for _ in range(5)]) >= 3 else 0
电机抖动
添加OLED显示屏
接入物联网平台
视觉增强
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打印车体的设计文件说明
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。