Introduction: DIY Electronic Derailleur

Picture of DIY Electronic Derailleur

If you just want to get building move on to step 1.

This instructable is part of a larger project to build the ultimate bicycle computer, which you can read about on my blog. It will show you how to build an electronic rear derailleur for Shimano parts. I've tested it on the RD-4500 Shimano Tiagra, but this method should work with similar derailleurs. Rather than pulling the shift levers, you press a button to get to another gear.

1. Once both derailleurs are electronic you get automatic trimming, which means no more chain rub!
2. Easier/smoother shifts. OK so it's not super hard to change gears with mechanical levers, but going electronic means you get an accurate shift every time.
3. Cheaper than the commercial alternatives. Like thousands of dollars cheaper...
4. When your gear changes are combined with other metrics like your heart rate, gps, speed and incline you can improve your ride by finding your weakness. Were you on the correct gear on that incline?
5. It's a conversation starter.
6. Adding electronics to anything is always cool!

Skills Required
- Basic soldering and electronic skills. See Sparkfun's Soldering 101
- Very basic Arduino knowledge like how to upload a program. See Sparkfun's beginning embedded electronics
- Basic bike mechanic skills like a removing derailleur, if you do your own bike maintenance you be should OK

So far we've got the rear derailleur shifting and plan to do the front so look for future instructables for updates and new features. At the time of writing the software does not turn off the servo to conserve battery power because there is a chance of gear slippage. This means you will have limited ride time. A fix for this coming soon so follow my instructables account.

Open Source
Up to date Arduino sketch, schematics, Fritzing diagram, bill of materials and CAD diagrams can be found on the project page

Future plans
- EEPROM wear levelling
- Waterproofing and better a enclosure
- Better cable management
- Machined servo bracket

Step 1: Tools

Picture of Tools

Philips Screwdriver
2 Clamps
Wire cutter
Large Metal File
Small Metal File
Electric Drill
Alan keys
Metal drill bits
Third Arm
Clear hocket tape
Clear hockey tape - Best tape ever

Step 2: Parts

Picture of Parts

You can find most of these parts at your local hardware or electronic shop. Harder to find items have links to online stores.
Soldering stuff
Soldering Iron
Solder Fume Extractor
Desoldering wick

Arduino Pro Mini
USB to Mini-USB connector
FTFI USB to serial adaptor
5V Lipo boost converter
3.7V 6A Lipo Battery
FTDI USB connector
10K resistors x2

Universal Ram Mount
HiTEC HS-225MG Servo
Project box - 2.1'' x 3.5'' x 1.25''
Protoboard - About half the size of a breadboard
Solid core wire - 22 gauge
5 feet of stranded wire - 22 gauge
3 wire ribbon wire the length of your bike
Single pole changeover switch rated for 10V minimum
Momentary push button x2 - Omron/B3F-4000
12 pin female pin headers x2
Velcro strips
016'' thick aluminum sheet
Zip ties
#3 Screw bolt x4
#4 screw bolt x2

Step 3: Electronic

Picture of Electronic

We recommend prototyping on a breadboard before making modifications to your bike. Copy the Fritzing diagram to a breadboard and see if you can make the the servo move then start soldering using the protoboard.

Tip: Adafruit sells a protoboard that looks like a breadboard called the Perma-Proto. When you are done testing your circuit on a breadboard just transfer the design without any modifications. They also sell one that fits in a Altoids mints size tin.

Step 1:
Take the Protoboard and create the circuit using the Fritzing diagram and schematic.
Note: Always wear googles while soldering or doing machine work.
Picture 1 and 2

Step 2:
Connect the wires through the back and put jumpers on the connections that attach to the servo and buttons
Cut the wires from the back and make the connection according to schematic.
Picture 3 and 4

Step 3:
Solder wires to the center pin and one other pin of the switch. Make sure to put heat shrink on the wire first. Attach the Molex pin terminal to one pin. Drill a hole in the top of the project box and mount the switch.
Picture 5 and 6.

Step 4:
Route the wires through holes in the side of the project box then attach the other to the positive output of the Lipo Boost converter.
Picture 7

Step 5:
Attach the negative output of the boost converter to another Molex terminal. Attached the wires with Molex pin terminals to the Molex connector as showin in Picture 8. Make sure the orientation matches the connector on the protoboard.

Step 6:
The end result should look like Picture 9. Connect the Lipo battery to the boost convert and the Molex connector from the switch to the protoboard. After checking for shorts with a multimeter turn on the power.
Picture 10

Step 7:
Program your board by installing arduino on your computer and loading this sketch

Turn on the your board and make sure your servo functions to your button presses 

Step 8:
Using heat shrink solder two wires to you buttons after flattening the pins. Use a heat gun or the barrel of a soldering iron to shrink the heat shrink. Do this for each button
Picture 11 and 12

Step 9:
Tape the buttons in a comfortable position on your handlebar. Twist the wires to get them out of the way.
Picture 13 and 14

Step 10:
Attach Molex pin terminals to each wire for each button. Attach one wire from each button to a Molex connector.
Picture 15

Step 11:
Route the wires on your handlebars using hockey tape.
Picture 16

Step 12:
Test the circuit so far pressing the buttons.

Step 4: Metal Work

Picture of Metal Work

Step 1:
Take the Aluminum sheet and print out the template 
Picture 1,2,3

Step 2:
Cut the bracket out of the aluminum sheet according to template using a metal saw and bend the bracket tab according to picture
Picture 4 and 5

Step 3:
Cut out the mount arm from the aluminum sheet
Picture 6

Step 4:
Cut holes into the mount arm (according to template) and attach the servo wheel to it using #3 bolts. Cut any excess bolt length after attaching a nut. 
Picture 7, 8

Step 5: Mounting

Picture of Mounting

Step 1:
Mount the servo to the bracket using #3 screws such that the tab is away from the servo head
Picture 1

Step 2:
Take out your old derailleur and clean it reapplying grease when your done.  
See for instructions
Remember to tape your gear cable to the bike.

Step 3:
Since the servo is not strong enough to move the derailleur we must remove the spring. NOTE: This means your derailleur will not without a servo. I do not believe it is possible to remove it without cutting it so use your dremel or heavy duty wire cutters for this. This is difficult so have some patience and wear goggles.
Picture 2

Step 4:
Attach the servo and backet to the derailleur as pictured using a #4 screw.
Picture 3 and 4

Step 5:
Attach the servo wheel and mount arm on the servo and screw in the other arm of the mount arm to the derailleur using the old bolt. Make sure the servo can move freely through the entire range of motion.
Picture 5

Step 6:
Test to make sure that the derailleur moves when pressing the buttons

Step 7:
Remount the derailleur
Picture 6

Step 6: Wiring

Picture of Wiring

Step 1:
Strip the servo wires and the ribbon cable. Solder them together with heat shrink.
Picture 1 and 2

Step 2:
Measure and cut a length of ribbon cable long enough to reach the front of the bike. Connect Molex pin terminals to the other end of the ribbon cable and insert them into the 3 pin Molex connector. Make sure the orientation is compatible with the the connector on your protoboard.

Step 3:
Route the ribbon cable to the front of the bike following the original cabling using hockey tape. Secure the original cable to the frame with tape if you don't want to completely remove it from your bike.
Picture 3 and 4

Step 4:
Place the buttons comfortably near the derailleur lever on the handle bar and velcro it in place
Picture 5

Step 5:
Attach the controller to your bike and connect the wires to the servo and button using the Universal Ram Mount
Picture 6 and 7

Step 7: Calibration and Testing

Picture of Calibration and Testing

There are a few variables that need to change in the Arduino sketch depending on which position the servo was in when you installed it. These are:


They determine how far the servo can move. To find these change

#define MANUAL_MODE 0
#define MANUAL_MODE 1

This allows you to control the movement of the servo using a potentiometer connected to pin 3. Upload the sketch and open the serial terminal. Find the values by moving the servo to its limits and update the variables.

Change MANUAL_MODE back to 0.

You may also want to play with the servo_step_size variable. It determines how much the servo moves on each button press.

Close everything up and ride the bike for a while making sure the gears and chains are attached well.

Test out the up and down gear shifts to see if they adjust to new gears. If not, attach the Arduino to your computer and reprogram the values.

Look for future instructables and the project page for updates.


vikramd14 (author)2017-02-18

vikramd14 (author)2017-02-18

sir plz send pdf files this project

dave1971 (author)2016-10-28

Hi, Can anyone recommend how to translate the schematic (pin mappings) for the Arduino Pro Mini to the Arduino Uno (using breadboard). I want to get the Uno + breadboard working before buying the protoboard and ProMini. I need help a bit because I am new to the Arduino and electronics, but am keen to get this project working.


grgshany (author)2015-08-28

very good man great work welldone

dave1971 (author)2014-11-16

Has anyone actually been able to solve the battery life issue ?

If so then that would be great to hear how.

stib (author)2014-04-16

I've been tinkering around with an arduino and an old rear derailleur trying to implement something like this, but wasn't sure of the best type of motor to use. I'm thinking of a worm gear rather than a pushrodand servo, as it will hold its position without power. Does anyone have any recommendations about where I can find motors that are lightweight and powerful enough? It's a bit tricky trying to estimate how much torque you need to shift under load, so I'm just guessing as to how much grunt the motor needs.

RoemerTimbre (author)2014-03-08

I just want to ask if their are other factors that can change gears automatically besides to the bike speed, pedalling rate and pedalling torque?

lcsc (author)2013-05-16

Such a great hack! Congratulations! I'll do this in my commuter bike! Thinking in house this inner seat tube and with 18650 cells in pararael custom mount. Congratulations!

softenersreviews (author)2013-03-02

thank you ,
for the help,to make this very interesting project.

The Dark Lord (author)2013-01-29

Thank you for this!!!
It's exactly what I was looking for.

BillBiker (author)2012-10-31

Will say this is really incredible! Yes I know this is WAY too far in advanced but how about programming it around a smart phone app(s) that would take out alot of the problems with your GPS, Terrain inclination, heart rate, and other factors!?!?! Just a thought to help you out :) . By all means I know this right now is in it infancy.

mr fat (author)2012-09-13

Awesome idea and I look forward to reading your Blog!

gnikolovienis (author)2012-08-01

great project!!!!
do you have in mind for the front derallier?
i would like to see a video with this working.
can you fine tune without pc just in case it happens somethin on your ride?
great!!!!if you add the front derallier i will built it the same time!!

charlie_r (author)2012-06-12

Love the work you've done on this!

Here's an idea for when you get the front der added to the mix:

Since you are using an arduino, how hard would it be to program in a gear sequence so when you hit the upshift or downshift buttons it progresses to the next gear in a logical sequence, moving either or both the front and rear ders?

Also, since my ride is a home built trike with a mid-drive, I have 1 front on a triple, a 6 cog mid, and a 7 cog final. Could this be programmed to account for all three?

I would definitely be interested in building something like this!

Thanks for the 'ible!

brgt40 (author)charlie_r2012-07-14

Very cool project!!

Shifting in sequence is very doable but I question its usefulness on the road at least for the way most bikes are geared and the way I ride.

First, although, mathematically, there may be 21 gears, there are usually duplicates. You would not want to waste time shifting to a gear that is marginally different. Ok, you need to (and can in fact) program the arduino to bypass one or the other.

Secondly, when I shift I usually change only one derailleur. To clarify, say I have a triple chain ring. On the ride, I find a sweet spot using the middle ring. UpHill coming - I switch to the smaller front or a larger rear but not both on one shift. Don't need to - one or the other improves my situation and usually close enough. If not close enough, I tweak (probably with the derailleur I did not change initially). Chances are my changes are not sequential at all.

So maybe a programmed set of "my favs" gears would be more useful whether accessed sequentially or directly.

If we really were to put in the bells and whistles, Version 17.1 would chose the gear for you based on your cadence, heart rate, the incline, your power output and your fitness level and length of ride. It also stores your ride history and uses predictive logic to determine the gear and when it will shift.

But I am happy with the promise you've shown so far! Good job. Very inventive.

nabilt (author)charlie_r2012-06-12

> how hard would it be to program in a gear sequence so when you hit the upshift or downshift buttons it progresses to the next gear in a logical sequence, moving either or both the front and rear ders?
Not difficult at all. A few people have requested this so I'll add it to the feature list. The only difficulty is making installation easy with all of these new configurations.

> Could this be programmed to account for all three?
Definitely. The next version has an LCD so each user could choose their configuration on the screen.

charlie_r (author)nabilt2012-06-12



tiros76 (author)2012-06-10

Nice Instructable!

I can tell you the front derailleur is much easier to control with a servo than the rear. I have been working on a similar project for some time . Have you had any problems with derailleur ghost- shifting over large bumps? That  was one nut that I was having difficulty cracking without leaving the servo powered up and eating batteries.

I look forward to seeing your updates and test results.

moraant (author)tiros762012-06-12

maybe the inclusion of a wormgear would hold the derailleur in position when the electronics are sent to sleep between shifts? Perhaps something along the lines of this would optimise battery power conservation

I think this is great and should provide endless funin the dark winter nights when riding is impossible...

well done to all!

nabilt (author)tiros762012-06-10

Thanks for the kind comment. Good to hear the front derailleur will be easier to modify. I've seen your project a while ago and looks like you've made a lot of progress lately. I'm really impressed how professional it looks especially for someone who started tinkering with electronics in 2011!

> Have you had any problems with derailleur ghost- shifting over large bumps?
I have. I'm thinking of adding some tension or a normally closed brake to hold the derailleur in place to fix this.

Maybe we should chat and see if we can help each other out. Email me at nabil dot tewolde

chris.brent (author)2012-06-07

The Shimmano system makes sure it moves the derailleur when the chain lines up with the shift ramps on the cogs. This means you can stand up and pedal as hard as you want while shifting and the shift is still smooth. I have no idea on how they manage this. It doesn't look like they have an optical sensor on their. Anyway, just an idea if you're looking for upgrades. Great work! I've been wanting to try something like this myself.

nabilt (author)chris.brent2012-06-10

Thanks :)

Grinhill (author)2012-06-08

Great work!!!
Referring to the schematic, could you please explain futher the use of the transistor to switch the servo power? I've only seen this done with the base being used to control the load. Thanks.

nabilt (author)Grinhill2012-06-10

This is a mistake in the diagram. The transistor I'm using has a different pinout than the one in the Fritzing. I wired it so the breadboard view was correct, but this meant the schematic was incorrect. Thanks for the heads up. I'll get on that.

arick (author)2012-06-09

How can I hold position on the servo,
for example I want to shift into Gear 5 and hold that ?

nabilt (author)arick2012-06-10

In the current implementation the servo is always on so that should hold whatever gear you're on. In the future I plan on designing a mechanical fix.

gtoal (author)2012-06-08

Put a force sensor on the pedal and program it to change gears automatically ;-)

espdp2 (author)2012-06-08

VERY cool, enough that I may spend some of my limited free time to try this. Went a little crazy with the text boxes... :-)

nabilt (author)espdp22012-06-08

Hahahah, yeah I totally did.

JohnBPrice (author)2012-06-06

Instead of fixed step sizes, I would think an array of ideal positions would be better, since the best rear derailleur position changes depending upon the front derailleur. When in manual mode, it could tweak the current position for the gear combination.

You could also install a temporary set of +/- buttons on a removable tether near the gear shift buttons so that the derailleur positions for each gear could be adjusted on the fly, while riding. Once the positions are ideal for each gear the tether could be removed.

nabilt (author)JohnBPrice2012-06-06

This is a great idea. Once I get the front derailleur working I'll add this feature.

laxap (author)2012-06-07
That's a cool idea!

For an anti-theft system:
  • install a teeth-less gear,
  • at shutdown, servo will select that one,
  • implement a secret sequence of presses to unlock, or a keypad.
nabilt (author)laxap2012-06-07

Great idea! I was also thinking to have the computer removable so nobody steal. This could also act as another form of anti-theft.

davmaldo (author)2012-06-07

So my thoughts are, first, this is already really fancy, but if you wanted to get EXTREMELY fancy, you could input your specific sprocket sizes into the program, then add a gyroscope, and some way to measure speed onto the system. Then, (idk if the arduino can get this fancy) you could program the computer to automatically shift depending on the incline of the road and your current speed, using its knowledge of the sprocket sizes to find the ideal gear ratio. With some trial and error, the system could ensure you are at an optimal gear ratio and there for optimal (maximum) speed at all times.

jeffeb3 (author)davmaldo2012-06-07

If you did this with a IOIO board and an android phone, you could use the android's accelerometers or GPS + topo map to get decent results, I think. That would be a fun project. Maybe I'll try this next summer.

davmaldo (author)davmaldo2012-06-07

Maybe add an accelerometer so it does not shift while the chain is on heavy load?

nabilt (author)davmaldo2012-06-07

These are great ideas, which I'm in the process of testing. I'm not sure I would like my gears to change for me, but this seems to be a feature lots of people want. Thanks for your input.

yaly (author)2012-06-07

I was previously thinking of doing that but have an lcd dashboard and stepper motors all controlled by an arduino uno and an atmega 32 or pic16f877a. There was no gps idea but I won't include it as it is expensive in our country. can it be made with steppers? and if so can you upload another code for the stepper one?
I try to get a new derailleur and use the old one for this project. and what servo size are you using?

yaly (author)yaly2012-06-07

PS: I only have a rear derailleur ok.

nabilt (author)yaly2012-06-07

> can it be made with steppers?
Maybe, but I wouldn't recommend it. They tend to have less torque compared to an equivalent size servo. They are generally used when you need high accuracy.

> and what servo size are you using?
I am using the medium size HiTEC HS-225MG Servo.

moraant (author)2012-06-07

Great instructable. I am thinking of something similar myself. I think the front derailleur will be a harder nut to crack because of the forces on the chain esp when going up hill or when out of saddle.

I also thought of using a worm gear from a guitar machine head and then send the arduino to sleep to save battery consumption.

Anyway keep up the good work.

LesB (author)2012-06-07

When you do the front derailer, if you make it workable with a 3-ring derailer then you will be ahead of Shimano and Campagnolo, since thier electronic shifters work ONLY with 2-ring front derailers.

Super cool project!

cjoliveira (author)2012-06-07

Awesome! You could add a dynamo and charge controller so you can ride an unlimited time.

Good work.

iglitchhalo2 (author)2012-06-07

Di2 envy?

Adambowker98 (author)2012-06-06

Finally a way to fix my bike! My derailleur has been messed up for quite some time now because it has not been shifting properly. Thanks for posting!

sofiadragon1979 (author)2012-06-05

Do you think that this will work w/ a velomobile?

I am just getting into the Arduino myself (still haven't gotten it in the mail, I ordered it last week lol) & I can't wait to get into the work w/ it & start programing & posting projects for people to use.

All things considered this is a wonderful project & I can't wait to try it out myself.

nabilt (author)sofiadragon19792012-06-06

> Do you think that this will work w/ a velomobile?
Not sure. Did a quick google search and it looks like the gearbox is in a case. Maybe you could connect a servo to the cable lines.

sofiadragon1979 (author)nabilt2012-06-06

I was thinking of something along those lines, thanks for the incite, that's quite helpful. Keep up the good work.

SCHLEPIC (author)2012-06-05

This is wicked awesome! Did you consider mounting the battery pack and Arduino on or near the seat tube at all? That would reduce a bit of the aerodynamic drag and might keep the aesthetics super sleek. How fast does the servo move into its new position once a button is pressed? Is there a way to increase/modify that speed? How well does the servo handle switching the gears while the chain is under load from pedalling? Great work. I look forward to seeing more!

About This Instructable




More by nabilt:DIY Electronic Derailleur
Add instructable to: