Home Ventilation

Introduction: Home Ventilation

“More than one-third of all homes in New Zealand have mould and damp issues, with homes in the South Island in particular not being heated properly,” a University of Otago professor is reported to have said in a 2008 newspaper article. And earlier this year, in June, the death of a toddler died was linked to living in a cold, damp home.

There are many commercial options for ventilation and heating systems, but most are very expensive and many families can’t afford one.

Our home ventilation system, which was controlled by a desktop computer, had not been working for six years. I would like to get it working on a microcontroller or Raspberry Pi.

In my previous version I used the Arduino microcontroller to run the model, where I ran the model fans on 12V, which is legal, but running it on 240V (how much a real roof fan would have to be run on) wouldn’t be. Installing this system in your house would be illegal and void your insurance. I heard about a WiFi controlled switch which can be controlled by your computer, called the WeMo Switch. It can be controlled by the WeMo phone app and you can also download a program which enables you to run it off your computer through your home WiFi. This would make the wiring legal. The Arduino doesn’t have a built in WiFi connection, so I will have to use the Raspberry Pi.

In this version I will use the Raspberry Pi, the WeMo Switch, with DS18B20 temperature and the DHT22 humidity sensors to control the ventilation system.

Open Source – My Solution

I have decided that my project to make a low cost easy DIY system will be open source and the design and code will be freely available on the internet. My code uses open source libraries and the design follows other designs on the internet.

I want my project to help other people to learn about coding and be a real working system that will help New Zealand homes be drier and warmer, improving peoples living condition for less than $500.

Step 1: Raspberry Pi Set Up


Put a SD card into the Pi. Plug in the network cable (internet). Plug in mouse and monitor. Connect the power (a USB charger).

Once hardware is set up you can set up the software.


Download Raspbian (from https://www.raspberrypi.org/downloads/) and write to a SD card. I used Win32DiskImager (from https://www.raspberrypi.org/downloads/)

Boot & setup

In the initial configuration screen (raspi-config)

· 1) Expand File System

· 3) Enable Boot to Desktop

(for Python Programming)

· 4) Internationalisation Options

I1) Change Locale (optional)

I2) Change Timezone (optional)

I3) Change Keyboard Layout (optional)

· 8) Advanced Options

A6) SPI (needed for LCD)

When you have restarted the Raspberry Pi, at a terminal prompt

sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade #optional

sudo rpi-update #optional firmware update

I had trouble with the web browser, so I installed Firefox (called IceWeasel on the Pi). This is optional.

sudo apt-get install iceweasel

Setup the GPIO library. I got instructions from https://learn.adafruit.com/adafruits-raspberry-pi... This is actually not needed anymore because it is included in the new versions of Raspbian.

git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-...

cd Adafruit-Raspberry-Pi-Python-Code


sudo apt-get install python-dev

sudo apt-get install python-rpi.gpio

Step 2: ​Temperature Sensors (DS18B20)


Test each sensor by wiring into breadboard and connecting it to power. Wire both of the temperature sensors to RJ45 connecters and then into the Home Net in the roof. The sensors need a pull-up resistor (about 4.7k Ohm – only one per bus) between Data and Vcc. The One Wire Bus can have many sensors on the same data line.


Instructions from https://learn.adafruit.com/adafruits-raspberry-pi... and https://learn.adafruit.com/adafruits-raspberry-pi...

On the Pi edit the config.txt

sudo nano /boot/config.txt

and then scroll to the bottom and type there


Then reboot the Raspberry Pi. Download the w1thermsensor library.

sudo apt-get install python-pip

Step 3: Humidity Sensors (DHT22)

HumiditySensors (DHT22)


The sensors need a pull-up resistor (1k-5k Ohm –one per sensor) between Data and Vcc. These sensors can have one sensor on a data line.

I tested the humidity sensors to find the most consistent, because the first two were very inconsistent and inaccurate. You probably need to test several sensors to find some that are consistent.

I wired up five sensors side by side and ran a program that read all the sensors. There was up to a 10% difference between sensors

This is nowhere close to the 2% accuracy they are supposed to be. I found a website (http://www.kandrsmith.org/RJS/Misc/calib_dht22.html) that showed tests for these sensors. The results were that those sensors were more accurate than mine, but that they could fail after about a year. After running them for a few hours of using them I found that they often give wrong results or no results. I had to write a function to handle these problems.

I think that these sensors are so bad that to make reliable system I would have to find more reliable humidity sensors.


The instructions are from https://learn.adafruit.com/dht-humidity-sensing-o...

sudo apt-get update

sudo apt-get install build-essential python-dev python-openssl

git clone https://github.com/adafruit/Adafruit_Python_DHT.g...

cd Adafruit_Python_DHT

sudo python setup.py install

Step 4: ​WeMo Switch

WeMo Switch


Follow the instructions to set up the WeMo. This is necessary to set it up so it will conect to your local network and useful because you can control the fan from your cellphone and it can update the WeMo firmware.


The Wemo library is available from https://github.com/iancmcc/ouimeaux/

At a terminal prompt on the Pi

sudo easy_install ouimeaux

Step 5: LCD Screen (Nokia 5110 With PCD8544 Controller)

LCD Screen (Nokia 5110 with PCD8544 controller)


Plug the screen into the breadboard and wire it to the correct GPIO pins. Check the pin layout on your LCD, as they can vary. Check the instructions at https://learn.adafruit.com/nokia-5110-3310-lcd-python-library


Make sure SPI was enabled in the initial Raspberry Pi setup.

sudo apt-get install python-imaging

sudo apt-get install git

git clone https://github.com/adafruit/Adafruit_Nokia_LCD.git

cd Adafruit_Nokia_LCD

sudo python setup.py install

Step 6: Home Net

Home Net

The home net cabling used to wire the sensors to the Raspberry Pi.

My " Home Net" (RJ45 using T568B colours)

1 Orange stripe - Data 3 - DHT22_1

2 Orange - Data 1 - not connected

3 Green Stripe - Vcc - Vcc

4 Blue - Data 0 - DS18B20

5 Blue Stripe - GND - GND

6 Green - GND - GND

7 Brown Stripe - Data 4 - not connected

8 Brown - Data 2 - DHT22_2

Step 7: Installing It in the Roof Space

I went into the roof of my house and plugged the WeMo switch into the power socket in the roof. I then plugged the fan into the WeMo switch. Next I ran a LAN cable under the house and put one end through the floor to plug it into the Raspberry Pi. The other end I ran into the roof and plugged the cable into the Home Net socket. Then I plugged both temperature and humidity sensors into the Home Net socket. I tied the temperature and humidity sensors to a beam near the peak of the roof and put the room temperature and humidity sensor through the wall near the ceiling, into the room with the fan vent.

Step 8: Download My Code From GitHub

Download My Code from GitHub


This code will need to edited especially for your DS18B20 IDs. there are test programs in the test_code directory that will tell you the IDs of your sensors.

Have Fun, feel free to ask questions

Be the First to Share


    • For the Home Contest

      For the Home Contest
    • Game Design: Student Design Challenge

      Game Design: Student Design Challenge
    • Make It Bridge

      Make It Bridge