Smart Home Conservatory Roof Vent

In 2009 we had a large (5.5m × 4m) conservatory added onto the rear of our current home. It is North facing and features a 25mm thick polycarbonate roof, with two manually operated roof vents (each one about 1m × 1m in size).

Despite being North facing, our conservatory is incredibly good at self-heating in even the weakest of sunshine. Even in the winter months we never use the electric heater and the temperature always stays above 5°C. This enables me to grow some exotic plants and keep them alive over the coldest of winters.

On one of the vents, I had been using a mechanical temperature operated vent, to try and keep the conservatory cooler during the summer months. Without this, it could easily hit 45°C. When this finally failed, I decided to have a look at smarter alternatives. The main problem with dumb, temperature operated roof vents is that that they would sometimes stay open even when it was raining hard.

Note: For now, I'm automating these roof vents independently from the windows in my conservatory. Window openers connected to my contextual smart home will be another project.

Why?

I want to automate both the roof vents in my conservatory and make them a zero touch user experience, by giving my contextual smart home full control. It has all the information and whole home context to do this 24 × 7. It will do this based on:

Put simply, my contextual smart home will do a much better job of maintaining a reasonable temperature in the conservatory than I could. It will also do not forget to close it and and will ensure it stays closed in dangerous conditions. Like all my smart home projects, this is all about improving our quality of life.

The Design

My assumption is that I can 3D print all of the main parts required to complete this project, including the mounts that fix to the vent and the vent frame. The only other bits are the drive motor, the 10mm threaded rod and a few 10mm nuts. I may also use a couple of 10mm bearings depending on how well my design works without them.

Note: I'm printing parts in a tough, grey PLA but the plan is to paint most parts white, to allow the design to blend into white conservatory the roof and to protect the PLA from moisture.

My first assumption was that I can use a 10mm threaded rod to open and close the vent. All I need to do is fix one end to the vent and use a rotating nut to lift the rod up, with the drive mechanism fixed to the lower part of the frame (just like the existing manual opener). I have a 50cm long piece of 10mm threaded rod spare and I'm planning to use a shorter length of this, probably about 25 to 30cm long.

My thinking is that I can use a 12V dc motor to lift and lower the vent. I don't need positioning as I can use micro-switches to detect the fully open and fully closed points. With some reference timings, I should also be able to open the vent to 10%, 20%, 30%, etc. positions as well.

I'll use a 6-core alarm cable to the opener to carry the motor power and feedback signals. The current to the motor is actually white low, due to the gearing used. A networked Arduino will act as a slave processor and provide the query & control interface to my Home Control System. All of the wires and control kit will be hidden, so the actual smart actuator part will be more compact than the manual opener currently installed.

The final design will be tidily packaged in a 3D printed, curvy enclosure, to keep out the dust, enable quieter operation and to make the whole thing look tidy and professional. That's why some of the test prints below have larger areas of print than are required to simply test the operation.

The Build & Testing

Using Autodesk Fusion 360, I designed a suitable cog with an inset 10mm nut. This cog has 24 teeth, is 10mm thick and is about 39mm in diameter.

This is the 3D printed cog with the nut inserted. It fits tightly and is completely flush with the cog face. With this clamped vertically, it will provide the lifting force as it rotates.

I then designed a similar cog, to fit over the output shaft of my motor. The cog sizes mean the motor and the threaded rod are far enough apart to not touch but, only by about 5mm. It simply pushes on and is a nice firm fit.

I'm using a 12V dc brushed motor with a gearbox that results in an output shaft that spins at 40rpm. The output shaft is keyed and is 6mm in diameter. The output shaft is offset from the motor, which has six 3mm mounting holes at 31mm PCD.

With both cogs 3D printed, I could work out the required spacing between them and start to design the mount for the motor and cogs. This was the first test design, to check the positioning of the key items.

With the mount printed, I tested the positioning and everything looked good. I tested the speed at which the rod moves and it was about 6cm per minute. If the fully open position is 24cm, then it will take 4 minutes (240 seconds) to fully open. This is good because the vent is a heavy thing to lift and it doesn't need to move quickly. By timing how long the motor is powered I could easily and accurately set the opening position, with each 10% equating to 24 seconds and each 1% equating to 2.4 seconds.

Note: I used the shortest 3mm screws I had to hold the motor in place but, they are still too long. I've ordered some that are shorter than the ones shown here.
Note:  In normal operation, the weight of the vent will keep the cogs aligned. Sometimes the wind can cause the vent to lift though, so these cogs will have to be fixed, such that they are held in alignment and the vent is held down.

The next thing to test was that my mechanism can actually lift the vent. To do this, I needed to add add a fixing point to the top end of the threaded rod. The simplest way to fix the top of the rod and to also stop it rotating, was to simply drill a 4mm hole through it.

The top mount has a spring-loaded pin that can be unscrewed to reveal the perfect point to which I can attach my threaded rod. I'll just use a 4mm bolt for initial testing.

Having fixed the top of the threaded rod, I held the motor in place and powered it up. This testing revealed too things: Firstly, the roof vent is really heavy! Despite this, the motor was powerful enough to lift it up :-) Secondly, I'm currently using some washers underneath the driven cog but these add too much friction. I really need a quality 10mm bearing holding up the driven cog. Fortunately, I have some spare.

The current base mount is strong. It has to be to handle the weight. Despite this, it is only held in place with two screws. I was a bit worried that a 3D printed replacement would not be strong enough but, my design factors this in and testing showed it to be easily strong enough.

It took me just 5 minutes to design a new base mount in Autodesk Fusion 360. It's wider (with a 50mm gap) and wraps around the frame, to provide more support. I've allowed for a 6mm bolt to run through this mount and the actuator. Fusion 360 makes it really easy to do things like countersunk screw holes and rounded edges. This design will take over 4½ hours to print.

With the base mount printed and fitted to the vent frame, I 3D printed a test "lid" by which the actuator will be fixed. The actuator will be clamped together using four 3mm through-bolts and 3D printed in four parts. This arrangement seems to work really well. I can now progress my 3D design for the other parts.

This is 3D design for the 2nd part of the actuator housing. It holds the motor and top bearing in place. This is viewed from the top. This part is 21mm deep.

This is 3D design for the 3rd part of the actuator housing. It also holds the motor and top bearing in place but, is also the main housing in which the motor is hidden. This is viewed from the bottom. I've added internal holes for the wires to run from the end-stop switches. This part is 55mm deep and takes over 7 hours to print.

This is 3rd part which I 3D printed overnight.

The bottom part of my design doesn't need to take any weight from the threaded rod but, it does need to keep it aligned. I could use another bearing but that is overkill. I'm using these 10mm (18mm tall) spacers instead, They have an outside diameter of 12mm.

This is the 3D design for the bottom part.

The top and bottom will house micro-switches, to detect the 'end points' of travel. These switches are 20mm long × 10mm high × 6.5mm thick. I will 3D print circular flanges that will be fixed to the threaded rod, to operate the switches at both ends of travel.

This is the 3D printed part with the spacer and switch inserted.

I had to design a V2 of the base, to allow more room. The end-stop switch was fouling the end of the motor.

This is the 3D design for the end stops. These are 5mm tall and 30mm in diameter. These will be fixed to the threaded rod using Araldite glue. As they approach the end-stop switches, they push the switch closed to detect the fully open and fully closed positions.

This is V2 of the base printed. It features holes to bolt through the end-stop switch.

This is the first complete prototype that I tested. It highlighted a few things that I want to improve:

  • The wires would look better coming out of the rear, rather than the bottom.
  • I will recess the lower clamping nuts, to hide them.
  • The top clamping nuts will also be recessed and hidden.
  • The 'lid' could be made stronger.

Based on my testing to date, I plan to paint the brass fixings attached to the vents white. It doesn't make sense to replace these with a 3D printed part as they need to be very strong. I've now worked out that my threaded rod needs to be 35cm long too.

I designed and 3D printed an end-stop to go on the bottom end of the threaded rod. This one is an enclosed 'top hat' design and will trigger the end-stop switch when the vent if fully open.

I designed and 3D printed an updated version of the 'lid'. This one hides the through-bolts, houses an end-stop switch and its wires, and also provides the pivot point.

I cleaned up the brass fixing plate for the vent and spray painted it with an etch primer. I also used a white primer on the actuator mount. Both were then painted gloss white. I also did the fixing screws. This will make the whole thing blend in with the roof more.

This is what the actuator looks like installed. I still have work to do. The bottom part is being updated to move the end-stop switch and allow the wires to exit from the rear.

This is the 3D design for V3 of the base, hopefully the last. This turns the end-stop switch 90°, recesses the nuts for the through-bolts and provides cable exit holes at the rear of the actuator.

These actuators are wired and each one requires five wires, two to power the motor and three to provide the control signals. For aesthetic reasons (and to keep my wife happy), I want the wires to be invisible. Over the years, I've become an expert at running cables and hiding wires! I'm lucky in that I can hide all of the wires around my conservatory along the top of the 'walls' as there is an easily accessible channel along the top of them. This means I can run decent thickness power cables to each vent (to avoid voltage drops) and a 4-core alarm cable for the control.

For the final leg to the actuators though, I have run 2 lengths of 4-core alarm cable, because this is virtually invisible when fixed in place. One is used for the signalling and the other has the wires doubled up to power the motor. These are fixed in place using 'no more nails' and then run down inside the frame. They are as close to invisble as I can make them.

Electronics

The motor uses about 700mA in operation, so I can get away with using an 'off the shelf' L293D dual motor controller. This enables my Arduino to easily control direction and speed. This particular module also supports two motors, which is perfect for the two roof vents that I have in my conservatory.

This module is really easy to use. It takes a 12V dc supply and even has an onboard 5V regulator, which could be used to power the Arduino. The IN1 & IN2 control the direction of the first motor and the EN1 pin uses PWM to control the speed.

The Software

My contextual smart home knows about all the important things and models all of the these things as objects. Each object has a object type, which defines its characteristics and attributes and in this case the type is 'Vent'. A vent can have three values: 'Open', 'Closed' and 'Stopped'. If the vent is 'Stopped' it means something has gone wrong. When 'Open' the vent can have a level between 1% (just open) and 100% (fully open). 0% equates to Closed.

The reason my contextual smart home models vents and windows separately is simply down to wanting the best possible user experience. My smart home artificial intelligence allows me to control both the vents by all of its user interfaces. So I can ask it to "open the conservatory vents to 50%" and it knows to open all vents in the conservatory (a zone). If it didn't model the difference between vents and windows, then this would not be possible.

Because my contextual smart home has whole home context, it can make the best decisions as to when the vent is open or closed and by how much. It's knows about things like the 'Conservatory Temperature', whether it is raining, wind speed, etc. It uses my unified communications protocol to control the vent and to receive status updates from it.

To make intelligent control of devices, appliances and things like vents incredibly easy, over the years I have developed my own software controller. I can simply create an instance of this for each vent and a simple JSON configuration file defines the rules and behaviour. It's both machine and human readable and basically anyone could do it. The software controller will then simply adjust the vent position based on temperature, time of day, weather, twilight sensor, etc.

It's worth mentioning that both vents are controlled and operated by the same slave processor. This means that if the temperature changes, the slave controller would receive at least two requests at almost exactly the same time. This is not good but, my contextual smart home implements a queuing system for slave requests. If it sees a second request is going to the same slave processor, it will delay it slightly. Not only is this good programming practice, it ensures excellent reliability of communications between my smart home components.

Insight

This is proving to be an interesting project! As well as extending the general capabilities of my Home Control System and controller software, I've had to re-think where some of the temperature sensor in my conservatory are installed. Specifically, the one I call 'Conservatory Temperature' which is at shoulder height. It was too close to the windows and vent down one side of the conservatory and has been moved to the middle of the rear wall now. This results in much more consistent temperature, which is also a better reflection of the temperature inside the conservatory. The location of sensors is important!

There is a balance to be had between granularity of control and how often the vents are moved. My initial plan is to open the vent 20% at 24°C and then another 20% for each 2°C rise, meaning it will be 100% open at 32°C. My smart home logs all this data for me to analyse and see how well it is working.

Another thing to be wary of when controlling vents like this using a temperature sensor, is the accuracy, resolution and update frequency of the sensor. Most of the temperature sensors used in my contextual smart home can be optimised in this respect and configured to their specific environment and use cases. The 'Conservatory Temperature' is a Dallas DS1820 1-Wire sensor connected to an Arduino and it only reports temperature changes of 0.5°C or greater. It is also 'rate limited' to ensure there is at least 19 seconds between updates.

Although my roof vent actuators are fairly quiet, another way to improve our quality of life is to only operate them when the conservatory is unoccupied. My controller makes this really easy to do, with just another simple rule define in JSON.

Summary

This is an on-going project and experiment to design and build an automated roof vent actuator. The goal is automate both the roof vents in my conservatory and make them a zero touch user experience, by giving my contextual smart home full control.

The software side of it is now complete and tested. I'm still finalising my 3D printed designs and testing them, prior to painting and installing the two completed smart roof vent actuators.

At the moment the vent will stay closed if the wind speed is too high, the threat level is too high, it is night time, it is raining or the conservatory smoke sensor has been triggered. It will open a little bit is the temperature reaches 24°C and 100% open if the temperature reaches 32°C. I'll be testing how well these rules work though.

Examples

Occasionally, my @smartest_home tweets about the conservatory roof vents.