张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号
考虑到 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. 运行图
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PgSQL · 应用案例 · "写入、共享、存储、计算" 最佳实践
背景 数据是为业务服务的,业务方为了更加透彻的掌握业务本身或者使用该业务的群体,往往会收集,或者让应用埋点,收集更多的日志。 随着用户量、用户活跃度的增长,时间的积累等,数据产生的速度越来越快,数据堆积的量越来越大,数据的维度越来越多,数据类型越来越多,数据孤岛也越来越多。 日积月累,给企业IT带来诸多负担,IT成本不断增加,收益确不见得有多高。 上图描绘了企业中可能存在的问题: 1. 数据孤岛问题严重(如果没有大数据平台时)。 2. 对成本预估不足,计算能力扩容麻烦,又或者铺张浪费严重。 3. 数据冗余问题突出。 4. 存储成本昂贵。 5. 业务萎缩后硬件成为固定资产,IT负担严重,几乎没有硬件伸缩能力。 6. 数据量太大,几乎无法备份。 7. 业务需求多,数据种类多,分析成本、开发成本高昂。 本文将针对这个场景,给出一个比较合理的方案,灵活使用,可以
- 下一篇
《Ansible权威指南》第1章
本节书摘来自华章出版社《Ansible权威指南》一书中的第一章,第1节,作者 李松涛 魏 巍 甘 捷 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第一篇 Part 1 基础入门篇 第1章 Ansible基础入门 第2章 Ansible基础元素介绍 第3章 Ansible Ad-Hoc命令集 第4章 Playbook快速入门 第5章 Ansible Playbook拓展 第1章 Ansible基础入门 “未来主体是传统行业利用互联网技术,以云端用人工智能的方式处理大数据”,在腾讯“云+未来”技术峰会上,马化腾这样形容未来。15年前,电脑还只是少数人的专属,那时的网吧还很火,还没人知道“网咖”是什么。而现在人手一部智能手机,物联网更是让日常生活中的普通家电也能在互联网占据一席之地。这一切都推动着互联网如火如荼发展,IT技术的发展更是日新月异
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19