0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样制作基本的ArduinoPC示波器

454398 来源:工程师吴畏 2019-08-02 10:24 次阅读

将简单的Arduino Uno(以及一些Python代码)转换为粗略的示波器,以查看波形和电压电平。

示波器非常有用,但通常带有很大的价格标签。幸运的是,有一些专用示波器的替代方案,所以在这个项目中,我们将把一个简单的Arduino Uno(以及一些Python代码)转换成可以用来查看波形和电压电平的粗略示波器!

工作原理:Arduino

示波器的硬件/固件端非常简单,并利用内置的模块Arduino,ADCADC代表模拟数字转换器,是一个可以采用模拟电压(0V和5V之间)并将其转换为二进制数的模块。 Arduino有一个10位ADC,这意味着最大电压5V表示为1023(1111111111),最小电压0V表示为0(0000000000)。但是,由于Arduino是一个8位机器,无符号字符的大小为8位(稍后你会看到原因),我们只使用ADC结果中的前8位。这意味着5V现在表示为255,0V表示为0V。由于有256个可能的值,每个位代表5/256伏或0.02V(大约)。因此,0x0F的值表示0.3V,0x80的值表示2.56V,值0x3E表示1.22V。

虽然Arduino默认启用ADC,因此不需要设置代码,但我们仍将模拟引脚配置为输入。我们将用于获取读数的引脚为A0,即引脚编号14.除引脚配置外,我们还将配置UART模块以实现PC通信的快速波特率(115200波特),并初始化一些变量。

主循环中的代码首先从ADC模块中读取100个读数。从ADC读取模拟数据非常简单,可以使用函数analogRead(引脚号)完成,该函数返回一个整数,其中10位ADC结果来自引脚号指定的引脚。在我们的例子中,input0指的是引脚14,它是A0。一旦读取完毕,下一段要执行的代码就是延迟。延迟的大小(以微秒为单位)由timeBase定义,默认为100。尽管是100us延迟,但读数之间的真实间距是延迟的大小加上ADC转换时间(100us),这给出了200us的读取间隔。为简单起见,这个项目将被忽略。

一旦完成所有100个读数,就可以将这些数据发送到PC用于绘图。为确保接收器能够正确区分数据事务,Arduino只会在Arduino发送请求“R?”后接收方发送字母“K”后发送数据。

一次Arduino和PC已经成功地相互交谈,所有的数据都流出来了。但是,UART工作在8位,并且尝试在UART上发送整数将需要复杂的转换,这将使事情变得相当困难。因此,我们只将模拟读数作为单个字节发送,我们使用函数highByte()来完成。 Arduino中的整数大小为16位,这意味着我们需要取10位结果并将它们向左移动,直到前8位包含我们的数据。为此,我们将数据向左移动六次,这意味着我们丢失了ADC读数的最低2位,但对于我们的基本示波器无关紧要。

使用8位结果发送,最后一项任务是等待计算机的响应通知Arduino结果已被正确读取。 Arduino只是停留在一个循环中,等待串口上的字符“K”。一旦读完,整个循环就会自行重复!

工作原理:Python代码

Python代码以及一些额外的库是什么一个简单的Arduino数据记录器到一个基本的示波器。但是,Python本身无法执行某些任务,如图形例程和串口通信,因此我们需要先获取几个库。幸运的是,如果安装了PIP,安装这些库是轻而易举的。如果你不这样做,请先在这里按照本教程获取点子。安装pip后,打开命令提示符并按顺序输入以下命令(一次一个):

pip install pyserial

pip install PyGame

一旦成功安装了这两个软件包,我们就可以直接进入我们的图形应用程序!虽然串行包很容易理解,但pygame包有点复杂,所以这里只介绍基础知识。我们Python程序的第一个任务是导入所需的库,它们是pygame(用于生成图形界面),serial(用于Arduino通信)和时间(用于时间延迟)。下一个代码块用于变量声明和初始化,其中包括pygame的布尔值,字符串和颜色。 pygame中使用的颜色是RGB类型,其中三个字节(0-255)表示红色,绿色和/或蓝色的数量。

完成变量定义后,下一个任务是初始化pygame,这是通过调用pygame.init()来完成的。由于我们计划将文本打印到我们的窗口应用程序,我们还需要初始化字体引擎,这是通过调用pygame.font.init()来完成的。除了初始化字体引擎之外,我们还将创建一个字体对象,我们将使用它作为渲染字体(将是等宽字体)。 pygame初始化代码的最后一位将是创建一个窗口(大小为700×500)并将窗口的标题设置为“PyScopeUno”。

下一个任务涉及配置串行端口以使用与Arduino相匹配的波特率(在本例中为115200)。还必须选择正确的端口(在我的情况下为“COM8”)并指定超时,以便程序在串行端口循环期间不会挂起。配置串口后,最后一步是打开端口!

完成所有初始化代码后,主程序循环执行,即以while循环的形式,等待直到布尔变量applicationClose等于true。在窗口上单击关闭按钮时,此值设置为true,单击后,串口正常关闭,pygame关闭。

显示我们记录的数据的第一项任务是从Arduino获取串行数据。为此,我们要等到串口中有数据存在。如果此数据等于“R?”,我们将Arduino发送给字符“K”,这导致Arduino将100个字节流式传输到PC。程序等待直到收到所有100个字节,一旦完成,将这些字节传送到数据缓冲区。下一行代码涉及一些有用的基本操作,包括计算平均值和查找最小/最大值。

最后代码块涉及绘制数据,绘制文本和绘制线条,但由于代码的不言自明的特性,不会对此进行深入讨论。我们的示波器程序中的数据不是绘制为单个点,而是作为两个数据点之间的插值线,因为快速变化的信号将显示为散点图,这很难可视化。为此,绘制一条线,其中第一个点是第一个电压电平,而终点是下一个数据值。由于我们获取了100个读数但我们的图形宽度为400像素,因此我们将x坐标乘以4以拉伸图形。这样可以更容易地查看单个读数。

完整的图形化程序如下所示。

在不到15分钟的时间内完成并运行这个项目应该很容易和可行。可能导致最头疼的步骤是安装和运行Python库,因为命令行安装方法有抛出错误,无法找到所需文件或缺少权限的习惯。一旦Arduino加载了代码,它就会自动开始。假设Python程序有效(确保COM端口正确),那么项目应该可以正常工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    6241

    浏览量

    184843
  • Arduino
    +关注

    关注

    188

    文章

    6469

    浏览量

    186976
收藏 人收藏

    评论

    相关推荐

    示波器探头和示波器需要匹配吗

    示波器探头和示波器匹配问题是一个非常重要的话题,因为它们之间的匹配程度直接影响到测量结果的准确性和可靠性。 示波器探头的工作原理 示波器探头是一种用于将被测信号传输到
    的头像 发表于 08-09 14:33 435次阅读

    示波器探头的探测小提示

    选择满足示波器和应用需求的探头,可以使您能够进行必要的测量。实际上,进行测量和获得有用的结果还取决于怎样使用工具。下面的探测小提示将有助于您避免某些常见的测量问题: 补偿探头 大多数探头是为与特定
    的头像 发表于 07-23 10:53 213次阅读
    <b class='flag-5'>示波器</b>探头的探测小提示

    虚拟示波器还是数字示波器好用

    虚拟示波器和数字示波器各有优缺点,具体选择哪一种取决于您的具体需求和预算。 虚拟示波器 定义 虚拟示波器是一种基于计算机软件的示波器,它通过
    的头像 发表于 07-17 17:16 703次阅读

    电子示波器和数字示波器的比较

    引言 示波器是一种广泛应用于电子测量领域的仪器,它能够将电信号的波形以图形的方式显示出来,便于工程师对信号进行分析和测量。示波器主要分为两大类:电子示波器和数字示波器。电子
    的头像 发表于 07-17 17:10 578次阅读

    电流探头该怎样选择,示波器可以直接测量电流吗?

    怎样选择电流探头?直接买一个示波器能不能测量电流信号?电流探头是连接示波器和测试点,实现电流信号测量的关键工具,本文将为您揭示电流探头的选择要点,并解答一个常见疑问:示波器能否直接测量
    的头像 发表于 07-01 17:45 698次阅读
    电流探头该<b class='flag-5'>怎样</b>选择,<b class='flag-5'>示波器</b>可以直接测量电流吗?

    示波器怎样正确测量市电

    示波器作为电子测量领域的重要工具,其应用广泛,尤其在测量市电方面,能够提供直观、准确的波形展示,帮助我们深入理解和分析市电的质量。然而,由于市电的特殊性质,如何正确使用示波器进行测量,避免潜在的安全
    的头像 发表于 05-27 15:39 1425次阅读

    示波器的带宽是什么 示波器带宽选择的技巧

    示波器的带宽是示波器性能的一个重要指标,它指的是示波器可以准确地测量和显示信号的最高频率。
    的头像 发表于 05-20 15:37 1405次阅读

    怎样利用数字示波器测量信号的周期和振幅

    在电子工程领域,信号的周期和振幅是评估和分析电路性能的重要参数。数字示波器作为一种高精度、高效率的测量仪器,被广泛用于测量信号的周期和振幅。本文将详细介绍如何利用数字示波器进行信号的周期和振幅测量,并通过具体步骤和案例分析,让读者更好地理解和掌握这一技术。
    的头像 发表于 05-17 17:08 3478次阅读

    示波器怎样测交流电呢?

    示波器是一种用来观察和分析电信号波形的电子测量仪器。它通过将时间变量的电信号转换为屏幕上的垂直偏转,来显示信号的波形。
    的头像 发表于 05-17 16:29 2203次阅读

    模拟示波器和数字示波器的区别

    示波器作为电子测量领域的重要工具,经历了从模拟到数字的技术变革。模拟示波器和数字示波器各有其特点和应用场景,两者在工作原理、性能参数、功能特性以及使用体验等方面都存在显著的差异。本文将对模拟
    的头像 发表于 05-11 16:13 2771次阅读

    混合示波器与数字示波器的区别

    在电子测试与测量领域,示波器作为一种重要的工具,其性能和应用对于工程师和技术人员来说至关重要。随着科技的发展,示波器的种类和功能也在不断演进,其中混合示波器和数字示波器作为两种常见的
    的头像 发表于 05-10 15:50 926次阅读

    示波器眼图是啥?怎样形成示波器眼图又如何分辨信号质量?

    示波器眼图是啥?怎样形成示波器眼图又如何分辨信号质量? 示波器眼图是一种用于评估数字信号质量的工具,广泛应用于通信行业。它是通过观察和分析信号的波形图形成的一种标准化的显示形式。
    的头像 发表于 01-19 16:16 1052次阅读

    示波器电流钳怎样测电流呢?

    示波器电流钳怎样测电流呢? 示波器电流钳是一种常用于测量交流电路中电流的工具。它可以通过将电流钳夹在被测电路的导线上,利用电磁感应原理来测量电流。本文将详细介绍示波器电流钳的工作原理、
    的头像 发表于 01-08 15:40 1717次阅读

    采样示波器和实时示波器的区别

    采样示波器和实时示波器的区别  采样示波器和实时示波器是电子测量领域常用的两种示波器类型,它们在原理、特点、应用和优缺点等方面存在差异。下面
    的头像 发表于 01-03 17:13 1303次阅读

    怎样利用示波器测定未知电压?

    随着示波器的发展,其的功能和应用领域也变得愈发强大。在很多时候,我们做产品开发,测试测量的时候,都需要用到示波器,因此在很多的产品开发企业,科研机构和研究所,高等教育机构的实验室都少不了示波器的影子。那么
    的头像 发表于 12-26 15:03 743次阅读
    <b class='flag-5'>怎样</b>利用<b class='flag-5'>示波器</b>测定未知电压?