先在http://www.rpilink.com网站上注册用户和下载客户端,详细见树莓派引脚远程控制
在树莓派上启动客户端,使树莓派处于在线状态。
配置好树莓派的I2C接口,使接口处于可用状态,详情见树莓派i2c配置
我们在这里采用Sharp GP2Y1010AU0F灰尘传感器,这个是我在淘宝上买到感觉性价比还算不错的东东,当然我手头上没有专业的空气质量分析仪器,无法调整其与pm2.5的真实比例,以后有调整比例我会及时发布(该设备说是可测量0.8微米以上的灰尘粒子)。
首先看一下灰尘传感器的接口。
注意接口的排序,然后按照下图配置好,以下3个设备,GP2Y1010AU0F灰尘传感器,arduino uno,树莓派。(可以按照自己有的设备接入,比如arduino nano等,都一样)
选择菜单“数据采集”,新建一条数据采集。
然后点击数据查看的“实时曲线”即可看到实时数据。
将传感器处于不同的环境中,可以看到数据变化,这个数字是模拟量的原始值即adc的1~1023,转化成pm2.5的值,目前我还没有设备转换,以后再说。
以下是arduino的程序示例(采用官方例子改写),需要注意的是 OneWire.h 需要手动下载官方lib(到这里下载)包并添加到arduino IDE中(1.5.5版本加到IDE目录下面的libraries下面):
#include <OneWire.h>
#include <Wire.h>
int dustPin=0;
int dustVal=0;
String dust=”";
int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
void setup(){
Wire.begin(5);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
}
void loop(){
getDust();
}
void requestEvent()
{
char charBuf[dust.length()+1];
dust.toCharArray(charBuf, dust.length()+1);
Wire.write(charBuf);
}
void receiveEvent(int howMany)
{
while (1 < Wire.available()) // loop through all but the last
{
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // receive byte as an integer
Serial.print(x); // print the integer
}
void getDust(){
digitalWrite(ledPower,LOW); // power on the LED
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin);
if(dustVal<10){
dust=”000″+String(dustVal);
}else if(dustVal<100){
dust=”00″+String(dustVal);
}else if(dustVal<1000){
dust=”0″+String(dustVal);
}else{
dust=String(dustVal);
}
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH); // turn the LED off
delayMicroseconds(offTime);
delay(3000);
Serial.println(dust);
}