Backlit Dimmable LED Mirror with Motion Sensor
-
Looking forward to the "whole house power" video.
I'm building this for two mirrors as well as kitchen under counter and bookcase down lighting.
Your Vera videos have been MOST helpful. You do great "practical" work.
THANKS AGAIN!
-
Looking forward to the "whole house power" video.
I'm building this for two mirrors as well as kitchen under counter and bookcase down lighting.
Your Vera videos have been MOST helpful. You do great "practical" work.
THANKS AGAIN!
@csa02221862 Great! I have these all around my house in various places and I love them. All credit goes to @blacey.
I do need to work on the power video. There are so many things I want to work on I have been focusing on making videos as I work on new sensors. It's so hard to find time these days...
-
I have a question on this project.
I'm replicating it for a wider mirror and I was thinking about having two separate dimming zones ( left and right ). based on the sketch and the design: Do you think One arduino can control both sides or do I need 2 different arduinos (+ electronics) and one won't be enough.
Happy to details more if needed.
thanks in advance!
-
I have a question on this project.
I'm replicating it for a wider mirror and I was thinking about having two separate dimming zones ( left and right ). based on the sketch and the design: Do you think One arduino can control both sides or do I need 2 different arduinos (+ electronics) and one won't be enough.
Happy to details more if needed.
thanks in advance!
@Dave-Dan said:
Do you think One arduino can control both sides or do I need 2 different arduinos (+ electronics) and one won't be enough.
Definitely. I have one pro mini controlling 3 different dimmers. You just need to make sure you use PWM pins for the outputs.
-
Do you have the Fitzing and code for the 3 zone? I have several places to use this. Any "max wattage" info, per channel and total?
Thanks,
Richard -
Do you have the Fitzing and code for the 3 zone? I have several places to use this. Any "max wattage" info, per channel and total?
Thanks,
RichardSorry it has been too long since I made this video and I don't remember the reference. If you're talking about my Arduino that dims three separate lights it's basically just the same wiring except you use 3 different PWM pins to the 3 different MOSFETs. The max wattage is determined by the MOSFET you use.
If that's not what you're referring to, let me know.
-
Sorry it has been too long since I made this video and I don't remember the reference. If you're talking about my Arduino that dims three separate lights it's basically just the same wiring except you use 3 different PWM pins to the 3 different MOSFETs. The max wattage is determined by the MOSFET you use.
If that's not what you're referring to, let me know.
@petewill Yes that's what I'm talking about. Just wondering how the code was modified to discretely control the 3 zones.
-
@petewill Yes that's what I'm talking about. Just wondering how the code was modified to discretely control the 3 zones.
@csa02221862 said:
@petewill Yes that's what I'm talking about. Just wondering how the code was modified to discretely control the 3 zones.
you want with or without the buttons?
If with, how would the buttons work?
-
@petewill Yes that's what I'm talking about. Just wondering how the code was modified to discretely control the 3 zones.
@csa02221862 Sorry for the delayed reply. Busy day yesterday. Here is my code that I'm running in my 1.4.1/1.5 environment.
/*** * 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.2 - January 22, 2015 - Created a seperate control for the basement LEDs * Version 1.3 - March 7, 2015 - Added coat closet LED * ***/ #define SN "Basement LEDs" #define SV "1.3" #include <MySensor.h> #include <SPI.h> #define NODE_ID AUTO //Change to a number to manually assign a node ID #define MASTER_WINDOW_LED_CHILD 0 #define COAT_CLOSET_LED_CHILD 1 #define UPSTAIRS_RAIL_LED_CHILD 30 #define BASEMENT_DESK_LED_CHILD 40 #define MASTER_WINDOW_LED_PIN 3 // Arduino pin attached to MOSFET Gate pin #define UPSTAIRS_RAIL_LED_PIN 5 #define BASEMENT_DESK_LED_PIN 6 #define COAT_CLOSET_LED_PIN 9 #define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim) //MySensor gw; MySensor gw(4, 10); //Change CE PIN to free up another PWM pin static int currentLevelUpstairsRail = 0; static int currentLevelBasementDesk = 0; static int currentLevelMasterWinLight = 0; static int currentLevelCoatCloset = 0; /*** * Dimmable LED initialization method */ void setup() { Serial.println( SN ); gw.begin( incomingMessage, NODE_ID); // Register the LED Dimmable Light with the gateway gw.present(UPSTAIRS_RAIL_LED_CHILD, S_DIMMER ); gw.present(BASEMENT_DESK_LED_CHILD, S_DIMMER ); gw.present(MASTER_WINDOW_LED_CHILD, S_DIMMER ); gw.present(COAT_CLOSET_LED_CHILD, S_DIMMER ); gw.sendSketchInfo(SN, SV); } /*** * Dimmable LED main processing loop */ void loop() { gw.process(); } 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 to " ); // Serial.println( requestedLevel ); //fadeToLevel( requestedLevel );//old code fadeToLevel( message.sensor, requestedLevel ); } } void fadeToLevel(int ledChild, int toLevel ) { // Serial.print( "In the FadeToLevel method. ChildID: " ); // Serial.println( ledChild ); int currentLevel; int ledPin; if(ledChild == UPSTAIRS_RAIL_LED_CHILD){ currentLevel = currentLevelUpstairsRail; ledPin = UPSTAIRS_RAIL_LED_PIN; } else if(ledChild == MASTER_WINDOW_LED_CHILD){ currentLevel = currentLevelMasterWinLight; ledPin = MASTER_WINDOW_LED_PIN; } else if(ledChild == COAT_CLOSET_LED_CHILD){ currentLevel = currentLevelCoatCloset; ledPin = COAT_CLOSET_LED_PIN; } else{ currentLevel = currentLevelBasementDesk; ledPin = BASEMENT_DESK_LED_PIN; } int delta = ( toLevel - currentLevel ) < 0 ? -1 : 1; while ( currentLevel != toLevel ) { currentLevel += delta; analogWrite(ledPin, (int)(currentLevel / 100. * 255) ); delay( FADE_DELAY ); // Serial.println( ledPin ); } if(ledChild == UPSTAIRS_RAIL_LED_CHILD){ currentLevelUpstairsRail = toLevel; } else if(ledChild == MASTER_WINDOW_LED_CHILD){ currentLevelMasterWinLight = toLevel; } else if(ledChild == COAT_CLOSET_LED_CHILD){ currentLevelCoatCloset = toLevel; } else{ currentLevelBasementDesk = toLevel; } //gw.sendVariable( ledChild, V_LIGHT, currentLevel > 0 ? 1 : 0 ); //gw.sendVariable( ledChild, V_DIMMER, currentLevel ); MyMessage dimmerMsg(ledChild, V_DIMMER); gw.send(dimmerMsg.set(currentLevel)); }``` -
Pete, thanks.
This will work for most situations I need. Is there an option to add the buttons and motion to one or more of the led's?
Hate to bother you again.
Richard
-
Pete, thanks.
This will work for most situations I need. Is there an option to add the buttons and motion to one or more of the led's?
Hate to bother you again.
Richard
@csa02221862 It should be possible but I never added it. This is in my basement controlling various lights throughout my house so I don't need buttons very often (when I do I just use my phone). The motion sensors are run through a different node and all the logic happens through my controller.
-
@petewill Thanks for an awesome write up, I just recently ran across it! I am trying to get it working and downloaded the 1.4 library and tried uploading the sketch to my pro mini and got the following error:
Sketch uses 18,642 bytes (130%) of program storage space. Maximum is 14,336 bytes.
Global variables use 633 bytes (61%) of dynamic memory, leaving 391 bytes for local variables. Maximum is 1,024 bytes.
processing.app.debug.RunnerException: Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
at cc.arduino.Compiler.size(Compiler.java:315)
at cc.arduino.Compiler.build(Compiler.java:156)
at processing.app.Sketch.build(Sketch.java:1111)
at processing.app.Sketch.exportApplet(Sketch.java:1146)
at processing.app.Sketch.exportApplet(Sketch.java:1132)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2409)
at java.lang.Thread.run(Thread.java:745)
Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.Any suggestions on what I might be doing wrong? I am pretty new so I might be overlooking something really simple..
-
@petewill Thanks for an awesome write up, I just recently ran across it! I am trying to get it working and downloaded the 1.4 library and tried uploading the sketch to my pro mini and got the following error:
Sketch uses 18,642 bytes (130%) of program storage space. Maximum is 14,336 bytes.
Global variables use 633 bytes (61%) of dynamic memory, leaving 391 bytes for local variables. Maximum is 1,024 bytes.
processing.app.debug.RunnerException: Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
at cc.arduino.Compiler.size(Compiler.java:315)
at cc.arduino.Compiler.build(Compiler.java:156)
at processing.app.Sketch.build(Sketch.java:1111)
at processing.app.Sketch.exportApplet(Sketch.java:1146)
at processing.app.Sketch.exportApplet(Sketch.java:1132)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2409)
at java.lang.Thread.run(Thread.java:745)
Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.Any suggestions on what I might be doing wrong? I am pretty new so I might be overlooking something really simple..
-
@loralg Are you sure you're choosing the Pro Mini from the Tools > Boards menu? It should have around 32,000 bytes not 14,336.
-
@petewill there are atmega168-based pro minis. Using them with MySensors is hard though, because of their small flash size.
-
@petewill @mfalkvidd After looking I have the 168.. I already have some more ordered that are the 328 though. I should have looked closer when I ordered the first batch. Thanks for the help! I figured it was probably something simple I had overlooked on my end.