微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python 3中将齿轮箱的转数转换为RPM

如何解决在Python 3中将齿轮箱的转数转换为RPM

我正在用python3构建一个机器人。我有一个引擎报告其变速箱在更长的完全停机之间的总转数:

import ftrobopy    
Motor1 = Robo.motor(1)
Motor1.getCurrentdistance()

因此,在暂停后,该值将从0开始,然后升至任意值(快速以6位数字表示),直到某个时候重置为止。

现在,我想运行一些依赖于rpm的代码。当RPM超过特定值时,IE会升至更高的档位。因此,我需要找到一种方法将电动机报告的转数转换为每个时间间隔的转数。

我需要一些与rpm的短期变化密切相关的东西,以反映最近几秒钟内发生的事情。我不确定如何实现。

我尝试实施此解决方案:

Calculating revolutions per minute in Python from an Arduino

删除串行部件,并使用Motor1.getCurrentdistance()for = a。

但是它似乎并没有完全满足我的需求。如果您能给我任何指示,将不胜感激。

EDIT2:这是事物的当前状态:

from __future__ import print_function
import time
import ftrobopy
import threading


txt=ftrobopy.ftrobopy('auto')

joystick1 = txt.joystick(0,1,1)
joystick2 = txt.joystick(1,1)
Motor1 = txt.motor(1)
Motor1.setdistance(0)
txt.updateWait()

def infiniteloop1():  # this controls the motor via a remote
    while True:
        Motor1.setSpeed(joystick1.leftright() * 512)


def infiniteloop2():  # this is for the rpm meter
    while True:
        curRev = Motor1.getCurrentdistance()
        t0 = time.time()
        lastRev = 0

        while (curRev == Motor1.getCurrentdistance()):
            t1 = time.time()
            try:
                rpm = (curRev - lastRev / ((t1 - t0) / 4320))
                print("RPM: " + "%.1f" % rpm)
                print("RevsTotal: " + str(Motor1.getCurrentdistance()))
                time.sleep(5)
                txt.updateWait()

            except ZeroDivisionError:
                pass
            t0 = t1
            lastRev = curRev
            txt.updateWait()






thread1 = threading.Thread(target=infiniteloop1)
thread1.start()

thread2 = threading.Thread(target=infiniteloop2)
thread2.start()

当我执行此操作时,它将以RPM和TotalRev = 0开始,然后RPM和TotalRev保持相同的值(100..200 ..)。当我停止电动机时,TotalRev保持在最后一个值,而RPM变为负数,随着时间的流逝将逐渐变大。我一定在某个地方搞砸了?

解决方法

您不计算电动机执行的转数,仅计算经过的时间

rpm = (1 / ((t1 - t0) / 60))

您需要包含一个变量来存储最近的转数,然后从当前转数中减去该数。

def infiniteloop2():  # this is for the rpm meter
    while True:
        Motor1 = txt.motor(1)
        a = Motor1.getCurrentDistance()
        t0 = time.time()
        lastRev = 0

        while (curRev == Motor1.getCurrentDistance()):
            t1 = time.time()
            try:
                rpm = (curRev - lastRev / ((t1 - t0) / 60))
                print("RPM: " + "%.1f" % rpm)

            except ZeroDivisionError:
                pass
            time.sleep(2)
            t0 = t1
            lastRev = curRev

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。