Saturday, October 10, 2015

DIY Arduino-powered 3D Printed Automotive Exhaust Gas Analyzer

I have done a lot of research and experiments on internal combustion engines (ICE) and most of them are themed for emission reduction and promoting better fuel economy. Until now, I have no way of knowing how effective my experiments are. Other than having to drive it for a week (to gauge fuel usage), I used to rely on my body senses (e.g. acceleration, smell, heat, noise, etc.) to approximate the results.

This is of course not a reliable way of collecting data, not to mention that it might even get effected by placebo effect.

Buying a commercial gas analyser is way beyond my budget. I finally constructed one for my own use.

I use three gas sensors; carbon monoxide, hydrocarbon, and oxygen sensor. The fourth one is a simple thermometer. The link on where I got all this is listed at the end of this post.
For the body, I sketch it using SketchUp, export the stl file, and printed on my FFF 3D-printer. The material of choice is ABS as PLA is too brittle for my purposes. The print took six hours to complete with 200 microns of resolution.

Since this will be operated at a relatively low pressure, for leak-free operation, I use hot-glue to secure all sensors.

I design it so that it can be fitted with off-the-shelf PVC pipe. This allows more flexibility. Each of the gas sensors are spatially separated by 120 degrees to give it an equal gas exposure.
All of the sensor need to be preheated by at least five minutes prior usage. Oxygen sensor consumed most of the supply current. Total power consumption is just under 1A at 12V. I use an SMPS power adapter I found lying around on my table.

To display the readout, I use a cheap compatible arduino uno and a 1602 LCD enclosed in a laser cut jiffy box. Using build-in library, the program is just a few ADC readings and LCD print function. I also included serial UART data transmission for easy data logging.

Testing 3d printed nut on my oxygen sensor.
The following is my failed attempts:

I had to stop printing as the warping getting worse over time.

Parts overview.

Close up: layer delamination and print warping.

Another view.

Broken piece.

Dimension error.
After some iteration, I manage to get a working model.

The model being printed.

This is my attempt of coloring my print using permanent marker. It turns out to be quite effective.

Mounting all of the sensor.

Side view.

A PVC pipe mounted.

Test sketch working!

Enclosed in a jiffy box.

Tested on my dad’s diesel car. Open-mouthed smile
Utilising an arduino might be overkill for such a simple task. My only reason of using it is because it is cheaper to use compared to my DIY version of PIC MCUs board (that includes voltage regulators, external UART, reset button, etc.). The only way I can make my DIY PIC MCU dev board cheaper is to build it in large quantity, which is not really something that I want to dive into right now.


Anonymous said...

well done. Thanks for sharing. I am thinking of making an an O2 sensor for my DIY propane burning swimming pool heat exchanger. I will look into the O2 sensor you used.

Afdhal Atiff Tan said...

Thank you :)

Deangelo Lucero said...

They were extremely helpful and provided all the right information and Auto Renting Tutors at a reasonable price. Being able to rent a moving truck the next day was a long shot but they had one and it was great - reliable, clean, and came with all the tools we needed. Excellent customer service! I would highly recommend them

matty said...

Have you found a way to check the calibration of the sensors?

MRVyshnav said...

Awesome Job Mate I have a Industrial Pollution Monitoring System and send data to the cloud to be done

Achitha Bodhaka said...

How about the accuracy of oxygen sensor? Normally it need to be near by exhaust manifold to hold some exhaust gas pressure. Other wise readings would not be accurate.

Afdhal Atiff Tan said...

@Achitha Bodhaka

You are right, it is not accurate.
Back then, I was more interested in the relative change rather than the absolute values.