Automating venetian blinds with Arduino
To obtain optimal light blockage from my apartments poorly designed micro venetian blinds, I have flipped the blinds around so the tilt rod and raise/lower strings are now on the window side and hard to use.
This results in the bedroom blinds being left closed most of the time, and as my kitchen gets sunlight through the bedroom door, it leads to a dreary disposition.
This sounded like a perfect opportunity to improve my working from home experience through the use of technology by adding a button driven mechanical process to open and close my blinds, and I’d get to play with Arduino and do some more programming.
Decisions I had to make
Code is on github here
Breadboard with open and close buttons attached to the wall. Lego tower behind the blinds, with the stepper motor stuck to the top. Shaft coupler connecting to the tilt rot.
Random angry birds lego tower I had in the cupboard that was basically the correct height. One day I may replace it
If you don’t have any equipment yet, a $40 kit at jaycar containing an UNO Arduino-Compatible board, breadboard, usb cable, jumper wires etc might be a good start and may be cheaper than buying some of the parts individually
- Arduino Uno - $33 at rs-online
- USB A to B cable - $5 at officeworks or $6 at rs-online or $10 at jaycar - you may have one lying around from an old printer
- Stepper motor and driver board - $10 at rs-online
- Shaft coupler - $12 at jaycar
- Basic electronics components:
- Breadboard - $8 at jaycar
- Jumper wires:
- Plug to plug - $6 at jaycar
- Plug to socket - $6 at jaycar - connects the driver board to the breadboard/arduino
- 2x Buttons - 95c each at jaycar
- Something to house the motor at the right height. I used a bunch of Lego I had lying around and double sided mounting tape which I already had in my toolkit $11 at bunnings
Decisions I had to make
Tilt or raise/lower
Turning the tilt mechanism using either a servo or a stepper motor seemed like the best approach as then I wouldn’t have to figure out how to interface with the raise and lower string which is the kind you have to pull on an angle.
Where to attach to the tilt mechanism
I took down the blinds and experimented with housing a motor in the top rail connected to the horizontal metal rod that is responsible for the tilt, but there’s not much room up there (at either end), and I decided that a modification that could be removed easily to return the blinds to manual control was preferred. This meant that I was going to have to attach a motor to the tilt rod that a human normally turns.
Servo or stepper motor
A stepper motor allowed me to program in a set number of rotations between open and closed.
Manual controls or automated
Keep it simple to start with, and use buttons to open and close on-demand instead of trying to get fancy with automatic function based on time of day, light levels, or voice control
- 2x buttons - open and close
- Open state is blinds horizontal, close state is blinds vertical
- Stepper does 6 full rotations (so tilt rod turns 6x) between open and closed state
- Pretty quiet! (it turns pretty slowly, ~30 seconds to change states)
- Stores open or closed state in EEPROM to resume operation after power outages
NB. To limit the number of writes to the finite EEPROM I am only storing the 2 major states of open or closed. This mean that in the rare case that power is lost while the blind is somewhere between open and closed state then a manual turning of the rod to reset state would be required
- While blinds are turning, press either button to cancel current operation. Press the appropriate button to either continue or return to previous state.
- Using 5V from Arduino to power stepper directly as well - will change this at some point
- Using the Arduino builtin pullup resistors for the buttons to simplify the wiring
- Play more with a light sensor - living in the city means there is a lot of light bleed from nearby buildings and so I didn’t collect enough samples to decide on a light threshold for automatic opening and closing
- Add a Real-time clock (RTC) module for automatic opening and closing based on time of day
- Wifi for voice control via Alexa/Google home - I maybe should have bought an Uno with wifi instead of needing to add an ESP8266 board
- Play with hardware instead of software button de-bouncing
- Find something other than matchsticks to pad out the shaft coupler