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. [contest] My 4-in1 LED-dimmer/motion/temp-hum sensor

[contest] My 4-in1 LED-dimmer/motion/temp-hum sensor

Scheduled Pinned Locked Moved My Project
contest
9 Posts 6 Posters 17.4k Views 7 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.
  • C4VetteC Offline
    C4VetteC Offline
    C4Vette
    wrote on last edited by C4Vette
    #1

    Nothing new but just my implementation of great examples found on this forum and made 'my own' :)
    A LED-dimmer triggered with a motion-sensor and managed via PLEG on a VeraLite. The box is mounted under my bathtub as floor-lighting. PLEG takes care of the intensity depending on day- or night. The sketch has a watchdog routine for taking care of switching of might there never be an 'off' command coming in from Vera.

    extern.jpg
    intern.jpg

    1 Reply Last reply
    5
    • N Offline
      N Offline
      NotYetRated
      wrote on last edited by NotYetRated
      #2

      Very nice, care to post your sketch and parts list? I am looking to add some similar devices in my basement home theater.

      C4VetteC 1 Reply Last reply
      0
      • N NotYetRated

        Very nice, care to post your sketch and parts list? I am looking to add some similar devices in my basement home theater.

        C4VetteC Offline
        C4VetteC Offline
        C4Vette
        wrote on last edited by C4Vette
        #3

        @NotYetRated
        The components are:

        • Arduino nano
        • DC/DC 3.3V AMS1117-3.3V Power Supply Module
        • 10uF capacitor on 3.3v regulator
        • MosFET 50N06 with 10K pull-down resistor on gate
        • NRF24L01+PA+LNA
        • DHT22 Temp/Humidity Sensor
        • 12v DC wall-wart
        • Motion-sensor HC-SR501
        • Case and piece of perfboard

        The LEDstrip and DHT are connected via 3mm plugs and jacks.
        The DHT and NRF are fed by the 3.3v regulator. The nano and FET are using the raw 12v.

        The sketch:
        (sorry, no working codebender account yet)

        /***
         * 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.
         * 
         * DESCRIPTION
         * This sketch provides a Dimmable LED Light using PWM and based Henrik Ekblad 
         * <henrik.ekblad@gmail.com> Vera Arduino Sensor project.  
         * Developed by Bruce Lacey, inspired by Hek's MySensor's example sketches.
         * 
         * The circuit uses a MOSFET for Pulse-Wave-Modulation to dim the attached LED or LED strip.  
         * The MOSFET Gate pin is connected to Arduino pin 3 (LED_PIN), the MOSFET Drain pin is connected
         * to the LED negative terminal and the MOSFET Source pin is connected to ground.  
         *
         * This sketch is extensible to support more than one MOSFET/PWM dimmer per circuit.
         *
         * REVISION HISTORY
         * Version 1.0  - February 15, 2014 - Bruce Lacey
         * Version 1.1  - August 13, 2014 - Converted to 1.4 (hek) 
         * Version 1.1a - August 14, 2014 - Added MotionSensor (Ed)
         * Version 1.1b - December 22, 2014 - Added DHT-Sensor (Ed)
         * Version 1.1c - December 29, 2014 - Added LED timeout (Ed)
         * Version 1.1d - Januari 4, 2015 - Updated lib to 1.4.1 (Ed)
         *
         ***/
        #define SN "DimmableLED"
        #define SV "1.1d"
        
        #include <MySensor.h> 
        #include <SPI.h>
        #include <DHT.h>
        
        #define Motion_PIN 3           // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
        #define INTERRUPT Motion_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
        #define LED_PIN 5              // Arduino pin attached to MOSFET Gate pin
        #define DHT_PIN 4
        #define FADE_DELAY 30          // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
        #define Motion_CHILD 1         // Id of the MotionSensor child
        #define Dimmer_CHILD 2         // Id of the DimmableLED child
        #define Hum_CHILD 3            // Id of the DHT-humidity child
        #define Temp_CHILD 4           // Id of the DHT-temperature child
        boolean lastMotion = false;
        
        MySensor gw(9,10);
        DHT dht;
        float lastTemp;
        float lastHum;
        static int currentLevel = 0;       // Current dim level...
        long previousMillisDHT = 0;        // stores last time DHT was updated
        long previousMillisLED = 0;        // stores last time LED was updated
        long intervalDHT = 60000;          // read DHT every ....
        long durationLED = 1800000;        // Max 'On'-time for LED's (watchdog)
        MyMessage motionMsg(Motion_CHILD, V_TRIPPED);
        MyMessage dimmerMsg(Dimmer_CHILD, V_DIMMER);
        MyMessage lightMsg(Dimmer_CHILD, V_LIGHT);
        MyMessage humMsg(Hum_CHILD, V_HUM);
        MyMessage tempMsg(Temp_CHILD, V_TEMP);
        
        void setup()  
        { 
          // Serial.println( SN ); 
          gw.begin( incomingMessage );    // Listen to dimmer-info from Vera
          dht.setup(DHT_PIN);
          
          // Register all sensors to gw (they will be created as child devices)
          gw.present( Motion_CHILD, S_MOTION );
          gw.present( Dimmer_CHILD, S_DIMMER );
          gw.present( Hum_CHILD, S_HUM );
          gw.present( Temp_CHILD, S_TEMP );
          
          gw.sendSketchInfo(SN, SV);
          // Pull the gateway's current dim level - restore light level upon sender node power-up
          gw.request( Dimmer_CHILD, V_DIMMER );
        }
        
        
        void loop() 
        {
          gw.process();
          
          // Read digital motion value
          boolean motion = digitalRead(Motion_PIN) == HIGH; 
          if (lastMotion != motion) {
            lastMotion = motion;     
            gw.send(motionMsg.set(motion ? "1" : "0" ));  // Send motion value to gw
          }
        
          // DHT22:
          unsigned long currentMillisDHT = millis();
          if(currentMillisDHT - previousMillisDHT > intervalDHT) {
            previousMillisDHT = currentMillisDHT;
            
            float temperature = dht.getTemperature();
            if (isnan(temperature)) {
              Serial.println("Failed reading temperature from DHT");
            } else if (temperature != lastTemp) {
              lastTemp = temperature;
            
              gw.send(tempMsg.set(temperature, 1));
              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(humMsg.set(humidity, 1));
              Serial.print("H: ");
              Serial.println(humidity);
            }
          }
        
          // Limit LED 'On'-time.
          unsigned long currentMillis = millis();
            
            if (( currentLevel > 0 ) && ((currentMillis - previousMillisLED) > durationLED)) {
              analogWrite( LED_PIN, 0 );              // Kill LED's after max 'On'-time
              gw.send(dimmerMsg.set(0));
              currentLevel=0;
            }
          
        } 
        
        
        void incomingMessage(const MyMessage &message) {
          if (message.type == V_LIGHT || message.type == V_DIMMER) {
        
            //  Retrieve the power or dim level from the incoming request message
            int requestedLevel = atoi( message.data );
        
            // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
            requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 );
        
            // Clip incoming level to valid range of 0 to 100
            requestedLevel = requestedLevel > 100 ? 100 : requestedLevel;
            requestedLevel = requestedLevel < 0   ? 0   : requestedLevel;
        
            // Serial.print( "Changing level from " );
            // Serial.print( currentLevel );
            // Serial.print( " to " ); 
            // Serial.println( requestedLevel );
        
            fadeToLevel( requestedLevel );
        
            // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value...
            // gw.send(lightMsg.set(currentLevel > 0 ? 1 : 0));
            
            }
        }
        
        // This method provides a graceful fade up/down effect
        void fadeToLevel( int toLevel ) {
          if (toLevel > 0){ previousMillisLED = millis();}
          int delta = ( toLevel - currentLevel ) < 0 ? -1 : 1;
        
          while ( currentLevel != toLevel ) {
            currentLevel += delta;
            analogWrite( LED_PIN, (int)(currentLevel / 100. * 255) );
            delay( FADE_DELAY );
          }
        }
        

        LEDdimmer.ino
        The DHT part in the sketch is not in use because I damaged the sensor by using the wrong voltage :( but this part is 'standard' code borrowed from the MySensors libraries. The project is a succes in my eyes; the box is not visable ander the bath but the motionsensor is sensitive enough to trigger everytime someone enters the room. The sensor gets untripped after 30 seconds but I have PLEG switch off the LED's 90 seconds after still being untrapped. This way I can change the timeout without opening the box. Only the watchdog part is my doing and I'm the worst coder on this forum so be warned :)

        1 Reply Last reply
        0
        • C4VetteC Offline
          C4VetteC Offline
          C4Vette
          wrote on last edited by
          #4

          Finally a new DHT22 arrived from China and now this project is completely finished.
          badkamer.png
          Bad1.jpg
          Bad3.jpg
          Bad2.jpg

          1 Reply Last reply
          1
          • D Offline
            D Offline
            Dean
            wrote on last edited by
            #5

            Nice work! Thanks for sharing all that you've done.

            1 Reply Last reply
            0
            • V Offline
              V Offline
              virgus1970
              wrote on last edited by
              #6

              To C4Vette
              How did You manage to display the data of last trip?

              1 Reply Last reply
              0
              • C4VetteC Offline
                C4VetteC Offline
                C4Vette
                wrote on last edited by
                #7

                You have a sharp eye!
                Have a good read at http://forum.micasaverde.com/index.php?topic=19263.15
                It is all in there.

                1 Reply Last reply
                1
                • E Offline
                  E Offline
                  Elfnoir
                  wrote on last edited by
                  #8

                  Hi!
                  Nice project, and I'm really interested on it!!
                  Unfortunately, when I copy/paste your script, I've an error on line 44 during the check in Arduino 1.6.7 for "MySensor gw(9,10);", the message is:

                  error: no matching function for call to 'MySensor::MySensor(int, int)'

                  Could you please tell me what could I do to make this script working?
                  Thanks for your answer!

                  1 Reply Last reply
                  0
                  • Fat FlyF Offline
                    Fat FlyF Offline
                    Fat Fly
                    wrote on last edited by
                    #9

                    Small question. I want to try this but some errors. Library is installed with library manager. Ubuntu 16.04 and last Arduino ide.
                    First try IDE not find library and i change in line 29 #include <MySensor.h> to #include <MySensors.h> add only s
                    and then this error.

                    motion_dht22_led_dimmer:44: error: 'MySensor' does not name a type
                    MySensor gw(9,10);

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


                    13

                    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