跑跑啦航模

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

一、准备工作

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

二、基础驱动代码

import RPi.GPIO as GPIO
import time

IN1, IN2, IN3, IN4 = 17, 18, 22, 23
ENA, ENB = 27, 24

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

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:
        forward(); time.sleep(2)
        backward(); time.sleep(2)
        turn_left(); time.sleep(1)
        turn_right(); time.sleep(1)
        stop()
    finally:
        GPIO.cleanup()

三、PWM调速说明

  speed参数范围0~100。30~50慢速精确控制,60~80中速行驶,90~100全速。如果左右电机速度不一致(小车走不直),分别给pwmA和pwmB不同的值补偿。

四、常见问题

  运行报错:用sudo运行:sudo python3 car.py

  电机只有一个转:检查不转那个电机的接线,或交换OUT1/OUT2测试电机本身是否坏了。

  方向反了:代码里对调IN1/IN2的HIGH/LOW即可,不用拆线。

跑跑啦航模详情

联系手机15058675618 qq售后群号241350086 微信号paopaola_com
长距离FPV无人机,高清传感器模块,终身保修和升级服务。