Temperature-humidity sensor

Temperature & Humidity

Description

This post will outline how I built some temperature-humidity sensors for my home automation setup to use in a couple rooms in my house.  I'll explain some of the options I tried before coming to my final design.  I will also give you links to where you can purchase the parts and to download the 3D printer files for the enclosure.

Introduction

This originally started from an idea I had for my home automation setup to put a temperature and humidity sensor in my main bathroom.  The main reason for this was to help a small problem with occasional small mold spots on my ceiling.  This was most likely due to humidity in the bathroom.  When someone would take a shower, they would turn on the vent fan before showering, and then off shortly after.  The problem is that when the vent fan is shut off, there still may be excess humidity in the room that could eventually cause the mold.

The idea was that I could have a controller on the vent fan for the bathroom that would turn on when the humidity reached a certain level, and then would also turn off when below another level.  The two levels would factor in some hysteresis to the equation to prevent the fan from continually starting and stopping when the humidity is near a certain level.   By doing this, the humidity in the room would be dropped to a safe level before shutting off, thus preventing the mold problem.

The temperature-humidity sensor design ideas

So I needed to figure out everything I would need for the project.  My primary home automation setup revolves around MySensors nodes.  Those nodes talk to my Vera Plus automation controller.  I decided to make the temperature and humidity sensor a MySensors node.  The exhaust fan control, which I have yet to do, will be controlled by a converted Sonoff module.  For this article i'll focus on the Temperature and humidity sensor. 

Below is a list of the things I needed to create the sensor.  The basic list was simple

  • A circuit board for the project.  
  • A micro-controller to control the sensor.
  • A temperature and humidity sensor.
  • Some kind of power source.
  • An enclosure to mount the sensor to the wall.

On to building the prototype

Easy/Newbie PCBFor the circuit board, I had a number of the MySensors Easy/Newbie circuit boards, so I thought that would be a good choice.  For that board I needed an Arduino Pro Mini, and an nRf24L01+ radio.  

Now I needed to choose a temperature-humidity sensor.  I had both some DHT11 and some DHT22 sensors.  The DHT22 is a higher resolution sensor, so I originally decided to try that one.  Through some testing with the DHT22 sensor I found that the power consumption was too high.  HDC1080 thumbnailI did some looking and found the HDC1080 sensor.  This sensor connects to the I2C bus and uses very low power.  It's low power consumption made it ideal for use on a battery operated node.   By removing the regulator and power LED from the Pro Mini I was able to run this sensor for a week with no significant power drain on a set of 2 - AA batteries.

The last piece of the puzzle was an enclosure.  The enclosure had to be vented since I was measuring temperature and humidity.  It also needed to be able to hold a battery  or set of batteries.  I figured that I should find the battery box first, and then design the sensor enclosure around that and the PCB.  I settled on this one.

The enclosure design

I have dealt with temperature sensor enclosures before, so I had some ideas on what the enclosure should look like.  temperature-humidity wall boxI turned to OpenSCAD and came up with a basic design.  The box was vented, it had mounting tabs for the PCB and a place to hold the battery box.  temperature-humidity wall plateI decided to make it easy to remove from the wall if needed and made the wall plate with two tabs that the cover could lock on to. 

Since the creation of the first prototype wall box, I have done a couple revisions to the design.  This is what the final design looks like.temperature-humidity wall box V3
Version 3 of the wall box is highly configurable and can be adapted to other configurations if needed.  All versions of the wall box can be found on my thingiverse page https://www.thingiverse.com/thing:2186286

Related Images:

RS485 communication techniques

RS485

Introduction

RS485 is a physical layer communication standard typically used in automation systems as a way for sensors and other devices to communicate to a central automation computer.  It is also used in computer system peripherals for data communication between devices.  A couple examples of this are the Small Computer Systems Interface, or SCSI-2 and SCSI-3 interfaces for hard disk drives.  Different systems use different protocols as their defined standards outlining the "language" they will use to communicate to each other.   In this short article I will discuss data communication using an RS485 serial bus and the best practices for an error free signal.

What is RS485?

RS485 has sometimes been referred to as a protocol, which it is not.   It is simply a communications interface wiring standard.  Unlike RS232 serial which is used for point to point serial communications, RS485 is a standard used for multi-point serial communications.  RS485 communication is typically done at half duplex using two wires  handling both transmit and receive.  Full duplex operation can be achieved using 4 wires depending on signal and speed needs.  Below is a diagram of an RS485 serial bus showing the master node and slave nodes.
RS485 Bus Diagram
As can be seen in the diagram, there is the two data lines, or differential pair, where the master and slaves connect, and at the end of the differential pair is a series of termination resistors.  Because the wires are a differential pair, the termination resistors are used to prevent reflections of the signal from back-feeding on to the line and causing collisions.  An RS485 network should only have termination resistors at the beginning and end of the transmission line.

The communication

Data transmitted on an RS485 bus can be heard by all nodes connected to that bus.  Because of this, a protocol is used to determine how that communication is managed.   The protocol must define a system for how data is transmitted, how a node knows that the data is meant for that node and how that node responds to the data it receives.  There have been a number of different protocol standards used in RS485 communication, with one of the most notable standards being the Modbus protocol.

RS485 interface types

RS485 USB Interface

There are many different types of RS485 interfaces on the market.  One is a USB type interface as seen on the left. This type will allow you to use a laptop or desktop PC as a master device, or a slave node on the network.  Another type such as the interfaces shown below are typically used to connect to a micro-controller such as an Arduino or a PICAXE, or small credit card size computers like the Raspberry PI or Beaglebone Black.  Interfaces such as the ones below typically come with the termination resistors integrated on to the board and may need to be removed if being used as slave nodes in the network.Microcontroller RS485 interfaces

RS485 bus setup

In an RS485 topology, the network is designed as one single line with multiple drops, or slave nodes.  As mentioned previously, termination resistors are put in place at both ends of the line to prevent signal reflection.  When termination resistors are not used, signal reflection can distort the signal on the line to the point of causing data loss or corruption.  These reflections are more noticeable on longer runs because the length of the pulse is long enough for the full pulse to make it to the far receiving end.  Once it reaches the end, it is then reflected back causing ghost signals that can differ in phase by the time it has ended.  On shorter cable runs, the the delay of the reflected signal is short enough that the distortion may not affect things because the phase difference will be negligible.
RS485 bus termination
Termination resistors should not be used at the slave nodes as this will cause unwanted signal attenuation.  With too much attenuation the signal may get lost completely.  Therefore, on node adapters where termination resistors are in place by default, such as the ones pictured above, you may need to remove them if they are not acting as the end node.

Conclusion

RS485 can be a good way of connecting automation devices where wired connection between devices is critical in preventing drops in signal.  Following these simple rules for connecting the bus, the signal transmission between devices should be quite reliable.

Related Images:

The setup of my 1-Wire network

Introduction

DISCLAIMER:  This post was copied from my old web page and is a bit old.  Some information contained within this post may be out of date.
In my home automation setup, I wanted to be able to monitor temperature in various places around my house as well as outdoors.  I wanted a solution that was relatively cheap and easy to use.  My brother some time back had mentioned to me about something called 1-Wire.  He had used it up at his cabin to monitor temperature and electric usage through current sensing.  I did a bit of searching and found that it fit both of my needs, cheap and easy to set up.  So I figured I would document my setup here.

The 1-wire interface

1-wire adapterThe first thing I needed to run this was some type of 1-Wire computer interface.  After looking at options, I came across the DS9097U adapter on Ebay.  Unlike other 1-Wire adapters that had an RJ11 jack for connecting the sensors, this model had 2 - 3.5 mm headphone style jacks on it.  It did come with an adapter to connect the RJ11 style sensors if needed.  It looked like that adapter would fit the bill perfectly.  I ended up purchasing one for around $20.00 US from a china distributor on Ebay.

The sensors

The next thing I was going to need was some of the 1-Wire temperature sensors.  My brother had mentioned that he got all of his equipment from a company called Hobby Boards.  I checked their website and I could buy the bare temperature sensors for about $4.50, but they wanted $10.00 for shipping.  I decided to check Ebay.  I figured that if I could get the adapter cheap, I should be able to get the sensors cheap too.  I ended up finding another chinese distributor that sold the sensors in packs of 5 for around $7.00 shipped.  A pack of 5 of them from Hobby Boards would have been about $40.00 shipped, so I went for the Ebay deal (who wouldn't at that price), so I bought a pack of 5 just to try things out.

The build

Now that I had all the parts, I needed to figure out how to wire things up.  Looking at the data sheet, I saw that there were 2 ways to wire these devices.  The first was using parasite power.  This is basically powering the device from power it grabs from the 1-wire network.

The other way was to use an external 5 volt power source.

So, if I was to use the external power source, how would I accomplish this.  I once again turned to Hobby Boards who had a how to section that outlined a wiring specification that used cat5 wire, and supplied a regulated 5 volts along with an unregulated 12-24 volts on the wire for use down the line for other devices.  The color scheme shown here is using the ISO T568A standard.  Most cat5 cables that you buy these days use the ISO T568B specification which is what I am using.  The only noticeable difference is that the orange and green wire pairs are reversed putting the color order at, white orange, orange, white green, etc... 

I figured using a documented wiring spec would be more reliable, mainly because it has been tested and used by others.  Not to mention if I wanted to add other devices from Hobby Boards, I can do it without having to re-wire things.

Now that I had a wiring specification planned out, I had to figure out the temperature sensor nodes.  Using the information from the DS18B20 data sheet, I devised a simple circuit that allowed me the option of using parasite power or external power.  Using a jumper on a 3 position header I was able to quickly switch between the 2 if needed.  In the schematic shown to the left, placing the header jumper across pins 2 and 3 will run the sensor on parasite power.  Conversely, by placing the jumper on pins 1 and 2, I could run it on the 5 volt external power.

Since the majority of the nodes were going to be in the house on walls, I wanted something that wasn't going to look unsightly on the wall.  I ended up finding someone that was throwing out some old vented covered wall boxes.  I then put together a couple of these circuits on some perfboard.  I even made an etched board that although it turned out good took too much time.  The perfboard versions were much easier to do in the small quantity that I needed, and they worked just as well.  To the right is one of my perfboard sensors mounted on the wall plate ready to be installed.  I connected each one individually and used the software that came with the 1-Wire adapter to get the built in hardware address of each sensor and labeled each one.

The installation

Now that I had a few of these built, it was time to install them around my house.  To start, I installed one in the master bedroom, orne in the spare bedroom and one outside on the outer edge of my deck.  I wired these up with the cat5 wire just stripped and screwed to the terminal block using the blue pair and the solid orange wire.  Though  this works, my issue with it right now is that none of the connections pass the other wire pair signals down the line, like the 12-24 volt power.  For now, this is not an issue, but I do have a plan for fixing it which I still need to implement. The idea is to use an RJ45 splitter adapter similar to the one shown to the left.  By crimping modular plugs to the ends of each cable coming to the temp sensors and plugging them into the 2 jacks on the adapter, this will pass all signal and power lines through. I can then clip the wire that comes off of the adapter and use it to connect to the temp sensor or whatever other sensor I try to install.

The only other hurdle to attack in this project is to get things set up in my automation software.  This was insanely easy.  I installed the 1-Wire plugin for OSA and after plugging the sensors into the adapter, OSA sent a 1-wire search ROM signal which automatically detects any sensors attached to the 1-Wire bus.  OSA then automatically added these as objects to the system.  All I needed to do then is to add them to my floorplan view and make use of them in the system.

I started with the outdoor sensor.  Looking at my RCS thermostat a while back, I noticed that it had an option for displaying the outdoor temperature on the wall display keypad.  Since I wrote the OSA plugin for it, I simply added an option for taking the temperature value from any other OSA object and sending it to the thermostat.  Now if I want to know the temperature outside, I just look at my thermostat.

I wanted to do more than just use these to display the temperature on a wall display.  My next thing to tackle was to use the value from my master bedroom sensor to aid in controlling a booster fan that I have attached to my furnace.  The booster fan was originally set up to come on any time the furnace or central air turned on.  I thought that this was a waste of energy, so I set up a script to say if it is between 9:00 PM and 1:00 AM, and the temperature in the room is below 68° in the room when the furnace kicks in, then turn on the booster fan.  This is so that the room is warmed up a bit when we go to bed.  I will do something similar for the summer months and using the air conditioner.  Now I have some real world energy saving with the system.  Though not much, i'd suspect, it is something.

I have recently installed two of these in my bar/man cave area in my basement.  The room is very long with a fireplace at one end.  My plan is to monitor both temp sensors and when the one closest to the fireplace shows a temp that is 3 or more degrees higher than the one on the other end of the room, it would turn on a fan to circulate the air in the room.  The fan would then stay on until the temperature normalized throughout the basement.

One more thing that I plan on doing which I have not yet set up is to put a system in place for humidity control in my bathroom.  The idea is to install a 1-Wire temperature and humidity sensor in the bathroom.  I will then install a controller on my vent fan that I can turn on when the humidity gets too high.  The fan would then stay on long enough for the humidity to get to a safe level.  The idea behind this is to control mold and mildew buildup in the bathroom.

Conclusion

There are many other uses for 1-Wire in a home automation setup.  Implemented correctly, many of these can save you time money and cleanup costs.  I have not even scratched the surface of things I can do with this, and I plan to do a lot more over time.

Related Images: