锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

树莓派智能小车开发详解

时间:2022-11-02 11:30:00 智能提醒红外传感器

这虽然是个成熟的课题,但真的实践起来还是很多坑,如重复购买不同的硬件,因为之前并不知道这些细节。而且结果也未必让你满意,不过是效仿,抄些代码,别无价值!

所以我想写这篇文章,希望你能花更少的时间和金钱,有底层的移动代码,更高端的控制概念,得到一个可持续开发的智能汽车解决方案。

智能汽车真的很重要。它不仅是连接代码和实践的简单例子,也是即将到来的智能时代第一个广泛使用的智能产品。现在已经开始使用的物流仓库智能汽车方案已经看到了。

先说我们要实现的功能:前进、后退、左右转向、调速、程序调试、手机遥控、避障、测距、定位、视觉、搜索、程序控制等。,最后简单执行你的任务!

与其他项目不同,智能汽车的关键是你的控制器是移动的。在这里,控制器选择覆盆子派,也就是说,我们不能像编写其他程序一样将覆盆子派连接到显示器上。解决办法是安装远程桌面,在树莓派上写一个调试窗口,这样我们就可以很容易地在电脑或手机上编写和调试我们的智能汽车程序。但在这里我也想提醒你,因为远程桌面的通信速度真的不敢称赞,为了在未来获得更好的灵敏度,使用遥控手柄或编写通信程序是必不可少的。

代码驱动部分(motor.py):

#!/usr/bin/env python3

# -*- coding: UTF-8 -*-

from tkinter import*

import RPi.GPIO as GPIO

import time

#定义 GPIO 引脚

MotorL=[11,12] #树莓派pin11、pin12接L298N管脚IN1、IN2.控制左侧电机的正转、反转和停止

MotorR=[13,15] #树莓派pin13、pin15接L298N管脚IN3、IN4.控制右侧电机的正转、反转和停止

MotorL_PWM = 16 #树莓派pin16接L298N管脚ENA,控制左电机调速

MotorR_PWM = 18 #树莓派pin18接L298N管脚ENB,控制右侧电机调速

#设置 GPIO 模式为 BOARD

GPIO.setmode(GPIO.BOARD)

#设置 GPIO 的工作方式

GPIO.setup(MotorL, GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(MotorR, GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(MotorL_PWM, GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(MotorR_PWM, GPIO.OUT,initial=GPIO.LOW)

#创建并启动脉宽调制,频率为50HZ,将初始占空比设为0

PWML = GPIO.PWM(MotorL_PWM, 50)

PWMR = GPIO.PWM(MotorR_PWM, 50)

PWML.start(0)

PWMR.start(0)

#电机停止

def Motor_Stop():

GPIO.output(MotorL,GPIO.LOW)

GPIO.output(MotorR,GPIO.LOW)

#电机正转

def Motor_Fwd(duty1,duty2,runtime):

PWML.ChangeDutyCycle(duty1)

PWMR.ChangeDutyCycle(duty2)

# 将高电平输送到正转引脚

GPIO.output(MotorL,(GPIO.HIGH,GPIO.LOW))

GPIO.output(MotorR,(GPIO.HIGH,GPIO.LOW))

time.sleep(runtime)

Motor_Stop()

#电机反转

def Motor_Rev(duty1,duty2,runtime):

PWML.ChangeDutyCycle(duty1)

PWMR.ChangeDutyCycle(duty2)

# 将高电平输送到反转引脚

GPIO.output(MotorL,(GPIO.LOW,GPIO.HIGH))

GPIO.output(MotorR,(GPIO.LOW,GPIO.HIGH))

time.sleep(runtime)

Motor_Stop()

#释放管脚,销毁窗口

def myDestory():

GPIO.cleanup() #释放管脚

myWindow.destroy() #销毁进程

#初始化Tk()

myWindow = Tk()

#设置标题

myWindow.title(‘树莓派智能车’)

Button(myWindow, text='前进', command= lambda:Motor_Fwd(15,15,3)).grid(row=0, column=1,sticky=W, padx=5, pady=5)

Button(myWindow, text='后退', command= lambda:Motor_Rev(15,15,3)).grid(row=2, column=1, sticky=W, padx=5, pady=5)

Button(myWindow, text='左转', command= lambda:Motor_Fwd(15,25,1)).grid(row=1, column=0,sticky=W, padx=5, pady=5)

Button(myWindow, text='右转', command= lambda:Motor_Fwd(25,15,1)).grid(row=1, column=2, sticky=W, padx=5, pady=5)

#当指定窗口关闭时,调用销毁函数

myWindow.protocol("WM_DELETE_WINDOW",myDestory)

#进入消息循环

myWindow.mainloop()

接下来,我们可以通过计算机端 Xshell 6 远程登录树莓派(记得安装 Xmanager 6)并在命令下使用 python3 motor.py 命令运行以上代码,得到以下一个简单的调试窗口(如下图),现在可以通过窗口控制你的小车行走了。

调试窗口:

30f3e76e6b3a8d4d4010e9610bdfc2c3.png

有很多远程桌面软件,我们也可以使用 VNC View,它不仅可以在电脑上运行,还可以在手机上运行,也就是说,你也可以在手机上运行驱动代码来控制你的车。但是选择的原因 Xshell 6 ,因为它会调用 Xmanager 6 打开程序窗口(如上图所示),而不是远程桌面,速度相对较快。

驱动部分的硬件构成:

这里选择了树莓派Raspberry Pi 3B ,啰嗦一下,玩树莓派热片和风扇是必不可少的。

车底:网上卖的很多,也可以根据自己的喜好做。建议双层,空间更容易布置。

车轮:4个

汽车电机:4台带减速器的直流12V电机,其实两轮驱动也可以,但感觉四轮驱动有足够的动力。

电机驱动板:L298N

电池:12V锂电池包。也可以选择自己组装12个电池盒。V电源,但感觉锂电包充电更方便。容量越大越好。

直流电压转换板:这里选择LM2596,这是一个可调的直流电源转移方案。我们将电池12V电压降到5.2V用于树莓派和一些传感器的供电。

驱动部分:

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章