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. Development
  3. implementing multiple sensors

implementing multiple sensors

Scheduled Pinned Locked Moved Development
83 Posts 28 Posters 86.9k Views 15 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.
  • W Offline
    W Offline
    waynehead99
    wrote on last edited by
    #40

    Nobody wants to take a crack at this? I figured this to be a common combo and would really like to get it to work properly.

    M 1 Reply Last reply
    0
    • B Offline
      B Offline
      Bandra
      wrote on last edited by
      #41

      I'm coming close to finalising my multisensor sketch. I'll post code once I clean it up a little. I have a newborn at home, so if I forget to put code here then somebody please remind me in a little while :)

      1 Reply Last reply
      0
      • W waynehead99

        Nobody wants to take a crack at this? I figured this to be a common combo and would really like to get it to work properly.

        M Offline
        M Offline
        mikeones
        wrote on last edited by
        #42

        @waynehead99 Here is a sketch I run with DHT and motion support.

        #include <Sleep_n0m1.h>
        #include <SPI.h>
        #include <EEPROM.h>  
        #include <RF24.h>
        #include <Sensor.h>  
        #include <DHT.h>  
        
        #define CHILD_ID_HUM 0
        #define CHILD_ID_TEMP 1
        #define HUMIDITY_SENSOR_DIGITAL_PIN 4
        
        Sensor gw;
        DHT dht;
        Sleep sleep;
        float lastTemp;
        float lastHum;
        boolean lastValue = false;
        boolean metric = false;
        
        #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
        #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
        #define CHILD_ID 2   // Id of the sensor child
        
        long previousMillis_T = 0;     // will store last time temp data sent
        unsigned long startTime_T;
        unsigned long sensorInterval = 30000; // change this to desired sensor read interval in milliseconds
        
        void setup()  
        {  
          gw.begin();
        
          // Send the sketch version information to the gateway and Controller
          gw.sendSketchInfo("Motion Sensor and DHT", "1.0");
          dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
          pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
          // Register all sensors to gw (they will be created as child devices)
          gw.sendSensorPresentation(CHILD_ID, S_MOTION);
          gw.sendSensorPresentation(CHILD_ID_HUM, S_HUM);
          gw.sendSensorPresentation(CHILD_ID_TEMP, S_TEMP);
          metric = gw.isMetricSystem();
          startTime_T = millis();
          Serial.println("Setup complete");
        }
        
        void loop()     
        {     
          // Read digital motion value
          boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; 
          
          if (lastValue != tripped) {
        	gw.sendVariable(CHILD_ID, V_TRIPPED, tripped?"1":"0");  // Send tripped value to gw
        	lastValue=tripped;
        	//Serial.println(tripped);
          }
         
          if (millis() - startTime_T >= sensorInterval) {
        	delay(dht.getMinimumSamplingPeriod());
        	float temperature = dht.getTemperature();
        	if (isnan(temperature)) {
        		Serial.println("Failed reading temperature from DHT");
        	} else if (temperature) {
        	  lastTemp = temperature;
        	  if (!metric) {
        		temperature = dht.toFahrenheit(temperature);
        	  }
        	  gw.sendVariable(CHILD_ID_TEMP, V_TEMP, temperature, 1);
        		Serial.print("T: ");
        		Serial.println(temperature);
        	}
        	
        	//delay(dht.getMinimumSamplingPeriod());
        	float humidity = dht.getHumidity();
        	if (isnan(humidity)) {
        		Serial.println("Failed reading humidity from DHT");
        	} else if (humidity) {
        		lastHum = humidity;
        		gw.sendVariable(CHILD_ID_HUM, V_HUM, humidity, 1);
        		Serial.print("H: ");
        		Serial.println(humidity);
        	}
        	startTime_T = millis();
          }
        
          // Power down the radio.  Note that the radio will get powered back up
          // on the next write() call.
          delay(1000); //delay to allow serial to fully print before sleep
          
        }
        
        1 Reply Last reply
        0
        • W Offline
          W Offline
          waynehead99
          wrote on last edited by
          #43

          Thanks that worked... and for my understanding... looks like your not really using interrupts at all? Looking at the code makes complete sense to me, and proves I was over thinking things on mine.

          Thanks again.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mikeones
            wrote on last edited by
            #44

            The sensor is not running on battery power so I did not spend much time with the interrupt/sleep options.

            1 Reply Last reply
            0
            • T Offline
              T Offline
              Tibus
              wrote on last edited by
              #45

              is it the same process with the new 1.4 library version?

              Could you please give us a exemple here or on github to have multiple sensor type on the same arduino with the new 1.4 library?

              if it's the same implementation, we could write multiple "gw.present(ID, XXXX);" and send a message for each child ID type?

              Thank's very much.

              1 Reply Last reply
              0
              • T Offline
                T Offline
                Tibus
                wrote on last edited by
                #46

                Sorry, I found the new implementation in the "DallasTemperatureSensor" Example

                1 Reply Last reply
                0
                • mountainmanM Offline
                  mountainmanM Offline
                  mountainman
                  wrote on last edited by mountainman
                  #47

                  Here is a version I'm currently using that makes use of interrupts so might be more suitable for a battery driven DHT/Motion multi sensor. It also includes the battery monitoring. Any feedback or improvements would be appreciated.

                  #include <SPI.h>
                  #include <MySensor.h>
                  #include <DHT.h>
                  
                  #define CHILD_ID_HUM 0
                  #define CHILD_ID_TEMP 1
                  #define CHILD_ID_MOTION 2   // Id of the sensor child
                  
                  #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                  #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
                  #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                  
                  unsigned long SLEEP_TIME = F; // Sleep time between reports (in milliseconds)
                  
                  
                  int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
                  int oldValue=-1;
                  
                  MySensor gw;
                  DHT dht;
                  float lastTemp;
                  float lastHum;
                  boolean metric = false;
                  
                  int oldBatteryPcnt = 0;
                  int battLoop =0;
                  
                  MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                  MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                  // Initialize motion message
                  MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                  
                  boolean pinTriggered=0;//waitTime is number of seconds to hol in while loop
                  long lastDebounceTime = 0;  // the last time the output pin was toggled
                  long debounceDelay = 50;    // the debounce time; increase if the output flickers
                  
                  
                  void setup()
                  {
                  
                    // use the 1.1 V internal reference
                    analogReference(INTERNAL);
                  
                    gw.begin();
                    dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
                  
                    // Send the Sketch Version Information to the Gateway
                    gw.sendSketchInfo("Motion Humidity w/ Batt", "1.0");
                  
                    // Register all sensors to gw (they will be created as child devices)
                    gw.present(CHILD_ID_HUM, S_HUM);
                    gw.present(CHILD_ID_TEMP, S_TEMP);
                    gw.present(CHILD_ID_MOTION, S_MOTION);
                  
                    pinMode(DIGITAL_INPUT_SENSOR,INPUT);      // sets the motion sensor digital pin as input
                    digitalWrite(DIGITAL_INPUT_SENSOR,HIGH);   // Activate internal pull-up
                  
                    metric = gw.getConfig().isMetric;
                  
                    check_batt();
                  
                  }
                  
                  void loop()
                  {
                    if (pinTriggered)
                    {
                  	Serial.println(millis()-lastDebounceTime);
                  	// Read digital motion value
                  	boolean value = digitalRead(DIGITAL_INPUT_SENSOR);
                  	// If the switch changed, due to noise or pressing
                  	if (value != oldValue) {
                  	  {
                  		lastDebounceTime = millis();
                  		// Send in the new value
                  		gw.send(msg.set(value==HIGH ? 1 : 0));
                  		battLoop++;
                  		oldValue = value;
                  		Serial.print("Mot: ");
                  		Serial.println(value);
                  	  }
                  	}
                  
                  	pinTriggered=0;
                  	// }
                    }
                    else
                    {
                  
                  	delay(dht.getMinimumSamplingPeriod());
                  
                  	float temperature = dht.getTemperature();
                  	if (isnan(temperature))
                  	{
                  	  Serial.println("Failed reading temperature from DHT");
                  	}
                  	else if (temperature != lastTemp)
                  	{
                  	  lastTemp = temperature;
                  	  if (!metric)
                  	  {
                  		temperature = dht.toFahrenheit(temperature);
                  	  }
                  	  gw.send(msgTemp.set(temperature, 1));
                  	  battLoop++;
                  	  Serial.print("T: ");
                  	  Serial.println(temperature);
                  	}
                  
                  	float humidity = dht.getHumidity();
                  	if (isnan(humidity))
                  	{
                  	  Serial.println("Failed reading humidity from DHT");
                  	}
                  	else if (humidity != lastHum)
                  	{
                  	  lastHum = humidity;
                  	  gw.send(msgHum.set(humidity, 1));
                  	  battLoop++;
                  	  Serial.print("H: ");
                  	  Serial.println(humidity);
                  	}
                  
                  
                  	if (battLoop > 10)
                  	{
                  	  check_batt();
                  	  battLoop=0;
                  	}
                    }
                  
                    // Sleep until interrupt comes in on motion sensor. Send update every two minute.
                    pinTriggered = gw.sleep(INTERRUPT, CHANGE, SLEEP_TIME);
                  }
                  
                  
                  void check_batt()
                  {
                    // get the battery Voltage
                    int sensorValue = analogRead(BATTERY_SENSE_PIN);
                    Serial.println(sensorValue);
                  
                    // 1M, 470K divider across battery and using internal ADC ref of 1.1V
                    // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
                    // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
                    // 3.44/1023 = Volts per bit = 0.003363075
                    float batteryV  = sensorValue * 0.003363075;
                    int batteryPcnt = sensorValue / 10;
                  
                    Serial.print("Battery Voltage: ");
                    Serial.print(batteryV);
                    Serial.println(" V");
                  
                    Serial.print("Battery percent: ");
                    Serial.print(batteryPcnt);
                    Serial.println(" %");
                  
                    if (oldBatteryPcnt != batteryPcnt) {
                  	// Power up radio after sleep
                  	gw.sendBatteryLevel(batteryPcnt);
                  	oldBatteryPcnt = batteryPcnt;
                    }
                  }
                  
                  T C 2 Replies Last reply
                  0
                  • W Offline
                    W Offline
                    waynehead99
                    wrote on last edited by
                    #48

                    How did you get 3 options for the sleep interrupt? Whenever I would try and add the sleep_time option it would give me compile errors.

                    1 Reply Last reply
                    0
                    • mountainmanM mountainman

                      Here is a version I'm currently using that makes use of interrupts so might be more suitable for a battery driven DHT/Motion multi sensor. It also includes the battery monitoring. Any feedback or improvements would be appreciated.

                      #include <SPI.h>
                      #include <MySensor.h>
                      #include <DHT.h>
                      
                      #define CHILD_ID_HUM 0
                      #define CHILD_ID_TEMP 1
                      #define CHILD_ID_MOTION 2   // Id of the sensor child
                      
                      #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                      #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
                      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                      
                      unsigned long SLEEP_TIME = F; // Sleep time between reports (in milliseconds)
                      
                      
                      int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
                      int oldValue=-1;
                      
                      MySensor gw;
                      DHT dht;
                      float lastTemp;
                      float lastHum;
                      boolean metric = false;
                      
                      int oldBatteryPcnt = 0;
                      int battLoop =0;
                      
                      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                      // Initialize motion message
                      MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                      
                      boolean pinTriggered=0;//waitTime is number of seconds to hol in while loop
                      long lastDebounceTime = 0;  // the last time the output pin was toggled
                      long debounceDelay = 50;    // the debounce time; increase if the output flickers
                      
                      
                      void setup()
                      {
                      
                        // use the 1.1 V internal reference
                        analogReference(INTERNAL);
                      
                        gw.begin();
                        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
                      
                        // Send the Sketch Version Information to the Gateway
                        gw.sendSketchInfo("Motion Humidity w/ Batt", "1.0");
                      
                        // Register all sensors to gw (they will be created as child devices)
                        gw.present(CHILD_ID_HUM, S_HUM);
                        gw.present(CHILD_ID_TEMP, S_TEMP);
                        gw.present(CHILD_ID_MOTION, S_MOTION);
                      
                        pinMode(DIGITAL_INPUT_SENSOR,INPUT);      // sets the motion sensor digital pin as input
                        digitalWrite(DIGITAL_INPUT_SENSOR,HIGH);   // Activate internal pull-up
                      
                        metric = gw.getConfig().isMetric;
                      
                        check_batt();
                      
                      }
                      
                      void loop()
                      {
                        if (pinTriggered)
                        {
                      	Serial.println(millis()-lastDebounceTime);
                      	// Read digital motion value
                      	boolean value = digitalRead(DIGITAL_INPUT_SENSOR);
                      	// If the switch changed, due to noise or pressing
                      	if (value != oldValue) {
                      	  {
                      		lastDebounceTime = millis();
                      		// Send in the new value
                      		gw.send(msg.set(value==HIGH ? 1 : 0));
                      		battLoop++;
                      		oldValue = value;
                      		Serial.print("Mot: ");
                      		Serial.println(value);
                      	  }
                      	}
                      
                      	pinTriggered=0;
                      	// }
                        }
                        else
                        {
                      
                      	delay(dht.getMinimumSamplingPeriod());
                      
                      	float temperature = dht.getTemperature();
                      	if (isnan(temperature))
                      	{
                      	  Serial.println("Failed reading temperature from DHT");
                      	}
                      	else if (temperature != lastTemp)
                      	{
                      	  lastTemp = temperature;
                      	  if (!metric)
                      	  {
                      		temperature = dht.toFahrenheit(temperature);
                      	  }
                      	  gw.send(msgTemp.set(temperature, 1));
                      	  battLoop++;
                      	  Serial.print("T: ");
                      	  Serial.println(temperature);
                      	}
                      
                      	float humidity = dht.getHumidity();
                      	if (isnan(humidity))
                      	{
                      	  Serial.println("Failed reading humidity from DHT");
                      	}
                      	else if (humidity != lastHum)
                      	{
                      	  lastHum = humidity;
                      	  gw.send(msgHum.set(humidity, 1));
                      	  battLoop++;
                      	  Serial.print("H: ");
                      	  Serial.println(humidity);
                      	}
                      
                      
                      	if (battLoop > 10)
                      	{
                      	  check_batt();
                      	  battLoop=0;
                      	}
                        }
                      
                        // Sleep until interrupt comes in on motion sensor. Send update every two minute.
                        pinTriggered = gw.sleep(INTERRUPT, CHANGE, SLEEP_TIME);
                      }
                      
                      
                      void check_batt()
                      {
                        // get the battery Voltage
                        int sensorValue = analogRead(BATTERY_SENSE_PIN);
                        Serial.println(sensorValue);
                      
                        // 1M, 470K divider across battery and using internal ADC ref of 1.1V
                        // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
                        // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
                        // 3.44/1023 = Volts per bit = 0.003363075
                        float batteryV  = sensorValue * 0.003363075;
                        int batteryPcnt = sensorValue / 10;
                      
                        Serial.print("Battery Voltage: ");
                        Serial.print(batteryV);
                        Serial.println(" V");
                      
                        Serial.print("Battery percent: ");
                        Serial.print(batteryPcnt);
                        Serial.println(" %");
                      
                        if (oldBatteryPcnt != batteryPcnt) {
                      	// Power up radio after sleep
                      	gw.sendBatteryLevel(batteryPcnt);
                      	oldBatteryPcnt = batteryPcnt;
                        }
                      }
                      
                      T Offline
                      T Offline
                      Tibus
                      wrote on last edited by Tibus
                      #49

                      @mountainman
                      Thank you verry much, exactly what i need!

                      For child's id, if you have two sensor you have to change the ID in the second?

                      Sensor 1 :
                      #define CHILD_ID_HUM 0
                      #define CHILD_ID_TEMP 1
                      #define CHILD_ID_MOTION 2

                      Sensor 2:
                      #define CHILD_ID_HUM 3
                      #define CHILD_ID_TEMP 4
                      #define CHILD_ID_MOTION 5

                      1 Reply Last reply
                      0
                      • mountainmanM Offline
                        mountainmanM Offline
                        mountainman
                        wrote on last edited by
                        #50

                        @waynehead99 Are you using the new 1.4 Lib?

                        1 Reply Last reply
                        0
                        • E egbertje

                          Somebody has good result in a working multisensor and wants to share his code?

                          NuubiN Offline
                          NuubiN Offline
                          Nuubi
                          wrote on last edited by Nuubi
                          #51

                          @egbertje Good Question :-) It would be nice to learn from existing working sketches..

                          1 Reply Last reply
                          0
                          • AnticimexA Offline
                            AnticimexA Offline
                            Anticimex
                            Contest Winner
                            wrote on last edited by
                            #52

                            @waynehead99 you most likely need 1.4 Lib for the new sleep constructor. I have not used sleep on 1.3 so I do not remember what arguments you had available there.
                            I have also extended sleep with an additional constructor which @hek has pulled into the release branch of 1.4 that permits you to use two external interrupts with independent triggers for sleep in addition to a timeout. Great for nodes with multiple sensors that still run on battery.

                            Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                            1 Reply Last reply
                            0
                            • E Offline
                              E Offline
                              egbertje
                              wrote on last edited by egbertje
                              #53

                              @Mountainman ;

                              Im trying your code and its almost what im looking for.
                              I have two questions about it:
                              1 : Is it possible that the battery info has is own child id?
                              2 : Why dont you implement a light sensor like an LDR?

                              I think that including LDR/light then you have the ideal multisensor ; light + temp/hum + motion + batt monitoring !
                              But for now im playing with your code and try to implement light.

                              1 Reply Last reply
                              0
                              • mountainmanM mountainman

                                Here is a version I'm currently using that makes use of interrupts so might be more suitable for a battery driven DHT/Motion multi sensor. It also includes the battery monitoring. Any feedback or improvements would be appreciated.

                                #include <SPI.h>
                                #include <MySensor.h>
                                #include <DHT.h>
                                
                                #define CHILD_ID_HUM 0
                                #define CHILD_ID_TEMP 1
                                #define CHILD_ID_MOTION 2   // Id of the sensor child
                                
                                #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                                #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
                                #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                                
                                unsigned long SLEEP_TIME = F; // Sleep time between reports (in milliseconds)
                                
                                
                                int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
                                int oldValue=-1;
                                
                                MySensor gw;
                                DHT dht;
                                float lastTemp;
                                float lastHum;
                                boolean metric = false;
                                
                                int oldBatteryPcnt = 0;
                                int battLoop =0;
                                
                                MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                                MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                                // Initialize motion message
                                MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                                
                                boolean pinTriggered=0;//waitTime is number of seconds to hol in while loop
                                long lastDebounceTime = 0;  // the last time the output pin was toggled
                                long debounceDelay = 50;    // the debounce time; increase if the output flickers
                                
                                
                                void setup()
                                {
                                
                                  // use the 1.1 V internal reference
                                  analogReference(INTERNAL);
                                
                                  gw.begin();
                                  dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
                                
                                  // Send the Sketch Version Information to the Gateway
                                  gw.sendSketchInfo("Motion Humidity w/ Batt", "1.0");
                                
                                  // Register all sensors to gw (they will be created as child devices)
                                  gw.present(CHILD_ID_HUM, S_HUM);
                                  gw.present(CHILD_ID_TEMP, S_TEMP);
                                  gw.present(CHILD_ID_MOTION, S_MOTION);
                                
                                  pinMode(DIGITAL_INPUT_SENSOR,INPUT);      // sets the motion sensor digital pin as input
                                  digitalWrite(DIGITAL_INPUT_SENSOR,HIGH);   // Activate internal pull-up
                                
                                  metric = gw.getConfig().isMetric;
                                
                                  check_batt();
                                
                                }
                                
                                void loop()
                                {
                                  if (pinTriggered)
                                  {
                                	Serial.println(millis()-lastDebounceTime);
                                	// Read digital motion value
                                	boolean value = digitalRead(DIGITAL_INPUT_SENSOR);
                                	// If the switch changed, due to noise or pressing
                                	if (value != oldValue) {
                                	  {
                                		lastDebounceTime = millis();
                                		// Send in the new value
                                		gw.send(msg.set(value==HIGH ? 1 : 0));
                                		battLoop++;
                                		oldValue = value;
                                		Serial.print("Mot: ");
                                		Serial.println(value);
                                	  }
                                	}
                                
                                	pinTriggered=0;
                                	// }
                                  }
                                  else
                                  {
                                
                                	delay(dht.getMinimumSamplingPeriod());
                                
                                	float temperature = dht.getTemperature();
                                	if (isnan(temperature))
                                	{
                                	  Serial.println("Failed reading temperature from DHT");
                                	}
                                	else if (temperature != lastTemp)
                                	{
                                	  lastTemp = temperature;
                                	  if (!metric)
                                	  {
                                		temperature = dht.toFahrenheit(temperature);
                                	  }
                                	  gw.send(msgTemp.set(temperature, 1));
                                	  battLoop++;
                                	  Serial.print("T: ");
                                	  Serial.println(temperature);
                                	}
                                
                                	float humidity = dht.getHumidity();
                                	if (isnan(humidity))
                                	{
                                	  Serial.println("Failed reading humidity from DHT");
                                	}
                                	else if (humidity != lastHum)
                                	{
                                	  lastHum = humidity;
                                	  gw.send(msgHum.set(humidity, 1));
                                	  battLoop++;
                                	  Serial.print("H: ");
                                	  Serial.println(humidity);
                                	}
                                
                                
                                	if (battLoop > 10)
                                	{
                                	  check_batt();
                                	  battLoop=0;
                                	}
                                  }
                                
                                  // Sleep until interrupt comes in on motion sensor. Send update every two minute.
                                  pinTriggered = gw.sleep(INTERRUPT, CHANGE, SLEEP_TIME);
                                }
                                
                                
                                void check_batt()
                                {
                                  // get the battery Voltage
                                  int sensorValue = analogRead(BATTERY_SENSE_PIN);
                                  Serial.println(sensorValue);
                                
                                  // 1M, 470K divider across battery and using internal ADC ref of 1.1V
                                  // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
                                  // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
                                  // 3.44/1023 = Volts per bit = 0.003363075
                                  float batteryV  = sensorValue * 0.003363075;
                                  int batteryPcnt = sensorValue / 10;
                                
                                  Serial.print("Battery Voltage: ");
                                  Serial.print(batteryV);
                                  Serial.println(" V");
                                
                                  Serial.print("Battery percent: ");
                                  Serial.print(batteryPcnt);
                                  Serial.println(" %");
                                
                                  if (oldBatteryPcnt != batteryPcnt) {
                                	// Power up radio after sleep
                                	gw.sendBatteryLevel(batteryPcnt);
                                	oldBatteryPcnt = batteryPcnt;
                                  }
                                }
                                
                                C Offline
                                C Offline
                                codenea
                                wrote on last edited by
                                #54

                                @mountainman Is there any instructions on how to wire/setup the hardware to work with your code?

                                1 Reply Last reply
                                0
                                • mountainmanM Offline
                                  mountainmanM Offline
                                  mountainman
                                  wrote on last edited by
                                  #55

                                  @egbertje;

                                  The battery percentage is associated with the parent Arduino Node in the vera UI.
                                  I have some LDRs ordered from Ebay so that is the next step. I had previously used the BH1750 I2C sensor in a multi sensor with the 1.3 lib but I want to debug on its own as it seemed to be giving unexpected readings.

                                  @codenea The instructions are pretty much from the main page although if I get a chance I try to draw it up and post some pics. My setup not very pretty yet with perf board and jumper wires. A dedicated PCB would be nice.

                                  1 Reply Last reply
                                  0
                                  • epierreE Offline
                                    epierreE Offline
                                    epierre
                                    Hero Member
                                    wrote on last edited by
                                    #56

                                    Hello,

                                    Here is my combo to make a Home Monitoring solution:
                                    https://github.com/empierre/arduino/blob/master/MQv01dgi_1_4.ino

                                    It includes (currently on a Mega):

                                    • Barometer : BMP085
                                    • Temperature + Humidity DHT11
                                    • Particle sensor
                                    • Gas sensors MQ2 MQ6 MQ131 MQ135 TGS2600 2SH12

                                    To be added when stabilized:

                                    • Sound level in DB

                                    Could be added:

                                    • Light sensor
                                    • Vibration sensor
                                    • PIR

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

                                    1 Reply Last reply
                                    0
                                    • pgoP Offline
                                      pgoP Offline
                                      pgo
                                      wrote on last edited by pgo
                                      #57

                                      Hi guys,

                                      this is a one node with publishing DS temperatures and listening for relay commands I finished and tested yesterday>
                                      https://github.com/pgo-sk/mysensors/blob/master/arduino/DS_and_Relay.ino
                                      feel free to comment/use/publish...

                                      I combined the Dalas and Relay examples together - you have to deactivate the sleep for the relays to listen 100% of time.
                                      MQTT identification on openHAB:
                                      MyMQTT/20/0/V_TEMP - DS sensor(s)
                                      MyMQTT/20/1/V_LIGHT - relay 1
                                      MyMQTT/20/2/V_LIGHT - relay 2

                                      If somebody is interested I can post the maps/items files for openHAB

                                      Regards,
                                      Pego
                                      PS I am working on an home automation system with solar hot air panels control/solar hot water panels and all the common stuff like lights/temperatures/weather etc.. More here: https://github.com/pgo-sk/mysensors/wiki/Home-automation-using-mysensors-and-openHAB

                                      1 Reply Last reply
                                      1
                                      • I Offline
                                        I Offline
                                        integlikewhoa
                                        wrote on last edited by
                                        #58

                                        I'm also following along interested in the Temp, Humidity, and motion sensor.

                                        T 1 Reply Last reply
                                        0
                                        • I integlikewhoa

                                          I'm also following along interested in the Temp, Humidity, and motion sensor.

                                          T Offline
                                          T Offline
                                          Tibus
                                          wrote on last edited by
                                          #59

                                          @integlikewhoa check this :

                                          http://forum.mysensors.org/topic/404/3-in-1-humidity-temp-and-motion

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          11

                                          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