Skip to topic | Skip to bottom
Home"Wealth without money..."

Main.Temperature_Sensor_1_0r1.13 - 20 Apr 2008 - 18:58 - ZachSmithtopic end

Start of topic | Skip to actions

This has been superseded by Temperature Sensor v1.1

If you have the old version, it still works great! No need to upgrade. The new version is 100% compatible, but has minor incremental upgrades that make it better. If you don't have a board yet, it is recommended to use the latest version.

Temperature Sensor v1.0

Overview

Get It!

Raw Components


Files

You can download the electronics files from Sourceforge.

This file contains the following:

  • GERBER files for getting it manufactured
  • PDF files of the schematic, copper layers, and silkscreen
  • Eagle source files for modification
  • 3D rendered image as well as POVRay scene file
  • exerciser code to test your board.

Interface

Pin Function
+5 This is the pin to supply +5 volts on.
S This is the signal pin. It will output a voltage between 0 and 5 volts that correlates with the temperature.
G This is the ground pin.

Signal Values

The thermistor circuit is a voltage divider that can be read with an ADC such as the one on an Arduino board. That value can then be run through a formula to get the temperature in degrees. This circuit has been documented in full detail in a blog entry by nophead.

Thermistor Values

You can use a variety of thermistors with your temperature sensor.

Read more on them here.

Build It

Board Bugs (listed by version)

v1.0

  • No bugs yet, please report any you find to the forums.

Printed Circuit Board

You can either buy this PCB from the RepRap Research Foundation, or you can make your own. The image above shows the professionally manufactured PCB ready for soldering. Its also cheap, only $0.50 USD.


Components

Soldering Instructions

R1

You can insert the resistor in any orientation. Pay attention to the color bands.

R2

You can insert the resistor in any orientation. Pay attention to the color bands.

C1

Electrolytic capacitors have a polarity. Make sure the stripe on yours matches the one in the picture.

X1

Make sure you insert the connector correctly: with the tab facing the inside of the board.

Wires

Trim 1/4" from the end of each wire. Insert that wire into the hole in the pad and solder the correct wire to the correct pad using the table below:

Pad Color down
G Brown
+5 Green
S White/Brown


Test It

Now that you have your temperature sensor tested, you'll want to test it.

Wire it up!

The wiring is very simple:

  1. Wire 5 to +5v on the Arduino
  2. G to GND on the Arduino
  3. S to Analog 0 on the Arduino

you're done!

Upload firmware to Arduino

Create a new sketch and copy/paste the code below into it. Upload it to your Arduino.

The code below is for the standard RRRF 10K thermistor that comes from Mouser. If you use a different thermistor, or are using different resistors in the board, we have a python script that you can run to generate new values in the lookup table, or you can grab a pre-calculated table from the thermistor page.

#define THERMISTOR_PIN 0

#define NUMTEMPS  22
short temptable[NUMTEMPS][2] = {
// { adc ,  temp }
   { 1 ,  608 } ,
   { 60 ,  176 } ,
   { 70 ,  166 } ,
   { 80 ,  157 } ,
   { 90 ,  150 } ,
   { 100 ,  143 } ,
   { 110 ,  137 } ,
   { 120 ,  131 } ,
   { 130 ,  125 } ,
   { 140 ,  120 } ,
   { 150 ,  115 } ,
   { 160 ,  110 } ,
   { 170 ,  105 } ,
   { 180 ,  100 } ,
   { 190 ,  95 } ,
   { 200 ,  91 } ,
   { 210 ,  86 } ,
   { 220 ,  81 } ,
   { 230 ,  75 } ,
   { 240 ,  70 } ,
   { 250 ,  64 } ,
   { 300 ,  4 }
};

void setup()
{
   Serial.begin(9600);
   Serial.println("Starting temperature exerciser.");
}

void loop()
{
   int rawvalue = analogRead(THERMISTOR_PIN);
   int celsius = read_temp();
   int fahrenheit = (((celsius * 9) / 5) + 32);

   Serial.print("Current temp: ");
   Serial.print(celsius);
   Serial.print("C / ");
   Serial.print(fahrenheit);
   Serial.println("F");
   
   Serial.print("Raw value: ");
   Serial.println(rawvalue);
   Serial.println(" ");

   delay(1000);
}

int read_temp()
{
   int rawtemp = analogRead(THERMISTOR_PIN);
   int current_celsius = 0;

   byte i;
   for (i=1; i<NUMTEMPS; i++)
   {
      if (temptable[i][0] > rawtemp)
      {
         int realtemp  = temptable[i-1][1] + (rawtemp - temptable[i-1][0]) * (temptable[i][1] - temptable[i-1][1]) / (temptable[i][0] - temptable[i-1][0]);

         if (realtemp > 255)
            realtemp = 255; 

         current_celsius = realtemp;

         break;
      }
   }

   // Overflow: We just clamp to 0 degrees celsius
   if (i == NUMTEMPS)
   current_celsius = 0;

   return current_celsius;
}

Try it out

Start up your Arduino, and open the serial monitor. The exerciser code reads the thermistor every 2 seconds and outputs the current value of the thermistor, as well as the estimated temp. The thermistor code is only accurate at higher temperatures, so get some sort of heat going. I recommend a heat gun, but a lighter will also work in a pinch. Heat it up, and watch the terminal. The most important thing to check is that it is actually changing with temperature and is relatively accurate.

If so, then you've successfully built your temperature sensor. Congratulations!
to top


You are here: Main > Temperature_Sensor_1_0

to top

Copyright © 1999-2009 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding RepRap? Send feedback