K-type Arduino Thermometer

34,185

37

10

About: Converting caffeine to code :)

Hi all,
Recently I had to measure the temperature in a place where ordinary temp sensors like LM35 or TMP36 wouldn't fit. And not only this but the temperature was many degrees below zero. To be precise -70c to -80c. Traditional sensors are not working below -50c so the solution I came up was to use a k-type thermocouple. In order to make arduino read the k-type thermocouple values I had to use a Thermocouple-to-Digital Converter. Thankfully Adafruit is selling MAX31855 in good price and also you can download an Arduino library from them. What more can you ask?

Step 1: Schematic

The schematic of the circuit is very simple. As you can see the Max31855 except the volt and ground has three more pins. The DO, the CS and CLK. I connected those to Arduino D5,D4 and D3 respectively. Then the only thing that was left was to connect the LCD. As you can see in the schematic LCD uses 6 pins from Arduino. For the lcd i used the LiquidCrystal library which comes with the Arduino IDE, so no need to download.

Step 2: Arduino Code

Last step was to upload the code to Arduino. Code is available here. All went smooth and temperature showed up to the lcd.
Here is a small video:
Thanks for reading and good luck!




Share

    Recommendations

    • Optics Contest

      Optics Contest
    • Plastics Contest

      Plastics Contest
    • Make it Glow Contest 2018

      Make it Glow Contest 2018

    10 Discussions

    0
    None
    MichaelM50

    1 year ago

    Hi, how do I change celcuis to fahenheit using the file downloaded for your link to GitHub?

    1 reply
    0
    None
    eroche100

    2 years ago

    Thanks for sharing. You stated that you had success reading down to -80 deg C... Do you know if the Arduino is able to support the full range of the type K thermocouple (which I believe goes up to from -200 deg C to 1260 deg C)?

    Many thanks!

    1 reply
    0
    None
    unseen1980eroche100

    Reply 2 years ago

    Hi,

    I don't see why it can't read down to -196. Arduino acts like the middle man between the Max31855 and the display. Good luck!

    0
    None
    unseen1980

    3 years ago

    Sorry guys, some issues with azure. Link is up.

    http://www.devacron.com/k-type-thermometer-lcd-arduino-nano/

    2 replies
    0
    None
    jfm8561unseen1980

    Reply 2 years ago

    Thanks you for sharing your project! I am having an accuracy issues, in a 70 degree F room the thermocouple is reading around 107 degrees, and I did change read celsuis to read farenheight. Thanks in advance.

    0
    None
    Woodfield1jfm8561

    Reply 2 years ago

    I'm having the same issue. Did you find a fix?

    0
    None
    f-bone

    3 years ago on Introduction

    The code as found in Google cached page:

    (http://webcache.googleusercontent.com/search?q=cache:qrqakUdqLtQJ:www.devacron.com/k-type-thermometer-lcd-arduino-nano/+&cd=1&hl=el&ct=clnk&gl=gr)

    And the Arduino code which is making use of library Adafruit-MAX31855-library

    #include "Adafruit_MAX31855.h" 
    #include <LiquidCrystal.h>

    int thermoCLK = 3;
    int thermoCS = 4;
    int thermoDO = 5;

    // Initialize the Thermocouple
    Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO);
    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

    void setup() {
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.print("MAX31855 Init");
    delay(500);
    }

    void loop() {
    // basic readout test, just print the current temp
    lcd.setCursor(0, 0);
    lcd.print("www.devacron.com");
    lcd.print(" ");

    double c = thermocouple.readCelsius();
    lcd.setCursor(0, 1);
    if (isnan(c))
    {
    lcd.print("T/C Problem");
    }
    else
    {
    lcd.print("Temp = ");
    lcd.print(c);
    lcd.print("c");
    }

    delay(1000);
    }

    Would it be possible to increase the number of inputs to 4 on this project? I understand I'd need separate ADC for each thermocouple but how would I then interface these with the Arduino so the display shows T1: T2: etc etc?

    Cheers