Garage door status sensors ideas
-
I still think the reed switch on the side of the door is the best solution, as you can have a battery powered node that can wake up only when sensor is triggered
@gohan Tend to second this on the KISS principle, but I recall a comment that the door would sometimes overshoot the optimal contact point (possibly door flexing?) on the 'closed' position...
Perhaps it might be worth re-examining WHERE the switching contact is located to minimise the possibility of 'passing', or change from reed to microswitch with a finger actuator to give a range of detection of say 10mm.
A c/o contact micro would also give confirmation the door was mid transit, the node could have a rundown timer to alarm out if the closed or open signal not received as expected? -
Hi, maybe you can use the reed switch in a different way, I mean do not use it like contact closed or contact opened as this would cause you overshoot issues.
When the magnet attached to the door slides in front of the reed switch, then you'll have the reed switch closed for a short time at least, most likely, you can test that. You can use the reed just like you would use a motion detector.
I mean connect the reed to pin 3 - interrupt - and put this at the end of your code, so when an interrupt occurs you will know the door has moved (and you can keep track of movement of course so you would know if the door is open or close) ... just an idea ... :sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); -
another option is to place couple of reed switches in parallel in several places. Only one is needed to close the circuit and trigger the interrupt.
-
Hi, maybe you can use the reed switch in a different way, I mean do not use it like contact closed or contact opened as this would cause you overshoot issues.
When the magnet attached to the door slides in front of the reed switch, then you'll have the reed switch closed for a short time at least, most likely, you can test that. You can use the reed just like you would use a motion detector.
I mean connect the reed to pin 3 - interrupt - and put this at the end of your code, so when an interrupt occurs you will know the door has moved (and you can keep track of movement of course so you would know if the door is open or close) ... just an idea ... :sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); -
Couldn't you just use a proximity sensor mounted to the ceiling. That way you can see if the door is up, or if something is parked there, or if the door is down with nothing parked there - all based on the measured distance.
-
@dbemowsk Thank you :smile:
To be a bit more creative I think, @McQueen you can use the interrupt as RISING at the end of your code like this:sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), RISING, SLEEP_TIME);The goal is to set a flag in your main loop every time you get an interrupt and then put this flag in the EEPROM, use the Relay Actuator sketch example again to see how to do that:
// Store state in eeprom saveState(message.sensor, message.getBool());And read the flag from the EEPROM like this:
// Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);This way you'll know the status of your door. This only works however is during the magnet slide you get just one interrupt trigger, that you can check for yourself, use Arduino itself to print out how many times you get interrupted while closing the door or opening the door. Hope it helps ...
-
@dbemowsk Thank you :smile:
To be a bit more creative I think, @McQueen you can use the interrupt as RISING at the end of your code like this:sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), RISING, SLEEP_TIME);The goal is to set a flag in your main loop every time you get an interrupt and then put this flag in the EEPROM, use the Relay Actuator sketch example again to see how to do that:
// Store state in eeprom saveState(message.sensor, message.getBool());And read the flag from the EEPROM like this:
// Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);This way you'll know the status of your door. This only works however is during the magnet slide you get just one interrupt trigger, that you can check for yourself, use Arduino itself to print out how many times you get interrupted while closing the door or opening the door. Hope it helps ...
-
That's right @gohan , if you place the "door closed"reed near the floor then only first interrupt should matter, first interrupt should tell you the door is closed. Same for a second reed placed high - the "door open" reed, that would tell you the door is open when interrupted the first time. @McQueen, could be close to you needs ...