大家好,欢迎来到今天的帖子。成为创客最迷人的事情之一是知道如何开发临时工具,当您拥有这种多功能性时,您将永远不会陷入任何项目的工作。所以今天,我将分享如何构建电气/电子工程中最重要的工具之一的基于Raspberry Pi的临时版本;示波器。
示波器是一种电子测试仪器,可以可视化和观察变化的信号电压,通常作为二维图,其中一个或多个信号与时间的关系图。今天的项目将寻求使用Raspberry Pi和模数转换器模块复制示波器的信号可视化功能。
项目流程:
使用 Raspberry Pi 复制示波器的信号可视化将需要以下步骤;
1. 执行输入信号的数字到模拟转换
2. 准备结果数据以进行表示
3. 在实时图上绘制数据
该项目的简化框图如下图所示。
项目要求
该项目的要求可分为两类:
硬件要求
软件要求
硬件要求
要构建此项目,需要以下组件/部件;
树莓派 2(或任何其他型号)
8 或 16GB SD 卡
局域网/以太网电缆
ADS1115 模数转换器
LDR(可选,用于测试)
10k 或 1k 电阻
跳线
面包板
监视器或任何其他查看 pi 桌面的方式(包括 VNC)
软件要求
该项目的软件要求基本上是用于数据可视化的python模块(matplotlib和drawnow)和用于与ADS1115 ADC芯片接口的Adafruit模块。在我们继续时,我将展示如何在树莓派上安装这些模块。
虽然本教程无论使用哪种树莓派操作系统都可以工作,但我将使用树莓派拉伸操作系统,我假设您熟悉使用 Raspbian 拉伸操作系统设置 Raspberry Pi,并且您知道如何使用 putty 等终端软件 SSH 进入树莓派。如果您对此有任何问题,本网站上有大量的树莓派教程可以提供帮助。
所有硬件组件就绪后,让我们创建原理图并将组件连接在一起。
电路图:
为了将模拟输入信号转换为可以使用Raspberry Pi可视化的数字信号,我们将使用ADS1115 ADC芯片。该芯片变得很重要,因为Raspberry Pi与Arduino和大多数微控制器不同,没有板载模数转换器(ADC)。虽然我们可以使用任何兼容树莓派的ADC芯片,但我更喜欢这款芯片,因为它的高分辨率(16位)和Adafruit的有据可查的数据表和使用说明。您还可以查看我们的树莓派ADC教程以了解更多信息。
ADC是基于I2C的器件,应连接到树莓派,如下图所示。
为清楚起见,下面还介绍了两个元件之间的引脚连接。
ADS1115 和树莓派连接:
VDD – 3.3V
接地 – 接地
SDA – SDA
标准及校正实验所 – 标准及校正实验所
完成所有连接后,启动您的 pi 并继续安装下面提到的依赖项。
安装树莓派示波器的依赖项:
在我们开始编写 python 脚本以从 ADC 中提取数据并将其绘制在实时图形上之前,我们需要启用树莓派的I2C 通信接口并安装前面提到的软件要求。这将在以下步骤中完成,以便于遵循:
第 1 步:启用树莓派 I2C 接口
要启用 I2C,请从终端运行;
sudo raspi-config
当配置面板打开时,选择接口选项,选择 I2C,然后单击启用。
第 2 步:更新树莓派
在开始任何项目之前,我要做的第一件事就是更新 Pi。通过这个,我确信操作系统上的每件事都是最新的,我不会遇到与我选择在 Pi 上安装的任何最新软件的兼容性问题。为此,请运行以下两个命令:
sudo apt-get update
sudo apt-get upgrade
第 3 步:为 ADC 安装 Adafruit ADS1115 库
更新完成后,我们现在准备从 ADS115 芯片的 Adafruit python 模块开始安装依赖项。通过运行确保您位于树莓派主目录中;
cd ~
然后通过运行安装构建要素;
sudo apt-get install build-essential python-dev python-smbus git
接下来,通过运行克隆库的 Adafruit git 文件夹;
git clone
https://github.com/adafruit/Adafruit_Python_ADS1x15.git
切换到克隆文件的目录并运行安装文件;
cd Adafruit_Python_ADS1x1z
sudo python setup.py install
安装后,您的屏幕应如下图所示。
第 4 步:测试库和 12C 通信。
在继续项目的其余部分之前,测试库并确保ADC可以通过I2C与Raspberry Pi通信非常重要。为此,我们将使用库附带的示例脚本。
当仍在 Adafruit_Python_ADS1x15 文件夹中时,通过运行将目录更改为示例目录;
cd examples
接下来,运行 sampletest.py 示例,该示例以表格形式显示ADC上四个通道的值。
使用以下方法运行示例:
python simpletest.py
如果启用了I2C模块并且连接良好,则应看到如下图所示的数据。
如果发生错误,请检查以确保ADC与PI连接良好,并且在Pi上启用了I2C通信。
第 5 步:安装Matplotlib
为了可视化数据,我们需要安装 matplotlib 模块,该模块用于在 python 中绘制所有类型的图形。这可以通过运行来完成;
sudo apt-get install python-matplotlib
您应该会看到如下图所示的结果。
第 6 步:安装Drawnowpython 模块
最后,我们需要安装 drawnow python 模块。该模块可帮助我们提供数据图的实时更新。
我们将通过 python 包安装程序安装 drawnow;pip,所以我们需要确保它已安装。这可以通过运行来完成;
sudo apt-get install python-pip
然后,我们可以使用 pip 通过运行以下命令来安装 drawnow 包:
sudo pip install drawnow
运行它后,您应该得到如下图所示的结果。
安装完所有依赖项后,我们现在可以编写代码了。
Raspberry Pi 示波器的 Python 代码:
这个Pi示波器的python代码相当简单,特别是如果你熟悉python matplotlib模块。在向我们展示整个代码之前,我将尝试将其分解为一部分并解释代码的每个部分在做什么,以便您有足够的知识来扩展代码以执行更多操作。
在此阶段,切换到显示器或使用VNC查看器非常重要,通过它可以看到Raspberry Pi的桌面,因为正在绘制的图形不会显示在终端上。
以监视器为界面打开一个新的python文件。你可以叫它任何你想要的名字,但我会称它为 scope.py。
sudo nano scope.py
创建文件后,我们要做的第一件事是导入我们将使用的模块;
import time
import matplotlib.pyplot as plt
from drawnow import *
import Adafruit_ADS1x15
接下来,我们创建一个指定 ADS1115 ADC 的 ADS1x15 库实例
adc = Adafruit_ADS1x15.ADS1115()
接下来,我们设置ADC的增益。有不同的增益范围,应根据ADC输入端的预期电压进行选择。在本教程中,我们估计 0 – 4.09v,因此我们将使用 1 的增益。有关增益的更多信息,请查看 ADS1015/ADS1115 数据表。
GAIN = 1
接下来,我们需要创建数组变量,这些变量将用于存储要绘制的数据,另一个变量用作计数。
Val = [ ]
cnt = 0
接下来,我们了解我们使绘图具有交互性的意图,以便我们能够实时绘制数据。
plt.ion()
接下来,我们开始连续ADC转换,指定ADC通道,在本例中为通道0,我们还指定增益。
应该注意的是,ADS1115上的所有四个ADC通道可以同时读取,但1个通道足以进行本演示。
adc.start_adc(0, gain=GAIN)
接下来,我们创建一个函数 def makeFig,以创建和设置将保存我们的实时图的图形的属性。我们首先使用 ylim 设置 y 轴的极限,然后输入绘图的标题和标签名称,然后使用 plt.plot() 指定要绘制的数据及其绘图样式和颜色。我们还可以声明通道(如通道0所示),以便在使用ADC的四个通道时识别每个信号。plt.legend 用于指定我们希望在图上显示有关该信号的信息(例如通道 0)的位置。
plt.ylim(-5000,5000)
plt.title('Osciloscope')
plt.grid(True)
plt.ylabel('ADC outputs')
plt.plot(val, 'ro-', label='lux')
plt.legend(loc='lower right')
接下来,我们编写 while 循环,该循环将用于不断从 ADC 读取数据并相应地更新图。
我们要做的第一件事是读取ADC转换值
value = adc.get_last_result()
接下来,我们在终端上打印值,只是为了给我们另一种确认绘制数据的方法。我们在打印后等待几秒钟,然后将数据附加到为存储该通道的数据而创建的列表 (val) 中。
print('Channel 0: {0}'.format(value))
time.sleep(0.5)
val.append(int(value))
然后我们调用 drawnow 来更新绘图。
drawnow(makeFig)
为了确保最新数据是图上可用的数据,我们在每 50 个数据计数后删除索引 0 处的数据。
cnt = cnt+1
if(cnt>50):
val.pop(0)
就这样!
完整的 Python 代码在本教程末尾给出。
树莓派示波器的实际应用:
复制完整的 python 代码并粘贴到我们之前创建的 python 文件中,请记住我们需要一台显示器来查看绘图,因此所有这些都应该通过 VNC 或连接的显示器或屏幕完成。
保存代码并使用运行;
sudo python scope.py
如果您使用了 scope.py 以外的其他名称,请不要忘记更改此名称以匹配。
几分钟后,您应该会看到终端上打印的ADC数据。有时,您可能会收到来自 matplotlib 的警告(如下图所示),该警告应被禁止显示,但它不会影响正在显示的数据或绘图。但是,为了禁止显示警告,可以在代码中的导入行之后添加以下代码行。
Import warnings
import matplotlib.cbook
warnings.filterwarnings(“ignore”, category=matplotlib.cbook.mplDeprecation)
这就是本教程的伙计们,要全面测试示波器,您可以将电位计等模拟设备连接到ADC上的通道,您应该看到数据随着电位计的每一次转动而变化。
import time
import matplotlib.pyplot as plt
#import numpy
from drawnow import *
# Import the ADS1x15 module.
import Adafruit_ADS1x15
# Create an ADS1115 ADC (16-bit) instance.
adc = Adafruit_ADS1x15.ADS1115()
GAIN = 1
val = [ ]
cnt = 0
plt.ion()
# Start continuous ADC conversions on channel 0 using the previous gain value.
adc.start_adc(0, gain=GAIN)
print('Reading ADS1x15 channel 0')
#create the figure function
def makeFig():
plt.ylim(-5000,5000)
plt.title('Osciloscope')
plt.grid(True)
plt.ylabel('ADC outputs')
plt.plot(val, 'ro-', label='Channel 0')
plt.legend(loc='lower right')
while (True):
# Read the last ADC conversion value and print it out.
value = adc.get_last_result()
print('Channel 0: {0}'.format(value))
# Sleep for half a second.
time.sleep(0.5)
val.append(int(value))
drawnow(makeFig)
plt.pause(.000001)
cnt = cnt+1
if(cnt>50):
val.pop(0)
-
示波器
+关注
关注
113文章
6190浏览量
184521
发布评论请先 登录
相关推荐
评论