夏普 GP2Y1010AU0F 灰尘传感器

来自Jack's Lab
跳转到: 导航, 搜索

目录

1 概述

GP2Y1010 Datasheet: https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf

夏普 GP2Y1010AU 设计参考



2 PIN

Sharp.gy1010.pin.jpg

Sharp pin 1 (V-LED)   => 5V (connected to 150ohm resister)
Sharp pin 2 (LED-GND) => Arduino GND pin
Sharp pin 3 (LED)     => Arduino pin 2
Sharp pin 4 (S-GND)   => Arduino GND pin
Sharp pin 5 (Vo)      => Arduino A0 pin
Sharp pin 6 (Vcc)     => 5V



3 电路

Sharp.gy1010.circuit.gif



4 程序

/*
 Interface to Sharp GP2Y1010AU0F Particle Sensor
 Program by Christopher Nafis 
 Written April 2012
 
 http://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
 http://sensorapp.net/?p=479
 
 Sharp pin 1 (V-LED)   => 5V (connected to 150ohm resister)
 Sharp pin 2 (LED-GND) => Arduino GND pin
 Sharp pin 3 (LED)     => Arduino pin 4
 Sharp pin 4 (S-GND)   => Arduino GND pin
 Sharp pin 5 (Vo)      => Arduino A4 pin
 Sharp pin 6 (Vcc)     => 5V
 */
#include <stdlib.h>

long lastConnectionTime = 0;        // last time you update to the server, in milliseconds
const int postingInterval = 10000;  // delay between two updates

int dustPin = 4;
int ledPower = 4;
int delayTime = 280;
int delayTime2 = 40;
float offTime = 9680;

int dustVal = 0;
int i = 0;
float ppm = 0;
char s[32];
float voltage = 0;
float dustdensity = 0;
float ppmpercf = 0;

void setup(){
  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);

  delay(1000);
  i = 0;
  ppm =0;
}

void loop(){
  i = i + 1;
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(delayTime);
  dustVal = analogRead(dustPin); // read the dust value
  ppm = ppm + dustVal;
  delayMicroseconds(delayTime2);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(offTime);

  if((millis() - lastConnectionTime > postingInterval)) {
    voltage = ppm/i*0.0049;
    dustdensity = 0.17*voltage-0.1;
    ppmpercf = (voltage-0.0256)*120000;
    if (ppmpercf < 0)
      ppmpercf = 0;
    if (dustdensity < 0 )
      dustdensity = 0;
    if (dustdensity > 0.5)
      dustdensity = 0.5;
    String dataString = "";
    dataString += dtostrf(voltage, 9, 4, s);
    dataString += ",";
    dataString += dtostrf(dustdensity, 5, 2, s);
    dataString += ",";
    dataString += dtostrf(ppmpercf, 8, 0, s);

    i=0;
    ppm=0;

    Serial.println(dataString);
    lastConnectionTime = millis();
  }

  delay(3000);
}



5 简化版程序

int dustPin=4;
int dustVal=0;
 
int ledPower=4;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
void setup(){
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
}
 
void loop(){
// ledPower is any digital pin on the arduino connected to Pin 3 on the sensor
digitalWrite(ledPower,LOW); // power on the LED
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH); // turn the LED off
delayMicroseconds(offTime);
 
delay(3000);
Serial.println(dustVal);
}



6 值判读

> https://www.airnow.gov/index.cfm?action=airnow.calculator

Air Quality Chart - Small Count Reading (0.5 micron)+

3000 +     = VERY POOR
1050-3000  = POOR
300-1050   = FAIR
150-300    = GOOD
75-150     = VERY GOOD
0-75       = EXCELLENT



7 参考

























个人工具
名字空间

变换
操作
导航
工具箱