本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于MCP3008的水传感器控制系统

发布时间:2022-08-10
分享到:

基于MCP3008的水传感器控制系统

发布时间:2022-08-10
分享到:

在具有 SPI 接口的 MCP3008 8 通道 10 位 ADC 上使用 Phantom YoYo 高灵敏度水传感器。

背景
在即将进行的项目中,我使用 MCP3008 来监控多个传感器。在这个项目中,我想详细介绍在 MCP3008 8 通道 10 位 ADC 上使用 Phantom YoYo 高灵敏度水传感器的详细信息,该 ADC 具有 Raspberry Pi 2、Windows 10 IoT Core 和 C# 的 SPI 接口。

使用 MCP3008
ADC 是一种模数转换器。模拟信号被转换为数字并读入您的应用程序。MCP3008 是一个 10 位 ADC,这意味着它使用 10 位来表示通道上的值。该值将表示为从 0 到 1023 的数字(总共 1024 个可能的值)。然后将该数字转换为有意义的值。例如,假设我想测量一个通道上的电压,从通道读取的值为 523。我知道最大电压为 3.3V。使用公式计算通道上的电压

Value / Max Value * Vref

解决我得到的电压

523 / 1023 * 3.3

其值为1.687V 。我首先将读数标准化,然后将标准化读数乘以已知的最大值 3.3V,从而计算出这个值。

当获得准确的电压测量很重要时,我强烈建议测量 Raspberry Pi 的实际电压,并在计算中使用该值以从 ADC 获得更准确的转换。当我测量我的时,我发现输出是 3.301V(在源代码中找到的值)。然而,与实际情况相差不远,其他类型的电路板可能会有所不同。

当然,当我想计算电压时,这是有道理的,但每个传感器都有不同的含义。对于连接到 MCP3008 上的通道的每个传感器,我需要了解具体细节并适当地解释读数。

MCP3008 的接线很简单。芯片本身在一端标有一个缺口,代表引脚 1 和 16 。

引脚 1 到 8 是八个输入引脚,称为通道 0 到 7。通道 0 是引脚 1。引脚 16 是 Vdd 并连接到电压源(在 Raspberry Pi 上为 3.3V 或 5V)。引脚 9 连接到 Raspberry Pi 上的接地引脚。引脚 15 和 14 用于参考模拟电路。引脚 15 是 Vref,MCP3008 使用它来确定其中一个通道上的最大电压。在我的示例中,我将此引脚连接到 Raspberry Pi 上的 3.3V 电源。当向其中一个通道施加电压时,MCP 会调整读数,使 1023 表示 3.3V,0 表示 0V。这允许我上面使用的计算工作。引脚 14 是模拟接地引脚。在我的示例中,我将它连接到 Raspberry Pi 上的接地引脚。如果需要保持模拟电路与数字电路隔离,则该引脚将连接到模拟电路上的地。其余四个引脚(10 到 13)是用于与 Raspberry Pi 通信的 SPI 串行接口引脚。我在这个项目中包含的接线图显示了如何将这些引脚连接到 Raspberry Pi。

在这个项目中,我包含了一个简单的电压测量来演示这个概念。水传感器读数将展示从通道读取的值的另一种解释。

项目概况

传感器

在这个项目中,我将两个电路合二为一。第一个是一个简单的电位器,它允许在一个 MCP3008 引脚(通道 0)上改变电压。这只是为了演示 MCP3008 的工作原理。第二个电路是连接到 MCP3008 上的第二个通道(通道 1)的水传感器。

Phantom YoYo 水传感器具有三个引脚。第一个引脚是接地的(在设备上标记为“-”),它将连接到 Raspberry Pi 上的接地引脚。下一个引脚是电源(在设备上标记为“+”),它将连接到 Raspberry Pi 上的 3.3V 引脚(设备也可以连接到 5V)。第三个也是最后一个引脚是信号(在设备上标记为“s”。该引脚的电压信号会根据设备上的水量而变化。请注意,该设备不是水位传感器。它只是感应变化与器件接触的水量。源引脚将连接到 MCP3008 上的输入之一。

电路

支持传感器的电路非常简单。该设备直接连接到板 Raspberry Pi,无需任何额外组件。

项目软件

应用程序
我为这个项目创建的应用程序是一个通用 Windows 应用程序,并在主视图中显示了两个仪表。第一个仪表显示在电位计电路上测量的当前电压。第二个显示来自水传感器的读数,该读数标准化为 0 到 100 的值。该软件还允许校准水传感器。源代码的链接可以在本文下方找到。

MCP3008 库
该软件项目还包含一个用于与 MCP3008 交互的单独项目。此代码可用于您的应用程序,以便轻松地将 MCP3008 芯片集成到您的项目中。

要使用它,首先要声明一个类对象,如下所示:

private Mcp3008 _mcp3008 = null;

在OnNavigatedTo事件中添加以下代码:

_mcp3008 = new Mcp3008(0);

await_mcp3008.Initialize();

要从通道 0 读取电压,请使用以下代码行:

float voltage = _mcp3008.Read(Mcp3008.Channels.Single0).AsScaledValue(3.3f);

注意使用Channel.Single0 which 表示从一个通道读取值。可以指定设备读取两个引脚之间的差异。这可以指定为Mcp3008.Channels.Differential0 表示测量应该作为通道 0 和通道 1 之间的差异进行,其中通道 0 为正,通道 1 为负。源代码是文档,将提供解释每个值的工具提示。

当您使用完对象后,通常在您的OnNavigatedFrom事件中处理该对象。

_mcp3008.Dispose();

_mcp3008 = null;

入门

组装电路
学习这部分内容以组装电路。

注意:本项目使用可选的万用表来测量电位器两端的电压。这样做是为了将该值与 MCP3008 读取的值进行比较。请注意,这是可选的。如果您没有万用表,那么您将无法比较该电压。这样做是为了表明 MCP3008 读取的值与万用表读取的值相同。如下图所示将万用表设置为测量直流电压。

  • 将 T 形放在的左端(数字从 1 开始)。最左边的两个引脚将位于板上的E3和F3中。最右边的两个引脚将位于E22和F22
  • 将 50K Ω 电位器置于 J56、J58 和 J60 位置,调节旋钮朝向面包板的 5v 侧
  • 在I58和I53之间放置 10K Ω 电阻
  • 将 MCP3008 放入E31到E38和F31到F38中(芯片有凹进圆圈的角将放置在E31处)
  • 可选:将黑色公对公跳线的一端放置在位置G60 (如果您使用万用表,则将黑色引线连接到此导线)
  • 可选:将红色公对公跳线的一端放在位置G58 (如果您使用万用表,则将红色引线连接到此导线)
  • 在F60和接地之间连接蓝色公对公跳线
  • 在F58和C31 (MCP3008 的通道 1)之间连接橙色公对公跳线
  • 在F53和3.3V+之间连接橙色公对公跳线
  • 在J31和3.3V之间连接红色公对公跳线
  • 在J32和3.3V之间连接红色公对公跳线 
  • 在J33和接地之间连接黑色公对公跨接线 
  • 在J34和A14之间连接绿色公对公跳线 
  • 在J35和A13之间连接黄色公对公跳线 
  • 在J36和A12之间连接白色公对公跳线 
  • 在J37和J14之间连接绿色公对公跳线 
  • 在J38和接地之间连接一根黑色公对公跳线 
  • 将蓝色母对公跳线的母端连接到水传感器上的S引脚。将公端连接到C32 (MCP3008 上的通道 1)
  • 将红色母对公跳线的母端连接到水传感器上的引脚。公头接 3.3V
  • 将黑色母对公跳线的母端连接到 水传感器上的-引脚。将公端接 地
  • 可选:将步骤 5 中的黑色引线连接到万用表的公共端子(使用钩夹式连接器以获得最佳效果)
  • 可选:将步骤 6 中的红色引线连接到万用表上的电压端子(使用钩夹式连接器以获得最佳效果)
  • 在 Raspberry Pi 和鞋匠之间连接带状电缆

启动应用程序
选择调试、ARM配置和远程机器。现在右键单击项目,选择属性,然后 单击调试标记。接下来将 Raspberry Pi 2 IP 地址放入 Remote machine 字段,并取消选中Use authentication 。

按F5 。应用程序将部署到设备,第一次可能需要几分钟。

注意:该应用程序使用线性 360° 仪表来显示水量。我必须注意,该传感器在水量和传感器读数之间没有任何线性相关性或我所知道的任何其他相关性。当有几滴水时,它确实会产生较小的值,而当存在更多水时,它会产生较高的值。我更多地使用线性量规来帮助理解 ADC 的概念。可以像连接光电隔离交流电压传感器一样连接水传感器产生可由 GPIO 引脚接收的高或低信号。该设备可以接线以提供湿信号或干信号。话虽如此,我将这个水传感器连接到 ADC,因为我想检测少量水和大量水之间的差异,并且该项目中概述的方法实现了这一目标。

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Daniel Porrey,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论