Arduino Exhaust Temperature Sensor

May 14, 2017

When we started to have problems with the sea water pump on our engine, I was reminded how important an exhaust temperature alarm is. As our pump was failing, each time we’d take a big wave, air would enter the engine’s sea water intake and the failing pump wouldn’t prime. This happened a few times but I’m sensitive enough to sounds that I immediately caught the change in the exhaust sound. If I’d missed it, there would’ve been problems.

In the event of a raw cooling water failure, long before an engine with a wet exhaust system overheats, exhaust system components like the rubber exhaust hose or plastic water lift can start to melt. This could be a catastrophic failure.

There are commercially available monitors and alarms available. I was looking at the EX-1 from NASA Marine (pictured below)…

They run about $300 or so and I’m not wild about drilling a hole in the exhaust hose for the sensor. I thought I could do better, so I built my own using some readily available Arduino processor parts from Jaycar Electronics. (I probably spent about $100 for parts, and I only spent 30 or 40 hours building and programming the thing. Let me see… at ten cents an hour for my labor, the total cost was only about $104! But really, I did it for fun.) Here’s what I came up with…

Arduino Exhuast Temperature Monitor Installed
The non-contact IR temperature sensor in an improvised housing.
This is the IR sensor I used, made by FreeTronics.
Sensor installed, aiming at the metal exhaust elbow, below the point of water injection.

And as long as I had all that processing power (the Arduino processors are powerful little computers), I added a water and oil alarm. Since I planned to mount all this where it wasn’t easily visible, I used a piezo alarm to sound morse code signals for any failures:

W, dit dah dah, for water temperature high alarm
O, dah dah dah for oil pressure low alarm
X, dit dah dah dit for exhaust temperature high alarm.

If you should be foolish enough to want to do this yourself, here’s all the code for the project. Help yourself. Use it any way you’d like. (Keep in mind that I used some libraries that have their own reuse rules.) -Rich

Here’s the Arduino code: eng-alarm-6

UPDATE: On the way to New Caledonia our exhaust elbow started to clog up (again!). Before there was any overheating, I could see the problem indicated by a rise in my exhaust elbow temperature from it’s normal 100° F to about 130° F. I didn’t do anything about it until we got into Noumea other than run the engine at a little lower RPM. In Noumea, I cleaned out the exhaust elbow (again!) and also found some clogging in the heat exchanger (see this post about our raw water strainer).

Now I wish I’d mounted my little alarm where I could easily see it and not in the lazarette since it’s such a good engine monitoring tool.

Update: October 27, 2017

After a cruising season in the tropics (Vanuatu), here is how the alarm is working out.

1. I’ve had plenty of opportunities to test the water temperature alarm as my Yanmar 3YM30 can barely cool itself in tropical waters. I found I had a hard time telling which alarm was sounding when hear the morse code out of context – that is, with no preceding morse code letters. Was that a W: dot dash dash, or an O: dash, dash, dash? To solve this, I modified the code to repeat each alarm signal three times. That worked, but it might have been better to shorten the dot time.

I used the official morse code timing for dots and dashes in my code. I think by making the dot quite a bit shorter, the difference would be more obvious. This is in a define at the top of the code and is very easy to modify.

2. I really wish I’d made the display visible and not tucked it away in the lazarette. I mentioned this before. Along with this, I wish I’d used analog inputs for oil pressure and water temperature and displayed the pressure and temperature. It would have been better to be able to set the alarm threshold based on these analog inputs.

As it is, I used and oil pressure switch and water temperature switch wired into digital inputs. It turns out that the water temperature switch seems to sit in an area of the cooling system that gets a little air lock or air bubble and even though the engine isn’t overheating, the alarm switch closes. I might try to move the switch to another port, or find a switch with a higher set point, but making these analog inputs from the analog senders solves this issue and would also provide a nice display for the data. (That Arduino LCD shield is very nice and readable.)

3. N2K outputs would be nice but beyond the scope of what I wanted to do here.

Liked it? Take a second to support TwoAtSea on Patreon!
Become a patron at Patreon!