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.1k 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.
  • 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 Offline
              mfalkviddM Offline
              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 Offline
                  mfalkviddM Offline
                  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


                      11

                      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