详解Arduino GY-30数字光强传感器应用

传感器

283人已加入

描述

  数字传感器
 
  数字传感器是指将传统的模拟式传感器经过加装或改造A/D转换模块,使之输出信号为数字量(或数字编码)的传感器,主要包括:放大器、A/D转换器、微处理器(CPU)、存储器、通讯接口、温度测试威廉希尔官方网站 等,在微处理器和传感器变得越来越便宜的今天,全自动或半自动(通过人工指令进行高层次操作,自动处理低层次操作)系统可以包含更多智能性功能,能从其环境中获得并处理更多不同的参数。
 
  特点
 
  1、先进的A/D转换技术和智能滤波算法,在满量程的情况下仍可保证输出码的稳定。
 
  2、可行的数据存储技术,保证模块参数不会丢失。
 
  3、良好的电磁兼容性能。
 
  4、传感器的性能采用数字化误差补偿技术和高度集成化电子元件,用软件实现传感器的线性、零点、温漂、蠕变等性能参数的综合补偿,消除了人为因素对补偿的影响,大大提高了传感器综合精度和可靠性。
 
  5、传感器的输出一致性误差可以达到0.02%以内甚至更高,传感器的特性参数可完全相同,因而具有良好的互换性。
 
  6、采用A/D转换威廉希尔官方网站 、数字化信号传输和数字滤波技术,传感器的抗干扰能力增加,信号传输距离远,提高了传感器的稳定性。
 
  7、数字传感器能自动采集数据并可预处理、存储和记忆,具有唯一标记,便于故障诊断。
 
  8、传感器采用标准的数字通讯接口,可直接连入计算机,也可与标准工业控制总线连接,方便灵活。
 
  9, 数字传感器是将AD,EPROM,DIE(指还未封装的传感器芯片,属于裸片,大小介于cell和chip之间),封装在一块用PCB,金属块或陶瓷板上的集成。通过各种温度,压力点的校准,计算出DIE的线性,再利用AD去补偿的方法加工而成的。
 
  应用及前景
 
  在微处理器和传感器变得越来越便宜的今天,全自动或半自动(通过人工指令进行高层次操作,自动处理低层次操作)系统可以包含更多智能性功能,能从其环境中获得并处理更多不同的参数。尤其是MEMS(微型机电系统)技术,它使数字传感器的体积非常微小并且能耗与成本也很低。以纳米碳管或其它纳米材料制成的纳米传感器同样具有巨大的潜力 [1] 。
 
  即使在萌芽阶段,人们仍然认为在不久的将来数字传感器对电子市场具有重要的推动作用。制作数字传感器的接口以及支持用于数字传感器网络的形式多样的通讯协议都是对技术工艺的巨大挑战。传感器的非均质特性和其操作条件的多样化也对技术工艺提出了巨大的挑战。
 
  现在系统设计所包含的传感器和处理器越来越多。随着传感器和处理器价格的不断降低,取代机械控制结构的阈值也在不断变化。在系统中选择正确的传感器组合和处理算法可以显著地降低原材料及能耗的费用并提高系统的总体性能。目前,不断提高操作的简化程度和延长能源的使用寿命变得越来越重要,尤其是如今越来越多的传感器网络动辄就配置1000或更多的传感器节点。

  GY-30数字光强传感器通过I²C通信协议接入Arduino过程中的一些问题和解决方案:

  网上流行着两个版本:

  我用版本一的代码,发现并不对,串口打印一直显示光照强度为 0 ,很奇怪,也研究了很久,去 Wire 这个库文件看了函数实现,后来发现

  Wire.requestFrom(ADDR, 2); // 2byte every time

  这一行代码出现了问题。

  这个 requestFrom

  网上对它的描述都是:

  Wire.requestFrom()

  描述:

  主设备请求从设备一个字节,这个字节可以被主设备用 read()或available()接受。

  Wire.requrstFrom(addtess,quantity)

  Wire.requrstFrom(addtess,quantity,stop)

  参数 :

  addtess : 7位的器件地址

  quantity : 请求得到的数量 stop :布尔形,‘1’

  则在请求结束后发送一个停止命令,并释放总线。‘0’则继续发送请求保持连接。

  返回:

  字节形 ,从从机接受到的字节数目。

  然而并没有提,要用 requestFrom 前后必须要加:

  Wire.beginTransmission(ADDR);

  Wire.endTransmission();

  这两句,分别为开始一次传输数据,和结束一次传输。

  也就是将 requestFrom 这行代码改为以下,即可完成从设备向主设备发送数据

  在这里也就是 gy30(从设备) 向 arduino 板(主设备)传输光强度的采集量

  Wire.beginTransmission(ADDR);

  Wire.requestFrom(ADDR, 2);

  Wire.endTransmission();


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分