Python 物联网入门指南(八)(3)

简介: Python 物联网入门指南(八)

Python 物联网入门指南(八)(2)https://developer.aliyun.com/article/1507343

速度控制

能够如此轻松地制作一个机械臂真是太神奇了,只需一点点代码,我们现在就能够按照自己的意愿来控制它。然而,你可能已经注意到了一个问题,那就是,机器人按照我们的意愿移动,但速度不是我们想要的。这是在使用基于数字 PWM 的舵机时非常常见的问题。

这些舵机没有内置的速度控制。它们的控制系统被编程为尽可能快地移动舵机以达到目标位置。因此,要控制速度,我们必须对程序本身进行调整,并给它一个平稳的线性进展。

速度控制可以通过几种不同的技术来实现。所以,不多说了,让我们去看看代码。在你编写代码之前,先读一遍,然后看一下下面的解释。之后,你会更清楚我们在做什么。这将使编写代码更快、更容易。所以,让我们来看看:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(14,GPIO.OUT) GPIO.setup(16,GPIO.OUT) GPIO.setup(18,GPIO.OUT) GPIO.setup(20,GPIO.OUT) GPIO.setup(21,GPIO.OUT) GPIO.setup(22,GPIO.OUT)
  GPIO.setwarnings(False) pwm1 = GPIO.PWM(14, 50) pwm2 = GPIO.PWM(16, 50) pwm3 = GPIO.PWM(18, 50) pwm4 = GPIO.PWM(20, 50) pwm5 = GPIO.PWM(21, 50) pwm6 = GPIO.PWM(22, 50)
  pwm1.start(0) pwm2.start(0) pwm3.start(0) pwm4.start(0) pwm5.start(0) pwm6.start(0)
def cvt_angle(angle):
    dc = float(angle/90) + 0.5
    return dc
prev0 = 90
prev1 = 90
prev2 = 90
prev3 = 90
prev4 = 90
prev5 = 90 
pwm1.ChangeDutyCycle(cvt_angle(prev0)) pwm2.ChangeDutyCycle(cvt_angle(prev1)) pwm3.ChangeDutyCycle(cvt_angle(prev2)) pwm4.ChangeDutyCycle(cvt_angle(prev3)) pwm5.ChangeDutyCycle(cvt_angle(prev4)) pwm6.ChangeDutyCycle(cvt_angle(prev5)) 
while True:
 a = raw_input("enter a list of 6 values for motor 1")
 b = raw_input("enter a list of 6 values for motor 2")
 c = raw_input("enter a list of 6 values for motor 3")
 d = raw_input("enter a list of 6 values for motor 4")
 e = raw_input("enter a list of 6 values for motor 5")
 f = raw_input("enter a list of 6 values for motor 6")
    speed = raw_input("enter one of the following speed 0.1, 0.2, 0.5, 1")
 for i in range(6):
   while prev0 =! a[i] and prev1 =! b[i] and prev2 =! c[i] and prev3 =! d[i] and prev4 =! e[i] and prev 5 =! f[i]
     if a[i] > 10 and a[i]< 180 : 
        if prev0 > a[i]
            prev0 = prev0 - speed
         if prev0 < a[i]
             prev0 = prev0 + speed
         if prev0 = a[i]
             prev0 = prev0 
         pwm1.ChangeDutyCycle(cvt_angle(prev0))
    if b[i] > 10 and b[i] < 180:
        if prev2 > b[i]
            prev2 = prev2 - speed
         if prev2 < b[i]
             prev2 = prev2 + speed
         if prev2 = b[i]
            prev2 = prev2
  pwm2.ChangeDutyCycle(cvt_angle(b[i]))
    if c[i] > 10 and c[i] < 180: if prev3 > c[i]
             prev3 = prev3 - speed
        if prev3 < c[i]
            prev3 = prev3 + speed
        if prev3 = c[i]
             prev3 = prev3
 pwm3.ChangeDutyCycle(cvt_angle(c[i]))
    if d[i] > 10 and d[i] < 180: if prev4 > d[i]
             prev4 = prev4 - speed
        if prev4 < d[i]
            prev4 = prev4 + speed
        if prev4 = d[i]
             prev4 = prev4
 pwm4.ChangeDutyCycle(cvt_angle(d[i]))
     if e[i] > 10 and e[i] < 180: if prev5 > e[i]
             prev5 = prev5 - speed
        if prev0 < e[i]
            prev5 = prev5 + speed
        if prev5 = e[i]
             prev5 = prev5
 pwm5.ChangeDutyCycle(cvt_angle(e[i]))
     if f[i] > 10 and f[i] < 180: if prev6 > f[i]
            prev6 = prev6 - speed
         if prev6 < f[i]
            prev6 = prev6 + speed
        if prev6 = f[i]
            prev6 = prev6
 pwm6.ChangeDutyCycle(cvt_angle(f[i]))
 flag = 0 

在这个程序中,有很多东西。我们应该逐一了解它们。所以,让我们看看我们在做什么:

prev0 = 90
prev1 = 90
prev2 = 90
prev3 = 90
prev4 = 90
prev5 = 90 

在这里,我们定义了六个新变量,名称为prev0prev5,它们都被赋予了值90。这里的术语prev代表之前的值,因此它将指示先前的值。

while prev0 =! a[i] and prev1 =! b[i] and prev2 =! c[i] and prev3 =! d[i]   and prev4 =! e[i] and prev 5 =! f[i]

在代码行for i in range 6之后,我们有前面的代码行,基本上是检查a[i]的值与prev0的值。类似地,它正在检查b[i]的值与prev1的值,依此类推。直到所有这些条件都成立,while循环将为真,并在其中循环程序,直到条件不再为假。也就是说,所有的prev值恰好等于列表相应值的值。

再次,这对你可能有点奇怪,但相信我,它会非常有用,我们一会儿会看到:

if a[i] > 10 and a[i]< 180 : 
         if prev0 > a[i]
             prev0 = prev0 - speed
         if prev0 < a[i]
             prev0 = prev0 + speed
         if prev0 = a[i]
             prev0 = prev0 
         pwm1.ChangeDutyCycle(cvt_angle(prev0))

现在,真正的问题来了。这是将控制舵机速度的主程序。在这个程序中,第一行很简单;它将检查给定的值是否有效,也就是在安全极限之间。一旦完成,它将检查a[Ii]的值是否小于或大于先前的值。如果大于a[i]的值,那么它将采用先前的值,并用用户指定的速度递减。如果小于a[i]的值,那么它将用指定的速度递增先前的值。

因此,如果你看一下,代码只是在while循环运行时每次递增或递减先前的值。现在,while循环将一直运行,直到prev的值等于相应列表值。也就是说,循环将一直递增值,直到达到指定位置。

因此,速度值越低,每次递增的值就越低,从而整体减慢速度。

这个过程对所有其他舵机也是一样的。听起来可能很复杂,但实际上并不是!编程很容易,每次你把它分解成小块并逐一理解时,它都会继续保持简单!

总结

在本章中,我们已经了解了机械臂的基础知识、其电源和其编程。通过一个非常简单的程序,我们能够找出舵机的极限,然后应用这些极限以确保舵机不会损坏自己。我们对框架有了一个基本的概念,并根据框架进行了一些编程。最后,我们还继续控制了舵机的速度,使用了我们自己的基本级别的程序。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
6天前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
15天前
|
存储 JSON 安全
从入门到精通:Python中的OAuth与JWT,打造无懈可击的认证体系🔒
【8月更文挑战第4天】构建现代Web和移动应用时,用户认证与授权至关重要。Python集成OAuth和JWT技术,能轻松实现安全认证。本文从OAuth基础入手,介绍如何使用`requests-oauthlib`库简化流程,再到JWT进阶应用,利用`PyJWT`库生成及验证令牌。最后,探讨如何结合两者,创建无缝认证体验。通过代码示例,由浅入深地引导读者掌握构建坚固应用认证体系的方法。
35 2
|
22天前
|
数据采集 API 网络安全
Python Requests代理使用入门指南
《Python Requests 代理使用入门指南》将带你深入了解如何使用Python Requests库来配置HTTP代理,并灵活处理各种权限和服务器响应问题。从代理服务器的基础知识,到代理认证与授权设置,本指南为初学者提供了全面的教学内容。
Python Requests代理使用入门指南
|
3天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
4天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
6天前
|
机器学习/深度学习 传感器 物联网
使用Python实现深度学习模型:智能物联网与智能家居
【8月更文挑战第13天】 使用Python实现深度学习模型:智能物联网与智能家居
16 2
|
13天前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
36 7
|
15天前
|
Python
探索Python中的装饰器:从入门到实践
【8月更文挑战第4天】在Python的世界中,装饰器是一把双刃剑,它既能美化代码,又能提升效率。本文将带你一探究竟,通过实例学习如何定义、使用以及深入理解装饰器背后的原理。我们将一起揭开这层神秘的面纱,让装饰器成为你编程工具箱中的又一利器。
30 9
|
15天前
|
测试技术 开发者 Python
揭秘Python中的装饰器:从入门到精通
【8月更文挑战第4天】装饰器,在Python中是一块神奇的“画布”,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文将通过实际的代码示例,带你一探究竟,从基础使用到高级技巧,逐步揭开装饰器的神秘面纱。
|
13天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python进行数据科学入门指南
【8月更文挑战第6天】使用Python进行数据科学是一条充满挑战和机遇的道路。本文提供了入门指南,帮助您快速上手Python数据科学。通过实践项目和资源推荐,您将能够深入学习Python数据科学,成为一名合格的数据科学家。