Un datalogger embarqué pour une Honda Civic EJ9 convertie à l'E85 : du capteur au tableau de bord.
de roulage enregistrés
trajets enregistrés
intervalle médian entre deux lignes de log (version a2.9.4)
d'écart entre la consommation calculée et la pompe, sur 14 cycles plein à plein (6 083 km)
Données au 28/09/2026 · recalculées le 28/09/2026
01 · Genèse
Comprendre ce qui se passe sous le capot quand on passe à l'éthanol.
Première Civic, une EJ9 phase 1.5 à moteur D14A4, sans prise OBD standard. Pour y accéder, j'ai découvert HonDash, une application développée par un Slovaque, avec un dongle dédié. J'y ai appris sur le tas l'injection, les capteurs, l'allumage piloté : en lisant des forums, en testant, en comparant des valeurs en temps réel.
Seconde Civic, une EJ9 phase 2 à moteur D14Z2, avec prise OBD. TorquePro n'arrivait pas à y stabiliser la consommation : bus K-Line lent et requêtes mal ordonnancées. En repensant à la logique dédiée de HonDash, l'idée a germé : construire mon propre système, avec mon propre ordonnanceur.
02 · Choix techniques
Chaque brique, et comment elle a évolué.
Le projet a d'abord été maquetté pour valider l'idée, puis consolidé brique par brique. Chaque ligne se lit de gauche à droite : ce qui a servi à maquetter, ce qui tourne aujourd'hui, ce qui vient ensuite.
Le téléphone est déjà là : aucun matériel à racheter. Et une version Android, puis iOS, pourrait un jour être vendue.
Un format de sortie stable, décrit par un contrat, pour que l'analyse ne casse jamais en silence.
Le bus K-Line est lent : chaque requête compte.
Ce que l'OBD ne donne pas : météo, températures réelles, bientôt l'éthanol.
Une pile rapide à monter pour maquetter et tester, validée avec Gemini avant de démarrer.
Speed-density : le carburant se déduit du régime, de la pression d'admission et d'une courbe d'efficacité volumétrique.
03 · Évolutions
De la version « fonctionnelle à 90 % » à la réécriture.
Dates d'installation lues dans le journal de l'app (événements de mise à jour).
04 · Erreurs
Ce qui a raté, et ce que j'en ai retenu.
Au début, j'ai mis l'app à jour en la désinstallant puis en la réinstallant, au lieu d'une mise à jour qui conserve les données. Une partie des logs a survécu, pas leur continuité. Le « 0,56 L d'écart sur environ 1 000 km » annoncé en v1 était cité de mémoire : il attend d'être recalculé sur le trajet qui subsiste.
Une mise à jour ne passe jamais par une désinstallation. Exporter avant toute intervention, et ne publier un chiffre qu'avec ses données.
En cadençant deux lectures, j'ai retiré sans le voir ce qui temporisait la boucle. Résultat au roulage du 28/07 : 626 à 695 lignes par seconde au lieu de 2, soit 1 817 380 lignes en 48 minutes et 460 Mo pour un seul trajet.
Quand on retire un délai, chercher ce qui en dépendait. Les mesures étaient justes : seules les lignes étaient dupliquées.
En cas d'échec de lecture, le décodage renvoyait « 0 ». Chaque coupure injectait un zéro indiscernable d'une vraie mesure, dans tous les logs historiques.
Une valeur de repli prise parmi les valeurs valides est une corruption silencieuse. D'où les trois états : mesuré, échec, non applicable.
Le modèle semblait surestimer la consommation de 13,3 %. La comparaison incluait 13 jours roulés après le dernier plein. Entre pleins consécutifs, l'écart tombait à +1,9 %.
Un bilan de matière ne vaut que sur un cycle fermé.
05 · Données de roulage
Où tourne le moteur, et ce que la courbe en fait.
Les deux graphiques partagent le même axe des régimes. La zone de croisière, de 1 250 à 2 000 tr/min, est surlignée sur les deux.
Régime moteur en tr/min.
Courbe VE : pseudo-VE du code de l'app, extrapolée de la physique et recalibrée sur les pleins. Le pic de VE coïncide avec le couple maximal (4 800 tr/min, pas de la table : 250) ; la puissance maximale est à 6 300 tr/min.
06 · Consommation
Le calcul, confronté à la pompe.
Pour chaque cycle entre deux pleins complets, les litres calculés par l'app sont comparés aux litres réellement achetés, lus dans le journal des pleins. Les pointillés marquent chaque nouvelle version de l'app.
Chaque barre couvre la durée d'un cycle. Au-dessus de zéro, le calcul surestime. Bande claire : objectif de ±2 %. Survoler une barre pour le détail, ou l'espace entre deux pointillés pour la version en service.
Grâce au suivi en direct et à des logs enfin fiables, j'ai modifié ma conduite en ville et dans les bouchons. Résultat : environ 0,5 L/100 km de moins qu'à l'époque où je loggais avec Torque, avant mon application.
Ce gain compare deux périodes de conduite, avant et après l'application. Il ne mesure pas l'écart calcul / pompe du graphique ci-dessus. Le détail de la mesure fera l'objet d'un article dans le Lab.
07 · En cours
Le tableau de bord Python
Le support principal de l'analyse : import des trajets dans DuckDB, puis quatre usages visés.

Le score d'éco-conduite
Il ne note pas une conduite dans l'absolu. Il répond à une question : combien ai-je consommé, par rapport à ce que j'aurais dû consommer ? « Ce que j'aurais dû » est un calcul de physique : masse, surface frontale, pneus, distance, dénivelé, vitesse.
Le tronçon est la seule échelle qui isole la conduite : deux passages sur la même voie partagent le relief, la route et les feux.
08 · Limites et problèmes connus
La courbe d'efficacité volumétrique est extrapolée de la physique, puis recalibrée sur les pleins. Elle est juste en moyenne sur un plein, pas à chaque instant. Un passage au banc, moteur d'origine, doit donner une VE physique exploitable.
La vitesse estimée dépend du rapport engagé, et le rapport se déduit de la vitesse. Solution prévue : un capteur de position de rapport fait maison.
Test de séparation à l'eau : 10 mL d'eau pour 100 mL d'E85, précision de ±1 %. Environ 0,085 € par test, soit 3 € par an au plus, mais près de 4 L de déchets par an, eau et carburant. D'où le capteur E85 prévu.
Le récepteur externe GNS3000 donne une position par seconde. Suffisant pour la distance, limite pour la dynamique fine. Un récepteur plus rapide n'est pas exclu.
Je n'écris ni le C++ de l'ESP32, ni le Kotlin de l'app, ni le Python du tableau de bord : le code est produit par IA générative. Mon travail est ailleurs : l'architecture du projet, la physique du moteur et la donnée brute. Cahiers de décision, audits, dictionnaire des colonnes, pièges documentés : c'est ce pilotage qui fait tenir un projet de cette taille, et c'est ce savoir-faire que CarLog démontre.
09 · Feuille de route
La route, étape par étape.
Liste d'étapes non exhaustive, appelée à évoluer.
- Version alpha a3.0.0 : nouveau système de stockage dans l'app Android et passage en Kotlin Multiplatform.
- Installation définitive de l'ESP32 et de ses trois capteurs.
- Passage au banc, moteur d'origine, pour une VE physique exploitable.
- Sondes importantes : capteur E85 et sonde lambda large bande.
- Mise en fonction étendue de l'alpha du tableau de bord Python.
- Valider les maths et la physique, puis une bêta plus ouverte : tests sur plusieurs Honda avec des bêta-testeurs.
- Tableau de bord : fin du maquettage et bêta ouverte.
- Sniffer du faisceau côté ECU, sur STM32 ou ESP32, pour atteindre au moins 5 Hz.
- Capteurs supplémentaires.
- Version de production de l'app.
- Version pro : carte industrielle sous Linux et application sur mesure intégrée.