afficheur moto

10Nouvelle moto égal nouvelles idées….
Suite à l’achat de ma nouvelle moto, j’ai voulu concevoir un système me permettant de connaitre le rapport de boite de vitesse engagé (point mort, 1ère, 2ème, 3ème; etc…). Et puis, de fil en aiguille, je me suis dit qu’il me fallait quelques infos supplémentaires à afficher: l’heure, la température ambiante, et pourquoi pas la vitesse….

beaucoup d’infos à afficher et par conséquent beaucoup de capteurs et autres systèmes externes à connecter à un arduino….
De prime abord, j’ai pensé à ces solutions:
Pour la vitesse: un capteur a effet de champ sur la roue arrière ou avant, avec gestion des interruption coté arduino
Pour l’heure: une horloge temps réel type DS1307
Pour la détection du rapport engagé: soit un capteur dans la boite de vitesse, soit…(attention cela se corse) deux capteurs: un sur l’allumage et un sur l’une des roues . On divise ensuite les deux frequences obtenues et le ratio resultant est unique pour chacun des rapports de la boite de vitesse. Par contre, il faut détecter, alors, chaque appuie sur le levier d’embrayage puisque cela fausse les calculs (en débrayant, plus de liaison physique entre le moteur, la boite et les roues, le régime moteur tombe… et tout calcul devient impossible). Ce qui, sur route n’est pas gênant, mais qui rend le système complétement inutile en milieu urbain où l’on joue beaucoup de l’embrayage à faible vitesse….
Pour la température: un éternel capteur onewire type DS18S20 ou DS18B20

Ce qui nous donne au mieux 4 capteurs/systèmes, au pire 5… cela fait beaucoup quand l’on pense qu’il faut en un ajouter avec l’afficheur à gérer !!
Donc, essayons de simplifier la chose…
Et pourquoi ne pas utiliser un petit capteur GPS pour récupérer l’heure et la vitesse? Les prix ont fortement baissé (autour d’une trentaine d’euros) et l’emploi est très simple du fait du standard NMEA de formatage des trames de données renvoyées par les GPS (connecté à un port série). De plus, une très bonne bibliothèque pour arduino existe: TinyGPS
Ok, c’est déjà ça de gagné, deux éléments externes ont été réunis en un, et le tout sans avoir à tirer des fils partout sur la moto, ni de chose à étalonner….

Nous l’avons vu plus haut, la détection du rapport engagé risque de ne pas être une partie de plaisir…Et, c’est là où un obscur dieu grec de la mobylette entre en scène…. Je m’explique: ma moto d’origine coréenne (bon ça va, elle est pas cher, mais elle roule bien.  hein !!) est issue du sous-traitant historique de suzuki et partage beaucoup de pièce avec la production de la marque japonaise… Oui c’est bien, mais pas suffisant..certes !!
Je continue…sur la version plus récente de ma moto, une injection a été greffée et le capteur (vissé sur le coté de la sortie de boite de vitesse) qui donne l’info « point mort » au tableau de bord et à l’injection a été remplacé par une nouvelle version (issue de la banque suzuki) dont la configuration laisse présager quelque chose de sympa pour mon aventure. Un petite photo valant mieux qu’un long discours, je vous laisse constater par vous même.

3Voici donc les deux capteurs, à gauche le nouveau modèle, à droite l’ancien. Le premier constat: il y a beaucoup plus de contacts sur le nouveau!!! Alors, comment cela fonctionne?

Dans la boite, un picot en cuivre situé sur un disque, tourne d’une vingtaine de dégrées lorsque que l’on monte ou l’on descend un rapport et décrit, en gros, 3/4 de tour sur une boite cinq. Sur l’ancien modèle, le picot ne peut faire contact qu’à un seul endroit: quand la boite est au point mort, ce qui met le seul fil du capteur à la masse et permet d’allumer la lampe verte (neutral) du tableau de bord. Sur le nouveau, un rapide constat permet de voir qu’il est au départ prévu pour une boite six (ce qui prouve bien qu’il vient d’une banque d’organes et qu’il a été ré-adapté au modèle injection en n’utilisant que deux fils). Je me suis donc procuré le nouveau modèle avec pour objectif de le désosser et de voir ce qu’il serait possible de faire avec.

Et c’est là, où le dieu grec de la mobylette intervient une deuxième fois !!!! J’ai pu souder un câble à 6 fils au nouveau capteur, noyer le tout dans du silicone haute température et le remettre en place sur ma boite en continuant à utiliser le fil du point mort pour mon tableau de bord….
13

Tous les éléments sont maintenant présents pour commencer la réalisation. Un premier test sur une plaque d’essai avec un petit afficheur LCD 2X16 m’a permis de tester la cohabitation des différents éléments:
1

Bien évidement, mon bureau ne se déplace pas à 98 km/h !!! C’était un test d’affichage lol. Par contre l’heure indiquée est bien en provenance du GPS. Ce petit afficheur était très lumineux mais malheureusement sa largeur était un obstacle à l’intégration entre les deux compteur du tableau de bord. Je me suis donc tourné vers un afficheur OLED carré d’1,5 pouce de diagonale.

Pour traiter le signal en provenance de la boite de vitesse (mise à la masse de l’un des cinq rapport + point mort) j’avais la possibilité de dédier six pins de l’arduino (chaque pin étant configuré en pullup pour la détection de la mise à la masse).
Les premiers tests sur plaque d’essai ont été concluants, mais malheureusement cela n’a pas fonctionné in-situ. En effet la capteur baigne dans l’huile moteur et le picot qui fait contact avec le capteur n’est pas forcement un très bon conducteur.
La solution consistait donc tout comme pour la lampe « point mort » du tableau de bord à faire passer un courant suffisamment fort dans le capteur (quelques mA à minima contre les µA de l’arduino en direct).
Je suis donc passé par un classique un pont diviseur de tension. Avantage, un seul pin de l’arduino utilisé comme ADC (mesure d’une tension 0-5V), le pont ,par sa configuration, se chargeant de faire circuler l’intensité suffisante pour rendre le montage opérationnel. Comme je voulais conserver la lampe point mort, j’ai ajouté une diode pour ne pas perturber le pont (en evitant des retours de tension), et comme je suis prudent, j’en ai ajouté une sur chaque retour à la masse du pont afin d’isoler chaque élément.
Pour obtenir une alimentation un peu plus stabilisée, je suis passé par un 7810 (qui fourni 10V à partir des 12.8V-13.8V de la batterie), avec une division de base par un peu plus de deux cela donne 4.7V max injecté dans l’arduino….Par la même occasion le 7810 fourni également l’alimentation de l’arduino (ceinture et bretelles)
8bis

Un petit peu de soudure plus tard:
4

avec le concours de mon imprimante 3D un petit boitier à cacher sous la selle:
7

ce qui donne en vidéo 🙂

L’animation de démarrage avec en parallèle l’acquisition des données GPS (1 min max)

Passage des rapports sur la béquille centrale et affichage en mode jour (le passage jour/nuit se fait en fonction de l’heure et d’une table coucher/lever du soleil cf code source plus bas)

le source est disponible comme d’habitude sur github:
https://github.com/Chnalex/arduino/blob/master/tb_bord_moto.ino
Il est relativement volumineux après compilation (93% des 28ko d’un arduino micro) du fait du stockage en mémoire flash des bitmaps qui servent afficher les nombres et autres valeurs. En effet, l’afficheur OLED basé sur un chip SSD1351 est piloté par la bibliothèque GFX d’adafruit et celle-ci ne contient qu’une font 5×7 pixels qui s’avère extrêmement laide quand on la zoom (pas d’antialiasing et gros pixels moches)