Cette semaine, on va voir comment utiliser un Yocto-RangeFinder pour régler les suspensions d'un VTT.
Les VTT modernes sont équipés de suspensions avant et arrière. Ces suspensions ont transformé le sport et ont permis d’apporter de la performance et du confort, rendant accessibles des endroits très accidentés. Mais pour profiter pleinement de ces suspensions, il faut impérativement les régler à son poids et à son style de pilotage.
Le premier réglage à effectuer, et le plus important, est le SAG. Le SAG vient du verbe anglais s'affaisser ("to sag"). Il mesure le pourcentage d'enfoncement des suspensions quand le cycliste monte sur le vélo. La plupart des vélos modernes sont conçus pour fonctionner avec un SAG entre 25% et 30%.
En théorie, cette mesure est très simple à faire : on fait monter le cycliste sur le vélo et on mesure en millimètres de combien la fourche et l'amortisseur s'enfoncent. En divisant cette valeur par le débattement de la fourche ou de l'amortisseur, on obtient le SAG exprimé en %. Dans la pratique c'est long et pénible.
La méthode traditionnelle est d'utiliser un O-ring que l'on pousse contre la partie coulissante quand le cycliste est sur le vélo, il faut ensuite descendre du vélo sans faire bouger les suspensions, et enfin mesurer la distance entre l'O-ring et la partie coulissante pour obtenir l'enfoncement en mm. De là, on calcule le SAG en pourcentage. Si la valeur est dans la plage désirée, tant mieux. Si ce n'est pas, on change la pression d'air ou le ressort de la fourche et on recommence la mesure.

La méthode traditionnelle
Comme vous le devinez, c'est long. De plus, il faut être deux pour faire cette mesure correctement : le cycliste qui est sur le vélo et une deuxième personne qui tient le vélo et qui déplace l'O-Ring. Il faut faire attention de descendre du vélo sans enfoncer la suspension. Il y a aussi le cas où il n'y a pas d'O-Ring sur la fourche ou l'amortisseur. Bref c'est pénible.
La version Yoctopuce
L'idée est d'utiliser un Yocto-RangeFinder pour mesurer l'enfoncement de la suspension. Ce module fonctionne en émettant un rayon laser infrarouge pulsé et mesurant le temps de réflexion sur le premier objet rencontré.
L'idée est d'imprimer en 3D deux supports que l'on peut fixer rapidement à la fourche ou l'amortisseur du vélo. Le Yocto-RangeFinder est fixé sur l'un des supports. L'autre support est une simple plaque qui sert de réflecteur pour le laser.

Les supports
Pour installer ce système, il suffit de fixer un support sur une partie fixe de la suspension et l'autre sur la partie coulissante. Il faut naturellement aligner les deux supports pour que le laser du Yocto-RangeFinder pointe sur le support "cible".
On n’a pas besoin de fixer ces supports à une hauteur particulière, car on va simplement mesurer la différence entre la position de la suspension à vide et la position avec le cycliste. Cependant, il faut les positionner à un endroit où les supports ne viennent pas taper contre le cadre, ce qui peut être parfois compliqué sur certains cadres.

Exemple de montage
Tous les modèles 3D des supports que nous avons utilisés sont disponibles à cette adresse.
Le Yocto-RangeFinder
Vous avez certainement noté que nous avons séparé le capteur du Yocto-RangeFinder. Comme avec la plupart de nos capteurs, il est possible de couper le board en deux et déporter le capteur. Dans notre cas, nous avons utilisé un câble Picoflex-U100 qui nous permet d'avoir un support plus compact et surtout un encombrement réduit. De plus le câble Picoflex est beaucoup plus souple qu'un câble USB, ce qui facilite l'installation.

Déport du capteur à l'aide de connecteurs Picoflex
Le code
Pour tester ce système, nous avons écrit un petit programme en Python qui prend en argument le débattement maximum de l'élément de suspension qu'on cherche à régler.
Ce programme regarde si un Yocto-RangeFinder est connecté sur le port USB. Il le configure en mode HIGH_ACCURACY et enregistre un callback qui sera appelé à chaque changement de mesure.
Dans ce callback, on calcule le SAG courant en utilisant la mesure la plus grande comme valeur de référence (0% de SAG). Le reste est une simple règle de trois pour calculer le SAG.
def __init__(self, travel, max_val):
self.travel = int(travel)
self.max_val = int(max_val)
self.sag = 0
def update(self, new_val):
# updates max value in case the application was started
# with the suspension compressed
if new_val > self.max_val:
self.max_val = new_val
mm_sag = self.max_val - new_val
sag = mm_sag * 100 // self.travel
if sag != self.sag:
self.sag = sag
msg = "SAG = %d%% (%dmm)" % (self.sag, mm_sag)
print(msg, end="\r")
Comme toujours, le code complet de ce petit programme est disponible sur GitHub et vous êtes libre de l'utiliser à votre guise.
La suite..
Nous avons surtout parlé du concept et de l'utilisation du Yocto-RangeFinder et du système de fixation, mais, dans un prochain article, on va améliorer la partie logiciel. Ça fait un moment que l'on aimerait tester un SDK et ce projet semble s'y prêter parfaitement.
On va donc réutiliser ce montage dans un prochain article.
