夏普 GP2Y1010AU0F 灰尘传感器
来自Jack's Lab
(版本间的差异)
(→电路) |
|||
| 第23行: | 第23行: | ||
[[文件:Sharp.gy1010.circuit.gif]] | [[文件:Sharp.gy1010.circuit.gif]] | ||
| + | |||
| + | <br><br> | ||
| + | |||
| + | == 程序== | ||
| + | |||
| + | <source lang=cpp> | ||
| + | /* | ||
| + | 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 2 | ||
| + | Sharp pin 4 (S-GND) => Arduino GND pin | ||
| + | Sharp pin 5 (Vo) => Arduino A0 pin | ||
| + | Sharp pin 6 (Vcc) => 5V | ||
| + | */ | ||
| + | #include <SPI.h> | ||
| + | #include <Ethernet.h> | ||
| + | #include <stdlib.h> | ||
| + | |||
| + | byte mac[] = { | ||
| + | 0x90, 0xA2, 0xDA, 0x0D, 0x27, 0x55}; | ||
| + | IPAddress ip(192,168,1,90); | ||
| + | IPAddress gateway(192,168,1,1); | ||
| + | IPAddress subnet(255, 255, 255, 0); | ||
| + | |||
| + | // initialize the library instance: | ||
| + | EthernetClient client; | ||
| + | |||
| + | long lastConnectionTime = 0; // last time you connected to the server, in milliseconds | ||
| + | boolean lastConnected = false; // state of the connection last time through the main loop | ||
| + | const int postingInterval = 10000; //delay between updates to Pachube.com | ||
| + | |||
| + | int dustPin=0; | ||
| + | int ledPower=2; | ||
| + | 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); | ||
| + | |||
| + | // give the ethernet module time to boot up: | ||
| + | delay(1000); | ||
| + | // start the Ethernet connection: | ||
| + | if (Ethernet.begin(mac) == 0) { | ||
| + | Serial.println("Failed to configure Ethernet using DHCP"); | ||
| + | // Configure manually: | ||
| + | Ethernet.begin(mac, ip); | ||
| + | } | ||
| + | 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 there's incoming data from the net connection. | ||
| + | // send it out the serial port. This is for debugging | ||
| + | // purposes only: | ||
| + | if (client.available()) { | ||
| + | char c = client.read(); | ||
| + | //Serial.print(c); | ||
| + | } | ||
| + | |||
| + | // if there's no net connection, but there was one last time | ||
| + | // through the loop, then stop the client: | ||
| + | if (!client.connected() && lastConnected) { | ||
| + | Serial.println(); | ||
| + | Serial.println("disconnecting."); | ||
| + | client.stop(); | ||
| + | } | ||
| + | |||
| + | // if you're not connected, and ten seconds have passed since | ||
| + | // your last connection, then connect again and send data: | ||
| + | if(!client.connected() && (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); | ||
| + | sendData(dataString); | ||
| + | Serial.println(dataString); | ||
| + | delay(1000); | ||
| + | } | ||
| + | // store the state of the connection for next time through | ||
| + | // the loop: | ||
| + | lastConnected = client.connected(); | ||
| + | } | ||
| + | |||
| + | // this method makes a HTTP connection to the server: | ||
| + | void sendData(String thisData) { | ||
| + | // if there's a successful connection: | ||
| + | if (client.connect("www.pachube.com", 80)) { | ||
| + | Serial.println("connecting..."); | ||
| + | // send the HTTP PUT request. | ||
| + | // fill in your feed address here: | ||
| + | client.print("PUT /api/YOUR_FEED_HERE.csv HTTP/1.1\n"); | ||
| + | client.print("Host: www.pachube.com\n"); | ||
| + | // fill in your Pachube API key here: | ||
| + | client.print("X-PachubeApiKey: YOUR_KEY_HERE\n"); | ||
| + | client.print("Content-Length: "); | ||
| + | client.println(thisData.length(), DEC); | ||
| + | |||
| + | // last pieces of the HTTP PUT request: | ||
| + | client.print("Content-Type: text/csv\n"); | ||
| + | client.println("Connection: close\n"); | ||
| + | |||
| + | // here's the actual content of the PUT request: | ||
| + | client.println(thisData); | ||
| + | |||
| + | // note the time that the connection was made: | ||
| + | lastConnectionTime = millis(); | ||
| + | |||
| + | } | ||
| + | else { | ||
| + | // if you couldn't make a connection: | ||
| + | Serial.println("connection failed"); | ||
| + | } | ||
| + | } | ||
| + | </source> | ||
<br><br> | <br><br> | ||
2015年7月17日 (五) 17:45的版本
目录 |
1 概述
GP2Y1010 Datasheet: https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
2 PIN
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 电路
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 2
Sharp pin 4 (S-GND) => Arduino GND pin
Sharp pin 5 (Vo) => Arduino A0 pin
Sharp pin 6 (Vcc) => 5V
*/
#include <SPI.h>
#include <Ethernet.h>
#include <stdlib.h>
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0D, 0x27, 0x55};
IPAddress ip(192,168,1,90);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255, 255, 255, 0);
// initialize the library instance:
EthernetClient client;
long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const int postingInterval = 10000; //delay between updates to Pachube.com
int dustPin=0;
int ledPower=2;
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);
// give the ethernet module time to boot up:
delay(1000);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Configure manually:
Ethernet.begin(mac, ip);
}
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 there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
//Serial.print(c);
}
// if there's no net connection, but there was one last time
// through the loop, then stop the client:
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
// if you're not connected, and ten seconds have passed since
// your last connection, then connect again and send data:
if(!client.connected() && (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);
sendData(dataString);
Serial.println(dataString);
delay(1000);
}
// store the state of the connection for next time through
// the loop:
lastConnected = client.connected();
}
// this method makes a HTTP connection to the server:
void sendData(String thisData) {
// if there's a successful connection:
if (client.connect("www.pachube.com", 80)) {
Serial.println("connecting...");
// send the HTTP PUT request.
// fill in your feed address here:
client.print("PUT /api/YOUR_FEED_HERE.csv HTTP/1.1\n");
client.print("Host: www.pachube.com\n");
// fill in your Pachube API key here:
client.print("X-PachubeApiKey: YOUR_KEY_HERE\n");
client.print("Content-Length: ");
client.println(thisData.length(), DEC);
// last pieces of the HTTP PUT request:
client.print("Content-Type: text/csv\n");
client.println("Connection: close\n");
// here's the actual content of the PUT request:
client.println(thisData);
// note the time that the connection was made:
lastConnectionTime = millis();
}
else {
// if you couldn't make a connection:
Serial.println("connection failed");
}
}
5 参考
- http://www.howmuchsnow.com/arduino/airquality/
- http://sensorapp.net/sharp-dust-sensor-and-arduino/
- https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
- http://blog.yeelink.net/?p=184

