Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Bug Reports
  3. Dust Sensor

Dust Sensor

Scheduled Pinned Locked Moved Bug Reports
3 Posts 3 Posters 3.8k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    flopp
    wrote on last edited by flopp
    #1

    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 sketch

    I 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       >>> GND
    

    Here 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);
    }
    
    1. MySensors sketch doesn't include any POWERLED, without this it cant work
    int ledPower = 12;
    
    brnwshrB 1 Reply Last reply
    1
    • E Offline
      E Offline
      epierre
      Hero Member
      wrote on last edited by
      #2

      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

      z-wave - Vera -&gt; Domoticz
      rfx - Domoticz &lt;- MyDomoAtHome &lt;- Imperihome
      mysensors -&gt; mysensors-gw -&gt; Domoticz

      1 Reply Last reply
      0
      • F flopp

        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 sketch

        I 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       >>> GND
        

        Here 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);
        }
        
        1. MySensors sketch doesn't include any POWERLED, without this it cant work
        int ledPower = 12;
        
        brnwshrB Offline
        brnwshrB Offline
        brnwshr
        wrote on last edited by
        #3

        @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);
        }```
        1 Reply Last reply
        0

        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
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        14

        Online

        12.0k

        Users

        11.2k

        Topics

        113.4k

        Posts


        Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • MySensors
        • OpenHardware.io
        • Categories
        • Recent
        • Tags
        • Popular