This is by no means a robust solution or proper full-range RPM counter. It only works properly down low in the 0 — 2000 RPM range, and has only been tested on a 1986 V4 Honda VF500F. That said, it may be a helpful start if attempting to build an electronic RPM meter for your bike or — like I did — you simply need a one-off non-robust solution to help sync your carburetors, set idle speed or adjust the pilot screw (one that adjusts your lean/rich ratio for idle).
Before you start
Please be aware that this circuit could be made a lot simpler if you decide to power your Arduino direcly off of your bike's power supply (12 — 14V). In this case you will only need the voltage divider and none of the 14-to-5V circuitry. Not all Unos will like it so please do consult the manufacturer of your particular Uno to make sure you do not fry it! I went down the 14-to-5V route only because I wanted to dip my toes in simple PSU design.
What you're going to need
- 1× Arduino Uno
- 1× 2-by-16 LCD screen and controller (eg. HD44780)
- 1× Breadboard
- 4× female pins with a 4×1 2.54mm raster housing
- 1× 5V voltage regulator, eg. LM7805
- 1× USB type B plug for powering Arduino (end of a no longer needed printer USB cable used).
- 2× 100uF 16V capacitors (reduce ripple on the 5V rail)
- 1× 1uF 50V capacitor (reduce ripple on input)
- 1× 20000 Ohm resistor (voltage divider circuit)
- 1× 11000 Ohm resistor (voltage divider circuit)
- 3× crocodile clips (make connecting the setup to your bike easier)
- 7× male pins (make inserting wires easier)
- 1× diode (so that you can see if the board is getting power)
- 1× 220 Ohm resistor (for the above diode)
Step 1: Get the LCD Working
- Assemble the LCD and controller
- Connect LCD to Uno: VCC to 5V, GND to any of the GND pins, SDA to A4, SCL to A5
- Download the Arduino IDE for your OS from its homepage and install
- Download the LiquidCrystal library from its homepage and install
- Download the MsTimer2 library from its homepage and install
- Make sure your LCD is working by following any of the many LiquidCrystal guides on the web, possibly using i2c_scanner if your LCD controller is using a strange I2C bus address and remembering to adjust the contrast pot on your LCD controller
Step 2: Wire Up the Board
The picture is more or less self-explanatory. The idea here is to regulate DC voltage generated by the bike's alternator (around 12 — 14 volts) down to a steady USB-friendly 5V and have this voltage on the breadboard's designated power rails.
In addidtion to that I used a 220 Ohm resistor and diode to provide visual indication of the board getting power.
More importantly, you need to prepare a voltage divider circuit that will convert ~12V RPM signal provided by your bike to a more Arduino-friendly 5V signal. Here I used a 20000 Ohm resistor and a 11000 Ohm resistor; you can pick and choose your own values using any of the voltage divider calculators on the web. Simply bear in mind that you should go for higher values to limit the current flow.
Step 3: Connect Arduino
We now make use of the power supply we set up in the previous step... yay! To make sure everything is working connect power-in using crocodile clips or bare wires to any voltage source providing 7 volts or more.
Connect bike RPM signal OUT (yellow wire on my board) to pin 5 on your Arduino.
Step 4: Program Your Arduino
Load the attached file to your Arduino IDE, change pin assignments as required if you opted for other pins and upload the program to your Arduino.
Step 5: Connect RPM Counter to Your Bike
Possibly the hardest part and one I cannot help you much with. You need to find the signal wire that goes from ignition coil packs to tachometer on your bike. A good way to make sure you got the right wire is disconnecting it and checking that RPM on tachometer go down to zero and upon touching this wire to its connetor RPM indicator goes alive again.
Once you have the right wire turn off the engine, connect breadboard power-in to the bike's battery terminals, and attach RPM-in wire (using a crocodile clip or twisting them together) to the one you found above. Please make sure this connection is insulated from and does not touch any metal parts on the bike (ground)!
Step 6: Troubleshoot And/or Enjoy
It may be that ignition coils on your bike send a signal every two strokes. You will see if this is the case immediately when you start the engine as RPM will be half of what they should be on idle. If this is the case you will need to modify the program to account for that.
Other than that: enjoy and have a good time doing what you needed and RPM counter for!