TR-01 DIY Rotary Engine Compression Tester




About: I like rotary engines and rotary engine accessories.

Starting in 2009, the original TR-01 v1.0, v2.0 and v2.0 Baro from TwistedRotors set the standard for hand-held, digital, rotary engine compression testers. And now you can build your own!

For 2017, in honor of the 50th Anniversary of Mazdas Rotary Engine and 20th year of SevenStock, I am releasing a DIY version of the TR-01. It's based on the massively popular Arduino line of micro-controller boards and super easy to build. There is also a broad price range of supported pressure transducers so you can make this tester as affordable as you like.

To program your tester you'll be using the Arduino IDE. I'm providing the code here completely free of any licensing or charge. Enjoy! Feel free to add features and modify it in any way you'd like. The only thing I ask is that you share your code and ideas with the community.

Step 1: Tools

  • Soldering iron
  • Solder
  • Wrenches
  • RTV
  • Teflon pipe tape
  • Computer with Arduino IDE installed (Arduino - Software)

Step 2: Parts

Here is a list of the parts you will need. These are my personal recommendations but I also list more affordable options as well. You do not have to use the links I provide, you may purchase these items from anywhere.


  • Recommended:
  • Cheap:
    • Arduino Pro Mini 5v Knockoff - eBay
    • PL2303HX USB to Serial Cable - eBay

Pressure Transducer (5v supply, 0.5v-4.5v -> 0-200psi scale) and Spark Plug Adapter

  • Recommended:
  • Cheap:
    • Sensor and Connector Pigtail - Ebay
    • 1/4” NPT Male to 1/8” NPT Female Adapter - Amazon
    • Spark Plug Non-fouler 14mm Gasket Seat (Dorman HELP! Part Number 42000) - Amazon
    • O-Ring Assortment - Harbor Freight

Step 3: Build It!

Now it's time to do a little electronics soldering. I think that this is a fantastic project for beginners but if you've never soldered anything then you might want to take a look at this tutorial from the great people at Sparkfun.

First you're going to build the tester. You'll start by soldering the right-angle header pins to your Arduino Pro Mini. This is how the FTDI Serial USB cable connects. Now solder the sensor connector to the Arduino. Use the pictures (sensor pinout and connector) to determine the wiring. The wire marked as "A" should be connected to the Arduino's "GND" (ground) pin, "B" is connected to "VCC" (5v) and "C" will be connected to "A0" (analog input 0, that's a zero).

Next you'll build the sensor module itself. If you're using the recommended Honeywell sensor then it's as simple as putting a bead of RTV sealant all the way around the threads of the sensor and then threading it into the Spark Plug Non-fouler. Tighten the two together with your wrenches and then wipe off the excess RTV that squeezed out. Set aside and let it cure for at least 24 hours.

If you're using the "more affordable" eBay sensor (or any other sensor with a 1/8" NPT end) then you'll need to thread the 1/4” NPT Male to 1/8” NPT Female Adapter onto the sensor with teflon tape and then RTV the short Spark Plug Non-fouler to the 1/4" end.

Add the o-ring and maybe some heatshrink tubing and you're done!

Step 4: Program It!

Connect the Arduino board to your computer using the FTDI cable.

Download the attached TR01_OS_v01.ino file and open it using your Arduino IDE.

In the "Tools" menu make sure you have the correct board, processor and port selected. If you're using an Arduino Pro Mini then my example picture will work for you except that your port may be different.

Open the "Sketch" menu and choose "Upload".

Step 5: Use It!

You'll want to refer to the FSM for your specific car to find instructions on how to perform a compression test. Generally though, you'll need to disable your ignition and fuel system, remove all trailing spark plugs and then insert pressure sensor module into the trailing spark plug hole of the rotor housing to be tested.

Once you've got the sensor installed then you'll plug the tester into it and then connect the tester to your computer using the FTDI cable.

Open the Arduino IDE and in the "Tools" menu double check that the "Port" option is correct and then click on the "Serial Monitor" option.

When the monitor opens you'll need to set the baud rate (lower left corner) to 19200 baud. Once that's done you should see the "TR-01 Open Source" splash text and then you are ready to begin the test.

Crank the engine over and your TR-01 will display the compression test results and calculated RPM in the "Serial Monitor" window.

Step 6: Bonus!

Here are some tips, recommendations and ideas:

  • I prefer the Arduino Pro Mini paired with a legit "FTDI Serial TTL-232 USB" cable (Sparkfun or Adafruit) because FTDI has an app that will allow you to connect the tester to your Android phone using an USB OTG adapter. If that's not a priority for you then any Arduino could be used.
  • The Adafruit FTDI Serial TTL cable is the better choice because it's connector has LED's built in so you can see active serial communication. I linked to the Sparkfun in the parts section so you can save shipping.
  • You should be able to find the Spark Plug Non-foulers at any auto parts store that carries the Dorman HELP! line of parts. Here in the U.S. O'Reillys, Autozone and Advance Auto Parts all carry them.
  • Some features you could add:
    • Bluetooth
    • WiFi
    • LCD Screen
    • Case
    • Printer
  • I plan to continue to update this Instructable and code as time goes on. I'll probably add support for an LCD screen first.
  • If you'd rather just purchase a complete, high quality, rotary engine compression tester then you can still get the TR-01 v2.0 Baro from my site.



    • Weaving Challenge

      Weaving Challenge
    • Pie Contest

      Pie Contest
    • Trash to Treasure

      Trash to Treasure

    16 Discussions


    Tip 10 months ago on Step 4

    This is the version for output in bar and normalization for 250rpm. Feel free to comment and give feedback about accuracy or any problems. I also included the dead-space compensation for the 13B MSP Renesis, if you plan on testing other engines, that should be modified.

    7 replies

    Reply 3 months ago

    Hey MiroB4,

    Thx for the sketch. When I try to upload your sketch to my pro micro, my pro micro looses connection to the pc and seems to freeze.
    I tried to upload the sketch to my nano and it worked fine.

    Do you got an idea why that happens with my pro micro? I wanted to use it with my android phone and have already soldered the sensor to it.



    Reply 3 months ago

    Hi, I'm not an expert in arduino, so I can't hell you unfortunately. I use the sketch on an pro mini and it works fine. Running it an android would be cool, but I never had this working either.


    Reply 5 months ago

    Hi, MiroB4

    What is "the dead-space compensation for the 13B MSP Renesis:1.039"?

    Please let me understand it.


    Reply 4 months ago

    So the dead space is between the sensor and the rotor. So use a measurement caliper to find the space from the rotor to the opening. Then measure the length of the spark plug non fouler.

    The distance between the plug and rotor is your dead space.

    The 250 rpm standard can be calculated by finding the dead space
    of the sensor(hollow space inside) and removing that from the
    compression ratio of the rotary in general to calculate each rpm we
    would subtract the dead space from the measurement and just use the
    mazda ecu graph to calculate the normalisation values.


    Reply 4 months ago

    The dead space adjustment should compensate for the volume change in the system once the sensor is added. As you add volume the meassured value is less than it would be without this extra volume.
    As an example:
    Renesis single face Vmax 654cc
    Comp ratio 8,5:1
    Vmin 76.94cc
    Example sensor volume (find yours) 2.85cc
    Vmin with sensor 79,79cc
    Cr with sensor 8.20 :1
    P(sensor) x 79.79cc = P(adjusted) x 76.94cc
    P(adjusted) = P(sensor) x 1.037
    So here you'd need to add 3.7% to measured values. Measuring the sensores volume can be done the by filing it with water and than measuring the volume or weight of that water.
    To be honest I'd like to get rid of this compensation, I'd prefer to add a compensation that gives values like the Mazda OEM tester (theses values are higher). I still need comparing values to find the relation though.
    The 250rpm normalization has nothing to do with that.
    As rpm increases also compression increases so when comparing values we need to define a rpm number, Mazda choose 250rpm.
    I just took the Mazda diagramm an fitted a non-linear fit to find the correct correction value depending on the measured rpm and included it in the code.


    Reply 4 months ago

    Thank you, learned something new today.
    If only one had access to a Mazda OEM Tester and could compare the results from both testers


    Reply 4 months ago

    Yes, that would be a real help! I have insrtuctions for the old OEM tester that seem to indicate that Mazda uses a 12,5% up-correction. The first measured values indicate a 11,5% correction which is close enough (might be to a different dead-sapce of the Mazda tester). Problem is I only have 1 measuremet with a direct comparison. I'd need more of those (with different compression values) to verify that the relation is linear and true.
    Easyiest would be to test the Mazda tester against a calibrated pressure source, e.g. 3-9bar, and extract the correction values. But once again a Mazda Tester is needed and a calibrated pressure source as well.


    Tip 6 months ago

    Thank you so much MiroB4 and John! I just completed this project. I have some tips/additions.

    Here is what I bought:

    - Arduino Nano (Atmega328P-AU MCU)

    - 1/8" NPT to 3/8" NPT (I had this turned and cut to M14x1.25)

    - M14x1.25 die (make sure it's right handed)

    - 200 psi 5 V pressure transducer

    - O ring that fits on the M14 thread (I recommend 12.5 mm or less)

    - A soldering iron

    - Optional: The attached little box for the Arduino that I created.


    - Solder the green wire to A0 on the board (you might need to extend it)

    - Solder the red wire to 5V on the board

    - Solder the black wire to ground on the board

    - Print the box (don't forget to put the tranducer wire through the hole before soldering)

    - Put the Arduino in

    - Download the Arduino software from here:

    - Select the appropiate COM port in Tools -> Port

    - Select the appropiate board and processor (Arduino Nano and Atmega328P (Old Bootloader in my case)

    - Upload the sketch

    - Done!


    10 months ago

    Hi John, I completed the code for bar usage and also added a 250rpm normalization fuction . How can I publish the code here?

    Thanks and best regards, Miro


    1 year ago

    Hi, first of all thanks for
    that super cool idea as I just installed a rebuilded engine in my RX-8
    and like to know how what I have now.

    I ordered most of the items
    straight away with ebay, but as I'm in Germany I couldn't get the Dorman
    Spark Plug Non-foulers, I think I can replace them with a 1/8 npt to
    M14x1,24 adapter that I found where the cheap ebay sensors fit in
    directly. When I had a look at your code I saw you take the sensor data -
    103 and divide it by 4.096 to convert the sensor readout to psi. Could
    you explain how you came up with these numbers? That would help me
    understand the calibration! Also I'd like to modify your code to have
    values in bar in the ending. I could just convert the psi value, but if I
    understood your calibration I could just convert to bar in the first
    place. Maybe you can also explain why you set the value to close the loop to 5psi? If you set a smaler value at this point, wouldn't be the values be more precise in the ending?

    Thanks a lot and best regards from Germany! Miro

    2 replies

    Reply 1 year ago

    Hey Miro, great questions! Let me wade right into those:

    I subtract 103 from the raw ADC (10bit, 1->1024) value because the sensor I'm using does 0-200 psi across 0.5-4.5vdc. So when the sensor is seeing 0psi then the ADC is seeing 0.5vdc and that comes out to right around 103.

    Now we can see that 0.5->4.5vdc = 0->200psi = 103->921 raw ADC. 818 ADC counts. So we divide that by 200 to give us 4.09 ADCperPSI. The 4.096 is because I did all this in a spreadsheet and there was some rounding going on. Doesn't cause a problem when you realize that 4.09 ADC per PSI means the micro can technically differentiate 1/4psi! That's overkill and a waste of LCD real estate in my opinion.

    Lastly, I close the loop at a drop of 5 psi. I'm looking for the absolute peak of the compression pulse but in testing I've seen up to 2 or 3 psi dips along the up compression stroke. Those are false peaks. With a value of 5 I don't get too many false peaks.

    I hope that helps you figure out how to convert the code to give you bar instead. Once you're done I do hope that you'll share the code here. :-)

    Good luck!



    Reply 1 year ago

    Once I have the required hardware to test my code under realistic conditions and outcome is satisfactory, I'll be happy to post the code here!

    Thanks for your inputs!



    1 year ago

    Can you clarify a bit on where do you screw in the sensor (on the engine)? Is it screwed in in place of the injector? If so, how do you make sure it fit's all engine types? Or is it only for one specific type of engine and you need to match the threads on the sensor with threads on the engine block.. Thanks

    Interesting. I had never thought of trying to use an Arduino for car diagnostics. Good idea.