在之前的教程中,我们学习了如何在Windows机器上安装python,以及如何使用简单的LED控制项目将Arduino与python接口。如果您是新手,则强烈建议您退回到上一教程,因为本教程是该教程的续篇。
您可能已经开始想知道,如果仅通过串行端口通信,为什么我们需要Arduino的python。但是,Python是一个非常强大的开发平台,可以在其中集成许多很酷的应用程序,这些应用程序中可以集成机器学习,计算机视觉等等。在本教程中,我们将学习如何 使用Python创建小型图形界面。为此,我们需要一个名为Vpython的模块。以下教程仅适用于Windows用户,因为对于Mac或Linux用户,此过程有所不同。
在本教程的最后,我们将学习如何使用Python创建简单的GUI。我们将制作一个小动画,该动画将响应与Arduino相连的超声波传感器的值。该应用程序使用超声波传感器跟踪对象,并使用VPython以图形形式将其显示在计算机上。当我们移动物体时,超声波传感器会感应到距离,并使用Arduino将这些信息发送到Python程序,它也会在计算机中移动物体。听起来很有趣吧!所以开始吧…
先决条件:
- Arduino(任何版本)
- 超声波传感器HC-SR04
- 连接线
- 使用Python的计算机
- 上一教程的知识
在计算机上安装VPython:
在上一教程中,我们已经学习了如何在机器上安装python以及如何在其上移动python并使用Arduino创建一个简单的程序。现在,我们在此之上安装了Visual Python(VPython),以便我们可以使用Python for Arduino创建酷炫的图形。以下是VPython入门的简单步骤
步骤1。确保已按照以前的教程指南安装了Python。
步骤2.单击VPython下载Visual Python的exe文件。即使您的计算机在64位上运行,也不要选择安装64位版本。只需按照给出的链接。
第三步。启动exe文件并按照设置进行操作。请勿更改默认目录路径,并确保已选择“完全安装”。
第四步。安装后,您应该在桌面或应用程序面板上找到一个名为“ VIDLE(VPython)”的新应用程序,如下所示。
步骤5。启动应用程序,您将获得一个如下所示的窗口。
步骤6。这是我们将在VPython程序中键入的窗口。但是,现在让我们通过打开一个示例程序来检查Vpython是否正在运行。为此,请选择 文件->打开->跳动
步骤7。您应该打开一个示例程序。尝试使用 Run-> Run Module 启动程序。如果一切正常,您将获得以下屏幕。
您应该看到Shell窗口(左侧),其中两个>>>表示编译成功,而实际的窗口(正面)则显示弹跳的球。
第8步。您还可以尝试其他示例程序来发现VPython的功能,例如,名为 “ electrical-motor” 的示例程序将在以下屏幕上为您带来惊喜。
第9步。这意味着您的VPython已经可以使用了,您可以进入“ 编程Vpython ”主题。
第十步。否则,如果您像许多遇到 “ numpy错误”的 人中的一个一样,不要失去希望,因为我们将在后续步骤中解决该问题
步骤11。打开 我的电脑-> C驱动器-> Python 27->脚本-> local.bat 。这将启动命令提示符,如下所示
步骤12。现在输入 “ pip install --upgrade numpy” ,然后按Enter。新版本的Numpy应该已安装在您的计算机上。如果您的互联网连接速度很慢,您可能需要等待一段时间。
步骤13。完成后,您可以回到第4步并尝试一个示例程序,您应该能够使其正常运行。
编程VPython:
接下来,我们开始编程到VPython窗口中。在此程序中,我们将创建两个3D矩形对象,一个将放置在屏幕中央相对于固定超声传感器的位置,另一个将放置在基于US传感器与对象(纸)之间距离的动态位置。
在完整的Python代码可以在这个页面的末尾。再往下,我通过将这些python代码拆分为有意义的小片段来对其进行了解释。
第一行是导入视觉库,以便我们可以创建3D对象。下一行的功能相同。
从视觉导入*
您应该熟悉接下来的四行,因为我们在上一教程中已经使用过它们。它们用于导入串行和时间库,还可以在COM18与Arduino建立串行连接,波特率为9600
import serial#导入用于串行通信的串行导入时间#需要使用延迟功能ArduinoSerial = serial.Serial('com18',9600)#创建名为arduinoSerialData time.sleep(2)的串行端口对象#等待2秒以进行通信建立起来
现在,该创建对象了。我创建了两个名为obj和wall的3d矩形。该 wallL 是在青色放置在屏幕的中心的固定壁和所述 物镜 是在白色可移动物体。我还在墙壁对象附近放置了一个文本“美国传感器”。
obj = box(pos =(-5,0,0),size =(0.1,4,4),color = color.white)wallL = box(pos =(-1,0,0),size =(0.2 ,12,12),color = color.cyan)文本(text ='US sensor',axis =(0,1,0),pos =(-2,-6,0),depth = -0.3,color = color.cyan)
我相信以上三行内容对于大多数初学者来说都是希腊文和拉丁文,但是随着时间的推移,您将能够理解它。方括号中提到的所有内容都是(x,y,z)坐标。这些坐标与我们在高中几何课中发现的坐标非常相似,如下所示。
现在,图形和串行端口已经准备好,我们要做的就是读取数据,并 根据来自Arduino的数据将 “ obj” (白色矩形)放在一个位置。这可以通过以下几行完成,其中 obj.pos.x 控制对象的X坐标位置(白色矩形)。
t = int(ArduinoSerial.readline())#读取串行数据并将其打印为行t = t * 0.05 obj.pos.x = t
准备好Arduino:
Python脚本已准备就绪,可以侦听来自COM端口的值并相应地对图形进行动画处理,但是我们的Arduino尚未准备好。首先,我们必须根据以下电路图将超声波传感器连接到Arduino。如果您对美国传感器和Arduino完全陌生,则必须回头阅读基于Arduino和超声波传感器的距离测量教程。
然后上传本页末尾给出的Arduino程序。该程序使用注释行进行自我说明。我们知道超声波传感器的工作原理是计算脉冲撞击物体并返回所需的时间。该值是使用Arduino中的 PulseIn 函数计算的。之后,使用下面的行将花费的时间转换为距离。
dist =(timetaken / 2)/ 2.91;
在此,距离以毫米(mm)为单位计算。
加工:
该项目的工作很简单。启动Python程序,然后在US传感器之前放置一个对象,如下所示:
现在启动python程序,您应该可以注意到白色矩形随纸张一起移动,纸张和传感器之间的距离也将显示在外壳窗口中,如下图所示。
这就是我们如何使用超声波传感器和带Arduino的Python来跟踪对象的运动。
希望您理解该项目并喜欢建造一个。这只是迈向python的微妙一步,但是您可以使用它来构建更多更具创意的东西。如果您对构建此内容有任何想法,请将其张贴在评论部分,并使用论坛获取技术帮助。另一个有趣的python项目,再见。