cc2430原理图与 GP2Y1010AU的数据采集

夏普gp2y1010au0f传感器与51单片机连接的程序,急求!!_百度知道
夏普gp2y1010au0f传感器与51单片机连接的程序,急求!!
硬件做好了吗我做单片机的
这个不需要硬件,我就要串口的程序
来自团队:
其他类似问题
为您推荐:
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于GP2Y1010AU0F&SHARP传感器使用
关于GP2Y1010AU0F
SHARP传感器使用
1.先上传该传感器PDF上的部分资料
2.试验初步接线
&1脚接150欧电阻然后与6脚相接&,作为+5v输入端;2脚与4脚相接作为电源地;1脚与150欧电阻中间接220uf电容的正端,负端接地;3脚直接由单片机给脉冲波10ms周期,高电平0.32ms;5脚为输出端,接示波器观察波形如下图;
初步结论:从图像上看,蓝颜色是3脚脉冲输入波,黄颜色是5脚输出波;貌似与pdf上的不相符,思前想后,觉得还是3号脚的脉冲波输入那块不对;终于再次进行下面的试验。
3.接线方法与初步的差不多,只是3脚的脉冲输入波做了改变,还是由单片机直接给50ms周期,0.32ms低电平脉冲;得到波形图如下;
调整示波器时间,如下图;
可以看出:蓝颜色是50ms周期,0.32ms低电平脉冲;黄颜色是5脚输出波;这回貌似与pdf资料上的输出波形相符合了;抽了跟烟,发现黄颜色的脉冲幅值会迅速增大,该传感器的灵敏度还是不错的。
下图是实际试验接线,有点乱,嘿嘿
下图是接线草稿图;
总结:理论上,初步接线中可能出现问题的解决方法是,在单片机给出输入脉冲后要经过三极管驱动,在给传感器3号脚,这样应该就对了,有兴趣可以试验下。还是自己看pdf资料不认真啊,不然也不会费着劲了。希望以后大家要认真仔细阅读资料,避免不必要的麻烦。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【教程】夏普GP2Y1010AU0F灰尘传感器测得浓度值_arduino吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:23,530贴子:
【教程】夏普GP2Y1010AU0F灰尘传感器测得浓度值收藏
PM2.5检测空气质量近来得到了非常广泛的关注,自从某某发个雾霾视频以后,都不敢出门了,还好本人在深圳,觉得空气质量还是可以的。
现在开始进入正题吧,硬件列表-uno- 夏普GP2Y1010AU0F灰尘传感器- 150 ohm电阻
220uF电容(配套赠送)-杜邦线步骤一:硬件连接
Sensor Pin
Arduino Pin1
5V (150ohm resistor)2
Digital pin 24
Analog pin 06
5V不接电容电阻接线示意图步骤二:烧入代码,提供两个测试代码,供大家参考,硬件连接都是一样的,无需改动。测试代码一:int dustPin=0;//引脚定义里的第5脚,黑色线接到A0float dustVal=0; int ledPower=2;//引脚定义里的第3脚,白色线接到D2int delayTime=280;//开启LED等待的时间int delayTime2=40;//整个脉冲持续时间为320μs。因此,我们还需再等待40μsfloat offTime=9680;void setup(){Serial.begin(9600);pinMode(ledPower,OUTPUT);pinMode(dustPin, INPUT);} void loop(){// ledPower is any digital pin on the arduino connected to Pin 3 on the sensordigitalWrite(ledPower,LOW); delayMicroseconds(delayTime);dustVal=analogRead(dustPin); delayMicroseconds(delayTime2);digitalWrite(ledPower,HIGH); delayMicroseconds(offTime); delay(1000);if (dustVal&36.455)Serial.println((float(dustVal/6)*.035);}(发现把代码粘贴到这个上面好乱的 如果对这个项目看兴趣
可以加我扣扣
我把代码发你)
测试得到的数据和空气质量对照:3000 + = 很差 = 差300-1050 = 一般150-300 = 好75-150 = 很好0-75 = 非常好测试代码二,最终得到浓度值:int measurePin = 0; // 引脚定义里的第5脚,黑色线接到A0int ledPower = 2; // 引脚定义里的第3脚,白色线接到D2int samplingTime = 280;//等待LED开启的时间是280μsint deltaTime = 40;//整个脉冲持续时间为320μs。因此,我们还需再等待40μsint sleepTime = 9680;float voMeasured = 0;float calcVoltage = 0;float dustDensity = 0;void setup(){Serial.begin(9600);pinMode(ledPower,OUTPUT);}void loop(){digitalWrite(ledPower,LOW); //开启内部LEDdelayMicroseconds(samplingTime); // 开启LED后的280us的等待时间voMeasured = analogRead(measurePin); // 读取模拟值delayMicroseconds(deltaTime); // 40us等待时间digitalWrite(ledPower,HIGH); // 关闭LEDdelayMicroseconds(sleepTime);// 0 - 5V mapped to 0 - 1023 integer values// recover voltagecalcVoltage = voMeasured * (5.0 / 1024.0); //将模拟值转换为电压值dustDensity = 0.17 * calcVoltage - 0.1; //将电压值转换为粉尘密度输出单位Serial.print(“Raw Signal Value (0-1023): ”);Serial.print(voMeasured);Serial.print(“ - Voltage: ”);Serial.print(calcVoltage);Serial.print(“ - Dust Density: ”);Serial.println(dustDensity); // 最终浓度值,输出单位: 毫克/立方米delay(1000);}完成之后,得到一串的数字是不是还是很模糊呀?我们先简单了解下粉尘传感器,可以对应代码一起看。上图是个粉尘传感器的内部结构图以及硬件说明。可以从图中看出,在发射端,我们需要驱动一个红外发射管,也就是引脚3。对应程序中定义的ledPower。同样,我们也可以看出输出是引脚5,输出的是模拟量,对应到程序中的measurePin。那我们如何得到我们想要的值呢?下图截自 datasheet,你可以看出粉尘传感器的输出电压是几乎呈线性的。dustDensity = 0.17 * calcVoltage - 0.1; 这个公式曲线近似转换过来的(来自Chris Nafis)。这里dustDensity是粉尘密度值,单位mg/m3。calcVoltage是输出电压值。
我们都知道输出0~5V电压对应UNO模拟口读出的是0~1023。calcVoltage = voMeasured * (5.0 / 1024.0); 这个公式就是模拟值转为电压值。voMeasured 模拟口输出量。上图可以看出,整个脉冲持续时间为320μs。因此,我们还需再等待40μs,才能将LED关闭。以上就是对程序以及粉尘传感器工作原理的简单说明 今天的实例就到此结束了 ,一起分享,如果对arduino感兴趣的朋友也可以加一下扣扣.
互相分享一下自己的作品。
也打算做个这。关注一下。最后数据能不能通过网络发送到指定服务器?这个怎么实现。
哇,谢谢,正需要这个传感器的资料,官方给的看不太懂。。。
我也在玩哦
网上的教程不好,不精准,要自己找准,自己算函数
淘宝上都写的能测pm2.5的值 可是看手册这传感器显然是测灰尘浓度 不能专门测量pm2.5浓度,大神求解
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check
for details.
Faithfully yours, nginx.

我要回帖

更多关于 cc2430芯片 的文章

 

随机推荐