Sharp GP2Y0A21红外线测距传感器

测试,使用5v-vcc。

Sharp GP2Y0A21是一颗红外线测距传感器,易于使用,价钱廉宜,且低功耗。 规格如下:
距离测量范围:10至80cm(4“到32”)
工作电压:4.5V至5.5V
输出类型:模拟电压
平均功耗:35mA
峰值功耗:约200mA
允许的最大角度:> 40°
更新频率/周期:25 Hz/40毫秒

Sharp GP2Y0A21是一颗非线性(nonlinear)测距传感器,且是非连续性(non-continuity)输出,当距离小于8厘米,传感器将不能正常工作。其测距特性如图所示。



excel添加趋势线。得到电压和距离的关系公式。
代码
用ADC3的IN11,PC1引脚。
Vref=3.3V。

头文件

#ifndef __SHARP2Y0A21_H
#define __SHARP2Y0A21_H
#include "sys.h"
#include "delay.h"
#include "adc3.h" #define Adc3IN11SHUIWEI_READ_TIMES  10      //定义光敏传感器读取次数,读这么多次,然后取平均值void ShuiWeiSensor_Init(void);                //初始化光敏传感器
float ShuiWeiSensor_Get_Val(void);              //读取光敏传感器的值
#endif 

C文件

#include "SHARP2Y0A21.h"
#include "adc3.h"//初始化ADC,不用修改
//这里我们仅以规则通道为例                                                         //初始化传感器,需要修改端口和引脚号,这里是c出口,c1引脚,ADC3的IN11
void ShuiWeiSensor_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOF时钟//先初始化ADC3通道11 IO口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PC1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化  Adc3_Init();//初始化ADC3
}
//Pc1=IN11,需要修改,15通道
float ShuiWeiSensor_Get_Val(void)
{u32 temp_val=0;float distemp=0.0;u8 t;for(t=0;t<Adc3IN11SHUIWEI_READ_TIMES;t++){temp_val+=Get_Adc3(ADC_Channel_11);  //读取ADC值,通道11delay_ms(5);}temp_val/=Adc3IN11SHUIWEI_READ_TIMES;//得到平均值,这个是平均的ADC,printf("average_val=%d\r\n",temp_val);distemp=temp_val*3.3/4095;printf("****voltage= %f\r\n",distemp);//电压值//电压对应距离distemp=(-13.2*distemp*distemp*distemp)+72.84*distemp*distemp-140*distemp+107.12;return distemp;
//  if(temp_val>4000)temp_val=4000;
//  //简单量化后,处理成 0~100 的光强值。0 对应最暗,100 对应最亮
//  return (u8)(100-(temp_val/40));
}

ADC3.h

#ifndef __ADC3_H
#define __ADC3_H
#include "sys.h"
//
void Adc3_Init(void);               //ADC通道初始化
u16  Get_Adc3(u8 ch);               //获得某个通道值
u16 Get_Adc_Average(u8 ch,u8 times);//得到某个通道给定次数采样的平均值
#endif 

ADC3.c

#include "adc3.h"
#include "delay.h"         //初始化ADC
//这里我们仅以规则通道为例
void  Adc3_Init(void)
{    ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef       ADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); //使能ADC3时钟RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,ENABLE);     //ADC3复位RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,DISABLE);  //复位结束   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐  ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC3, &ADC_InitStructure);//ADC初始化ADC_Cmd(ADC3, ENABLE);//开启AD转换器
}
//获得ADC值
//ch:通道值 0~16 ADC_Channel_0~ADC_Channel_16
//返回值:转换结果
u16 Get_Adc3(u8 ch)
{//设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_480Cycles );   //ADC3,ADC通道,480个周期,提高采样时间可以提高精确度               ADC_SoftwareStartConv(ADC3);        //使能指定的ADC3的软件转换启动功能    while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADC3); //返回最近一次ADC3规则组的转换结果
}

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "adc3.h"
#include "usart.h"
#include "TOILHUMSENSOR.h"
#include "SHARP2Y0A21.h"//作用,读取PF5,ADC3IN14的数值
int main(void)
{ u8 adcx;float shuiwei=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);    //初始化延时函数uart_init(115200); //初始化串口波特率为115200AdcHumSensor_Init();ShuiWeiSensor_Init();printf("**adc......\r\n");while(1){adcx=AdcHumSensor_Get_Val();shuiwei=ShuiWeiSensor_Get_Val();printf("**adcX=%d\r\n",adcx);printf("*************----shuiwei=%f\r\n",shuiwei);printf("^^^\r\n");delay_ms(2000);   }
}

红外线测距传感器AD读取stm32F407,PC1,ADC3_IN11相关推荐

  1. Arduino与Processing交互-超声波测距传感器的读取与显示

    公众号:STCode 1-超声波测距传感器简介 超声波测距传感器是利用频率高于20kHz的声波在空气中传播,遇到障碍物反射回来,通过计算发射和接收时间差,可以计算出发射点与障碍物间的距离. 超声波测距 ...

  2. Arduino控制GP2D12红外线测距传感器

    转自:http://blog.jianghu.taobao.com/u/MTM1NjA0Nzg=/blog/blog_detail.htm?aid=20109580 最近忙生活琐事,很少搞这些小东东, ...

  3. Sharp_GP2Y0A 红外测距传感器 Arduino读取

    Sharp_GP2Y0A GP2Y0A02YK0F, GP2Y0A710K0F Arduino 程序 GP2Y0A02YK0F 传感器参数: 20~150cm Analog output type. ...

  4. Arduino + GP2D12红外测距传感器+LCD1602

    一: GP2Y0A21YKIR Sensor是日本夏普公司推出的一款性价比高.最常用的红外测距传感器.其与GP2D12测量射程相同,但探测面积略有增加,可用来对物体的距离进行测量,实现轮式机器人的避障 ...

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

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是距离值,如果是你想要的,可以接着往下看. 1.外观 说明:虽然红外测距传感器形态各异,但是原理和代码都是适用的,只 ...

  6. 德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算

    传感器数据读取和计算 之前的文章我们简单介绍了热成像传感器德国海曼的HTPA 32x32d的EEPROM数据读取和解析,本文主要进一步介绍传感器数据读取,最终通过五大步计算和校准得到我们想要的32x3 ...

  7. 基于STM32和超声波测距传感器的测距功能设计

    基于STM32和超声波测距传感器的测距功能设计(使用陌生传感器的流程介绍) 引言 项目设计 项目简介 开发工具 硬件设计 软件设计 开发流程 阅读手册 配置并测试传感器相关设置 软件开发 总结 后续 ...

  8. 距离感应音乐玩具计算机系统设计,可编程机器人玩具程小奔红外测距传感器测量距离案例...

    文:邱老师 上次课程我们学习了用速度乘以时间计算程小奔移动距离的方法.那么,它能否测量还没有走过的路程距离呢?答案是可以的. 程小奔编程机器人集合了多种传感器,今天我们要使用程小奔机器人的红外测距传感 ...

  9. 红外测距传感器(GP2D12、74HC595、ADC0832)

    红外测距传感器GP2D12 应用 要做的项目 原理 仿真效果图 74HC595的作用(串入) 项目目录 ADC0832X.c(延用之前的,但注意CS.CLK.DIO所对应的端口发生了变化) 74HC5 ...

最新文章

  1. 简单分析一下socket中的bind
  2. dojo 的DOM操作 dojo/dom
  3. UEFI + GPT 启动 VHD
  4. 小学五年级年级计算机教学计划,小学五年级信息技术教学计划范文
  5. 图解高性能服务器开发两种模式,第四章 NETTY高性能架构设计
  6. oracle查询结果展示,ORACLE构造查询日期展示结果
  7. python--os模块
  8. Win10上的dll依赖查看工具Dependencies
  9. JAVASE复习计划
  10. 正确的握笔姿势,握笔的姿势非常的重要
  11. win7 添加XP共享打印机
  12. linux查看进程临时日志,Linux sed查看某时间段的系统日志
  13. DS栈—波兰式,逆波兰式
  14. SMS短信PDU编码详细解析
  15. 物联网 嵌入式 单片机毕业设计题目100例
  16. 牛客网直通BAT面试算法精讲课优惠码
  17. ArcGIS导出地图是全黑的
  18. Python 函数代码示例
  19. kicad 排针_xconch: 神奇海螺,是时候该结束开发板裸奔的时代了。采用堆叠设计,拥有漂亮外观及超强扩展性。一款完全开源的结构及通用硬件扩展平台,旨在大家能更欢乐的DIY。...
  20. NBUT 1119 Patchouli's Books (STL应用)

热门文章

  1. Jconsole简介
  2. python自动收取蚂蚁森林能量_用 Python 实现定时自动化收取蚂蚁森林能量
  3. 29-分数求模(逆元)B Jxc军训
  4. 广电总局:三网融合是业务融合不是三网合一
  5. 区块链+电商,能直击传统电商的痛点吗?
  6. Server Side Swift With Vapor(基础配置使用DropLet类实现http请求)
  7. matlab demux,demux(demux用法)
  8. 国内国外有名的开发java网站
  9. EasyCrawler-Post请求之爬个优衣库
  10. 字体编辑器,让字体设计更加便捷高效