Introduction: DIY Electronic Derailleur

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

Background
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.

Motivation
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

Progress
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 http://nabilt.github.com/diy_eshift/.

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

Step 1: Tools

Dremel
Hammer
Philips Screwdriver
Pliers
2 Clamps
Wire cutter
Scissors
Large Metal File
Small Metal File
Saw
Electric Drill
Alan keys
Googles
Drill
Metal drill bits
Third Arm
Clear hocket tape
Gloves
Clear hockey tape - Best tape ever

Step 2: 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
Solder Fume Extractor
Multimeter
Desoldering wick

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

Parts
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
Potentiometer
Momentary push button x2 - Omron/B3F-4000
12 pin female pin headers x2
Velcro strips
016'' thick aluminum sheet
Zip ties
Nail
#3 Screw bolt x4
#4 screw bolt x2

Step 3: 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

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

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 http://www.utahmountainbiking.com/fix/rderailr.htm 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

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

Calibration
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:

int SERVO_STOP_LOW;
int SERVO_STOP_HIGH;


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

#define MANUAL_MODE 0
to 
#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.

Testing
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.

Make It Real Challenge

Runner Up in the
Make It Real Challenge