创新实践【Raspberry Pi 开发】==树莓派智能小车

初始树莓派系列文章

树莓派小车小白从0到1开发之路,大家如果有兴趣可以共同讨论
第一篇: 基础模块的学习使用 (L298N驱动板)


一、关于L298N电机驱动板

在这里插入图片描述

  • 78M05是一种三端口电流正固定电压稳压器,这些端子分别是输入端子、公共端子和输出端子,使用平面外延制造工艺构造, 以TO-220形式封装,输出电流的最大值为500mA,输入偏置电流为3.2mA,输入电压的最大值为35V,由于其具有在过流过热时关断的保护功能,在现实中被广泛使用。
  • 稳压模块能否生效完全取决于5V使能跳帽是否启用(拔掉禁用、插入启用,默认是板载连通的),这里分两种情况,接通和未接通:

在这里插入图片描述

板载跳帽:当电源小于或等于12V时,内部电路将由稳压器供电,并且5V引脚作为微控制器供电的输出引脚,即:VCC作为7805的输入,5V是7805的输出,从而可以为板载提供5v电压,为外部电路供电使用

拔掉跳帽:当电源大于12V时,拔掉跳帽,并且应通过5V端子单独为内部供电,即:VCC不作为7805的输入,而+5v由外部电路提供,此时就需要两个供电电源,VCC和+5V

  • 7V<U<12V:当使用驱动电压(上图标识为12V,实际可以接受的输入范围是 7-12V)为7V-12V的时候,可以使能板载(就是图中板载5V使能)的5V逻辑供电,当使用板载5V供电之后,接口中的+5V供电不要输入电压,如果强行供电,有可能会烧坏右侧电容,但可以直接5V电压供外部使用,一般引出来直接给开发板供电,比如:Arduino

  • 12V<U<=24V:芯片手册中提出可以支持到35v,但是按照经验一般298保守应用最大电压支持到24V已经很牛了,如果要驱动额定电压为18V的电机,首先必须拔除板载5V输出使能的跳帽,然后在5V输出端口外部接入5V电压对L298N内部逻辑电路供电。

1.1电源引脚

  • VCC :外接直流电源引脚,电压范围在5~35V之间
  • GND:是接地引脚,连接到电源负极
  • +5V :驱动芯片内部逻辑供电引脚,如果安装了5V跳帽,则此引脚可输出5V电压,为微控板或其他电路提供电力供给,如果拔掉5V跳帽,则需要独立外接5V电源

1.2控制引脚

  • IN1 & IN2 :电机驱动器A的输入引脚,控制电机A转动及旋转角度

IN1输入高电平HIGH,IN2输入低电平LOW,对应电机A正转
IN1输入低电平LOW,IN2输入高电平HIGH,对应电机A反转
IN1、IN2同时输入高电平HIGH或低电平LOW,对应电机A停止转动
PWM调速:就是改变IN1、IN2高电平的占空比(需拔掉ENA处跳帽,不拔跳帽就是全速启动)

  • IN3 & IN4 :电机驱动器B的输入引脚,控制电机B转动及旋转角度

IN3输入高电平HIGH,IN4输入低电平LOW,对应电机B正转
IN3输入低电平LOW,IN4输入高电平HIGH,对应电机B反转
IN3、IN4同时输入高电平HIGH或低电平LOW,对应电机B停止转动
PWM调速:就是改变IN3、IN4高电平的占空比(需拔掉ENB处跳帽,不拔跳帽就是全速启动)

1.3输出引脚

OUT1 & OUT2 电机驱动器A的输出引脚,接直流电机A或步进电机的A+和A-
OUT3 & OUT3 电机驱动器B的输出引脚,接直流电机B或步进电机的B+和B-

1.4调速控制引脚

ENA 电机A调速开关引脚,拔掉跳帽,使用PWM对电机A调速,插上电机A高速运行
ENB 电机B调速开关引脚,拔掉跳帽,使用PWM对电机B调速,插上电机B高速运行

在这里插入图片描述

在这里插入图片描述


二、样例程序

需要特别注意引脚编码方式:

GPIO.setmode(GPIO.BOARD)  下方附图
import RPi.GPIO as GPIO
import time

# 设置GPIO引脚编号模式
GPIO.setmode(GPIO.BOARD)  # 物理引脚模式

# out输出引脚不在程序中体现
# 定义左右轮电机引脚
motor1_pin1 = 11
motor1_pin2 = 12

motor1_en = 13  # 电机1使能引脚

motor2_pin1 = 15
motor2_pin2 = 16

motor2_en = 18  # 电机2使能引脚

# 初始化GPIO引脚状态
GPIO.setup(motor1_pin1, GPIO.OUT)
GPIO.setup(motor1_pin2, GPIO.OUT)
GPIO.setup(motor1_en, GPIO.OUT)
GPIO.setup(motor2_pin1, GPIO.OUT)
GPIO.setup(motor2_pin2, GPIO.OUT)
GPIO.setup(motor2_en, GPIO.OUT)


# 定义方向函数
def forward():
    GPIO.output(motor1_pin1, True)
    GPIO.output(motor1_pin2, False)
    GPIO.output(motor2_pin1, True)
    GPIO.output(motor2_pin2, False)


def backward():
    GPIO.output(motor1_pin1, False)
    GPIO.output(motor1_pin2, True)
    GPIO.output(motor2_pin1, False)
    GPIO.output(motor2_pin2, True)


def left():
    GPIO.output(motor1_pin1, False)
    GPIO.output(motor1_pin2, True)
    GPIO.output(motor2_pin1, True)
    GPIO.output(motor2_pin2, False)


def right():
    GPIO.output(motor1_pin1, True)
    GPIO.output(motor1_pin2, False)
    GPIO.output(motor2_pin1, False)
    GPIO.output(motor2_pin2, True)


# 定义速度函数
def setSpeed(speed):
    motor1_pwm = GPIO.PWM(motor1_en, 100)
    motor2_pwm = GPIO.PWM(motor2_en, 100)
    motor1_pwm.start(speed)
    motor2_pwm.start(speed)


# 运动控制
setSpeed(50)  # 设置初始速度
forward()  # 小车前进
time.sleep(3)  # 前进3秒
left()  # 左转
time.sleep(2)  # 左转2秒
backward()  # 后退
time.sleep(3)  # 后退3秒
right()  # 右转
time.sleep(2)  # 右转2秒
GPIO.cleanup()  # 清除GPIO引脚状态

三、关于树莓派引脚图(4B)

在这里插入图片描述


四、接入FLASK框架

下一步计划是采用FLASK框架开发网站,实现远程操控接口

实例开发:

  • 树莓派(Raspberry Pi)是一款功能强大的微型计算机,可以用来执行各种任务。Flask是一个轻量级的Python Web框架,可以用来快速搭建Web应用。通过结合这两者,可以实现对树莓派的远程控制。

以下是一个简单的例子,演示如何使用Flask框架在树莓派上搭建一个远程控制系统:

  1. 首先,确保已经在树莓派上安装了Python和Flask。可以通过以下命令进行安装:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3 python3-pip
pip3 install flask
  1. 创建一个新的Python文件,例如app.py,并输入以下代码:
from flask import Flask, render_template, request
import RPi.GPIO as GPIO

app = Flask(__name__)
GPIO.setmode(GPIO.BCM)

# 定义一个控制LED的函数
def control_led(pin, state):
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, state)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/control', methods=['POST'])
def control():
    pin = int(request.form['pin'])
    state = int(request.form['state'])
    control_led(pin, state)
    return 'Success'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

  1. 创建一个HTML模板templates/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>树莓派远程控制</title>
</head>
<body>
    <h1>树莓派远程控制</h1>
    <form action="/control" method="post">
        <label for="pin">Pin:</label>
        <input type="number" name="pin" id="pin">
        <label for="state">State:</label>
        <input type="number" name="state" id="state">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

  1. 运行app.py文件,启动Flask服务器:
python3 app.py

  1. 通过浏览器访问树莓派的IP地址,例如http://192.168.1.100(请根据实际情况替换),然后通过表单控制树莓派上的GPIO引脚。

这个简单的例子只能控制LED灯的开关。可以根据需求扩展此项目,例如实现对电机、传感器等其他硬件设备的远程控制。将在后续文章中陆续实现。

猜你喜欢

转载自blog.csdn.net/IWICIK/article/details/130466078