精华内容
下载资源
问答
  • 树莓派控制小车的运动 详细功能看注释 import RPi.GPIO as GPIO import time #导入库 #这些是各个引脚的接口 IN1 = 20 IN2 = 21 IN3 = 19 IN4 = 26 ENA = 16 ENB = 13 #GPIO初始化模式 GPIO.setmode(GPIO.BCM) ...

    树莓派控制小车的运动
    详细功能看注释

    import RPi.GPIO as GPIO
    import time  #导入库
    
    #这些是各个引脚的接口
    IN1 = 20
    IN2 = 21
    IN3 = 19
    IN4 = 26
    ENA = 16
    ENB = 13
    #GPIO初始化模式 
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    #GPIO初始化状态
    def motor_init():
    # pwm_ENA and pwm_ENB 是用来控制小车速度的
        global pwm_ENA 
        global pwm_ENB
        global delaytime #delaytime 可以用来控制小车的运动时间
        GPIO.setup(ENA,GPIO.OUT,initial=GPIO.HIGH) 
        GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)
        GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)
        GPIO.setup(ENB,GPIO.OUT,initial=GPIO.HIGH)
        GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)
        GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)
        #设置pwm频率
        pwm_ENA = GPIO.PWM(ENA,2000)
        pwm_ENB = GPIO.PWM(ENB,2000)
        #pwm启动
        pwm_ENA.start(0)
        pwm_ENB.start(0)
    
    #############################################################################
    #前面已经将小车的引脚初始化完成了,现在所需要的就是控制引脚的电流来控制小车的运动
    #GPIO.output() 可以用来控制电流,pwm.ChangeDutyCycle()是用来控制频率的,间接用来控制车速
    #我的小车的IN1和IN2是一对,IN3和IN4是一对 当1是HIGH的时候左边前进,2是HIGH的时候左边后退
    #1和2,3和4 只能是HIGH和LOW 一对的 不能是两个都是HIGH 或者 LOW
    #可能每个人的车都不一样吧,大体套路都是一样的
    ############################################################################
    #前进
    def run(delaytime):
        GPIO.output(IN1,GPIO.HIGH)  #setting GPIO
        GPIO.output(IN2,GPIO.LOW)
        GPIO.output(IN3,GPIO.HIGH)
        GPIO.output(IN4,GPIO.LOW)
        pwm_ENA.ChangeDutyCycle(80) #setting speed
        pwm_ENB.ChangeDutyCycle(80)
        time.sleep(delaytime) #setting delaytime
    #左转
    def left(delaytime):
        GPIO.output(IN1,GPIO.LOW)
        GPIO.output(IN2,GPIO.LOW)
        GPIO.output(IN3,GPIO.HIGH)
        GPIO.output(IN4,GPIO.LOW)
        pwm_ENA.ChangeDutyCycle(40)
        pwm_ENB.ChangeDutyCycle(40)
        time.sleep(delaytime)
    #原地左转
    def spin_left(delaytime):
        GPIO.output(IN1,GPIO.LOW)
        GPIO.output(IN2,GPIO.HIGH)
        GPIO.output(IN3,GPIO.HIGH)
        GPIO.output(IN4,GPIO.LOW)
        pwm_ENA.ChangeDutyCycle(10)
        pwm_ENB.ChangeDutyCycle(40)
        time.sleep(delaytime)
    
    def right(delaytime):
        GPIO.output(IN1, GPIO.HIGH)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
        pwm_ENA.ChangeDutyCycle(80)
        pwm_ENB.ChangeDutyCycle(80)
        time.sleep(delaytime)
    #原地右转
    def spin_right(delaytime):
        GPIO.output(IN1, GPIO.HIGH)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.HIGH)
        pwm_ENA.ChangeDutyCycle(80)
        pwm_ENB.ChangeDutyCycle(80)
        time.sleep(delaytime)
    #停车
    def brake(delaytime):
        GPIO.output(IN1, GPIO.LOW)
        GPIO.output(IN2, GPIO.LOW)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.LOW)
        pwm_ENA.ChangeDutyCycle(80)
        pwm_ENB.ChangeDutyCycle(80)
        time.sleep(delaytime)
    #后退
    def back(delaytime):
        GPIO.output(IN1, GPIO.LOW)
        GPIO.output(IN2, GPIO.HIGH)
        GPIO.output(IN3, GPIO.LOW)
        GPIO.output(IN4, GPIO.HIGH)
        pwm_ENA.ChangeDutyCycle(80)
        pwm_ENB.ChangeDutyCycle(80)
        time.sleep(delaytime)
    #前面几个函数分别是用来控制小车运动的 可以通过一系列检测或者控制来使用上面
    #的函数,从而达到与小车的信息交互
        
    
    
    

    在这里插入图片描述

    展开全文
  • 本文主要讲述我是如何实现通过网页实现小车控制的。当前的实现方式比较简陋,只能支持控制网页和树莓派在同一个局域网中的场景。如果以后还有精力,可能会进行一些改进。1. 基本思路2. 服务端控制程序server.py# --...

    F

    L

    R

    B

    cameraAddress?action=stream

    Up

    Left

    Right

    Down

    展开全文
  • 原标题:树莓派小车教程(三)——软件代码树莓派小车教程(三)——软件代码2017-07-07 琳小豆 HelloWorld少儿编程 树莓派小车教程(三) 在上一次教程中,...我们采用的是python编程,没学过python的小伙伴也不用...

    原标题:树莓派小车教程(三)——软件代码

    树莓派小车教程(三)——软件代码

    2017-07-07 琳小豆 HelloWorld少儿编程

    5293dc7b748a43fb988ae670ab633f0c.png

    e7af9901c2364dcc965f40e002b822eb.png

    树莓派小车教程

    (三)

    e7af9901c2364dcc965f40e002b822eb.png

    5383db12e2684b18939cfd7809112986.png

    在上一次教程中,我们已经完成了硬件连接。完成硬件连接后我们打开电源,可以看到L298N上的灯亮起来,呈红色。

    beed0051c74b48259bbdb200ea6297c1.png

    如上图所示。

    那么接下来我们要做的就是导入软件代码,实现小车“动起来”。

    我们采用的是python编程,没学过python的小伙伴也不用担心,因为我们编程语句都较为简单。并且,Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

    我们先打开树莓派终端,在输入代码前,我们要注意先导入一个gpio模块。导入语句为:

    import RPi.GPIO as GPIO

    输入完这个语句后,可以看到终端里显示导入的百分比(50%)这种。

    导入成功后,在终端中创建一个新的python文件。

    创建语句为:

    vi xiaoche.py

    xiaoche是你创建的文件的名字,就像你平时创建一个word文档,文档的名字一样。

    然后我们输入代码:

    #导入gpio的模块

    import RPi.GPIO as GPIO

    import time

    #设置gpio口的模式

    GPIO.setmode(GPIO.BOARD)

    #定义信号接口gpio口

    INT1 = 11

    INT2 = 12

    INT3 = 13

    INT4 = 15

    #设置gpio口为输出

    GPIO.setup(INT1,GPIO.OUT)

    GPIO.setup(INT2,GPIO.OUT)

    GPIO.setup(INT3,GPIO.OUT)

    GPIO.setup(INT4,GPIO.OUT)

    #这里参考上一节模块接线的L298N模块的控制图

    GPIO.output(INT1,GPIO.HIGH)

    GPIO.output(INT2,GPIO.LOW)

    GPIO.output(INT3,False)

    GPIO.output(INT4,False)

    #延时2秒之后执行cleanup释放GPIO接口

    time.sleep(2)

    GPIO.cleanup()

    我来解释一下上面标红的一段代码,先看一下上一期连接的图。

    注意观察,上图中的INT1接的口是11,因此代码中我们就给INT1定义为11,INT2\3\4也是如此。

    然后保存文件,退出,在终端里敲入执行xiaoche.py的执行语句:

    sudo python xiaoche.py

    我们可以看到小车的马达转动起来啦!那么大家会发现,小车并没有行进,只有两个轮子转动,是为什么呢?

    我们来看一下这段代码:

    GPIO.output(INT1,GPIO.HIGH)

    GPIO.output(INT2,GPIO.LOW)

    GPIO.output(INT3,False)

    GPIO.output(INT4,False)

    fcf8326eb4fd4968b9f6b8c19963acca.png

    我标红的地方是决定小车轮子如何转动、哪几个轮子转动的重要代码。

    8ae641a8d02a49958d8ef9a5882ed784.png

    如果是高电平,就设置HIGH;低电平,设置LOW。

    不妨设置下看看叭!

    特大喜讯:helloworld少儿编程网站已经上线啦!欢迎大家注册使用,现邀请好友还能获得优惠哦!

    重磅消息:HelloWorld 少儿编程网站震撼上线啦!(一)

    重磅消息:HelloWorld 少儿编程网站震撼上线啦!(二)

    重磅消息:HelloWorld 少儿编程网站震撼上线啦!(三)返回搜狐,查看更多

    责任编辑:

    展开全文
  • 基于Python编程的智能小车寻线驾驶研究.pdf
  • 所以当时也是花了很多时间来琢磨、实验小车控制方面的东西。因为时间过去比较久了,这里也就只是记录一下当时踩过的坑、实现的一些思路以及绝大部分源代码。截止当前,我的树莓派小车实现的主要功能是:控制小车前进...

    0. 写在前面:

    一两个月前偶然得到一个树莓派一代,发现还是挺强大的,然后就考虑着自己实现一个四驱小车。因为本身是学软件的,所以利用软件来控制实实在在可见的硬件一直是自己的一个梦想。所以当时也是花了很多时间来琢磨、实验小车控制方面的东西。因为时间过去比较久了,这里也就只是记录一下当时踩过的坑、实现的一些思路以及绝大部分源代码。截止当前,我的树莓派小车实现的主要功能是:

    控制小车前进、后退、左转、右转、后退左转、后退右转

    摄像头两路舵机控制(实现摄像头上下左右旋转)

    网页版小车控制程序(小车控制程序、实时监控、摄像头旋转控制)

    微信小程序版小车控制程序(功能基本同上)

    (本文只是介绍上述的第一个功能,其他功能的实现在后续的博文中介绍)

    1. 准备:

    给树莓派安装系统(这个网上资料太多,一搜一大把,我装的是raspbian)

    安装python3

    准备四个步进电机,电机驱动,并组装连接好(我都是在某宝上买的,电机及其组件是在“亚博智能科技”买的,驱动是在“深圳市艾尔赛科技”上买的L298N四路电机驱动)

    一些可能遇到的坑:

    首先要注意电机驱动的输入电压,电压过低很可能无法带动电机(当然也不可过高)

    电机驱动输入有一个GND,这个一定要连接树莓派的一个GND输出,否则可能出现电机驱动异常(我当时遇到的情况是:手接触驱动电路中的金属电机就可以正常转动,手一松开电机就不能正常运转了)

    2. 基本思路:

    将连接端口作为一个配置文件,该配置文件定义小车需要使用的端口

    控制程序读取配置文件,并实现小车的方向控制

    小车控制程序定义了私有的向各个方向移动的方法,然后定义一个方法接受方向参数,该方法内部再调用具体的移动方法

    需要说明的是:由于使用引脚的不同,以及电机安装位置的差异,所以不能保证以下程序能够直接使用。

    3. 配置文件内容如下(文件名为:config.ini):

    [car]

    # This is the parmaters that will control the car's wheels

    # The number is the interface number of GPIO (GPIO.BOARD)

    LEFT_FRONT_1 = 7

    LEFT_FRONT_2 = 11

    RIGHT_FRONT_1 = 13

    RIGHT_FRONT_2 = 15

    LEFT_BEHIND_1 = 31

    LEFT_BEHIND_2 = 33

    RIGHT_BEHIND_1 = 35

    RIGHT_BEHIND_2 = 37

    4. 小车控制程序(文件名为:car_controler.py):

    # coding=utf-8

    import RPi.GPIO as GPIO

    import time

    import configparser

    class FourWheelDriveCar():

    # Define the number of all the GPIO that will used for the 4wd car

    def __init__(self):

    '''

    1. Read pin number from configure file

    2. Init all GPIO configureation

    '''

    config = configparser.ConfigParser()

    config.read("config.ini")

    self.LEFT_FRONT_1 = config.getint("car", "LEFT_FRONT_1")

    self.LEFT_FRONT_2 = config.getint("car", "LEFT_FRONT_2")

    self.RIGHT_FRONT_1 = config.getint("car", "RIGHT_FRONT_1")

    self.RIGHT_FRONT_2 = config.getint("car", "RIGHT_FRONT_2")

    self.LEFT_BEHIND_1 = config.getint("car", "LEFT_BEHIND_1")

    self.LEFT_BEHIND_2 = config.getint("car", "LEFT_BEHIND_2")

    self.RIGHT_BEHIND_1 = config.getint("car", "RIGHT_BEHIND_1")

    self.RIGHT_BEHIND_2 = config.getint("car", "RIGHT_BEHIND_2")

    GPIO.setmode(GPIO.BOARD)

    GPIO.setwarnings(False)

    GPIO.setup(self.LEFT_FRONT_1, GPIO.OUT)

    GPIO.setup(self.LEFT_FRONT_2, GPIO.OUT)

    GPIO.setup(self.RIGHT_FRONT_1, GPIO.OUT)

    GPIO.setup(self.RIGHT_FRONT_2, GPIO.OUT)

    GPIO.setup(self.LEFT_BEHIND_1, GPIO.OUT)

    GPIO.setup(self.LEFT_BEHIND_2, GPIO.OUT)

    GPIO.setup(self.RIGHT_BEHIND_1, GPIO.OUT)

    GPIO.setup(self.RIGHT_BEHIND_2, GPIO.OUT)

    def reset(self):

    # Rest all the GPIO as LOW

    GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)

    GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)

    def __forword(self):

    self.reset()

    GPIO.output(self.LEFT_FRONT_1, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)

    def __backword(self):

    self.reset()

    GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)

    def __turnLeft(self):

    '''

    To turn left, the LEFT_FRONT wheel will move backword

    All other wheels move forword

    '''

    self.reset()

    GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)

    def __turnRight(self):

    '''

    To turn right, the RIGHT_FRONT wheel move backword

    All other wheels move forword

    '''

    self.reset()

    GPIO.output(self.LEFT_FRONT_1, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_2, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)

    def __backLeft(self):

    '''

    To go backword and turn left, the LEFT_BEHIND wheel move forword

    All other wheels move backword

    '''

    self.reset()

    GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.LOW)

    def __backRight(self):

    '''

    To go backword and turn right, the RIGHT_BEHIND wheel move forword

    All other wheels move backword

    '''

    self.reset()

    GPIO.output(self.LEFT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.LEFT_FRONT_1, GPIO.LOW)

    GPIO.output(self.RIGHT_FRONT_2, GPIO.HIGH)

    GPIO.output(self.RIGHT_FRONT_1, GPIO.LOW)

    GPIO.output(self.LEFT_BEHIND_2, GPIO.HIGH)

    GPIO.output(self.LEFT_BEHIND_1, GPIO.LOW)

    GPIO.output(self.RIGHT_BEHIND_1, GPIO.HIGH)

    GPIO.output(self.RIGHT_BEHIND_2, GPIO.LOW)

    def __stop(self):

    self.reset()

    def carMove(self, direction):

    '''

    Car move according to the input paramter - direction

    '''

    if direction == 'F':

    self.__forword()

    elif direction == 'B':

    self.__backword()

    elif direction == 'L':

    self.__turnLeft()

    elif direction == 'R':

    self.__turnRight()

    elif direction == 'BL':

    self.__backLeft()

    elif direction == 'BR':

    self.__backRight()

    elif direction == 'S':

    self.__stop()

    else:

    print("The input direction is wrong! You can just input: F, B, L, R, BL,BR or S")

    if __name__ == "__main__":

    raspCar = FourWheelDriveCar()

    while(True):

    direction = input("Please input direction: ")

    raspCar.carMove(direction)

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • cpp代码:import threadingimport SocketServerimport RPi.GPIO as GPIOfrom SocketServer import StreamRequestHandler as SRHfrom AlphaBot import AlphaBotfrom PCA9685 import PCA9685from time import ctimeAb ...
  • 一、组件介绍大家好,我是Sunny。今天将给大家带来系列教程《树莓派小车系列》,先给大家介绍介绍我这次使用到...这个小车最主要部分就是L298N模块的控制控制住了L298N这个模块就控制住了我们整个小车,这里我弄一...
  • 最近一个星期学习了一下python的pygame模块,顺便做个小程序巩固所学的,运行效果如下:其中,背景图"highway.jpg"是使用PhotoShop将其分辨率改变为640 × 480,而小车"car.png"则是将其转变为png格式的...
  • 主要介绍了Python编程pygame模块实现移动的小车示例代码,具有一定借鉴价值,需要的朋友可以参考下
  • 今天跟大家分享一个利用树莓派和L298N模块制作...程序思路:(1)在树莓派上编写一个控制小车运行的文件index.py。(2)在树莓派上利用Python的bottle库建立web应用服务,运行main.py。(3)在手机浏览器访问树莓...
  • 树莓派 python 控制小车上下左右移动程序注释 import RPi.GPIO as GPIO import time PWMA = 18 # 两个方向位 AIN1 = 22 AIN2 = 27 PWMB = 23 BIN1 = 25 BIN2 = 24 # 速度0-100 # 利用time.sleep(t_time)函数...
  • Python编编程程pygame模模块块实实现现移移动动的的小小车车示示例例代代码码 这篇文章主要介绍了Python编程pygame模块实现移动的小车示例代码具有一定借鉴价值,需要的朋友可以参考 下 Pygame是 平台Python模块专为...
  • AutoRCCar Python3 + OpenCV3 See self-driving in action This project builds a self-driving RC car using Raspberry Pi, Arduino and open source software. Raspberry Pi collects inputs from a camera module...
  • 树莓派作主板的四轮驱动小车,通过VNC控制,有语音播放功能,Python编程。 主要特点: *四轮驱动,动力强,可载重二十公斤。 *前进,后退,转向灵活行驶。 *手动五档位(包括倒档)。车轮直径越大速度越快。 *...
  • 最近一个星期学习了一下python的pygame模块,顺便做个小程序巩固所学的,运行效果如下:其中,背景图"highway.jpg"是使用PhotoShop将其分辨率改变为640 × 480,而小车"car.png"则是将其转变为png格式的...
  • 权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责...
  • ~~ 如果有什么问题可以在我的Five-great的博客留言,我会及时回复。欢迎来访交流 ~~ 下面是小车 ...好丑对不对 ,不过反正可以蛇皮走位就行。...只需要一个index.html 和Index.py就可以实现简单WiFi控制小车。 ...
  • 任务介绍 在本任务中,您将使用可用的测量值和运动模型来递归估计车辆沿轨迹的位置。车辆有了非常简单的LIDAR传感器,可以返回与环境中各个地标相对应的范围(range)和方位测量值(bearing)。...
  • 随着时代发展的趋势,以及各个政策的出台,市场上的机器人兴趣...支持makecode图形化编程,支持基于Mind+的图形化编程及python编程 体积迷你,移动灵活 全金属微型减速电机,质量优良,驱动力强 巡线、氛围灯、LED车

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,245
精华内容 498
关键字:

python编程控制小车

python 订阅