Simple pyrometer on a display

2 minute read

Build a Pyrometer without using conventional gauges

Pyrometers are useful in monitoring diesel engines in that more fuel equals more heat. Too much fuel creates smoke and temperatures high enough that it can melt aluminum pistons.

Off the shelf kits can be had, however the intention of this project is to eventually stack multiple gauges in a single housing. A 20x4 LCD was chosen for this reason.

This first version is relatively simple and can be built for around $60 with a 3d printer and your favorite filament. Basic soldering skills and the ability to use the Arduino IDE are required. The thermocouple should be placed towards the outlet of an exhaust manifold or at the outlet of the turbocharger. If the element is placed in the turbocharger’s outlet the temperatures there will be lower than the temperature of the manifold. Placing the probe in the manifold runs the risk of the probe melting or becoming damaged and being ingested by the turbocharger.

Here’s the working prototype on the workbench:

The 3d printed housing: This will fit older ford f-series trucks from the 80s-90s, it may fit other vehicles.

For the power a lm7805 linear regulator can be used. This is version one to get it working around a deadline therefore I used a usb cable and charger tied into the vehicle’s ignition switched electrical system. V2 will have more features such as scale switching and added buttons for the bluetooth amplifier that’s located behind it. The wiring of the display with I2c backpack and MAX6675 are pretty straightforward.

initialization screen:

Lastly, Installed and in operation:

Code:

#include <Wire.h>
#include <SoftwareSerial.h>
#include <max6675.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD I2c backpack address to 0x27 for a 20 chars and 4 line display

// MAX6675 connections: 
int thermoDO = 3;
int thermoCS = 4; 
int thermoCLK = 5; 

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

// degree symbol: 
uint8_t degree[8]  = {140,146,146,140,128,128,128,128};

void setup()
{
Serial.begin(115200);
    lcd.init();
    lcd.backlight();
    lcd.createChar(0, degree);
    //delay here to let the thermocouple stabilize. 
    delay(500);
    lcd.setCursor(6,0);
    lcd.print("Pyrometer");
    lcd.setCursor(4,1);
    lcd.print("initializing");
    delay(2000);
    lcd.clear();

    }
void loop()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Exhaust Temperature");

// uncomment for Celsius 
lcd.setCursor(0,1);
lcd.print(thermocouple.readCelsius());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print("C ");

// uncomment for Farenheit 
lcd.setCursor(0,2);
lcd.print(thermocouple.readFahrenheit());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print('F');

delay(1000);
}

Links: