Aller au contenu. | Aller à la navigation

Outils personnels
Se connecter
Mes Inventions Pour la Semaine
Microprocessor without Interlocked Pipeline Stages
Mecs Impatients et Présomptueux S'abstenir
Marteau Imprimante Pince Scie
Million d'Instructions Par Seconde

Navigation

Vous êtes ici : Accueil / Membres / Antoine V. / Agent pour motocyclette

Agent pour motocyclette

Une interface pour interroger les niveaux de carburants, d'huile, les températures... de la moto (ici ce sera une Kawasaki VN 800)

Agent pour motocyclette
  • Démarrage
  • 2014-06-16
  • 2014-12-31

Étapes du projet

Début de réflexion (12 juin 2014)

Quel protocole utiliser ? Quel logiciel utiliser ?

Au départ je pensais utiliser SNMP. Mais après quelques essais et recherches, j'ai remarqué que la gestion du SNMP par arduino n'est pas correctement implémentée. J'abandonne donc l'idée d'utiliser ce protocole. J'ai ensuite regardé du côté d'XPL. On m'a ensuite orienté vers les possibilités du bus CAN.

Pour communiquer entre l'agent et le manager, j'ai décidé d'écrire un programme en python.

Quel matériel utiliser ? 

  • Le montage doit être étanche, petit, résistant au différences de températures et aux vibrations.
  • La moto peut fournir du 12V continu, non stable.
  • La moto doit pouvoir émettre ses données, mais aussi les conserver dans une mémoire interne quand le client n'est pas disponible.

Je suis donc parti sur l'utilisation d'un Arduino MEGA et d'un shield wifi, qui a la possibilité d'embarquer une carte mémoire (type micro SD). Pour les capteurs, voir dans la fiche complète du projet. De plus, j'ai décidé de l'ajout d'un tableau de bord (affichage cristaux liquides) pour indiquer certaines valeurs en direct.

Rapport d'activité au sein du fablab

Introduction

La Kawasaki VN 800 A, modèle de 1996, ne possède aucune jauge, et très peu d'information sur le moteur. Les seuls retours sont un voyant rouge en cas de surchauffe, le "N" vert (position point mort de la boîte de vitesse) et un autre voyant rouge en cas de niveau d'huile faible.

À l'heure des ordinateurs de bords très perfectionné affichant jusqu'à la pression des pneus, j'ai décidé d'installer un système permettant d'obtenir diverses informations sur la moto, et pourquoi pas de lancer un diagnostique.

La question qui se pose est donc : comment  créer, installer, et utiliser un système embarqué permettant d'analyser et de renvoyer les informations concernant la partie mécanique et électrique de la motocyclette ?

L'hypothèse est de programmer un microcontrôleur recevant les informations de divers capteurs et les renvoyant vers un logiciel qui se charge de les journaliser et de les afficher.

Méthode et recherches

Le protocole de communication

Afin de communiquer entre la moto et le client, il faut un protocole simple, reconnu par de nombreux logiciels (cela facilitera le choix ou la programmation du client). Un simple fichier texte pourrait faire l'affaire, mais il faudrait définir un format interprétable : json ou xml peuvent remplir cette fonction. Ensuite, la programmation du client sera simple mais seul ce client pourra interpréter les donnés. Le projet se veut très compatible, afin d'être facilement étendu. Je n'ai donc pas retenu cette solution.

Il existe un protocole dédié au monitoring du matériel : SNMP pour Simple Network Management Protocol. Ce protocole, qui en est à sa version 3, est largement utilisé dans le monde de l'industrie et est bien documenté. Différents clients existe (e.g. Nagios), et des librairies pour les langages de programmations existent (e.g. : pysnmp pour Python, ruby-snmp pour ruby, SNMP pour PHP, ...). Il restera a écrire une MIB spécifique. Une MIB est Management Information Base, c'est à dire une table de traduction qui permet de faire correspondre un identifiant numérique de la sonde (OID) à un nom lisible et mémorisable par un humain.

Malheureusement, aprés plusieurs tests avec l'arduino, j'ai remarqué que la gestion du SNMP n'était pas trés bonne. Des recherches sur internet m'ont confirmé ces bugs et les différents projets de librairies SNMP pour arduino semblent abandonnés.

Seconde idée, je suis parti sur l'utilisation du protocole XPL. Le protocole XPL est très utilisé en domotique, des explications sur ce protocole sont disponibles sur le site "Planète Domotique". Des librairies pour arduino existent et il existent également des librairies pour différents langages de programmationm, y compris python.

Le client logiciel

Le matériel embarqué

  1. Microcontrollers :
    1. Arduino MEGA
    2. Arduino WiFi Shield

  2. Capteurs d'états : ils renvoient si le module est allumé ou éteint. En pratique un photocoupleur multiple.
    1. Feu de position
    2. Feu de croisement
    3. Feu de route
    4. Feu arrière
    5. Feu de stop
    6. Clignotant AV-D
    7. Clignotant AV-G
    8. Clignotant AR-D
    9. Clignotant AR-G
    10. Klaxon
    11. Ventilateur de radiateur moteur
    12. Contact moteur
    13. Contact mode "parking"
    14. Moteur en marche. Ici pas de photocoupleur mais simple test (si tours par minute > 0, alors moteur en marche).
  3. Relais : Un relais par éléments ci-dessus. Ainsi il est possible d'activer depuis l'arduino chaque élément et de récupérer le résultats.
  4. Capteurs analogiques : ils renvoient une valeurs en fonction d'un paramètre variable (niveau, température, ...)
    1. Position de la moto : module GPS : Adafruit Ultimate GPS Breakout ;
    2. Vitesse : depuis le GPS ou si pas de signal compteur sur roue arrière ;
    3. Tours par minute du moteur : bobine à côté de la bougie, qui génère un courant (courant de Foucault). 1 étincelle vaut 2 tour moteur ;
    4. Débit d'essence : difficile, il faudrait un débit mètre qui mesure à partir de 1 mL... ;
    5. Niveau d'essence : Chemical eTape Liquid Level Sensor -- Ne fonctionne pas, la forme du réservoir ne permet pas d'utiliser ce capteur ;
    6. Température du circuit de refroidissement (max 130 °C) : capteur TMP36 au niveau du la durite d'eau sortie moteur ;
    7. Température et humidité extérieure : capteur DHT22 au niveau de la fourche avant ;
    8. Température d'huile (max 130 °C) : capteur TMP36 au niveau de la durite d'huile sortie moteur ;
    9. Températures d'échappement (max 800 °C) : Thermocouple K avec adaptateur MAX31855, au niveau de la sortie d'échappement du cylindre, maintenu par un collier en acier ou de la bande thermique (plus esthétique) (un module par cylindre) ;
    10. Niveau d'huile : aucune idée, il faudrait un capteur qui "voit" le niveau d'huile sur la fenêtre du carter ;
    11. Tension de la batterie : simple pont diviseur de tension, R1 de 120 Ω et R2 de 60 Ω devraient faire l'affaire pour passer de 15V à 5V ;
    12. Intensité de la batterie : capteur de courant à effet hall, ACS714 par exemple.

Résultats

Version 0.1 (Septembre 2014)

Sur GitHub : https://github.com/AntoineVe/ArduiMoto/releases/tag/v0.1

Je suis parti en voyage en Espagne, plusieurs centaines de kilomètres, avec cette version. Les informations s'affichent bien, l'affichage est clair. Apparemment, lors des premières secondes les différentes mesures sont erratiques.

Le boitier-relais des clignotants ne fonctionnant plus (pièce à 40 €), j'ai décidé d'utiliser l'arduino pour les faire clignoter. L'arduino pilote un relais G5V-2 quand j'actionne le bouton du clignotant sur le guidon de la moto. Ce système fonctionne très bien.

Analyse

Version 0.1 (Septembre 2014)

L'écran devrait être placé sur le guidon, pour cette version il était simplement placé dans le porte carte de la sacoche réservoir. Pour l'instant l'affichage des information est interressant mais n'apporte aucune automatisation de la moto, par exemple un réglage du starter.

Discussion

Version 0.1 (Septembre 2014)

Au MIPS, on m'a orienté vers le bus CAN. J'adapterais mon programme à ce protocole pour les prochaines versions.

Licence d'utilisation

Ressources utiles

Kawasaki VN 800 Par Antoine V. — Dernière modification 13/06/2014 15:20
Vue globale de la moto Kawasaki VN 800
Mots-clés associés : , , , ,