Dust Sensor
-
I think my dust sensor is working fine with the second sketch i have attached in this post.
I think some rows are missing in the MySensors sketchI can be wrong but my dust sensor didn't work with MySensors sketch, i had to modify it.
Anyone that have this sensor and a working sketch?
/** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * Version 1.0 - epierre * Converted to 1.4 by Henrik Ekblad * * DESCRIPTION * Arduino Dust Sensort * * connect the sensor as follows : * * VCC >>> 5V * A >>> A0 * GND >>> GND * * Based on: http://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU * Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex) * * http://www.mysensors.org/build/dust * */ #include <MySensor.h> #include <SPI.h> #define CHILD_ID_DUST 0 #define DUST_SENSOR_ANALOG_PIN 1 unsigned long SLEEP_TIME = 30*1000; // Sleep time between reads (in milliseconds) //VARIABLES int val = 0; // variable to store the value coming from the sensor float valDUST =0.0; float lastDUST =0.0; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; MySensor gw; MyMessage dustMsg(CHILD_ID_DUST, V_LEVEL); void setup() { gw.begin(); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Dust Sensor", "1.1"); // Register all sensors to gateway (they will be created as child devices) gw.present(CHILD_ID_DUST, S_DUST); } void loop() { uint16_t voMeasured = analogRead(DUST_SENSOR_ANALOG_PIN);// Get DUST value // 0 - 5V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (5.0 / 1024.0); // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = (0.17 * calcVoltage - 0.1)*1000; Serial.print("Raw Signal Value (0-1023): "); Serial.print(voMeasured); Serial.print(" - Voltage: "); Serial.print(calcVoltage); Serial.print(" - Dust Density: "); Serial.println(dustDensity); // unit: ug/m3 if (ceil(dustDensity) != lastDUST) { gw.send(dustMsg.set((int)ceil(dustDensity))); lastDUST = ceil(dustDensity); } gw.sleep(SLEEP_TIME); }Int val = 0;this is not in use anywhere in the code and if you comment it out it will still compile
can be deleted
2.
You need to connect 6 cables otherwise it will not work.
In beginning it says* VCC >>> 5V * A >>> A0 * GND >>> GNDHere you can find how it must be connected
https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
and here
http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/Original sketch for Sharp GP2Y1010AU0F is like this
/* Standalone Sketch to use with a Arduino Fio and a Sharp Optical Dust Sensor GP2Y1010AU0F Blog: http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/ Code: https://github.com/Trefex/arduino-airquality/ For Pin connections, please check the Blog or the github project page Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex) Changelog: 2012-Dec-01: Cleaned up code This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. */ int measurePin = 6; int ledPower = 12; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); } void loop(){ digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(samplingTime); voMeasured = analogRead(measurePin); // read the dust value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); // 0 - 3.3V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (3.3 / 1024); // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = 0.17 * calcVoltage - 0.1; Serial.print("Raw Signal Value (0-1023): "); Serial.print(voMeasured); Serial.print(" - Voltage: "); Serial.print(calcVoltage); Serial.print(" - Dust Density: "); Serial.println(dustDensity); delay(1000); }- MySensors sketch doesn't include any POWERLED, without this it cant work
int ledPower = 12; -
hello,
Thanks for reporting, I will check again here, for I never really successfully managed to have this one working.
Beside this, the two others (cheaper but good anyway !) are working fine, see my repo here:
https://github.com/empierre/arduino -
I think my dust sensor is working fine with the second sketch i have attached in this post.
I think some rows are missing in the MySensors sketchI can be wrong but my dust sensor didn't work with MySensors sketch, i had to modify it.
Anyone that have this sensor and a working sketch?
/** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * Version 1.0 - epierre * Converted to 1.4 by Henrik Ekblad * * DESCRIPTION * Arduino Dust Sensort * * connect the sensor as follows : * * VCC >>> 5V * A >>> A0 * GND >>> GND * * Based on: http://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU * Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex) * * http://www.mysensors.org/build/dust * */ #include <MySensor.h> #include <SPI.h> #define CHILD_ID_DUST 0 #define DUST_SENSOR_ANALOG_PIN 1 unsigned long SLEEP_TIME = 30*1000; // Sleep time between reads (in milliseconds) //VARIABLES int val = 0; // variable to store the value coming from the sensor float valDUST =0.0; float lastDUST =0.0; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; MySensor gw; MyMessage dustMsg(CHILD_ID_DUST, V_LEVEL); void setup() { gw.begin(); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Dust Sensor", "1.1"); // Register all sensors to gateway (they will be created as child devices) gw.present(CHILD_ID_DUST, S_DUST); } void loop() { uint16_t voMeasured = analogRead(DUST_SENSOR_ANALOG_PIN);// Get DUST value // 0 - 5V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (5.0 / 1024.0); // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = (0.17 * calcVoltage - 0.1)*1000; Serial.print("Raw Signal Value (0-1023): "); Serial.print(voMeasured); Serial.print(" - Voltage: "); Serial.print(calcVoltage); Serial.print(" - Dust Density: "); Serial.println(dustDensity); // unit: ug/m3 if (ceil(dustDensity) != lastDUST) { gw.send(dustMsg.set((int)ceil(dustDensity))); lastDUST = ceil(dustDensity); } gw.sleep(SLEEP_TIME); }Int val = 0;this is not in use anywhere in the code and if you comment it out it will still compile
can be deleted
2.
You need to connect 6 cables otherwise it will not work.
In beginning it says* VCC >>> 5V * A >>> A0 * GND >>> GNDHere you can find how it must be connected
https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
and here
http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/Original sketch for Sharp GP2Y1010AU0F is like this
/* Standalone Sketch to use with a Arduino Fio and a Sharp Optical Dust Sensor GP2Y1010AU0F Blog: http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/ Code: https://github.com/Trefex/arduino-airquality/ For Pin connections, please check the Blog or the github project page Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex) Changelog: 2012-Dec-01: Cleaned up code This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. */ int measurePin = 6; int ledPower = 12; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); } void loop(){ digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(samplingTime); voMeasured = analogRead(measurePin); // read the dust value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); // 0 - 3.3V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (3.3 / 1024); // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = 0.17 * calcVoltage - 0.1; Serial.print("Raw Signal Value (0-1023): "); Serial.print(voMeasured); Serial.print(" - Voltage: "); Serial.print(calcVoltage); Serial.print(" - Dust Density: "); Serial.println(dustDensity); delay(1000); }- MySensors sketch doesn't include any POWERLED, without this it cant work
int ledPower = 12;@flopp
same experience here,
The sketch provided by Mysensors.org does not switch on/off the LED used to detect the dust particle (code below with corrections).
I tested that sensor (Sharp_GP2Y1010AU) with smoke and because it does not have a fan (like the nova fitness SD011) or does not create a draft with a resistor (like the Shinyei PPD42NS) the fumes can go around completely undetected. When i tested the sharp and Shinyei in parallel the later seemed a lot more reliable.
I also modified the code for the sharp sensor to get the arduino to loop thru multiple readings before sending a smoothed result back to the gateway.
Code below with lots of debugging./** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * Version 1.0 - epierre * Converted to 1.4 by Henrik Ekblad * * * DESCRIPTION * Arduino Dust Sensort * * connect the sensor as follows : * * VCC >>> 5V * A >>> A0 * GND >>> GND * LED >>> 2 * * Based on: http://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU * Authors: Cyrille Médard de Chardon (serialC), Christophe Trefois (Trefex) * * http://www.mysensors.org/build/dust * */ #include <MySensor.h> #include <SPI.h> #define CHILD_ID_DUST 0 #define DUST_SENSOR_ANALOG_PIN 0 int ledPower = 2; const int numreadings = 60; unsigned long SLEEP_TIME = 10*1000; // Sleep time between reads (in milliseconds) //VARIABLES int val = 0;// variable to store the value coming from the sensor float valDUST = 0.0; float lastDUST =0.0; int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; MySensor gw; MyMessage dustMsg(CHILD_ID_DUST, V_LEVEL); void setup(){ gw.begin(); pinMode(ledPower,OUTPUT); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Dust Sensor", "1.1"); // Register all sensors to gateway (they will be created as child devices) gw.present(CHILD_ID_DUST, S_DUST); } void loop(){ float cumsum = 0; float temp = 0; float temp1 = 0; float cum_density = 0; for (int sample = 0; sample < numreadings; sample ++){ // loop reading dust sensor digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(samplingTime); uint16_t voMeasured = analogRead(DUST_SENSOR_ANALOG_PIN);// Get DUST value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off // 0 - 5V mapped to 0 - 1023 integer values // recover voltage temp = voMeasured * (5.0 / 1024.0); cumsum = cumsum + temp;// cumulative sum over 60 seconds delay(1000); Serial.print("reading sample: "); Serial.println(sample); Serial.print("Raw Signal Value (0-1023): "); Serial.println(voMeasured); Serial.print(" - cumulative: "); Serial.println(cumsum); } // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/ // Chris Nafis (c) 2012 dustDensity = (0.17 * cumsum - 0.1)* (1000/60); Serial.print(" - Dust Density: "); Serial.println(dustDensity); // unit: ug/m3 Serial.println("#########################################"); // if (ceil(dustDensity) != lastDUST) { // gw.send(dustMsg.set((int)ceil(dustDensity))); // lastDUST = ceil(dustDensity); // } gw.send(dustMsg.set((int)ceil(dustDensity))); gw.sleep(SLEEP_TIME); }```
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login