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


        22

        Online

        11.7k

        Users

        11.2k

        Topics

        113.1k

        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