精华内容
下载资源
问答
  • 电子-夏普传感器sharpsensorList.pdf,单片机/嵌入式STM32-F0/F1/F2
  • 关于GP2Y1010AU0F SHARP传感器使用

    千次阅读 2013-09-27 14:07:12
    关于GP2Y1010AU0F SHARP传感器使用 1.先上传该传感器PDF上的部分资料 SHARP传感器使用" title="关于GP2Y1010AU0F SHARP传感器使用" style="margin:0px; padding:0px; border:0px; list-style:none"> SHARP传感器...

    转载自:http://blog.sina.com.cn/s/blog_72359bde010191m0.html


    关于GP2Y1010AU0F SHARP传感器使用

    1.先上传该传感器PDF上的部分资料

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    2.试验初步接线

     1脚接150欧电阻然后与6脚相接 ,作为+5v输入端;2脚与4脚相接作为电源地;1脚与150欧电阻中间接220uf电容的正端,负端接地;3脚直接由单片机给脉冲波10ms周期,高电平0.32ms;5脚为输出端,接示波器观察波形如下图;
     关于GP2Y1010AU0F <wbr>SHARP传感器使用

    初步结论:从图像上看,蓝颜色是3脚脉冲输入波,黄颜色是5脚输出波;貌似与pdf上的不相符,思前想后,觉得还是3号脚的脉冲波输入那块不对;终于再次进行下面的试验。

    3.接线方法与初步的差不多,只是3脚的脉冲输入波做了改变,还是由单片机直接给50ms周期,0.32ms低电平脉冲;得到波形图如下;

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    调整示波器时间,如下图;

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    可以看出:蓝颜色是50ms周期,0.32ms低电平脉冲;黄颜色是5脚输出波;这回貌似与pdf资料上的输出波形相符合了;抽了跟烟,发现黄颜色的脉冲幅值会迅速增大,该传感器的灵敏度还是不错的。

    下图是实际试验接线,有点乱,嘿嘿

    关于GP2Y1010AU0F <wbr>SHARP传感器使用

    下图是接线草稿图;
    关于GP2Y1010AU0F <wbr>SHARP传感器使用


    总结:理论上,初步接线中可能出现问题的解决方法是,在单片机给出输入脉冲后要经过三极管驱动,在给传感器3号脚,这样应该就对了,有兴趣可以试验下。还是自己看pdf资料不认真啊,不然也不会费着劲了。希望以后大家要认真仔细阅读资料,避免不必要的麻烦。

    展开全文
  • 但是,夏普还生产光电子元件和传感器,这些光器件和传感器被其他公司广泛用于制造自己的产品,例如空气净化器,机器人吸尘器,自动水龙头等等。 对于每个传感器,您将找到一个可与Arduino一起使用的演示程序(草图...
  • GP2Y0D810Z0F,固定距离10cm,夏普传感器,冠宇铭通,v--x--15-110-264-988 Rohs Lead free / RoHS Compliant 厂家的应用说明 标准包装 40 感应距离 10cm Output 型 Digital - 电源电压 ...

    GP2Y0D810Z0F,固定距离10cm,夏普传感器,冠宇铭通,v--x--15-110-264-988

    RohsLead free / RoHS Compliant
    厂家的应用说明 
    标准包装40
    感应距离10cm
    Output 型Digital
    - 电源电压4.5 V ~ 5.5 V
    电流 - 电源9mA
    输出电压差(典型值)的距离-
    输出电压(典型值)的距离-
    包装14DIP
    家庭GP2Y0D810Z0F
    标准包装Tape & Reel
    产品种类Proximity Sensors
    RoHSRoHS Compliant
    检测方法Optical
    感应距离为5mm13 cm
    最高工作温度60 C
    最低工作温度- 10 C
    工厂包装数量1000
    供应商封装形式DIP
    标准包装名称DIP
    欧盟RoHS指令Compliant
    引脚数14
    铅形状Through Hole
    输出类型Digital
    电流 - 电源9mA
    电压 - 电源4.5 V ~ 5.5 V
    其他名称425-2616-5
    RoHS指令Lead free / RoHS Compliant
    封装/外壳DIP-14
    电压 - 电源4.5 V ~ 5.5 V
    感应距离10cm
    输出类型Digital
    电流 - 电源9mA
    最高工作温度+60°C
    工作温度范围-10 → +60°C
    峰值感应器距离100mm
    输出设备光电二极管
    最低工作温度-10°C
    展开全文
  • 夏普粉尘传感器STM32代码,本代码已经进过测试,可以正常使用,测得粉尘浓度
  • PM2.5SHARP空气传感器

    2015-07-09 13:51:42
    开发空气净化器所用的检测PM2.5传感器,数据传输十六进制,转十进制即可显示所测数据
  • 此提交包括夏普红外传感器的测量数据,该传感器用于多个步骤(不同模型)以构建传感器的工厂模型。 该模型包括噪声、高频和低频尖峰以及传感器的非线性特性。 然后使用构建工厂模型的知识在可在 Arduino Mega 上运行...
  • STM32测量MQ4、灰尘传感器、DHT11温湿度传感器,并在TFT上显示,超过浓度阈值蜂鸣器报警。 使用普中STM32F103ZET6开发板+2.8寸触摸屏。 2.MQ4天然气传感器 MQ-4传感器简介: MQ- 4气体传感器所使用的气敏材料...

     

    1.功能

    STM32测量MQ4、灰尘传感器、DHT11温湿度传感器,并在TFT上显示,超过浓度阈值蜂鸣器报警。

    使用普中STM32F103ZET6开发板+2.8寸触摸屏。

    2.MQ4天然气传感器

    MQ-4传感器简介:

    MQ- 4气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。 MQ-4气体传感器对甲烷的灵敏度高,对丙烷、丁烷也有较好的灵敏度。这种传感器可检测多种可燃性气体,特别是天然气,是一款适合多种应用的低成本传感器。

    模块应用:

    适用于家庭或工厂的甲烷气体,天然气等监测装置,可测试天然气、甲烷 300 to 10000ppm;

    模块特色:

    1、采用优质双面板设计,具有电源指示和TTL信号输出指示;

    2、具有DO开关信号(TTL)输出和AO模拟信号输出;

    3、TTL输出有效信号为低电平。(当输出低电平时信号灯亮,可直接接单片机或继电器模块)

    4、模拟量输出的电压,浓度越高电压越高。

    5、对甲烷、天然气检测有较好的灵敏度。

    6、有四个螺丝孔便于定位;

    7、产品外形尺寸:32(L)*20(W)*22(H)

    8、具有长期的使用寿命和可靠的稳定性

    9、快速的响应恢复特性

     

     

    电气性能:

    输入电压:DC5V 功耗(电流):150mA

    DO输出:TTL数字量0和1(0.1和5V)

    AO输出:0.1-0.3V(相对无污染),最高浓度电压4V左右

    特别提醒:传感器通电后,需要预热20S左右,测量的数据才稳定,传感器发热属于正常现象,因为内部有电热丝,如果烫手就不正常了。

     

     

    接线方式:

    1、VCC:接电源正极(5V)

    2、GND:接电源负极

    3、DO:TTL开关信号输出

    4、AO:模拟信号输出

     

     

    关键代码及说明:

     

    void MQ4_ADC_init()
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	ADC_InitTypeDef ADC_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_ADC2,ENABLE);
    
    	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M  最大14M 设置ADC时钟(ADCCLK)
    	ADC_DeInit(ADC2);
    
    	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//ADC
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;	//模拟输入
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA,&GPIO_InitStructure);
     
    
    	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 
    	ADC_InitStructure.ADC_ScanConvMode = DISABLE; 
    	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 
    	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; 
    	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; 
    	ADC_InitStructure.ADC_NbrOfChannel = 2; 
    	ADC_Init(ADC2, &ADC_InitStructure);
    	
    	//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
    //	ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
    	
    	//内部温度传感器是在ADC1通道16的。
    	ADC_RegularChannelConfig(ADC2,ADC_Channel_2,1,ADC_SampleTime_239Cycles5);
    //	ADC_TempSensorVrefintCmd(ENABLE);//打开内部温度传感器使能
    	ADC_Cmd(ADC2,ENABLE);	
    
    	ADC_ResetCalibration(ADC2);//重置指定的ADC的校准寄存器
    	while(ADC_GetResetCalibrationStatus(ADC2));//获取ADC重置校准寄存器的状态
    	
    	ADC_StartCalibration(ADC2);//开始指定ADC的校准状态
    	while(ADC_GetCalibrationStatus(ADC2));//获取指定ADC的校准程序
    
    	ADC_SoftwareStartConvCmd(ADC2, ENABLE);//使能或者失能指定的ADC的软件转换启动功能
    }

     

    u16 GetMQ4Value(void)
    {
    			uint16_t ADCVal;
    			float Voltage;
    			uint16_t ppm;
    			ADC_SoftwareStartConvCmd(ADC2, ENABLE);
    	    while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC ));
    			ADCVal = ADC_GetConversionValue(ADC2);
    			Voltage = ADCVal * 3.3 / 4096;
    	//无天然气的环境下,实测AOUT端的电压为0.5V,当检测到天然气时,电压每升高0.1V,实际被测气体浓度增加200ppm
    			ppm = (Voltage - 0.5) / 0.1 * 200;
    			return ppm;
    			//return ADCVal;
    }

     

    int Read_MQ4_DOUT_Data()
    {
    	int status;
    	status = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3);
    	return status;
    }

     

    3.DHT11温湿度传感器

     

    //初始化DHT11的IO口 DQ 同时检测DHT11的存在
    //返回1:不存在
    //返回0:存在    	 
    u8 DHT11_Init(void)
    {	 
     	GPIO_InitTypeDef  GPIO_InitStructure;
     	
     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	 //使能PG端口时钟
    	
     	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				 //PG11端口配置
     	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
     	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     	GPIO_Init(GPIOG, &GPIO_InitStructure);				 //初始化IO口
     	GPIO_SetBits(GPIOG,GPIO_Pin_11);						 //PG11 输出高
    			    
    	DHT11_Rst();  //复位DHT11
    	return DHT11_Check();//等待DHT11的回应
    } 

     

    //从DHT11读取一次数据
    //temp:温度值(范围:0~50°)
    //humi:湿度值(范围:20%~90%)
    //返回值:0,正常;1,读取失败
    u8 DHT11_Read_Data(u16 *temp,u16 *humi)    
    {        
     	float buf[5];
    	u8 i;
    	DHT11_Rst();
    	if(DHT11_Check()==0)
    	{
    		for(i=0;i<5;i++)//读取40位数据
    		{
    			buf[i]=DHT11_Read_Byte();
    		}
    		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
    		{
    			*humi=buf[0];
    			*temp=buf[2];
    		}
    	}else return 1;
    	return 0;	    
    }

     

    4.GP2Y1014AU0F夏普光学灰尘传感器

    参考链接:https://detail.tmall.com/item.htm?spm=a230r.1.14.4.1a81Dr&id=544189174002&cm_id=140105335569ed55e27b&abbucket=9

     

    http://blog.sina.com.cn/s/blog_72359bde010191m0.html

     

    添加一个150ohm的电阻和一个220uF的电容,接线如下图:

     

     

    void GP2Y_ADC_init()
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	ADC_InitTypeDef ADC_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO|RCC_APB2Periph_ADC3,ENABLE);
    
    	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M  最大14M 设置ADC时钟(ADCCLK)
    	ADC_DeInit(ADC3);
    
    	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//ADC
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;	//模拟输入
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    	GPIO_Init(GPIOF,&GPIO_InitStructure);
     
    
    	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 
    	ADC_InitStructure.ADC_ScanConvMode = DISABLE; 
    	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 
    	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; 
    	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; 
    	ADC_InitStructure.ADC_NbrOfChannel = 4; 
    	ADC_Init(ADC3, &ADC_InitStructure);
    	
    	//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
    //	ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
    	
    	//内部温度传感器是在ADC1通道16的。
    	ADC_RegularChannelConfig(ADC3,ADC_Channel_4,1,ADC_SampleTime_239Cycles5);
    //	ADC_TempSensorVrefintCmd(ENABLE);//打开内部温度传感器使能
    	ADC_Cmd(ADC3,ENABLE);	
    
    	ADC_ResetCalibration(ADC3);//重置指定的ADC的校准寄存器
    	while(ADC_GetResetCalibrationStatus(ADC3));//获取ADC重置校准寄存器的状态
    	
    	ADC_StartCalibration(ADC3);//开始指定ADC的校准状态
    	while(ADC_GetCalibrationStatus(ADC3));//获取指定ADC的校准程序
    
    	ADC_SoftwareStartConvCmd(ADC3, ENABLE);//使能或者失能指定的ADC的软件转换启动功能
    	GPIO_SetBits(GPIOC, GPIO_Pin_2);//置1
    

     

    u16 GetGP2YAverageValue(u8 times)
    {
        u32 temp_val=0;
        u8 t;
        for(t=0;t<times;t++)
        {
            temp_val+=GetGP2YSingleValue();
        }
        return temp_val/times;
    }
    
    u16 GetGP2YSingleValue(void)
    {
    		int samplingTime = 280;//等待LED开启的时间是280μs
    		int deltaTime = 40;//整个脉冲持续时间为320μs。因此,我们还需再等待40μs
    	
    		uint16_t ADCVal;
    		float dustVal = 0;
    		float Voltage;
    	
    		GPIO_ResetBits(GPIOC, GPIO_Pin_2);//置1  开启内部LED  ????????
    		delay_us(samplingTime); 					// 开启LED后的280us的等待时间
    		
    		ADC_SoftwareStartConvCmd(ADC3, ENABLE);
        while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC));
    		ADCVal = ADC_GetConversionValue(ADC3);
    	
    		delay_us(40);
    		GPIO_SetBits(GPIOC, GPIO_Pin_2);//置0
    		delay_us(9680);//需要脉宽比0.32ms/10ms的PWM信号驱动传感器中的LED
    		Voltage = ADCVal * 3.3 / 4096;
    		dustVal = (Voltage + 1) * 1000 / 10;//*1000作用是将单位转换为ug/m3
    //		if(ADCVal > 36.455)
    //			dustVal = ((float)(ADCVal / 1024.0) - 0.0356) * 120000 * 0.035;
    //		dustVal = 0.17 * ADCVal - 0.1;
    //		dustVal = ADCVal;
    //		return dustVal; //		mg/m3
    		return dustVal;
    }
     

     

    放大后:

     

     

    5.蜂鸣器报警模块

    使用无源蜂鸣器模块

     

     

    关键代码如下,其中有驱动蜂鸣器发出救护车或者电动车报警的声音:

     

    #include "beep.h"
    #include "lcd_driver.h"
    #include "systick.h"
    #include "public.h"
    #include "gui.h"
    #define TEMPALARMVALUEDOWN 		18//温度报警上下限
    #define TEMPALARMVALUEUP		 	30
    
    #define HUMIALARMVALUEDOWN 		10//湿度报警上下限
    #define HUMIALARMVALUEUP		 	60
    
    #define MQ4ALARMVALUEUP		 	1000//天然气浓度报警上限
    
    #define DUSTALARMVALUEUP		 	400//粉尘浓度报警上限
    
    #define   BEEPALARM 	GPIO_SetBits(GPIOB, GPIO_Pin_5)//置1
    #define 	BEEPNOALARM GPIO_ResetBits(GPIOB, GPIO_Pin_5)//置0
    int AlarmFlag[4] = {0, 0, 0, 0};
    void Beep_GPIO_Init()//PB5
    {
    		GPIO_InitTypeDef GPIO_InitStructure;
    	/****************************LED*******************************/
    	/* GPIOC Periph clock enable */
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    	/* Configure PC2 and PC3 in output pushpull mode */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	//PB5
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    
    void Temp_Humi_Alarm(u8 temp, u8 humi)//当温度不在18-28度时,蜂鸣器报警;当湿度不在30%-60%时,蜂鸣器报警
     {
    		if((temp < TEMPALARMVALUEDOWN) || (temp > TEMPALARMVALUEUP)){
    				AlarmFlag[0] = 1;
    				GUI_Show12ASCII(10,280,"temperature alarm!",YELLOW,BLACK);
    				sound1();
    //				BEEPALARM;
    		}
    		else{
    				AlarmFlag[0] = 0;
    				GUI_Show12ASCII(10,280,"               ",YELLOW,BLACK);
    				BEEPNOALARM;
    		}
    		if((humi < HUMIALARMVALUEDOWN) || (humi > HUMIALARMVALUEUP)){
    				AlarmFlag[1] = 1;
    				GUI_Show12ASCII(10,300,"humidity alarm!",YELLOW,BLACK);
    				sound2();
    //				BEEPALARM;
    		}
    		else{
    				AlarmFlag[1] = 0;
    				GUI_Show12ASCII(10,300,"               ",YELLOW,BLACK);
    				BEEPNOALARM;
    		}
     }
     
      void MQ4_Alarm(u16 MQ4Value)
     {
    		if(MQ4Value > MQ4ALARMVALUEUP){
    			AlarmFlag[2] = 1;
    			GUI_Show12ASCII(10,320,"MQ4 gas alarm!",YELLOW,BLACK);
    			sound3();
    		}
    		else{
    			AlarmFlag[2] = 0;
    			GUI_Show12ASCII(10,320,"              ",YELLOW,BLACK);
    //			TFT_ClearOneLine(260, BLACK);
    			BEEPNOALARM;
    		}
     }
     
    void Dust_Alarm(u16 dustValue)//当浓度不在0-400内时,蜂鸣器报警
     {
    		if(dustValue > DUSTALARMVALUEUP){
    			AlarmFlag[3] = 1;
    			GUI_Show12ASCII(10,340,"dust alarm!",YELLOW,BLACK);
    			sound4();
    		}
    		else{
    			AlarmFlag[3] = 0;
    			GUI_Show12ASCII(10,340,"              ",YELLOW,BLACK);
    			BEEPNOALARM;
    		}
     }
     
    /*******************************************************************************
    * 函 数 名         : sound1
    * 函数功能		   : 蜂鸣器报警函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void sound1()  //救护车报警
    {
    	u32 i=1000;
    	while(i--)			   //产生一段时间的PWM波,使蜂鸣器发声
    	{
    		GPIO_SetBits(GPIOB,GPIO_Pin_5);		 //IO口输出高电平
    		delay(i);
    		GPIO_ResetBits(GPIOB,GPIO_Pin_5);	  //IO口输出低电平
    		delay(i--);
    	}	
    }
    
    /*******************************************************************************
    * 函 数 名         : sound2
    * 函数功能		   : 蜂鸣器报警函数	  通过改变频率控制声音变化
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void sound2()  //电动车报警
    {
    	u32 i=2000;
    	while(i--)					//产生一段时间的PWM波,使蜂鸣器发声
    	{
    		GPIO_SetBits(GPIOB,GPIO_Pin_5);	   //IO口输出高电平
    		delay(i);
    		GPIO_ResetBits(GPIOB,GPIO_Pin_5);	//IO口输出低电平
    		delay(i--);
    	}	
    }
    
    
    
    /*******************************************************************************
    * 函 数 名         : sound2
    * 函数功能		   : 蜂鸣器报警函数	  通过改变频率控制声音变化
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void sound3()  //电动车报警
    {
    	u32 i=3000;
    	while(i--)					//产生一段时间的PWM波,使蜂鸣器发声
    	{
    		GPIO_SetBits(GPIOB,GPIO_Pin_5);	   //IO口输出高电平
    		delay(i);
    		GPIO_ResetBits(GPIOB,GPIO_Pin_5);	//IO口输出低电平
    		delay(i--);
    	}	
    }
    
    
    /*******************************************************************************
    * 函 数 名         : sound2
    * 函数功能		   : 蜂鸣器报警函数	  通过改变频率控制声音变化
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void sound4()  
    {
    	u32 i=4000;
    	while(i--)					//产生一段时间的PWM波,使蜂鸣器发声
    	{
    		GPIO_SetBits(GPIOB,GPIO_Pin_5);	   //IO口输出高电平
    		delay(i);
    		GPIO_ResetBits(GPIOB,GPIO_Pin_5);	//IO口输出低电平
    		delay(i--);
    	}	
    }


     

    6.系统图

     

     

    代码

     

    展开全文
  • 夏普红外测距传感器

    千次阅读 2019-08-24 11:40:54
    红外测距传感器,具备10-100cm厘米测距,5v供电,led屏,指定距离灯光语音报警 红外测距传感器利用ADC获取指定电压变化 void GetVolt() { u8 i; for(i=0;i<160;i++) { temp+=RegularConvData_Tab[i]; } ...

    红外测距传感器,具备10-100cm厘米测距,5v供电,led屏,指定距离灯光语音报警
    红外测距传感器利用ADC获取指定电压变化

    void GetVolt()
    {
    	u8 i;
    	
    	for(i=0;i<160;i++)	
    	{
    	temp+=RegularConvData_Tab[i];  
    	}
    	temp=temp/160;
    	Volt1=temp*3300/4096;
      if(1500<Volt1&&Volt1<=2700)
      {
    	  LLL=Volt1/180;
      }
      if(1000<Volt1&&Volt1<=1500)
      {
    	  LLL=Volt1/25;
      }
        if(500<Volt1&&Volt1<=1000)
      {
    	  LLL=Volt1/9.4;
      }
          if(Volt1<=500)
      {
    	  LLL=Volt1/3.8;
      }
    
    }
    

    10-100cm测距根据adc获取的电压变化获取距离公式

    void GetDistance()
    	{
    		u32 x;
    		x = Volt1;
    
    	
    		//µÚÒ»¸öºìÍâÓú¯Êý
    			
    		if(2450<=Volt1)
    		{
    				Distance = 63.426 - 0.018*x;
    		}
    				if(1801<=Volt1&&Volt1<2450)
    		{
    			Distance = 70.344 - 0.0206*x;
    		}
    		if(1000<=Volt1&&Volt1<1801)
    		{
    			Distance = 100 - 0.04*x;
    		}
    		if(780<=Volt1&&Volt1<1000)
    		{
    			Distance = 184.18 - 0.1245*x;
    		}
    		if(700<=Volt1&&Volt1<780)
    		{
    			Distance = 172.5 - 0.125*x;
    		}
    		if(0<Volt1&&Volt1<700)
    		{
    			Distance = 155-0.1*x;
    		}
    
    	}
    

    将获取的距离值放在led屏幕上显示
    利用iic来链接led屏
    并配置相关led功能函数

    void IIC_Start()
    {
    
    	OLED_SCLK_Set() ;
    	OLED_SDIN_Set();
    	OLED_SDIN_Clr();
    	OLED_SCLK_Clr();
    }
    
    /**********************************************
    //IIC Stop
    **********************************************/
    void IIC_Stop()
    {
    	OLED_SCLK_Set() ;
    //	OLED_SCLK_Clr();
    	OLED_SDIN_Clr();
    	OLED_SDIN_Set();
    	
    }
    
    void IIC_Wait_Ack()
    {
    
    	//GPIOB->CRH &= 0XFFF0FFFF;	//ÉèÖÃPB12ΪÉÏÀ­ÊäÈëģʽ
    	//GPIOB->CRH |= 0x00080000;
    //	OLED_SDA = 1;
    //	delay_us(1);
    	//OLED_SCL = 1;
    	//delay_us(50000);
    /*	while(1)
    	{
    		if(!OLED_SDA)				//ÅжÏÊÇ·ñ½ÓÊÕµ½OLED Ó¦´ðÐźÅ
    		{
    			//GPIOB->CRH &= 0XFFF0FFFF;	//ÉèÖÃPB12ΪͨÓÃÍÆÃâÊä³öģʽ
    			//GPIOB->CRH |= 0x00030000;
    			return;
    		}
    	}
    */
    	OLED_SCLK_Set() ;
    	OLED_SCLK_Clr();
    }
    /**********************************************
    // IIC Write byte
    **********************************************/
    
    void Write_IIC_Byte(unsigned char IIC_Byte)
    {
    	unsigned char i;
    	unsigned char m,da;
    	da=IIC_Byte;
    	OLED_SCLK_Clr();
    	for(i=0;i<8;i++)		
    	{
    			m=da;
    		//	OLED_SCLK_Clr();
    		m=m&0x80;
    		if(m==0x80)
    		{OLED_SDIN_Set();}
    		else OLED_SDIN_Clr();
    			da=da<<1;
    		OLED_SCLK_Set();
    		OLED_SCLK_Clr();
    		}
    
    
    }
    /**********************************************
    // IIC Write Command
    **********************************************/
    void Write_IIC_Command(unsigned char IIC_Command)
    {
       IIC_Start();
       Write_IIC_Byte(0x78);            //Slave address,SA0=0
    	IIC_Wait_Ack();	
       Write_IIC_Byte(0x00);			//write command
    	IIC_Wait_Ack();	
       Write_IIC_Byte(IIC_Command); 
    	IIC_Wait_Ack();	
       IIC_Stop();
    }
    /**********************************************
    // IIC Write Data
    **********************************************/
    void Write_IIC_Data(unsigned char IIC_Data)
    {
       IIC_Start();
       Write_IIC_Byte(0x78);			//D/C#=0; R/W#=0
    	IIC_Wait_Ack();	
       Write_IIC_Byte(0x40);			//write data
    	IIC_Wait_Ack();	
       Write_IIC_Byte(IIC_Data);
    	IIC_Wait_Ack();	
       IIC_Stop();
    }
    void OLED_WR_Byte(unsigned dat,unsigned cmd)
    {
    	if(cmd)
    			{
    
       Write_IIC_Data(dat);
       
    		}
    	else {
       Write_IIC_Command(dat);
    		
    	}
    
    
    }
    
    
    /********************************************
    // fill_Picture
    ********************************************/
    void fill_picture(unsigned char fill_Data)
    {
    	unsigned char m,n;
    	for(m=0;m<8;m++)
    	{
    		OLED_WR_Byte(0xb0+m,0);		//page0-page1
    		OLED_WR_Byte(0x00,0);		//low column start address
    		OLED_WR_Byte(0x10,0);		//high column start address
    		for(n=0;n<128;n++)
    			{
    				OLED_WR_Byte(fill_Data,1);
    			}
    	}
    }
    
    
    /***********************Delay****************************************/
    void Delay_50ms(unsigned int Del_50ms)
    {
    	unsigned int m;
    	for(;Del_50ms>0;Del_50ms--)
    		for(m=6245;m>0;m--);
    }
    
    void Delay_1ms(unsigned int Del_1ms)
    {
    	unsigned char j;
    	while(Del_1ms--)
    	{	
    		for(j=0;j<123;j++);
    	}
    }
    
    //×ø±êÉèÖÃ
    
    	void OLED_Set_Pos(unsigned char x, unsigned char y) 
    { 	OLED_WR_Byte(0xb0+y,OLED_CMD);
    	OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
    	OLED_WR_Byte((x&0x0f),OLED_CMD); 
    }   	  
    //¿ªÆôOLEDÏÔʾ    
    void OLED_Display_On(void)
    {
    	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDCÃüÁî
    	OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
    	OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    }
    //¹Ø±ÕOLEDÏÔʾ     
    void OLED_Display_Off(void)
    {
    	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDCÃüÁî
    	OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
    	OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    }		   			 
    //ÇåÆÁº¯Êý,ÇåÍêÆÁ,Õû¸öÆÁÄ»ÊǺÚÉ«µÄ!ºÍûµãÁÁÒ»Ñù!!!	  
    void OLED_Clear(void)  
    {  
    	u8 i,n;		    
    	for(i=0;i<8;i++)  
    	{  
    		OLED_WR_Byte (0xb0+i,OLED_CMD);    //ÉèÖÃÒ³µØÖ·£¨0~7£©
    		OLED_WR_Byte (0x00,OLED_CMD);      //ÉèÖÃÏÔʾλÖáªÁе͵ØÖ·
    		OLED_WR_Byte (0x10,OLED_CMD);      //ÉèÖÃÏÔʾλÖáªÁиߵØÖ·   
    		for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 
    	} //¸üÐÂÏÔʾ
    }
    void OLED_On(void)  
    {  
    	u8 i,n;		    
    	for(i=0;i<8;i++)  
    	{  
    		OLED_WR_Byte (0xb0+i,OLED_CMD);    //ÉèÖÃÒ³µØÖ·£¨0~7£©
    		OLED_WR_Byte (0x00,OLED_CMD);      //ÉèÖÃÏÔʾλÖáªÁе͵ØÖ·
    		OLED_WR_Byte (0x10,OLED_CMD);      //ÉèÖÃÏÔʾλÖáªÁиߵØÖ·   
    		for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 
    	} //¸üÐÂÏÔʾ
    }
    //ÔÚÖ¸¶¨Î»ÖÃÏÔʾһ¸ö×Ö·û,°üÀ¨²¿·Ö×Ö·û
    //x:0~127
    //y:0~63
    //mode:0,·´°×ÏÔʾ;1,Õý³£ÏÔʾ				 
    //size:Ñ¡Ôñ×ÖÌå 16/12 
    void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
    {      	
    	unsigned char c=0,i=0;	
    		c=chr-' ';//µÃµ½Æ«ÒƺóµÄÖµ			
    		if(x>Max_Column-1){x=0;y=y+2;}
    		if(Char_Size ==16)
    			{
    			OLED_Set_Pos(x,y);	
    			for(i=0;i<8;i++)
    			OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    			OLED_Set_Pos(x,y+1);
    			for(i=0;i<8;i++)
    			OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    			}
    			else {	
    				OLED_Set_Pos(x,y);
    				for(i=0;i<6;i++)
    				OLED_WR_Byte(F6x8[c][i],OLED_DATA);
    				
    			}
    }
    //m^nº¯Êý
    u32 oled_pow(u8 m,u8 n)
    {
    	u32 result=1;	 
    	while(n--)result*=m;    
    	return result;
    }				  
    //ÏÔʾ2¸öÊý×Ö
    //x,y :Æðµã×ø±ê	 
    //len :Êý×ÖµÄλÊý
    //size:×ÖÌå´óС
    //mode:ģʽ	0,Ìî³äģʽ;1,µþ¼Óģʽ
    //num:ÊýÖµ(0~4294967295);	 		  
    void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
    {         	
    	u8 t,temp;
    	u8 enshow=0;						   
    	for(t=0;t<len;t++)
    	{
    		temp=(num/oled_pow(10,len-t-1))%10;
    		if(enshow==0&&t<(len-1))
    		{
    			if(temp==0)
    			{
    				OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    				continue;
    			}else enshow=1; 
    		 	 
    		}
    	 	OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 
    	}
    } 
    //ÏÔʾһ¸ö×Ö·ûºÅ´®
    void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    {
    	unsigned char j=0;
    	while (chr[j]!='\0')
    	{		OLED_ShowChar(x,y,chr[j],Char_Size);
    			x+=8;
    		if(x>120){x=0;y+=2;}
    			j++;
    	}
    }
    
    /***********¹¦ÄÜÃèÊö£ºÏÔʾÏÔʾBMPͼƬ128¡Á64Æðʼµã×ø±ê(x,y),xµÄ·¶Î§0¡«127£¬yΪҳµÄ·¶Î§0¡«7*****************/
    void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    { 	
     unsigned int j=0;
     unsigned char x,y;
      
      if(y1%8==0) y=y1/8;      
      else y=y1/8+1;
    	for(y=y0;y<y1;y++)
    	{
    		OLED_Set_Pos(x0,y);
        for(x=x0;x<x1;x++)
    	    {      
    	    	OLED_WR_Byte(BMP[j++],OLED_DATA);	    	
    	    }
    	}
    } 
    
    //³õʼ»¯SSD1306					    
    void OLED_Init(void)
    { 	
     
     	 
    
    
    	delay_ms(800);
    	OLED_WR_Byte(0xAE,OLED_CMD);//--display off
    	OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    	OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    	OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    	OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    	OLED_WR_Byte(0x81,OLED_CMD); // contract control
    	OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    	OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 
    	OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    	OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    	OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    	OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    	OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    	OLED_WR_Byte(0x00,OLED_CMD);//
    	
    	OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    	OLED_WR_Byte(0x80,OLED_CMD);//
    	
    	OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    	OLED_WR_Byte(0x05,OLED_CMD);//
    	
    	OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    	OLED_WR_Byte(0xF1,OLED_CMD);//
    	
    	OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    	OLED_WR_Byte(0x12,OLED_CMD);//
    	
    	OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    	OLED_WR_Byte(0x30,OLED_CMD);//
    	
    	OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    	OLED_WR_Byte(0x14,OLED_CMD);//
    	
    	OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    	OLED_Clear();
    	//OLED_ShowString(6,3,"0.96' OLED TEST",16);
    }  
    
    
    
    void OLED_ShowCharh(u8 x,u8 y,u8 chr)
    {      	
    		unsigned char c=0,i=0;	
    		c=chr;//µÃµ½Æ«ÒƺóµÄÖµ			
    		if(x>Max_Column-1){x=0;y=y+2;}
    
    		//16 X 32,Ô­À´ÊÇ24*48
    		OLED_Set_Pos(x,y);	
    		for(i=0;i<16;i++)
    		OLED_WR_Byte(F18X16[c*64+i],OLED_DATA);
    		
    		OLED_Set_Pos(x,y+1);
    		for(i=0;i<16;i++)
    		OLED_WR_Byte(F18X16[c*64+i+16],OLED_DATA);
    		
    		OLED_Set_Pos(x,y+2);
    		for(i=0;i<16;i++)
    		OLED_WR_Byte(F18X16[c*64+i+32],OLED_DATA);			
    
    		OLED_Set_Pos(x,y+3);
    		for(i=0;i<16;i++)
    		OLED_WR_Byte(F18X16[c*64+i+48],OLED_DATA);
    		OLED_Set_Pos(x,y+4);
    
    			
    				
    
    }
    //ÏÔʾһ¸ö×Ö·ûºÅ´®
    void OLED_ShowStringh(u8 x,u8 y,u8 *chr,u8 Char_Size)
    {
    	unsigned char j=0;
    	while (chr[j]!='\0')
    	{
    		if(chr[j]<='9'&&chr[j]>='0')
    			OLED_ShowCharh(x,y,chr[j]+1-'0');
    		else
    			OLED_ShowCharh(x,y,0);
    			
    			x+=16;
    		if(x>120){x=0;y+=2;}
    			j++;
    	}
    }
    

    将电压值和和距离值传送到led屏幕上去

    void ShowLED()
    {
    	u8 text[25];
    	u16 baud;
    	sprintf(text,"Vat:");
    	OLED_ShowString(0,2,text,16);		
    	sprintf(text,"%4d",Volt1);
    	OLED_ShowStringh(32,0,text,16);
    
    
    	
    	sprintf(text,"Dtc:");
    	OLED_ShowString(0,5,text,16);		
    	sprintf(text,"%4dcm",Distance);;
    	OLED_ShowStringh(32,4,text,16);
    	
    	
    	if(ModelBaud==2)
    		baud = 9600;
    	else if (ModelBaud==1)
    		baud = 4800;
    	else 
    		baud = 2400;			
    
    
    	sprintf(text,"ID:%03d B:%d",ModelID,baud);
    	//OLED_ShowString(0,6,text,16);
    }
    

    指定距离灯光语音报警,可用modbus设置两个不同距离档位LLoff1,LLoff20,外设声光报警器,通过控制继电器,来进行开关

    if(biaozhiwei==1)//´ò¿ª±¨¾¯¹¦ÄÜ
    {
    if(LLoff1<Distance&&Distance<LLoff2)//´óÓÚÒ»µµ£¬Ð¡ÓÚ¶þµ²
    {
    	GPIO_ResetBits(GPIOA,GPIO_Pin_9);
    	delay_ms(100);
    	GPIO_SetBits(GPIOA,GPIO_Pin_9);
    	delay_ms(100);
    }
    if(Distance>LLoff2)//´óÓÚ¶þµ²
    {
    	GPIO_ResetBits(GPIOA,GPIO_Pin_9);
    	delay_ms(1000);
    	GPIO_SetBits(GPIOA,GPIO_Pin_9);
    	delay_ms(1000);
    	
    }
    }
    else
    {
    	GPIO_SetBits(GPIOA,GPIO_Pin_9);
    }
    	}
    }
    
    展开全文
  • 代码,TI的msp430f5529读取夏普灰尘传感器,并在液晶显示PM值.并且附带一些传感器资料。
  • Sharp红外传感器的原理以及使用技巧

    千次阅读 2010-04-27 17:57:00
    转自:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3938682&bbs_page_no=10&bbs_id=1000### (原文件名:sharp红外距离传感器.jpg) 引用图片 (原文件名:sharp红外距离传感器2.jpg) 引用图片 (原文件名:sharp...
  • 允许从Sharp模拟距离传感器获取距离数据的Arduino库 当前支持的传感器型号 GP2Y0A41SK0F GP2Y0A21YK0F GP2Y0A02YK0F 用法 将库添加到草图 # include 创建一个等距 SharpIR sensorName (sensorModel, sensorPin...
  • 日本夏普SHARP)公司日前发布了和日本静冈大学大学共同开发的能同时测量图像距离的CMOS传感器。  该传感器,基于了夏普公司先进的CCD技术,采用了电荷转送的特种像素构造方式,以及红外线距离测量的Time of ...
  • 夏普红外测距传感器GP2D12线性转换表格,可以利用该表格通过简单的实验测距,计算出相应的公式,有利于数据采集的准确性!
  • 之前开发空气净化器项目用C#编写串口上位机程序,用于读取DC1700激光粉尘传感器夏普红外粉尘传感器做数据对比和整合,程序涉及到SerialPort串口使用、NPOI库操作excel表格、数据曲线显示
  • Sharp将在CMOS图像传感器上发力

    千次阅读 2012-11-28 17:46:26
    大家都知道夏普做CCD图像传感器很有名气。在2012年夏普的产品目录中没有将COMS图像传感器作为一个产品类别放在里面。但是2012年10月Cadence公司的成功案例表明“近期夏普迫切需要设计一款新的用于消费电子产品的CMOS...
  • 品牌:夏普SHARP 型号:GP2Y0A21YK0F 产地:日本/Japan 类型:红外测距传感器 距离测量范围:10~80CM 信号类型:模拟量输出型 包装尺寸:29.5×13×13.5mm 消耗电流:30mA(典型) 电源电压:4.5~5.5 V 常见...
  • Shimadzu、Sharp和Shindengen电子制造公司已经开发出一种非晶硒(a-Se)薄膜,可直接转换平板检测器X射线工艺,在降低辐射剂量的同时能更清楚地显示血管。  这三家公司将致力于该处理的实际应用,它使用17英寸方形...
  • 此提交包括本文中使用的文件 ( ... 它是一个带有异步块的库,可用于捕获带有某些模型文件的Arduino板上的中断,作为如何与Sharp IR传感器配合使用的示例。
  • Sharp 的距离传感器,GP2Y0A21YK0F 的产品,其采用三角测距的原理,发射850nm的不可见红外线。但是产品输出的是模拟量,输出值为对应的电压区间。不知道有没有前辈使用过?有没有相应的转换代码?
  • 夏普(Sharp)将上市业界最小、最薄的CMOS传感器LZ0P396D,尺寸仅1/11英寸,面向手机等便携终端应用。该款CMOS传感器外形尺寸为5.5mm×5.5mm×2.43mm,总像素达到11万。  据介绍,通过基于高密度设计技术的光学系统...
  • 最近网络环境一般化,一直安装不了Python相关的库。今天下午突然就人品爆棚,几次失败后终于成功安装了相关库: 小楊是在线安装的,命令如下: ...安装完Python后想起了前两天想拟合SHARP的GP2Y0A21Y...
  • 夏普GP2Y1010AU0F灰尘传感器在STM32平台上的使用

    万次阅读 多人点赞 2017-12-10 19:22:50
    夏普GP2Y1010AU0F灰尘传感器在STM32平台上的使用 一、传感器的概述  GP2Y1010AUOF是日本夏普公司开发的一款光学灰尘浓度检测传感器。此传感器内部成对角分布的红外发光二极管和光电晶体管,利用光敏原理来工作。...
  • 夏普GP2Y1010AU0F灰尘传感器使用

    万次阅读 2019-03-22 11:34:12
    夏普GP2Y1010AU0F灰尘传感器在STM32平台上的使用 一、传感器的概述 GP2Y1010AUOF是日本夏普公司开发的一款光学灰尘浓度检测传感器。此传感器内部成对角分布的红外发光二极管和光电晶体管,利用光敏原理来工作。用于...
  • Shimadzu、Sharp和Shindengen电子制造公司已经开发出一种非晶硒(a-Se)薄膜,可直接转换平板检测器X射线工艺,在降低辐射剂量的同时能更清楚地显示血管。  这三家公司将致力于该处理的实际应用,它使用17英寸方形...
  • Sharp将在下月推出一款Aquos系列LCD电视。提到Aquos系列电视,使人想到这系列...它内部的亮度传感器可以自动调节图像亮度。  这款LCD电视将会在3月15日在日本上市。计划每月生产10,000台。目前具体价格尚未知晓。 
  • 关于MQ-4、MQ-138以及夏普PM2.5传感器的一些总结1、MQ系列传感器使用步骤(MQ-4&amp;MQ-138): 在洁净空气中或者其他可行已知的环境下测量电阻Ro; 根据传感器输出模拟信号值及负载大小可计算; 利用对数坐标...
  • Sharp_GP2Y0A GP2Y0A02YK0F, GP2Y0A710K0F Arduino 程序 GP2Y0A02YK0F 传感器参数: 20~150cm Analog output type. 4.5 to 5.5V, 33mA Block diagram Timing Chart Output 参考V-cm图, 用查表法, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,707
精华内容 682
关键字:

sharp传感器