My automatic blind opener/closer

I’ve got a bunch of home automation set up to control my lights, tv, and even my robot vacuum. I live in an apartment and rent so permanent modifications are an obvious no go. Modifications that are easy to reverse when I move out are my only option. Our blinds (the rolling style that just go up and down) are a bit of a pain because of where the cable is and also inconvenient to manually roll up and down all the time so I decided to make an electric blind opener/closer. We have three in the bedroom, but one is facing the balcony and always stays down, so I’m automating two.

My plans are to use a heavily geared down motor with an ESP8266 and motor controller to turn the string and make the blinds go up and down. A 30 rpm motor will take around 20 seconds to open/close according to my calculations. I’m going to use a magnetic reed switch to detect when the bottom of the blinds are all the way up at the top and a simple timer to know when they’re at the bottom. Unfortunately they move around way too much to be able to put a sensor at the bottom. I might come up with a different way of detecting when they hit the ground, but I assume a timed descent should work fine if it “homes” everytime it goes back up.

All of the parts have arrived so it’s time to start designing and building this thing. I’m going to 3D print a gear and plastic enclosure to sit the electronics and motor in. The enclosure will be mounted next to the cord loop and will be mounted so it has tension around the gear. I’m going to initially design it to run off a small LiPo battery to avoid having to run cables to it. This is a 3S (~12v) 2200mAh battery. Hopefully it will last a few months before needing a recharge.

It will use MQTT to plug into the rest of my home automation system but will also feature a button on it so you can control it locally (ie without needing mqtt etc to be working). This is important because the motor is so geared down it’s impossible to freely turn it. If the home automation system ever goes down I don’t want to have to take this off to open/close the blinds.

I’ve gone through a few iterations to get the exact spacing and dimensions correct, but I’ve finally gotten a 3D printed gear that works well. The motors arrived today so I put the gear on and with the help of my boyfriend tested how well the motor and gear works at operating the blinds. I’m happy to report that it has more than enough torque to open/close the blinds and the gear worked well with no slippage.

I designed the gear to be printed in two parts and glued together with a drop of epoxy as I hate removing supports this style of gear would need a lot of them. The design works quite well and is fast to print (an hour for both gears). Here is one half so you can see the details:

Here’s the gear attached to the motor and a wemos D1 mini for size comparison:

Here is how it attaches to the blind cord:



I would be interested to see your mounting solution,
my first thought was to have a counter weight on the other side of the motor so it can just hang on the cord.
Not sure how well this would work.

Will to you be posting the design files on thingaverse?

Yeah I’ll probably post a tutorial to my blog and and relevant files to GitHub and thingiverse. The gear design is actually super fiddly, way more so than I first imagined so I think it’s unlikely to work for your blinds unless they’re the same brand. Although it should be easy to tweak the fusion 360 drawings.

My current plan is to use a bunch of those 3M command mounting strips. I doubt a counterweight would work as it requires a significant amount of torque and the box design wound have to have weight evenly distributed to balance. I measured that it needed 3.5kg of force to pull the cable (with some luggage scales). The motor I got is overkill for this as the listing claims 10Kg-cm of torque (the radius is around 2cm so should exert around 5kg of force) but it means I have a good margin.

The first enclosure has printed and it works well except I forgot I changed something and didn’t add a few more mm of space so the motor doesn’t fit perfectly. Apart from that, it seems to work well. I’ve designed it so that the back “lid” sits flush (with screws countersunk) so it looks nicer (ie there’s no seem/gap visible when mounted) and so the screws don’t leave marks on the place it’s mounted. These photos are of the blinds at work so they’re a little different to mine.

I’ve assembled my first prototype and have finished writing the code. The code seems to work well with the reed switch acting as an endstop so it knows when it’s all the way open. I think I need to tweak the gear design slightly as it seemed to handle closing the blinds fine, but clicked a lot and started to split on the way back up when opening them. I assume the torque is a lot more and probably a little too much for my glued together style gear. I’m going to experiment with screws and potentially printing it as one piece with supports.

After a few more revisions of the gear it’s pretty close to perfect. I’ve put everything together and it’s working pretty well. I just need to make a case for the battery, and add a 12v > 3.3v adapter so the ESP8266 can be powered off the battery and not require a USB cable to be plugged in. In the next revision I’ll be adding a button for manually controlling the blinds in case the WiFi / mqtt server isn’t available.

1 Like

Great work Jaimyn! Great build log and project. I really like how you have used a variation of a mechanism that already exists for those chains and just switched the end of the chain that it sits on. Clever!

Are you thinking of having it lower a little on its own in the afternoon when the sun is reflecting off the buildings, or opening in the morning to wake you up with sunlight?

It will be integrated with my home automation server (home assistant) and Apple’s HomeKit. I’ll mainly use it for manual controls via Siri/HomePod/Google Home, but I think my boyfriend wants to set it up so that when his alarm goes off it also opens the blinds. The initial version just opens or closes all the way, I’ll have to add a bunch of state tracking to the code in order to say “open/close x amount”. It shouldn’t be that hard, but I’m focusing on getting it completely finished before adding those more advanced features.