|

LinkIt ONE的Grove塵埃感測器運作

   

作者:陸向陽
 
Linkit one grove2

許多人知道,LinkIt ONE用的是聯發科的晶片,但LinkIt ONE系統板是聯發科與深圳Seeed Studio合作實現的,Seeed Studio除了設計與銷售LinkIt ONE外,其實也針對LinkIt ONE推出一個Grove起步者套件、前菜套件(Starter Kit)。

Seeed Studio其實有針對Arduino推出Grove前菜套件,也有針對Intel IoT(指Galileo、Edison)推出前菜套件,也有名為ARDX的前菜套件(針對Arduino),或者針對LinkIt ONE的Sidekick基礎套件,總之很多。

而LinkIt ONE的Grove套件,裡頭有10種感測器(大陸叫傳感器,有些則翻譯成感應器、感知器),以及一片Grove Base Shield,Base Shield這片電路板,直接與LinkIt ONE原有的類比、數位等接腳連接,而Base Shield這片電路板上有許多連接器,用來連接LinkIt ONE本有的數位輸出/輸入、類比輸入、I2C介面等。

Linkit one grove1

由於Base Shield上採行一致、標準化的連接器,套件內的10個感測器也採行一致的連接頭,因此只要將感測器接到Base Shield上,就可以完成LinkIt ONE與感測器的連接,進而運作,但前提是要接到正確類型的接腳,以及接到正確的編號腳位才行。

這麼做的好處是,LinkIt ONE的初學者,不用麵包板,也不用親自剝線、複雜接線,就能夠儘快體驗、感受感測器的功效作用,對學習很方便,也很適合做概念驗證(POC)、原形品(Prototype)。

而10種感測器中,第一個被筆者相中的,是體積最大最顯眼的「粉塵傳感器/塵埃感測器/Dust Sensor」,本次就針對這個感測器的特性與運作,進行更多說明。

LinkIt ONE(底下綠色電路板)連接Grove Base Shield(上層深色電路板),而後用D8連接器連接塵埃感測器(照片前方黃色電路板)

LinkIt ONE(底下綠色電路板)連接Grove Base Shield(上層深色電路板),而後用D8連接器連接塵埃感測器(照片前方黃色電路板)

LinkIt ONE x Dust Sensor

Seeed Studio/Grove Starter Kit for LinkIt ONE/Dust Sensor,是用一家SCA(Shinyei Corporation of America)的PPD4NS,可以量測每0.01立方英呎(約等於283毫升)的空間內,有多少個直徑大於1微米的塵埃數量。有的塵埃感測器是以每單位空間內的塵埃重量來算,但在這裡的這個感測器,是以數量來算。

直徑1微米,也讓人想到所謂PM 2.5(塵埃微粒小於2.5微米)的量測,但相關說明資料有提到,這個感測器的量測不等同於PM 2.5的量測,然顆粒大小接近,量測出來的值可略作參考。

塵埃感測器感測之後,會進行類比、數位轉換,而後再由LinkIt ONE接收數位資訊即可。雖然是數位資訊,但卻是以脈寬調變方式給予資訊,而且是以低脈波的週期時間來代表顆粒數的多寡。

也就是說,以30秒為一個週期,30秒內,塵埃感測器輸出多久時間的低電位,就表示有多少的顆粒數,低電壓準位的輸出時間,稱為Low Pulse Occupancy Time,簡稱LPO。量測的最小時間單位是1微秒。

而量測到週期時間(Duty Cycle)後再進行查表,就可以知道大致的顆粒數量,例如8%約是4,500顆,5%約是2,700顆,不過這也只是個概略值,仍有一定的正負差距。

LPO比例時間為縱軸,塵埃顆粒數為橫軸,進行查表。

LPO比例時間為縱軸,塵埃顆粒數為橫軸,進行查表。

上述為理論,以下為實務,要正確使用Grove塵埃感測器,首先要感測器正面朝上;然後上頭有兩個旋鈕,出廠前已經調整好,不要再去調它;之後給予感測器電力,記得給予5V電力,3.3V是不夠的,Grove Base Shield上可以切換是要給予5V電力或3.3V,請選前者。

另外,第一次使用記得先讓感測器預熱3分鐘,以及請在攝氏45度以下、濕度95度以下的環境內使用,濕度幾乎一定可行,但溫度可能要稍微注意一下。值得注意的是,感測器耗電約90mA(毫安培),約450mW(毫瓦)的耗電,若日後期望以電池運作,電池電容量與使用時間必須先估算一下。

最後很簡單,只要把感測器的紅色線路接5V,黑色線路接0V,使感測器有電力運作,並將黃色線路接LinkIt ONE的D8接腳(其他數位接腳並設定為輸入模式,也是可以)就可以了。將範例程式用Debug埠載入到LinkIt ONE後,按下重置鈕,再切換到Modem埠,打開串列監視器,設定為9600 baud、Carriage Return,就可以看到每30秒一次的塵埃顆粒值了。

串列埠監視器顯示的塵埃顆粒數,每30秒增加一行。

串列埠監視器顯示的塵埃顆粒數,每30秒增加一行。

以下為範例程式,在GitHub上也可找到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<pre>/* Grove - Dust Sensor Demo v1.0
 Interface to Shinyei Model PPD42NS Particle Sensor
 Program by Christopher Nafis
 Written April 2012
 
 http://www.seeedstudio.com/depot/grove-dust-sensor-p-1050.html
 http://www.sca-shinyei.com/pdf/PPD42NS.pdf
 
 JST Pin 1 (Black Wire)  =&gt; Arduino GND
 JST Pin 3 (Red wire)    =&gt; Arduino 5VDC
 JST Pin 4 (Yellow wire) =&gt; Arduino Digital Pin 8
 */

int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() {
  Serial.begin(9600);
  pinMode(8,INPUT);
  starttime = millis();//get the current time;
}

void loop() {
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;

  if ((millis()-starttime) &gt; sampletime_ms)//if the sampel time == 30s
  {
    ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=&gt;100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
    Serial.print("concentration = ");
    Serial.print(concentration);
    Serial.println(" pcs/0.01cf");
    Serial.println("\n");
    lowpulseoccupancy = 0;
    starttime = millis();
  }
}</pre>
陸向陽
陸向陽

Author: 陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *