跑跑啦航模

您现在的位置是:首页>精采瞬间

精采瞬间

树莓派智能小车:让电机转起来

paopaola2026-07-014636

接线接好了,这期开始写代码。我们用Python控制树莓派的GPIO,让电机按我们的指令转动。

👉 配合B站视频看更直观

跑跑啦航模 · 树莓派智能小车

一、准备工作

在树莓派终端里先安装RPi.GPIO库(大部分系统已预装):

sudo apt update
sudo apt install python3-rpi.gpio -y

二、基础驱动代码

新建一个Python文件 car.py,写入以下代码:

import RPi.GPIO as GPIO
import time

# 引脚定义(用BCM编号)
IN1 = 17  # 左电机方向1
IN2 = 18  # 左电机方向2
IN3 = 22  # 右电机方向1
IN4 = 23  # 右电机方向2
ENA = 27  # 左电机PWM使能
ENB = 24  # 右电机PWM使能

# 初始化
GPIO.setmode(GPIO.BCM)
GPIO.setup([IN1, IN2, IN3, IN4, ENA, ENB], GPIO.OUT)

# 设置PWM(频率100Hz)
pwmA = GPIO.PWM(ENA, 100)
pwmB = GPIO.PWM(ENB, 100)
pwmA.start(0)
pwmB.start(0)

def forward(speed=80):
    """前进"""
    GPIO.output(IN1, GPIO.HIGH)
    GPIO.output(IN2, GPIO.LOW)
    GPIO.output(IN3, GPIO.HIGH)
    GPIO.output(IN4, GPIO.LOW)
    pwmA.ChangeDutyCycle(speed)
    pwmB.ChangeDutyCycle(speed)

def backward(speed=80):
    """后退"""
    GPIO.output(IN1, GPIO.LOW)
    GPIO.output(IN2, GPIO.HIGH)
    GPIO.output(IN3, GPIO.LOW)
    GPIO.output(IN4, GPIO.HIGH)
    pwmA.ChangeDutyCycle(speed)
    pwmB.ChangeDutyCycle(speed)

def turn_left(speed=60):
    """左转(左轮慢/右转,右轮快/前进)"""
    GPIO.output(IN1, GPIO.LOW)
    GPIO.output(IN2, GPIO.HIGH)
    GPIO.output(IN3, GPIO.HIGH)
    GPIO.output(IN4, GPIO.LOW)
    pwmA.ChangeDutyCycle(speed)
    pwmB.ChangeDutyCycle(speed)

def turn_right(speed=60):
    """右转"""
    GPIO.output(IN1, GPIO.HIGH)
    GPIO.output(IN2, GPIO.LOW)
    GPIO.output(IN3, GPIO.LOW)
    GPIO.output(IN4, GPIO.HIGH)
    pwmA.ChangeDutyCycle(speed)
    pwmB.ChangeDutyCycle(speed)

def stop():
    """停止"""
    GPIO.output([IN1, IN2, IN3, IN4], GPIO.LOW)
    pwmA.ChangeDutyCycle(0)
    pwmB.ChangeDutyCycle(0)

# 测试运行
if __name__ == "__main__":
    try:
        print("前进 2秒")
        forward()
        time.sleep(2)
        
        print("后退 2秒")
        backward()
        time.sleep(2)
        
        print("左转 1秒")
        turn_left()
        time.sleep(1)
        
        print("右转 1秒")
        turn_right()
        time.sleep(1)
        
        print("停止")
        stop()
    finally:
        GPIO.cleanup()  # 清理GPIO状态

三、运行测试

python3 car.py

小车应该会先前进2秒、后退2秒、左转1秒、右转1秒、然后停止。

四、PWM调速说明

speed参数范围0~100,数值越大电机转得越快。

  • 30~50:慢速(适合精确控制)
  • 60~80:中速(日常行驶)
  • 90~100:全速前进

如果左右电机速度不一致(小车走不直),可以分别给pwmA和pwmB不同的值来补偿。

五、常见问题

Q:运行报错"RuntimeError: No access to /dev/mem"

→ 需要用sudo运行:sudo python3 car.py

Q:电机只有一个转

→ 检查不转那个电机的接线,或者交换OUT1/OUT2和OUT3/OUT4测试是不是电机本身坏了。

Q:电机反了(前进变后退)

→ 在代码里把IN1和IN2的HIGH/LOW对调就行,不用拆线重接。

下一期我们装底盘,把电路板固定到车架上,小车就有"身体"了!

  • 如果你需要购买航模产品,可以通过扫码联系哦!

    • 微信联系
    • 淘宝联系
  • 个人微信扫码

    工作时间

    周一至周日 9:00-21:00

  • 如果你需要购买航模产品,可以通过扫码联系哦!

    • 微信联系
    • 淘宝联系