Skip to content

Instantly share code, notes, and snippets.

@moonwatcher
Last active September 26, 2018 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moonwatcher/71bb3c3bb9723c09c86c1d72dbb901cb to your computer and use it in GitHub Desktop.
Save moonwatcher/71bb3c3bb9723c09c86c1d72dbb901cb to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# indexing calculator for an alfine internal gear hub
# The SRAM 3x10 00.7018.068.004 10 speed shifter has a drum diammeter of 21.8mm, or a circumference of 68.4867mm
# The SRAM 11 and 12 gears speed shifter seem to have a 25.6mm drum diammeter, or a circumference of 80.42477mm
# Accounting for the 1.1mm of cable width by adding half the cable width to the radius or 1.1mm to the diameter.
#
# OD 22.9mm / C = 71.942 / 0.5C = 35.97 for the 10 Exact Actuation
# OD 26.7mm / C = 83.88 / 0.5C = 41.94 for the 11 and 12 X-Actuation
#
# since X-Actualtion should be 3.48mm of cable pull per gear on average even 12 movements are 41.76
# and should fit, although only 11 are needed for 12 gears.
# http://blog.artscyclery.com/science-behind-the-magic/science-behind-the-magic-drivetrain-compatibility/
import json
import math
def to_json(node):
return json.dumps(node, sort_keys=True, ensure_ascii=False, indent=4)
indexing = {
'cable diameter': 1.1,
'spool diameter': 25.6,
'hub': {
'sg s501': {
'indexing': [
{
'gear': 1,
'offset': 0
},
{
'gear': 2,
'offset': 5.49
},
{
'gear': 3,
'offset': 5.05
},
{
'gear': 4,
'offset': 5.18
},
{
'gear': 5,
'offset': 6.22
},
{
'gear': 6,
'offset': 5.05
},
{
'gear': 7,
'offset': 5.05
},
{
'gear': 8,
'offset': 5.05
},
]
},
'sg s501 sheldon brown': {
'indexing': [
{
'gear': 1,
'offset': 0
},
{
'gear': 2,
'offset': 4.9
},
{
'gear': 3,
'offset': 5.3
},
{
'gear': 4,
'offset': 5.0
},
{
'gear': 5,
'offset': 5.9
},
{
'gear': 6,
'offset': 4.7
},
{
'gear': 7,
'offset': 5.0
},
{
'gear': 8,
'offset': 5.8
},
]
}
}
}
indexing['spool circumference'] = math.pi * indexing['spool diameter']
indexing['corrected spool circumference'] = math.pi * (indexing['spool diameter'] + indexing['cable diameter'])
for name,hub in indexing['hub'].items():
hub['total pull'] = 0
hub['total angle'] = 0
for gear in hub['indexing']:
gear['offset angle'] = 360.0 * (gear['offset'] / indexing['corrected spool circumference'])
hub['total pull'] += gear['offset']
gear['absolute'] = hub['total pull']
hub['total angle'] += gear['offset angle']
gear['absolute angle'] = hub['total angle']
print(to_json(indexing))
{
"cable diameter": 1.1,
"corrected spool circumference": 83.88052385084748,
"hub": {
"sg s501": {
"indexing": [
{
"absolute": 0,
"absolute angle": 0.0,
"gear": 1,
"offset": 0,
"offset angle": 0.0
},
{
"absolute": 5.49,
"absolute angle": 23.56208460875071,
"gear": 2,
"offset": 5.49,
"offset angle": 23.56208460875071
},
{
"absolute": 10.54,
"absolute angle": 45.23576899384926,
"gear": 3,
"offset": 5.05,
"offset angle": 21.673684385098557
},
{
"absolute": 15.719999999999999,
"absolute angle": 67.46738980866323,
"gear": 4,
"offset": 5.18,
"offset angle": 22.23162081481396
},
{
"absolute": 21.939999999999998,
"absolute angle": 94.16250206120046,
"gear": 5,
"offset": 6.22,
"offset angle": 26.69511225253723
},
{
"absolute": 26.99,
"absolute angle": 115.83618644629901,
"gear": 6,
"offset": 5.05,
"offset angle": 21.673684385098557
},
{
"absolute": 32.04,
"absolute angle": 137.50987083139756,
"gear": 7,
"offset": 5.05,
"offset angle": 21.673684385098557
},
{
"absolute": 37.089999999999996,
"absolute angle": 159.18355521649613,
"gear": 8,
"offset": 5.05,
"offset angle": 21.673684385098557
}
],
"total angle": 159.18355521649613,
"total pull": 37.089999999999996
},
"sg s501 sheldon brown": {
"indexing": [
{
"absolute": 0,
"absolute angle": 0.0,
"gear": 1,
"offset": 0,
"offset angle": 0.0
},
{
"absolute": 4.9,
"absolute angle": 21.029911581580777,
"gear": 2,
"offset": 4.9,
"offset angle": 21.029911581580777
},
{
"absolute": 10.2,
"absolute angle": 43.77655063920896,
"gear": 3,
"offset": 5.3,
"offset angle": 22.746639057628183
},
{
"absolute": 15.2,
"absolute angle": 65.2356440898016,
"gear": 4,
"offset": 5.0,
"offset angle": 21.45909345059263
},
{
"absolute": 21.1,
"absolute angle": 90.5573743615009,
"gear": 5,
"offset": 5.9,
"offset angle": 25.321730271699302
},
{
"absolute": 25.8,
"absolute angle": 110.72892220505798,
"gear": 6,
"offset": 4.7,
"offset angle": 20.17154784355707
},
{
"absolute": 30.8,
"absolute angle": 132.18801565565062,
"gear": 7,
"offset": 5.0,
"offset angle": 21.45909345059263
},
{
"absolute": 36.6,
"absolute angle": 157.08056405833807,
"gear": 8,
"offset": 5.8,
"offset angle": 24.89254840268745
}
],
"total angle": 157.08056405833807,
"total pull": 36.6
}
},
"spool circumference": 80.4247719318987,
"spool diameter": 25.6
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment