在本教程中,我将完成设置树莓派 ADC (模数转换器) 的步骤。
您可能已经知道 Pi 没有任何模拟 GPIO 引脚。由于缺少模拟引脚,因此连接模拟传感器的过程更加复杂。
缺乏模拟引脚的解决方案有很多,就像我在树莓派 LDR 教程中所做的那样,其中涉及使用电容器来测量电阻。 LDR (光敏电阻) 的示意图。
对此更好的解决方案是使用所谓的模拟数字转换器 (MCP3008)。该芯片涉及一些设置,我将在下面介绍。
我还打算使用 * MyDevices Cayenne 设置 MCP3008 ,这比从头开始编写代码要容易得多,但有时一半的乐趣来自于学习如何编码。
设备
此树莓派 ADC 教程需要以下设备。您可以使用不同版本的模数转换器,例如 MCP3004 ,但使其工作的步骤可能与本教程有所不同。
推荐的
树莓派
Micro SD 卡
Ethernet Cord 或 * Wifi dongle (树莓派 3 和 4 具有内置 WiFi)
电源
MCP3008 或类似版本
面包板
Breadboard Wire
可选的
树莓派外壳
USB 键盘
USB 鼠标
GPIO Breakout Kit
LDR 传感器
10k 电阻器
视频
如果您想看如何以视觉方式进行所有操作,请务必查看下面准备的视频。
它通过所有步骤来正确连接芯片,以及如何访问与其连接的设备。
Adblock 阻止了视频?订阅我们的无广告服务,为我们提供支持。
树莓派 ADC 电路
将 MCP3008 连接到 Pi 的电路看起来很复杂,但这仅是正确地连接了电线。
我将在本树莓派 ADC 教程中使用 MCP3008 芯片。该芯片上有很多技术信息,但我仅介绍一些基本知识。
对于任何不熟悉微芯片的人,您都会发现芯片的一端会有一个缺口。该凹口表示引脚 1 所在的末端。它通常是左侧的第一个销钉,槽口背对着您 (请参见下图)。一号针有时也有一个小点。
这种特殊的芯片利用了 SPI (串行外围接口总线),这意味着它只需要四个引脚,并且由于 [用于 Python 的 SPIDev 库] 而相对易于通信 (https://pypi.python.org/pypi/spidev)。
CH0-> CH7 引脚 (引脚 1 -8) 是 MCP3008 的模拟输入。另一方面,我们有各种不同的引脚。
- DGND (引脚 9) 是芯片的数字接地引脚。
- CS (引脚 10) 是片选。
- DIN (引脚 11) 是树莓派本身的数据。
- DOUT (引脚 12) 是数据输出引脚。
- CLK (引脚 13) 是时钟引脚。
- AGND (引脚 14) 是模拟地,显然已接地。
- VREF (引脚 15) 是模拟参考电压。如果要更改比例,可以更改此设置。您可能希望保持相同,因此请保持为 3v3 。
- VDD (引脚 16) 是芯片的正电源引脚。
如果您需要有关芯片的更多信息,则可以在 Adafruit 上找到完整的数据表。
将电路组合在一起非常简单。由于我们将不得不使用大量电线,因此电路看起来可能有些混乱。如果要使其成为一个永久项目,可以稍后进行清理。
在此示例中,我包含了一个 LDR ,以说明如何使用模数转换器 (ADC) 将 LDR 的值返回给 Pi 。
首先,将 3v3 引脚连接到试验板上的正极,并将接地引脚连接到试验板上的接地。同样,将 MCP3008 芯片放入面包板的中间。
- VDD (引脚 16) 连线至 3 .3V* VREF (引脚 15 ) 连线至 3 .3V * AGND (引脚 14 ) 连线至接地
- CLK (Pin 13) 将此线连接到 GPIO11 (Pin 23/SCLK)
- DOUT (Pin 12) 将此线连接到 GPIO9 (Pin 21/MISO)
- DIN (Pin 11) 将此线连接到 GPIO10 (Pin 19/MOSI)
- CS (Pin 10) 将此线连接到 GPIO8 (Pin 24/CE0)
- DGND (引脚 9) 将此线接地
现在,一旦完成,您可能会希望将 LDR 连接到 MCP3008 ,这很容易做到。
首先,将 LDR 放在面包板上。接下来,让 10k 电阻连接到 LDR 的一端,另一端连接到正电源轨。 LDR 和正极之间的线应与 MCP3008 的引脚 1 (CH0) 相连。最后,从 LDR 的另一侧到面包板上的接地导轨连接一根电线。
如果您需要进一步的电路帮助,可以在下面找到详细的图表。如果仍然有问题,请仔细检查芯片连接,并确保所有引脚都正确连接。
编码
用于此的代码非常简单,但也仅处理一个输入即 LDR 。添加的设备越多,代码可能会越复杂。
默认情况下,本教程所需的所有软件包都应安装在 Raspbian 上。如果您发现它比其他更简单的选择不胜枚举,那就可以使用我在下面提到的树莓派 Cayenne 之类的工具。
如果您不熟悉 Python 编码并希望了解更多信息,我们的 Python 基础指南 e 非常好。几乎没有 Python 知识,您仍然可以很好地完成本教程。
如果您遇到任何问题,请查阅 Raspberry GPIO 引脚上的指南。它介绍了如何设置它们并安装必要的软件。
要将代码直接直接下载到您的 Pi 上,只需在终端中运行以下行。或者,您可以通过 GitHub 下载它。
git clone https://github.com/pimylifeup/Pi-ADC-Example-Code
然后,您需要通过运行以下代码行进入包含我们脚本的文件夹。
cd ./Pi-ADC-示例代码
现在,您可以通过运行以下行来启动它。
sudo python adc-code.py
您可以通过按 ctrl + c 来停止脚本。
现在,我将简要解释一下代码。在代码的开头,我们定义 Python 的安装路径。此后,我们将导入两个我们需要的软件包。时间允许我们使脚本进入睡眠状态 (添加延迟)。 Spidev 允许我们与 SPI 器件进行通信,在这种情况下,它就是 MCP3008 。
#!/usr/bin/python
导入 spidev
导入时间
接下来,我们定义变量并创建 SPIdev 对象。我们创建两个变量,第一个是毫秒延迟。如果您希望两次更新之间有更长的时间,请更改此选项。接下来是 LDR 所在的通道,这是通道 0 / 引脚 1 。
最后,我们创建 SPIdev 对象。该对象使我们能够从连接了 SPI 使能引脚的设备中获得所需的值。
#定义变量
延迟= 0.5
ldr_channel = 0
#创建 SPI
spi = spidev.SpiDev()
spi.open(0,0)
接下来,我们具有 readadc
函数,在其中我们可以做几件事。首先,我们检查参数值以确保它在 0 到 7 之间 (如果不是,则返回 - 1)。如果是,则我们继续从指定的通道获取值,然后返回该值。
def readadc(adcnum):
#从 MCP3008 读取 SPI 数据,总共 8 个通道
如果 adcnum > 7或 adcnum <0:
返回-1
r = spi.xfer2([1,8 + adcnum << 4,0])
数据=((r [1]&3)<< 8)+ r [2]
返回数据
最后,我们有一个 while 循环,直到您按 ctrl + c 强制退出为止。我们要做的第一件事是调用带有 ldr _channel 变量作为参数的 readadc 函数。
一旦获得值,就可以简单地打印出来。 %d 是十进制值;然后在 print 语句之后有变量。您可以通过执行以下操作在每行打印多个值。 打印'%s%d'%(名称,编号)
打印数据后,无论延迟时间设置为多少,都会延迟脚本。默认情况下,它设置为半秒钟。
而 True :
ldr_value = readadc(ldr_channel)
打印"---------------------------------------"
print("LDR Value:".ldr_value)
时间。睡眠(延迟)
我希望这可以帮助您稍微了解一下代码。如上所述,您可以在 GitHub 上下载完整脚本。
如果确实遇到任何问题,请在下面的评论中随意提及。
将 ADC 与树莓派 Cayenne 一起使用
现在,我将快速完成使用 Cayenne 设置 MCP3008 的步骤。我还将介绍如何设置 LDR 。如果您尚未设置 Cayenne ,请确保按照如何安装树莓派 Cayenne 上的指南进行操作。本教程将介绍安装它的步骤以及创建自己的智能应用程序所需的大多数基本知识。
1 首先要开始添加新,然后从下拉框中选择设备。
2 然后搜索或选择模拟转换器。
3 在此列表中选择 ** MCP3008 **
4 现在选择 ** 树莓派 ,然后 SPI Chip-Select 0 **
5 现在,此选择将弹出一个屏幕,向您显示所有通道值。
现在添加 ** LDR **,过程几乎是相同的,但是无论如何我都会经历。
1 返回至添加新,然后选择设备。
2 查找或选择光敏电阻 (光度传感器)。
3 为此,请选择您的树莓派,首选的小部件 (我在图表中),然后为模拟转换器选择 ** MCP3008 ,最后为通道选择通道 0 **。
4 该传感器现在应该没有问题地添加。现在它将根据从模拟转换器获得的值生成一个图形。
现在,您几乎可以对任何模拟设备执行相同的过程。我将在不久的将来介绍任何模拟传感器或设备。它包括诸如 tmp36 温度传感器之类的东西。
我希望本教程可以帮助您设置树莓派 ADC。如果您遇到任何问题,有反馈或发现错误,请随时在论坛上发表评论。