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. My Project
  3. 3-in-1 Humidity Temp and Motion

3-in-1 Humidity Temp and Motion

Scheduled Pinned Locked Moved My Project
motion3 in 1temphumidity
47 Posts 28 Posters 43.2k Views 22 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.
  • McPostalM Offline
    McPostalM Offline
    McPostal
    wrote on last edited by
    #36

    Nice! I realized the motion was being updated every cycle after I posted my code. I also left out references to metric temperature readings. I fixed the motion part in my code but didn't post it yet because I had already added a second motion sensor. What I did different was not forcing the motion update. I want the time stamp to reflect the last time someone was in the room.

    1 Reply Last reply
    0
    • stockenS Offline
      stockenS Offline
      stocken
      wrote on last edited by
      #37

      Hi,
      I took your updated code for 2.0 and tried to add a relay.
      The code looks like this:

      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>  
      
      #define CHILD_ID_HUM 10
      #define CHILD_ID_TEMP 11
      #define CHILD_ID_MOT 12 //motion sensor
      
      
      #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 RELAY_1  7  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define NUMBER_OF_RELAYS 1 // Total number of attached relays
      #define CHILD_ID 5
      #define RELAY_ON 1  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
      
      
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true; 
      
      unsigned long interval= 3000;//dht.getMinimumSamplingPeriod(); // the time we need to wait
      unsigned long previousMillis=0; // millis() returns an unsigned long.
      unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
      
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msgMot(CHILD_ID_MOT, V_TRIPPED); //me
      
      
      void before()
      {
      	for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
      		// Then set relay pins in output mode
      		pinMode(pin, OUTPUT);
      		// Set relay to last known state (using eeprom storage)
      		digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
      	}
      }
      
      void setup()  
      { 
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
       // metric = getConfig().isMetric;
      
       pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
      }
      
      void presentation()  
      { 
        // Send the Sketch Version Information to the Gateway
        sendSketchInfo("4-1 Sensor", "1.0");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
        present(CHILD_ID_MOT, V_TRIPPED); //me
        
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
      	// Register all sensors to gw (they will be created as child devices)
      	present(sensor, S_BINARY);
      	}
      }
      
      void loop()      
      {  
        // Read digital motion value
        boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
         
      // only run loop if time has passed. 
      unsigned long currentMillis = millis(); // grab current time       
      
       // check if "interval" time has passed
       if ((unsigned long)(currentMillis - previousMillis) >= interval) {
      
       
             send(msgMot.set(tripped?"1":"0")); 
                    
        
            #ifdef MY_DEBUG
             Serial.print("Motion: ");
             Serial.println(tripped);
            #endif
      
      
      
       
        
        // Fetch temperatures from DHT sensor
        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);
          }
          send(msgTemp.set(temperature, 1));
          #ifdef MY_DEBUG
          Serial.print("T: ");
          Serial.println(temperature);
          #endif
        }
       
        // Fetch humidity from DHT sensor
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum) {
            lastHum = humidity;
            send(msgHum.set(humidity, 1));
            #ifdef MY_DEBUG
            Serial.print("H: ");
            Serial.println(humidity);
            #endif
        }   
      
      
      
      
         // save the "current" time
         previousMillis = millis();
      
       }  
        // Sleep until interrupt comes in on motion sensor. Send update every two minute.
        //sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
      
      }
      
      void receive(const MyMessage &message)
      {
      	// We only expect one type of message from controller. But we better check anyway.
      	if (message.type==V_STATUS) {
      		// Change relay state
      		digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
      		// Store state in eeprom
      		saveState(message.sensor, message.getBool());
      		// Write some debug info
      		Serial.print("Incoming change for sensor:");
      		Serial.print(message.sensor);
      		Serial.print(", New status: ");
      		Serial.println(message.getBool());
      	}
      }
      

      However, when i look in domoticz the relay isnt presented as a child.
      Plus, the motion sensor is called "S_LIGHT_LEVEL" and not "S_MOTION" as it does in my other device (that only have temp, hum motion and not a relay in the sketch).
      temp/hum sensor and motion sensor works as intended in domoticz.
      My first though is that the motion and relay somehow is a bit mixed up by the sketch, but im kinda new to this so im not sure.
      Would really appreciate if someone can look at the sketch and see if there is any obvious problem :)

      McPostalM 1 Reply Last reply
      0
      • stockenS stocken

        Hi,
        I took your updated code for 2.0 and tried to add a relay.
        The code looks like this:

        #define MY_DEBUG
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        //#define MY_RADIO_RFM69
        
        #include <SPI.h>
        #include <MySensors.h>  
        #include <DHT.h>  
        
        #define CHILD_ID_HUM 10
        #define CHILD_ID_TEMP 11
        #define CHILD_ID_MOT 12 //motion sensor
        
        
        #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 RELAY_1  7  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
        #define NUMBER_OF_RELAYS 1 // Total number of attached relays
        #define CHILD_ID 5
        #define RELAY_ON 1  // GPIO value to write to turn on attached relay
        #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
        
        
        DHT dht;
        float lastTemp;
        float lastHum;
        boolean metric = true; 
        
        unsigned long interval= 3000;//dht.getMinimumSamplingPeriod(); // the time we need to wait
        unsigned long previousMillis=0; // millis() returns an unsigned long.
        unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
        
        MyMessage msgHum(CHILD_ID_HUM, V_HUM);
        MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
        MyMessage msgMot(CHILD_ID_MOT, V_TRIPPED); //me
        
        
        void before()
        {
        	for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        		// Then set relay pins in output mode
        		pinMode(pin, OUTPUT);
        		// Set relay to last known state (using eeprom storage)
        		digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        	}
        }
        
        void setup()  
        { 
          dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
        
         // metric = getConfig().isMetric;
        
         pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
        }
        
        void presentation()  
        { 
          // Send the Sketch Version Information to the Gateway
          sendSketchInfo("4-1 Sensor", "1.0");
        
          // Register all sensors to gw (they will be created as child devices)
          present(CHILD_ID_HUM, S_HUM);
          present(CHILD_ID_TEMP, S_TEMP);
          present(CHILD_ID_MOT, V_TRIPPED); //me
          
          for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        	// Register all sensors to gw (they will be created as child devices)
        	present(sensor, S_BINARY);
        	}
        }
        
        void loop()      
        {  
          // Read digital motion value
          boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
           
        // only run loop if time has passed. 
        unsigned long currentMillis = millis(); // grab current time       
        
         // check if "interval" time has passed
         if ((unsigned long)(currentMillis - previousMillis) >= interval) {
        
         
               send(msgMot.set(tripped?"1":"0")); 
                      
          
              #ifdef MY_DEBUG
               Serial.print("Motion: ");
               Serial.println(tripped);
              #endif
        
        
        
         
          
          // Fetch temperatures from DHT sensor
          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);
            }
            send(msgTemp.set(temperature, 1));
            #ifdef MY_DEBUG
            Serial.print("T: ");
            Serial.println(temperature);
            #endif
          }
         
          // Fetch humidity from DHT sensor
          float humidity = dht.getHumidity();
          if (isnan(humidity)) {
              Serial.println("Failed reading humidity from DHT");
          } else if (humidity != lastHum) {
              lastHum = humidity;
              send(msgHum.set(humidity, 1));
              #ifdef MY_DEBUG
              Serial.print("H: ");
              Serial.println(humidity);
              #endif
          }   
        
        
        
        
           // save the "current" time
           previousMillis = millis();
        
         }  
          // Sleep until interrupt comes in on motion sensor. Send update every two minute.
          //sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
        
        }
        
        void receive(const MyMessage &message)
        {
        	// We only expect one type of message from controller. But we better check anyway.
        	if (message.type==V_STATUS) {
        		// Change relay state
        		digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
        		// Store state in eeprom
        		saveState(message.sensor, message.getBool());
        		// Write some debug info
        		Serial.print("Incoming change for sensor:");
        		Serial.print(message.sensor);
        		Serial.print(", New status: ");
        		Serial.println(message.getBool());
        	}
        }
        

        However, when i look in domoticz the relay isnt presented as a child.
        Plus, the motion sensor is called "S_LIGHT_LEVEL" and not "S_MOTION" as it does in my other device (that only have temp, hum motion and not a relay in the sketch).
        temp/hum sensor and motion sensor works as intended in domoticz.
        My first though is that the motion and relay somehow is a bit mixed up by the sketch, but im kinda new to this so im not sure.
        Would really appreciate if someone can look at the sketch and see if there is any obvious problem :)

        McPostalM Offline
        McPostalM Offline
        McPostal
        wrote on last edited by McPostal
        #38

        @stocken

        Under "void presentation()" , present(CHILD_ID_MOT, V_TRIPPED); //me should be

        present(CHILD_ID_MOT, S_MOTION); //me

        that should fix the light level problem.

        I haven't done a relay yet. If no one else responds I look at it later tonight. I also have a relay but haven't had time to try and implement it yet.

        1 Reply Last reply
        0
        • K Offline
          K Offline
          Komaandy
          wrote on last edited by Komaandy
          #39

          Hello everybody,

          first off all a big thank you for creating this awsome sketch. It works perfect for me !!
          But, as you might already have guessed I have a little problem.

          I built 2 exact same nodes and flashed the exact same sketch ( only thing I changed is the child ID´s) but one node works just like a charm ( MSPIRAndy) but the other one (MYSENSOR_106) doesnt transmit its readings (?)

          Via the serial monitor the readings do exist and work perfect.

          Thanks a lot, all help is appreciated

          KOmaandy

          0_1488919647833_106.PNG

          0_1488919653276_mspiraNDY.PNG

          1 Reply Last reply
          0
          • gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #40

            Have you tried swapping radio between the 2 sensors? Just to exclude any radio issue

            1 Reply Last reply
            0
            • K Offline
              K Offline
              Komaandy
              wrote on last edited by
              #41

              Yes i did swap the radios, but what seems to be the problem is the arduino itself.
              When swapping the arduinos ( both arduino pro mini 3,3 volt) both flashed with the same sketch one works and the other just doesnt.
              I just swapped the arduinos on the breadboard and left everything else in place...
              Thats really strange, given the fact that BOTH transmit good readings when connected to the arduino-serial-monitor ...

              1 Reply Last reply
              0
              • R Offline
                R Offline
                ryanbrown204
                wrote on last edited by
                #42

                Do you have a schematic that you could post?

                mfalkviddM 1 Reply Last reply
                0
                • R ryanbrown204

                  Do you have a schematic that you could post?

                  mfalkviddM Online
                  mfalkviddM Online
                  mfalkvidd
                  Mod
                  wrote on last edited by mfalkvidd
                  #43

                  @ryanbrown204 welcome to the MySensors community!

                  This is a long thread with a lot of different people posting, so it is a bit hard to guess which schematic you are looking for. Could you clarify?

                  R 1 Reply Last reply
                  0
                  • mfalkviddM mfalkvidd

                    @ryanbrown204 welcome to the MySensors community!

                    This is a long thread with a lot of different people posting, so it is a bit hard to guess which schematic you are looking for. Could you clarify?

                    R Offline
                    R Offline
                    ryanbrown204
                    wrote on last edited by
                    #44

                    @mfalkvidd the schematic for the original 3-in-1 Humidity Temp and Motion. I would like to try me hand at building the first version and then adding the additions.

                    mfalkviddM 1 Reply Last reply
                    0
                    • R ryanbrown204

                      @mfalkvidd the schematic for the original 3-in-1 Humidity Temp and Motion. I would like to try me hand at building the first version and then adding the additions.

                      mfalkviddM Online
                      mfalkviddM Online
                      mfalkvidd
                      Mod
                      wrote on last edited by
                      #45

                      @ryanbrown204 temperature: https://www.mysensors.org/build/temp
                      Motion: https://www.mysensors.org/build/motion

                      See the first post in this thread for the modifications Konrad did.

                      1 Reply Last reply
                      0
                      • F Offline
                        F Offline
                        fulljionslly
                        wrote on last edited by
                        #46
                        This post is deleted!
                        1 Reply Last reply
                        0
                        • F Offline
                          F Offline
                          fulljionslly
                          wrote on last edited by
                          #47
                          This post is deleted!
                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          20

                          Online

                          11.7k

                          Users

                          11.2k

                          Topics

                          113.0k

                          Posts


                          Copyright 2019 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