初始树莓派系列文章
树莓派小车小白从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框架在树莓派上搭建一个远程控制系统:
- 首先,确保已经在树莓派上安装了Python和Flask。可以通过以下命令进行安装:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3 python3-pip
pip3 install flask
- 创建一个新的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)
- 创建一个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>
- 运行app.py文件,启动Flask服务器:
python3 app.py
- 通过浏览器访问树莓派的IP地址,例如http://192.168.1.100(请根据实际情况替换),然后通过表单控制树莓派上的GPIO引脚。
这个简单的例子只能控制LED灯的开关。可以根据需求扩展此项目,例如实现对电机、传感器等其他硬件设备的远程控制。将在后续文章中陆续实现。