Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 6267|回復: 6
打印 上一主題 下一主題

有人用過Sharp GP2Y1051A 空氣質量傳感器三代

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-4-4 11:26:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
說是第三代,說是較穩定,但是用了網路上找得到的程式,監測數值run不出來
http://twarm.com/commerce/product_info.php?products_id=15197&sid=a46911a6cd8da9be06151dccd58fbe88
若改成以下程式,簡單一點,有在serial port顯示數值,但看起來還是不完整
  1. void loop(){
  2.     data=Serial.read();
  3.     Serial.println(data);
  4. }
複製代碼

不知是頻率對不上,還是還有其他問題?
請各大大提供寶貴經驗,感謝。
2#
發表於 2016-4-4 13:05:12 | 只看該作者
1.你線路是怎麼接的?
2.改成你貼的程式後,會印出那些數字?
3#
 樓主| 發表於 2016-4-7 00:22:13 | 只看該作者
本帖最後由 csnnan 於 2016-4-7 00:31 編輯

接法就照http://twarm.com/commerce/produc ... 9be06151dccd58fbe88
直接將傳感器和arduino對接
若用我改的,就會出現
170
0
11
0
等數字
但用廠商提供的第一個程式,就一片空白

另外我測試了廠商提供第二個程式加sd卡的
可以正常顯示,並且正常記錄在sd卡內的檔案
對照兩個程式,直接把加sd卡的改成第一個程式的功能
也不行!!如果一行一行刪除修改,
發現SD.begin(4)沒刪掉就都還正常,刪掉就不能顯示了!
滿奇怪的,真搞不懂,提供程式碼如下
  1. int incomeByte[6];
  2. int data;
  3. int z=0;
  4. int sum,count;
  5. unsigned long starttime;
  6. float average_pm2d5,sum_2s;

  7. #include <SD.h>
  8. File myFile;

  9. void setup()
  10. {
  11.   Serial.begin(2400);
  12.   pinMode(10, OUTPUT);
  13.   SD.begin(4);
  14.   starttime=millis();
  15. }

  16. void loop()
  17. {

  18.   while (Serial.available()>0){
  19.     data=Serial.read();
  20.     if(data == 170){
  21.       z=0;
  22.       incomeByte[z]=data;
  23.     }
  24.     else{
  25.       z++;
  26.       incomeByte[z]=data;
  27.     }
  28.     if(z==6)
  29.     {
  30.       sum=incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4];
  31.       if(incomeByte[5]==sum && incomeByte[6]==255 )
  32.       {
  33.         float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.00*5.000;
  34.         float c=vo*700;
  35.         sum_2s=sum_2s+c;
  36.         count++;
  37.         if(abs(millis()-starttime)>2000){   
  38.           average_pm2d5=(sum_2s/count)*1.00;
  39.           Serial.print("PM2.5_Average = ");
  40.           Serial.println(average_pm2d5,2);
  41.           starttime=millis();
  42.           sum_2s=0;
  43.           count=0;
  44.         }
  45.       }
  46.       else{
  47.         z=0;
  48.         Serial.flush();
  49.         data='/0';
  50.         for(int m=0;m<7;m++){
  51.           incomeByte[m]=0;
  52.         }
  53.       }
  54.       z=0;
  55.     }
  56.   }
  57. }
複製代碼
就是第15行刪掉,輸出就一片空白,真搞不懂為何會如此?

P_20160406_214833.jpg (1.93 MB, 下載次數: 705)

傳感器接法

傳感器接法
4#
發表於 2016-4-7 08:08:09 | 只看該作者
本帖最後由 超新手 於 2016-4-7 08:12 編輯

有這種事? 你又沒接 SD Card
1) 你給的數據太少
至少要6筆以上才有辦法分折
越多越好, 少說也貼個 18 筆來看看
2) 用第一個程式. 你把以下這行
sum=incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4];
改成
sum=(incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4])&0xff;
試看看
5#
 樓主| 發表於 2016-4-7 11:30:32 | 只看該作者
本帖最後由 csnnan 於 2016-4-7 11:33 編輯

感謝,超大...
不過用廠商第一個程式改成你建議的寫法,還是不行...
只要把
  1. #include <SD.h>
  2.   SD.begin(4);
複製代碼

加到相對應的位置,就可以了!!有圖為證,真傷腦經@#$##而且每行前面170|0|4|0|109|110|255|就是每次輸出的那一組數據
看起來就很正常...

2016-04-07_112333.png (82.29 KB, 下載次數: 681)

輸出截圖

輸出截圖
6#
發表於 2016-4-7 12:12:03 | 只看該作者
最上面的宣告錯了
int incomeByte[6];
應該是
int incomeByte[7];
7#
 樓主| 發表於 2016-4-7 14:48:22 | 只看該作者
讚!!!太強了,改了int incomeByte[7];就一切正常,太感謝了
不過為何加了sd.begin也就可以正常,實在很詭異
不過真正問題出在array的宣告.........再次感謝超大.....
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-12-4 01:58 , Processed in 0.183329 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表