0、结果

说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是距离值,如果是你想要的,可以接着往下看。


1、外观

说明:虽然红外测距传感器形态各异,但是原理和代码都是适用的,只是测量范围可能不一样。


2、连线

说明:只需要连接三根线。

  • uno————红外测距传感器
  • 5V--------------VCC
  • GND--------------GND
  • A0--------------SIG

3、源程序

说明:采用非阻塞方式编写,一定时间检测一次距离值,并进行了简单滤波,又将对应功能进行函数化,方便移植。

/****************************************红外测距 part****************************************/
/*接线:VCC------VCCGND------GNDA0------SIG
*/
#define cp2d12Pin A0                                                        //定义一个引脚
#define cp2d12timeInterval 150                                              //检测一次的时间间隔
unsigned long cp2d12Times = 0;                                              //记录设备运行时间
double distance = 0;                                                        //距离值
int beforeVal = 0;                                                          //前一个距离值
int presentVal = 0;                                                         //当前距离值
int averageVal = 0;                                                         //前一个后一个距离的平均值
/****************************************set up and loop part*********************************/
void setup () {Serial.begin (9600);                                                      //设置串口波特率为9600pinMode(cp2d12Pin, INPUT);                                                //引脚设置成输出Serial.println("设备上线!");
}
void loop () {getDistanceData();                                                        //获取距离数据并且打印
}
/*获取距离数据并且打印*/
void getDistanceData() {if (millis() - cp2d12Times >= cp2d12timeInterval) {                       //一定时间执行一次cp2d12Times = millis();int value1 = analogRead (cp2d12Pin);distance = getIr(value1);                                 filterData();                                                           //进行一次简单的滤波Serial.print("原始值:");                                                //串口打印对应的值 Serial.print(value1);Serial.print(" ,距离值:");                                              //串口打印对应的值 Serial.print(averageVal);                                               //串口打印对应的值 Serial.println (" cm");                                                 //串口打印对应的值}
}
/*当距离值不够设为定值最小值*/
double getIr(uint16_t value1) {if (value1 < 16)  {value1 = 16;}return (6762 / (value1 - 9)) - 4;                                         //转换公式
}/*滤波*/
void filterData() {beforeVal = averageVal;                                                   //平均值给前一个值presentVal = distance;                                                    //距离值给当前值averageVal = beforeVal + (presentVal - beforeVal) / 2;                    //求出当前距离值
}

4、注意事项

说明:首先需要看一下模块能够检测到的一个距离值。如果检测到的距离值不是准确的,那就需要改一下转换公式的部分值 (6762 / (value1 - 9)) - 4,可以查自己模块对应的转换公式,因为每个型号传感器可能不一样。

5、基本原理

红外测距传感器是一种常用的非接触式距离测量传感器,可以用于测量物体与传感器之间的距离。
        红外测距传感器的工作原理基于红外线反射原理。传感器通过内置的红外发射管发射红外线,并接收红外线反射回来的光信号。当红外光线照射到物体上时,一部分红外光被物体吸收,一部分红外光被物体反射回来。传感器接收到反射回来的红外光信号后,经过处理后可以计算出物体和传感器之间的距离。
        在Arduino中使用红外测距传感器,我们需要先将其正确连接到Arduino板上,并编写相应的程序进行控制。通常,可以通过数字输入输出端口发送控制信号,使红外传感器发射红外线,并通过模拟输入输出端口读取传感器返回的距离值。具体地,在程序中需要使用Arduino提供的相应函数来对数字输入输出端口和模拟输入输出端口进行操作,从而实现红外测距传感器的控制。
        需要注意的是,红外测距传感器的距离测量精度和稳定性受到多种因素的影响,如环境光线、物体表面特性等,因此在使用时还需要进行相应的校准和优化,以提高测量数据的准确性和可靠性。同时,在实际应用中,我们也需要考虑不同情况下采用不同类型和参数的红外测距传感器,并将其合理地组合和应用,以实现更加智能和高效的控制系统。

第十七篇、基于Arduino uno,获取cp2d12红外测距传感器的原始值和距离值——结果导向相关推荐

  1. 基于Arduino UNO的楼道人体感应灯

    基于Arduino UNO的楼道人体感应灯 文章目录 前言 一.认识人体热释电红外传感器 二.模块连接图及程序 1.setup()初始化程序 2.loop()主函数 总结 前言 生活中经常看到一些自动 ...

  2. 基于Arduino UNO R3的植物管家开发过程(一)

    前言 最近时不时收到CSDN粉丝的留言,忍不住打开了尘封已久的博客.自从工作以后,已经整整四年没有在CSDN中发过文章了.一打开博客,看着曾经记录的点点滴滴,回想起自己刚高中毕业的时候,连打字都不会, ...

  3. 基于Arduino Uno开发板制作音乐播放器

    基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器. 利用Arduino Uno读取sd卡模块中内存卡的音乐,传输信号到扬声器进行播放. 一.项目软硬件简 ...

  4. 西电A测 | 基于Arduino uno的电子密码锁仿真系统 | 使用Proteus仿真 | Arduino IDE编写

    西电A测 | 基于Arduino uno的电子密码锁仿真系统 | 使用Proteus仿真 | Arduino IDE编写 | ATMEGA328P 电子密码锁系统 Arduino UNO Arduin ...

  5. 基于Arduino Uno开发板的红外遥控开发

    基于Arduino Uno开发板的红外遥控开发 1 准备 1.1 硬件与软件 1.2 走线 2 代码 2.1 ReceiveDump 2.2 SendRawDemo 1 准备 1.1 硬件与软件 单片 ...

  6. Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法

    Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法 首先,我们来看一下Arduino UNO开发板的具体引脚排列,如下图所示, 再了解一下三色RGB LED模块,如下图所示 ...

  7. 基于arduino uno 开发板制作的 智能书包项目

    基于arduino uno 开发板制作的智能书包,当时收短视频启发,集合自动售货机的代码和RC522 读卡模块代码结合制作,现基本功能可以实现 ,目前代码部分尚不稳定需要继续改进 //一个智能书包小发 ...

  8. 基于arduino uno + WS2812b RGB灯带控制程序三

    基于arduino uno + WS2812b RGB灯带控制程序三 下面这个函数,中的NEO_GRB + NEO_RGB参数搭配不一样,显示的效果和变换的样式就有差异,自由组合测试看效果. Adaf ...

  9. 西电A测|基于Arduino uno的温度检测控制仿真系统

    西电A测|基于Arduino uno的温度检测控制仿真系统 温度检测控制仿真系统 Proteus仿真电路图 Arduino IDE编写程序 结果验证 功能拓展 温度检测控制仿真系统 功能要求:Ardu ...

最新文章

  1. 使用元学习和推理改善您的模型!
  2. 深入Activity的作业完成
  3. 教你如何用node.js开发微信公众号(一)
  4. 史上最详细的js日期正则表达式分享
  5. js中的内置对象(详细篇)
  6. 2018年python工作好找吗-2018年排名前20的数据科学Python库
  7. wuzhicms 查看模板中的所有可用变量和值
  8. 【免费】ArcGIS 10.8 软件下载及手把手安装教程(超详细)
  9. 通信算法之十三:RS编码与译码仿真链路
  10. win10和win7两个计算机相连,详解win10两台电脑网线直连的操作方法
  11. 特征工程(Feature Engineering)
  12. PLC抑制干扰电路的设计
  13. 转帖:夜夜听雨(四)(中国社会科学院 郑哲)
  14. 1000:入门测试题目 【信息学奥赛一本通(C++版)在线评测系统】
  15. Appium自动化测试框架
  16. TCP的CLOSE_WAIT和TIME_WAIT问题汇总
  17. visio 深信服设备_深信服数据安全建设新思路,让数据泄密可视可控
  18. Linux上用到的一些内容整理
  19. 不舍红尘,只因恋上你
  20. 记录Android开发艺术探索阅读

热门文章

  1. android @nonnull的作用,Android:NullPointerException尽管@NonNull
  2. 趋势:把保险倒过来,从资本主义极致到穷人的逻辑——新保险
  3. Android图片加载优化
  4. “长寿饮食”怎么吃才长寿
  5. python大数据毕业设计选题题目大全
  6. 【十二万字总结】Java全套(上)、一篇巩固JavaSE核心
  7. Luogu 3768 简单的数学题
  8. Redis安装教程超详细
  9. SQL Server数据库——创建数据库
  10. 《SCI》、《EI》、《ISTP》简介