A common Motorcycle maintenance task is to synchronize the throttle bodies on the engine to smooth out any rough idle. This is done by monitoring the vacuum on each throttle body and using the idle screw to make the adjustment.

While this sounds rather advanced, with a little knowledge, a few standard tools to access the engine, and a TBS tool (Throttle Body Synchronization); the maintenance item really isn’t that hard.

Now you can buy a tool or build a TBS tool using fluids and tubes (there are examples of this out there on the interwebs), but I wanted to use an Arduino and some electronics to build my own to do the job. This instructable describes my journey in making my own Arduino Throttle Body Synchronization shield.

Step 1: Research

A TBS tool is rather simple in what it does; it will measure the vacuum that each cylinder is actively producing when the engine is running.  To measure vacuum with an Arduino I needed to build a shield that would contain a vacuum sensor for each cylinder on my engine (4 in my case). 

There are many vacuum sensors available from your favorite electronics parts stores.  The interesting range that I need to measure is around -33 kPa (-4.78 psi).  This is the value that should be measured on my motorcycle on a single cylinder when the engine is warm and at idle.  You should consult a service manual for the specifics for your engine.  So I picked one that measured a range between 0 kPa to -50 kPa.

Then I needed to understand how to connect this to my engine.  The service manual helps here also, but I also found many great write ups on the web.  I just needed some standard engine vacuum hose with an inner diameter of 1/8th inch which will push onto a service nipple already present on the throttle body.  This same hose will directly push onto the vacuum sensor.  I found this in bulk at my local automotive store.  I needed four hoses each with at least 3 feet length so I could put the Arduino and sensors in a safe place.
Very nice! What was the part number for the sensors that you used? Also, any chance of sharing your code for either the Arduino or the PC? (Preferably both... :))
Thanks, <br> <br>Look for an update to the article in next day or so, I will include the part number for the sensor and few other requests. <br> <br>I am planning on having a follow-up Instructable that will include more of the software side of this project with explanations; where more of the code will be shared.
<p>Hi, Makuna,</p><p> Could you please share the PCB designs?</p>
<p>I have included a link to the PCB design, and all the source code. If you make it better, please contribute with GitHub.</p>
<p>Hi !<br><br>Well i continue to have problems with this setup.<br> I will get the &quot;make sure TBS is connected before...&quot; message everytime.I can see that the PC software is trying to communicate with the Arduino but then nothing happens. I have tried COM ports with single and double digits without success.<br>Windows 7 32bit and Windows 10 64bit is also something i have tried.<br>The PC software is built without a problem, aswell as the compilation and uploading of the Arduino program. I have a Arduino Mega with the Atmega communication circuit, not the FTDI. So i have ordered a TTL to USB with the FTDI circuit to connect directly to the Arduino to see if that solves the issue. Any other suggestions is wellcome.</p><p>\Patrik L </p>
<p>Hi Makuna, I thought this would be a nice project to sync the three throttle bodies on my Triumph Sprint 955i. I have fitted the sensors onto an arduino shield and plugged that into an Arduino Mega2560 board. The Arduino shield program runs nicely and I can see the output on the serial monitor. I have not been able to build the Windows TBS4 program. On Visual Studio10 Error messages are &quot;cant find MainWindow.xaml.cs and TBS4win.exe file. Are these missing from the zip files that you posted? Thanks On-on</p>
<p>it was there and for some reason I deleted it. In the spirit of Halloween I reserected it.</p>
Hi !<br>Have anyone solved the issue with the missing Mainwindow.xaml.cs file ?<br>This is the last step for me before i can actually try this project on my bike.<br><br>\Patrik
Check github again, this just got fixed.
is this syncing a maintenance issue or engine management?
<p>This work was aimed at maintenance. The concepts could be extended to management but this was not the goal.</p>
Okay, thanks! I was thinking this could help with an ITB idea I had for my car.
<p>I'am doing the same thing with other vacuum sensors. I have done also android UI. </p><p>It's a simple UI with 4 progress bars indicating pressure on each channel..</p><p>Can you please modify your library to support 3V sensors? </p>
just use logic converters.
<p>In the article there is a section that describes the relationship of the readings in voltages and the calculation to turn this into Kpa. If you are using a 3.3v Arduino this needs to be adjusted as its ADC range is 0v-3.3v instead of 0v-5v. </p><p>You will need to know what voltage your sensor outputs at the highest and lowest reading values. You can rely on the sensor specs for this; or attach a vacuum pump to a sensor and watch the ranges it provides as you increase and decrease the vacuum. </p><p> adc Value For 0 kPa = 4.6v * 204.8 = 942.08</p><p> adc Value For 50 kPa = 0.1v * 204.8 = 20.48</p><p>Then you can calculate the scale constant (kPa1000PerAscUnit) </p><p> kPa Per Adc Unit = (sensor range) / (Adc voltage range)</p><p>Inserting the numbers above, and due to using integers rather than floating point, scale by 1000, you get...</p><p> kPa 1000 scale = (50 * 1000) / (942 - 20) = 54;</p><p>Find these lines below in the code and adjust per new calculations for 3.3v instead of 5v and what ever range your sensors has and it should work.</p><p><br> const static long kPa1000PerAdcUnit = 54; // 0.05425347 per ADC unit;<br> const static long adcValueFor0Kpa = 942; // 4.6v<br> long kPa1000Value = ((adcValueFor0Kpa - adcValue) * kPa1000PerAdcUnit);</p>
<p>Hi, the project it's a little old, but very interesting, have you ever thought to integrate a couple of steady fixed stepper motors and a bit of logic to do the syncing work for you?</p>
<p>A couple questions:</p><p>1. When ordering the PCBs from Silver Circuits, did you just accept the defaults on the ordering page? <a href="http://i.imgur.com/QxUAIpj.png" rel="nofollow"> http://i.imgur.com/QxUAIpj.png</a></p><p>2. Can you suggest appropriate pin headers from digi-key? I think I have some spare headers that can with my arduino but I'd like to order more.</p>
<p>That is very cool.</p>
Wow, very nice!! <br> <br>Just a suggestion for future, what about using 4 rows of ~20 Led's. It will take some multiplexing but judging by your workmanship, you should have no trouble making this into a very portable unit! <br> <br>Thanks for sharing.
<p>I don't like the layout either as it doesn't fit the Arduino well. </p><p>The problem with something that works is that its hard to justify fixing the design and the cost to do it again. I made the files public in the hopes someone will contribute and grow the project.</p>
<p>When you say that it doesn't fit well you mean that the spacing of connectors is a bit off? I was just about to send your eagle file to oshpark, but it seems like I will have to learn Eagle first. ;)</p>
<p>The connectors fit fine, but the board doesn't fit over the Leonardo or Duo well, sticking out on one side and not using the full area on another.</p><p>If I was to redesign the board, I would start with a Leonardo/Duo sized shield layout and have the sensors in a 2x2 layout rather than the 1x4 that I had done.</p>
<p>This is still on my to do list. I have been busy making a GPS speedo but I will be starting this project in May.</p>
<p>Thought I'd share my project which aims to create a standalone/handheld version of this. <a href="https://github.com/synfinatic/carbsync" rel="nofollow">https://github.com/synfinatic/carbsync</a></p><p>PCB design is basically done (waiting to confirm some footprints before I send it out to OshPark for mfg). It's powered by a Teensy2.0 and has a LCD display so no computer required.</p>
<p>Hi Makuna,</p><p>Thanks for posting everything up on GitHub. I was curious to know if you've picked a license for your code/eagle design? </p>
<p>This is a great project and thank you for sharing! It's incentivized me to create my own, but with a small LCD screen for easy tuning without a computer.</p>
<p>Hi Makuna, I would like to buy one of these.</p><p>Is it possible? Please email me at malcolm.ragan@gmail.com</p><p>Thank you</p>
Sorry, I don't produce them yet. There hasn't been enough demand and one offs are expensive to produce and support.
<p>Is there a part number for your PCBs from <a href="http://www.silvercircuits.com/" rel="nofollow">SilverCircuits.com</a>? I was wondering if I could just order one based on your previous order rather than redesign my own.</p><p>I have all my other parts on order. </p>
Most Excellent!!! <br>I want to build one of these for my 2 cylinder BMW to help balance the throttle bodies on it for smoother operation. I look forward to you sharing your source code for both the Arduino and the PC. <br>Very nice build.
<p>Done! See last step for the links.</p>
Hi there, have I missed the update? I'd be happy to buy the schematics or a complete SHEILD and code from you. This would be for my own personal use?
<p>I have made all the files available on GitHub. While my shield was good enough, the layout could have better fit the Arduino. I am hoping that by making it available, someone else may improve it and contribute it back.</p>
Any modifications was done after 1 year? is possible to see final product?
<p>Minor changes so that it would calculate RPM (by reading pressure curves). While it works, its pretty noisy so I suspect something isn't right. The project has been sitting for over a year now as I just haven't needed it.</p>
<p>I would like to get a copy of the eagle cad files with the Vacuum sensor libraries if it possible. Does anyone have one they would like to share. I've been trying to find and import the vacuum components but cant find them anywhere. I'll admit defeat !</p><p>Please help! I bought the sensors from Digikey and would like to get my PC board fabricated soon but cant get the Eagle Cad figured out. That's an entire new project for me. Thank you, joe at Joegeek</p>
<p>Sorry it took so long. I thought I lost them. I now placed them on GitHub so others can contribute.</p>
<p>Hi there, I like your approach to an alternative for mercury/cylinder/fluid vacuum gauges.</p><p>I admit I'm a bit lazy for writing the code ; any chance sharing the software. I already ordered the sensors and an arduino board (Have a raspberry PI + did some jobs with 8 bit PICS and atmel mcu's) and the PCB creation is no issue at all.</p>
<p>Done! They are on GitHub so others can contribute and make this project better.</p>
<p>I love this idea. I have and old car with two twin body Solex carbs and I adjust one by one. This is so much better t see all four at the same time.</p><p>Can I get the Arduino and Windows Code so I can build one?</p>
<p>I have included a link to the PCB design, and all the source code. They are on GitHub so others can contribute and make this project better.</p>
<p>a very elegant solution to reading each cylinder's vacuum. well done</p>
<p>That is very impressive. Awesome Job. </p>
looks perfect for a custom boost gauge
The schematics and parts list both show 0.01 uf ceramic capacitors(surface mount 0603), but the link next to it takes me to C1608X7R1E103K (CAP CER 10000PF 25V 10% X7R 0603). Are these two items one in the same?
They are are the same. 10000 PF is the same as 0.01 UF. 10000 picofarad is the same as 0.01 microfarad. Its always strange when the manufacturers list a value one time using one value and then others use another value. <br> <br>
Thanks! I just got my parts in from Digi-Key and was wondering if you would mind sharing your eagle files. Me and a buddy are getting this bad boy going, and all we lack are the PCBs. Thanks!
Any more updates to this article. Could it be made to link bluetooth/wifi to your phone......to display results..... <br> <br>
Anything can be done with passion, time, and money. <br> <br>I looked into using a smart phone but the investment of time wasn't worth it yet. If I got some investment money that will change. <br> <br>The biggest issue with using a smart phone is which one? Andriod? iPhone? WP7? There is no one dev enviroment that works for all of them. Then how easy is to use serial bluetooth protocols (sometimes it just not exposed for app developers). Only Android supports USB to an Arduino so even a direct connect to a phone has limits (I don't own an Android phone either, or the custom Andruino to make this work). <br> <br>Too bad there isn't a cheap &quot;audio plug communications&quot; kit out there. (see credit card readers for iPhone as an example). <br> <br>Bluetooth and WiFi will require more hardware on the Arduino raising the cost. <br> <br>No easy answers. <br> <br> <br> <br> <br> <br> <br>
I would like to buy one set with the software from you.

About This Instructable


95 favorites

More by Makuna: Maker Faire Canopy Footing Mini Card Deck Holder Electronics Tips: Surface Mount Soldering By Hand
Add instructable to: