Temperature Sensor / Weatherstation




About: I like microcontrollers and LEDs :D
Create a weatherstation or temperature monitor using the very cool digital temperature sensor DS1820.

I use this setup to monitor a server room, and as a weatherstation.

This project consists of:

  • A Dallas 1-Wire bus network
  • Interface between RS-232 and the Dallas 1-Wire system
  • Digital temperature sensors connected to the Dallas 1-Wire bus (DS1820/DS18s20)
  • Software setup to gather and graph temperatures

Updated 2007-11-18 to include automatic graphing scripts and pictures of real life implementations of this system.

Step 1: You Need

This is what you need to make a weather station or temperature logger:

  • Some linux skills
  • Basic electronics skills, soldering etc..

  • 1 6.2V Zener diode (1N5234)
  • 1 3.9V Zener diode (1N5228)
  • 2 Schottky diodes (1N5818)
  • 1 1.5 k resistor
  • 1 2pin screw terminal
  • 1 D-sub 9 female connector with solder points
  • 1 small piece of perfboard.
  • One or more Dallas Semiconductor DS1820 or DS18s20 digital temperature sensor
  • Cat5 cabling
  • Shrink tube

Step 2: Build the RS232 Interface

I like to build the 1-Wire busmaster so small that it can just sit in the back of the computer in the rs232 port.

Step 1)
Figure out how small you can make it.
Put all the components on a perfbaord. Place them with the circuit in mind. We don't want to add any wires to the bottom of the circuit! Se image.

Step 2)
Cut out the right size perfboard.
Just drag a sharp knife a few times over the row of holes where you want to cut.
Do this on both sides, then just break it in two. It usually breaks at the fault line you created.

Solder the components in place. and connect the solder points to complete the circuit.

Step 3: Testing the RS232 Interface

Download and install digitemp.
On Debian and Ubuntu Linux, this is done by running `sudo apt-get install digitemp`.

Connect a DS1820 to your circuit.
The middle leg goes in the DQ port, the other two legs go in GND

Connect the circuit to a computers rs232 port.
I only cover doing this with Linux, but it is also possible to do this in windows..

If the command `digitemp` doesnt work, it's because there are multiple versions of digitemp.
type digitemp, then press tab to see all of them.. digitemp_DS9097 is the right one for this 1wire busmaster.
Just for the sake of simplicity, we want the command to be `digitemp`, not `digitemp_DS9097`.
type `sudo ln -s /usr/bin/digitemp_DS9097 /usr/bin/digitemp`

As root, or using sudo:
Run `digitemp -s /dev/ttyS0 -i`. This searches the 1wire network for sensors, and creates a config file for digitemp. If you are using COM2, use -s /dev/ttyS1.
Run `digitemp -a` to read the temperature of the connected tempsensor.
See the screenshot

Do this for all the sensors you are going to use, and write down the addresses for each one.
When you have multiple sensors, it's nice to know which is which.

Step 4: Make the Sensors and the Network

When wiring up your 1wire network, you wan to use cat 5 network cables.
I have had some bad experiences using other cables, and with combining different types of cable.

When running over cat5, the 1wire bus can have quite long cables.
In one weatherstation setup, I run a 30 meter cat5 from a technical room with a Linux computer and up to the roof. On the roof, the cable is split into 3 5-15 meter long cables with a sensor at the end of each one. This setup works flawlessly. The 1-wire network is quite robust.

Making the sensor:

You want to make the sensor both waterproof, and rigid.

Cut a Cat 5 cable to the desired length.

De-insulate the sensor end.
Cut off 3 of the 4 pairs, leaving the green/whitegreen one.

Slide a small shrink tube over the green wire.

Solder the green wire to the middle pin of the DS1820

Pull the the shrink tube up, so it covers all the metal of the middle leg and the metal of the wire connected to it. Then heat it with a lighter or heat gun to shrink it in place

Solder the white/green wire to the two other pins.

Put a larger shrink tube over the sensor and the cable.
See the picture.
Then heat it gently with a lighter to shrink in place.
You don't want to set the thing on fire, just hold the flame 4-10mm away from the shrink tube.

Put your sensors wherever you want to have them, connect to the rs232 interface and plug into your computer.

Step 5: Software Setup - Data Acquisition

Now that we our sensors in place, we want to gather some data from them.

As root on your linux machine:

Run `digitemp -s /dev/ttyS0 -i -c /etc/digitemp.conf`
This creates the config file digitemp.conf with yoru sensors.
Watch the output to see what number the sensors get.

Check the temperature with `digitemp -aq -c /etc/digitemp.conf`

Dump the output data into a file. I dump to a file within apaches wwwroot, that way I can access the temperature from anywhere.
The command `digitemp -aq -c /etc/digitemp.conf > /var/www/digitemp.txt` puts the output of digitemp into the file digitemp.txt

Automate this process:
type `crontab -e`, this opens roots crontab.
Type `* * * * * digitemp -aq -c /etc/digitemp.conf > /tmp/digitemp; mv /tmp/digitemp /var/www/digitemp.txt` into that file, and save it.
Run `crontab -l` to confirm that the crontab has been installed.
The reason I am piping the output into /tmp and then moving it to /var/www, is that digitemp uses a few seconds to compete its run. If you try to access the output while digitemp is running, you would get an incomplete file. This could mess up other scripts that read data from this file. (This is not included in the screenshot, forgot to do it)

Your weatherstation is now up and running.
Use the data to do whatever you like, graph it, use it to email in case of high/low temp, etc..

Step 6: Software Setup - Graphing

This is the tricky part, lot's of scripting needed here.

Make a place to put the scripts, a place to store the images, and a place to store the data.
`mkdir /etc/tempsensor`
`mkdir /var/www/temperature`
`mkdir /var/log/digitemp_rrd`

Install software:
You will need, PHP and RRDtool.
`apt-get install rrdtool`
`apt-get install php` (there are many php packages, install one with a console executable)

Download and install the scripts responsible for makin the graphs:
Download tempsensor-0.1.tar.gz to your linux machine.
`tar xvzf tempsensor-0.1.tar.gz`
`cp -v tempsensor/* /etc/tempsensor`

Configure the scripts
Open /etc/tempsensor/config.php and follow the comments in this file.
Change the script to read input data from "/var/www/digitemp.txt" if you followed the example in the previous step.

Add a crontab entry the same way as in the previous step. The script should run every 5th minute.
The lines should look like this:
`*/5 * * * * php /etc/tempsensor/logdata.php`
`*/5 * * * * php /etc/tempsensor/graphdata.php`

Run the scripts manually to check if it works.
php /etc/tempsensor/logdata.php
php /etc/tempsensor/graphdata.php

Visit http://your.ip.or.hostname/temperature or whatever you specified in the config file.

Step 7: Implementation 1 - Server Room Monitoring

My first implementation of this system was in the serverroom at the student dormitories where I work. Here are some pictures for you.

Step 8: Implementation 2 - Weather Station

When I equipped the server room with temperature sensors, I just couldn't resist putting some on the roof aswel!

The weatherstation is a bit trickier than the serverroom.
There is a lot of interference outside.
The sun may hit a sensor, sending it from -1 to 30 c in 5 minutes.

I solved this by using three sensors placed at points which would receive sunlight at different times during the day. Since heat is the only "noise" in the measurement, I just use the sensor with the lowest reading at any time as my "outside temperature".

This temperature is again smoothed by averaging the last few minutes.

Step 9: Implementation 3 - Student Dorm Room

A friend of mine followed this instructable, and equipped his apartment with temperature sensors. In the fridge, bathroom, computer etc. :)



    • Classroom Science Contest

      Classroom Science Contest
    • Growing Beyond Earth Maker Contest

      Growing Beyond Earth Maker Contest
    • Barbeque Challenge

      Barbeque Challenge

    93 Discussions


    Question 11 months ago on Step 3

    What is the Baud rate for reading the 1-Wire?

    I'm Using Hyperterminal for reading it.


    4 years ago on Step 6

    What's the hell with tempsensor-0.1.tar.gz ??


    4 years ago on Step 6

    does anybody have tempsensor-0.1.tar.gz???


    5 years ago on Step 6

    Where can i find the trmpsensor-0.1.tar.gz file?


    5 years ago on Introduction

    Cool Stuff! I made the device and used a USB to serial adapter. changed tty0 to ttyUSB0 and all worked perfectly. Now the charts. I am unable to get the files to be able to complete the charts. can any one help? I am currently running a cron job with some scripts to change the data to CSV type file to be able to chart the data using other software.


    6 years ago on Introduction

    Same here, just need the tempsensor tar file, can someone send it to me, thanks in advance.


    6 years ago on Introduction

    anyone would be nice enough to send me the tempsensor-0.1.tar.gz file ?
    it seems that the file is unavailable since Mar, 6...


    6 years ago on Introduction

    Hi all, can anyone sent me the link of tempsensor-0.1.tar.gz ?


    6 years ago on Introduction

    hello all

    where can i download this file tempsensor-0.1.tar.gz ???


    6 years ago on Step 6

    Cool! Excellent instruction.


    6 years ago on Introduction

    I just finished making one of these, but will not be able to test it out until I receive my sensors. In the meantime, I'm getting a voltage of 5.75V between GND and DQ. Would this be too high as I read that the DS18S20's operating voltage range is 3.3-5.5V?


    7 years ago on Introduction

    I have little experience with soldering so I made a breadboard version of the circuit, see pdf file I added, I used Ubuntu for Digitemp and everything works fine, rrd-tool and web server setup. Tried to use Windows version of Digitemp, did not work. Thanks for making this instructable, it showed me how to use 1-wire bus.


    7 years ago on Introduction

    This is EXACTLY what I am looking for, but unfortunately it uses DALLAS DS1820 sensors, I do not have handy at the moment.

    Would this also work with a LM35DZ? If so, what would be the differences in the scheme?

    BTW, great instructable.


    8 years ago on Step 2

    Will this interface work with other 1-wire devices such as iButtons? And can it do bi-directional serial (read+write) or just simply reading from the device?


    8 years ago on Introduction

    Great Instructable! Using a breadboard, everything worked out smoothly. I also used the MartyBugs' schematic to confirm the setup. Very nice and fun, thanks!


    9 years ago on Step 3

    Is it possible to make this work with a db25 instead of a db9?

    1 reply

    8 years ago on Introduction

    Short answer is, you don't.
    The 18S20 is a 1 wire serial device
    Your printer port will only talk to parallel devices.