ev3启程之路一:一部小车

    在开头奉献一个很好的资料,是外文的,可以用翻译看,地址是http://python-ev3dev.readthedocs.io/en/latest/index.html 可以去看一看。

    好了,闲话少说,进入正题,我们打算做一个比较全能的东西,经过再三思索,打算做一辆十分霸道(前面带个榔头)的小车。

    拼积木不是我的强项,所以让我的那个朋友来拼,观赏一下结果吧:

从正面看

从侧面看:

从后面看

从下面看:


从上面看:


    既然拼的部分已经好了,那么接下来就是程序了。

    我编辑是用Linux里面的nano编辑器的,用法就是nano (打开的文本(在砖里已经有的)或新建文本(在砖里没有的))

    我们先把这辆车分成四个控制部分:红外传感器x1(检测是否有手接近)、大型电机x2(伺服电机)(可以驱动小车)、中型电机x1(也是伺服电机)(拿来砸人)。然后分开来写。我们要先导入库:

from ev3dev.ev3 import * 

   首先要驱动的是大型伺服电机,因为它是拿来驱动小车的。我马上查阅了资料,找到了它的函数:LargeMotor(),我们定义了一个变量a,让它赋值为LargeMotor的实例,并定义它在端口a执行,就是 a=LargeMotor('outA') 。然后我们再把另一个电机再如法炮制一遍,合起来就是: a=LargeMotor('outA')  //回车 b=LargeMotor('outB')然后我们要驱动它,就要用: xxx(是个实例).run_timed(time_sp=工作时间,speed_sp=功率) 。这里我用了

    然后我们要使红外传感器能够感应到手,在资料里,显示他是 InfraredSensor() 这个函数。二话不说,定义一个变量ids,使它成为 InfraredSensor() 的实例。然后我们要检测距离,可以用 ids.value() 就可以得到它的距离值了(我不知道它的单位,如果有人知道,就告诉我吧)用 if 语句就可以检测手有没有接近了。

    然后我们要让那个榔头会动,我们需要一个中型电机,而中型电机的驱动函数是: MediumMotor() ,换汤不换药,当然是定义一个c来成为它的实例,然后我们让它顺时针转2秒,再逆时针转两秒,用这个来达到榔头一砸一收的效果。

    接下来我们把中型电机转动的语句放入if 语句里,这样如果有手靠近,那么就把锤子砸下去。

    现在这个小车已经有模有样了但我还是不满足,想要做一个转弯的功能。思路是这样的:1、倒退一定距离(负功率)。2、一个电机转的慢,一个电机转的快,使其拐弯(看下面一幅图,绿色环的外面转的多,时间相同,速度要快,里面转的少,时间相同,速度要慢,一个轮子速度快,一个轮子速度慢,就能完成这个效果,比如图上的两根红线,里面的短,外面长,就可以从一根红线的方向换到另一根红线的方向)要使一个电机转的慢,一个电机转的快,那么要使功率一个大,一个小,这就可以了。


最后贡献一下源代码和运行视频:

源代码:

from ev3dev.ev3 import *
from time import *
a=LargeMotor('outA')
b=LargeMotor('outB')
c=MediumMotor('outC')
ids=InfraredSensor()
while True:
    a.run_timed(time_sp=1000,speed_sp=500)
    b.run_timed(time_sp=1000,speed_sp=500)
    sleep(1)
    if ids.value()<=30:
        Sound.speak("please back")
        c.run_timed(time_sp=2000,speed_sp=500)
        sleep(2)
        c.run_timed(time_sp=2000,speed_sp=-500)
        #screen.draw.text((10,10),'please back',font=fonts.load('luBS14'))
        a.run_timed(time_sp=3000,speed_sp=-300)
        b.run_timed(time_sp=3000,speed_sp=-300)
        sleep(3)
        a.run_timed(time_sp=3000,speed_sp=30)
        b.run_timed(time_sp=3000,speed_sp=300)

        sleep(3)

视频链接:https://v.youku.com/v_show/id_XMzcwMTc5NzU0OA==.html?spm=a2h3j.8428770.3416059.1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值