考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西。

  需求:使用 Raspberry Pi 读取输出模拟信号的 MQ 系列气体传感器。(GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ADS1115) 

  由于 Raspberry Pi 3B 内部并没有集成 ADC,因此需要外接 ADC 来进行模数转换。外接 ADC 选用的是 ADS1115,淘宝到处都是,而且还不贵, I2C 的通讯方式实现起来相对容易些。

  1. 过程分析

  在 ADS1115 的数据手册(GitHub项目中附带了PDF)的第11页中,官方给出了一个简单的快速开始

(1)设置配置寄存器

(2)定位到转换寄存器

(3)读取转换寄存器

  2. 寄存器配置分析  

  了解了大概过程后接下来就是查寄存器的格式及配置方法了。

  ADS1115 的 ADDR 接口的接法决定了地址。

  地址确定后,下面来看看寄存器的地址指针。由于我们只是简单的读取,只需要用到最上面的两个指针。配置寄存器为 0x01,转换寄存器为 0x00

  按照第一点的过程分析,第一步我们要设置配置寄存器。配置寄存器分高八位和低八位,指针定位到配置寄存器后,需要分别写入两个 byte 的配置数据。详细的比特位的功能可以查下数据手册。在这里只介绍用的到的。

  在14-12位,是 MUX 配置。简单的说,这决定了 ADS1115 的 A0-A3 接口的测量方式。比如说,当设置为 0x04 时测量的为 A0-GND 的电压,当设置为 0x00 时测量的为 A0-A1 间的电压。

  在11-9位,是 PGA 配置。这决定了 ADS1115 的量程。

  在第8位,是 ADS1115 的状态配置。0x00 为测量模式,0x01 为休眠。

  在第7-5位,是每秒采样次数的配置

  以上是我们需要的配置位,其他的按照数据手册上的默认即可。即高八位 0 100 001 0(0x42),低八位 100 0 0 0 11(0x83)。需要其他的功能,按照数据手册上的更改即可。

  配置完成后,读取数据是非常简单的,直接读取即可。

  3. 连线

VDD - 5V

GND - GND

SCL - SCL

SDA - SDA

ADDR - GND

A0 - MQ 传感器的 A0

  

  4. 部分代码

  详细的代码已经放在 GitHub 上了,这里只给出 ADS1115.cs 的简单介绍。

/// <summary>
/// Constructor
/// </summary>
/// <param name="addr">ADS1115 Address</param>
/// <param name="mux">Input Multiplexer</param>
/// <param name="pga">Programmable Gain Amplifier</param>
/// <param name="rate">Data Rate </param>
public ADS1115(AddressSetting addr = AddressSetting.GND, InputMultiplexeConfig mux = InputMultiplexeConfig.AIN0, PgaConfig pga = PgaConfig.FS4096, DataRate rate = DataRate.SPS128); /// <summary>
/// Initialize ADS1115
/// </summary>
/// <returns></returns>
public async Task InitializeAsync(); /// <summary>
/// Read Raw Data
/// </summary>
/// <returns>Raw Value</returns>
public short ReadRaw(); /// <summary>
/// Convert Raw Data to Voltage
/// </summary>
/// <param name="val">Raw Data</param>
/// <returns>Voltage</returns>
public double RawToVoltage(short val); /// <summary>
/// Cleanup
/// </summary>
public void Dispose();

  5. 如何使用

  第一步,需要实例化 ADS1115,并调用 InitializeAsync()。

ADS1115 adc = new ADS1115(AddressSetting.GND, InputMultiplexeConfig.AIN0, PgaConfig.FS4096, DataRate.SPS860);
await adc.InitializeAsync();

  第二步,读取数据。

short raw = adc.ReadRaw();
double vol = adc.RawToVoltage(raw);

  如果需要释放,调用 adc.Dispose();

  6. 运行图

张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号的更多相关文章

  1. 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED

    感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...

  2. 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

    HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...

  3. 张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器

    BH1750FVI 是一款 IIC 接口的数字型光强度传感器集成电路.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 ...

  4. 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用

    今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...

  5. 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...

  6. 张高兴的 Windows 10 IoT 开发笔记:无线收发芯片 nRF24L01

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  7. 张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  8. 张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  9. 张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动数码管

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

随机推荐

  1. RN 导入原有Xcode项目中,引入Pod依赖出现的问题与解决

    RN 导入原有Xcode项目中,引入Pod依赖出现的问题与解决 前言 最近学习React Native技术.将RN引入到原来Xcode项目中有一步:给原来Xcode项目添加所需要的Pod依赖 写好Po ...

  2. 20155231 2016-2017-2 《Java程序设计》第5周学习总结

    # 20155231 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 学习目标 理解异常架构 掌握try...catch...finally处理异常的方法 会 ...

  3. 【Electron】Electron开发入门

    Electron简介: Electron提供了丰富的本地(操作系统)的API,使你能够使用纯JavaScript来创建桌面应用程序,并且跨平台(win,mac,linux等各种PC端平台).与其它各种 ...

  4. 【Egret】Native版本 视频播放器(android)

    前段时间,领导说客户要一个平板版本的视频播放器,把我们做的一些视频资源放进去,要是本地的:我们部门又没有app开发程序员,正好又前段我在实验egret的app打包功能,就说用egret做(ps:本来想 ...

  5. Java面试指导

    Java面试指导   想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊 ...

  6. Async/Await替代Promise的6个理由

    译者按: Node.js的异步编程方式有效提高了应用性能:然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码:在实践过程中,却发现Promise并不完美:技术进步是无止 ...

  7. Android 瘦身之道 ---- so文件

    Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...

  8. MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用

    在统计查询中,经常会用到count函数,这里是基础的 MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用 -- 创建表 CREATE TABLE `tb ...

  9. JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包

    了解这些问题,我先一步步来看,先从基础说起,然后引出这些概念. 本文只用实例验证结果,并做简要说明,给大家增加些印象,因为单独一项拿出来都需要大篇幅讲解. 1.值类型 & 引用类型 funct ...

  10. linux常用操作命令

    cd: cd /data 进入目录 cd .. 返回上级菜单tar: tar -cvf jcms20170411.tar.gz jcms/ 将jcms文件夹打包为 jcms20170411.tar.g ...