Rouler à l'E85 version Arduino

La première version de ce boitier a été réalisée il y a bientôt dix ans et à l'époque avec un microcontrôleur PIC16F819. J'ai reçu de nombreux messages me faisant part de la difficulté pour compiler le programme sous MPLAB (probablement à cause de la version trop ancienne utilisée à l'origine) et un fichier HEX qui ne fonctionne pas (peut-être la configuration des fusibles du PIC).

Ce boitier a parfaitement fonctionné plusieurs années dans deux véhicules successifs ( une OPEL ASTRA et une RENAULT MEGANE) et pourrait encore servir.

Le microcontrôleur 



Ne pratiquant plus les PIC depuis un moment je vous propose une mise à jour de ce boitier avec un microcontrôleur Atmel Attiny84 utilisant l'IDE Arduino plus simple à utiliser pour les novices.



Son format DIP14 et son prix ridicule en font un parfait candidat pour de l'électronique embarquée. Je déconseille fortement l'usage d'une carte Arduino toute faite (UNO, NANO, etc...) ces cartes sont beaucoup trop fragiles et ne résisteraient pas aux conditions extrêmes sous le capot d'une voiture (températures, vibrations, humidité).

Electronique

Le schéma est le suivant :


Il y a peux de différences par rapport à la précédente version, les résistances de pull-up d'entrées qui permettent la simulation de la présence des injecteurs pour le calculateur sont à présent des 100 Ohms ce qui permet pour la plupart des véhicules de ne pas avoir de voyant défaut qui s'allume sans que cela ne chauffe de trop.

Selon les véhicule vous aurez peut-être à adapter la valeur vous pouvez choisir dans le tableau suivant :

R (Ohms) P (W)
10 5
15 3
22 2
33 1,5
47 1
100 0,5
220 0,25
470 0,25
560 0,25
750 0,25




Attention au delà de 5W ça chauffe vraiment beaucoup.

J'utilise un inter à bascule 3 positions pour sélectionner le mode (SP95, Mix, E85) d'ou la présence du pont diviseur (R2, R4) que vous pouvez retirer si vous préférer un potentiomètre de 10kOhms linéaire par exemple.

Pour la mesure de température j'utilise une CTN de 2.2kOhms que je place en contact avec le moteur. Si vous préférez utiliser la CTN du véhicule il suffit de ne pas souder R1 par contre vous aurez peut être à adapter le programme à la valeur de celle-ci.

Le typon est le suivant :


Vous pouvez l'imprimer à l'échelle (300dpi) pour la réalisation du CI.

Et l'implantation des composants :




Ne pas oublier de souder le strap.

Vous pouvez télécharger le projet Kicad complet ici

Le plan de câblage est le suivant :





L'alimentation 12V est prélevée sur un plus Injecteur, les pointillés correspondent aux fils de commande injecteurs à couper.


La programmation Arduino




Le programme Arduino peut-être téléchargé ici

Le lien https://letmeknow.fr/blog/2016/09/09/tuto-programmation-dun-attiny84-avec-un-arduino-uno/ donne toutes les explication pour configurer l'IDE Arduino affin de pouvoir compiler le programme pour l'Attiny84 et explique également comment téléverser le programme dans la mémoire du microcontrôleur en utilisant une carte UNO comme programmateur ISP.


Ci dessous les paramètres à configurer dans l'IDE Arduino, bien choisir l'option "Clock: "8MHz (Internal)". Puis utiliser "Graver la séquence d'Initialisation" pour configurer correctement l'Attiny84.
Vous pourrez ensuite compiler et téléverser votre programme.








Vérification du fonctionnement

Normalement l'Attiny est alors prêt à être utiliser. Vous pouvez tester son fonctionnement sur le breadboard en ajoutant une led et une résistance de 220Ohms entre la patte 5 et la masse.

En reliant la patte 12 et 13 à la masse, après un reset la led doit clignoter lentement (a 1Hz) 10 secondes puis rester allumée fixement (mode SP95). La patte 12 au 5V, après un reset la led doit clignoter lentement 10 secondes puis clignoter rapidement 6 fois, 2 secondes de pause etc.. (mode E85, 1 clignotement correspond à 5% d'enrichissement supplémentaire). Avec 2.5V sur la patte 12 (pont diviseur) le clignotement rapide est de 3 fois (mode mix).

Avec 5V sur la patte 13 vous déclencher le mode starter et la led vas clignoter plus de fois (variable selon la tension appliqué et seulement durant les 5 premières minutes).

Si la led clignote trop lentement c'est que l'horloge de l'Attiny84 n'est pas bien configurée (1Mhz à la place de 8MHz), vérifier les options de l'IDE Arduino et utiliser "Graver la séquence d'Initialisation" pour configurer correctement l'Attiny84.

Si vous possédez un générateur de fonction et un oscilloscope, vous pouvez envoyer avec le GBF sur les quatre entrées de l'Attiny (pattes 2,3,6 et 7) un signal TTL (0 à 5V) de 200Hz et agir sur le rapport cyclique pour avoir une durée à 0V de 1ms. Sur les quatre sortie (pattes 8,9,10 et 11) vous devez mesurer à l'oscilloscope une impulsion à 5V de 1ms en mode SP95, 1.15 ms en mode mix et 1.3 ms en mode E85 (avec la patte 12 à 0V pour invalidé le mode starter). Si tous les test sont concluants l'Attiny84 est alors prêt à être installé dans le montage.


Installation


Sur l'image ci-dessous vous pouvez voir une réalisation de ce montage dans un boitier métallique directement installable sous le capot du véhicule. Les connecteurs d'injecteurs permettent une installation rapide sans avoir à couper de fils (facile également à enlever avant un contrôle technique).



La CTN peut être fixée à l'aide d'un collier sur une durite de refroidissement. Le sélecteur et la LED n'ont pas été déportés dans l'habitacle ce qui simplifie l'installation mais oblige à devoir ouvrir le capot pour changer le mode d'injection ce qui n'est pas forcément très gênant à l'usage.

Les connecteurs d'injecteurs sont des BOSH EV-1 pas faciles à trouver, je ne me souviens plus où je les avais commandé. Ci dessous un récapitulatifs des types de connecteurs que l'on peut trouver sur les véhicules :



Résultat de recherche d'images pour "boitier E85 arduino"




Commentaires

  1. Bonsoir,
    possible de modifier, d'avoir le fameux capteur éthanol système qui ce branche sur l'arrivée d'essence pour analyser la teneur de e85/sp95 en fonction du mélange dans le réservoir. Et de ce fait, inclure dans les deux montages (pic 1er montage et 2em montage arduino) cette modification dans le programme et modifier le montage en conséquence.
    - détection sonde de température moteur
    - détection arrivée % de mélange essence
    c'est une question !
    bonne soirée

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Tous les véhicule au sans plomb sont équipés d'une sonde Lambda sur l’échappement qui permet la mesure du taux d'oxygène par le calculateur d'injection. Trop d'oxygène veut dire mélange trop pauvre et pas assez mélange trop riche, le calculateur peut alors corriger l'injection de carburant et optimiser la consommation et diminuer la pollution. il est donc possible d'intercepter le signal de cette sonde afin de déterminer le taux d'enrichissement à appliquer de façon automatique. Donc oui c'est possible mais pas facile à réaliser en pratique. En effet il ne faut pas interférer avec le calculateur d'injection et pour cela il faudrait moyenner la mesure Lambda sur une période plus longue. De plus lors des phases d'accélération le calculateur ignore la sonde Lambda quitte à momentanément avoir un mélange plus riche et de même coupe l'arrivé en carburant lors des décélérations ce qui pourrait induire le boitier éthanol en erreur si ces phases ne sont pas gérées.

      Supprimer
    2. Merci beaucoup pour la réponse diligente Dominique.
      Effectivement c'est juste, il faut faire simple :) le calculateur s'occupe du reste !
      Bonne soirée
      ....et encore bravo pour les recherches et les propositions en électronique/prog
      Cordialement
      Eric

      Supprimer
  2. Génial, merci beaucoup pour ton travail !!

    Pour ceux qui veulent faire faire la carte sur PCBWAY, JLCPCB ou autres qui imposent une carte inférieur à 10cm pour avoir les meilleurs tarifs.
    J'ai déplacer quelques composants et refait les routes pour respecter cette contrainte.

    Vous pouvez trouvez les fichiers gerber ici : https://drive.google.com/open?id=1F1yn749P6YW8OqslScGyF9FhCMVX4WdN

    Nota : Je l'ai fais en quelques minutes donc elle doit être moins bien que l'original.

    RépondreSupprimer
    Réponses
    1. Très bonne initiative, merci

      Supprimer
    2. Bonjour, apparemment le lien vers les fichiers Gerber, n'est plus valide. Est ce que l'on peut les trouver ailleurs ? Merci d'avance.

      Supprimer
  3. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  4. Bonjour,
    Je trouve cette adaptation très intéressante. J’essaie de comprendre l'ensemble des subtilité du code, mais je bute sur ces quelques lignes:
    // Variables pour la base de temps 1ms
    static BYTE counter1ms = 40;
    static BYTE elapsed1ms = 0;
    Je suppose que cela à une relation avec la fréquence de comptage de25 microseconde. Mais j'ai du mal à comprendre toute les subtilité de cette boucle. Est il possible d'avoir quelques explications complémentaires?

    J'ai testé le montage avec un GBF et un oscillo sur un Arduino Nano, et je me suis aperçu d'un dysfonctionnement. Si rapport cyclique du signal d'entrée est egal à environ 60%, l'ajout sur temps complémentaire ne se fait plus. On retombe que le mème signal que celui de l'entrée. Au delà de 60% de Rc, l'ajout se fait à nouveau mais pas avec le bon ratio. Je ne vois pas d’où provient ce dysfonctionnement. Si vous avez une idée.....

    RépondreSupprimer
    Réponses
    1. Bonsoir,
      Merci de votre intérêt et désolé du temps pour la réponse.
      Pour répondre à votre première questions, la variable counter1ms permet de compter le nombre d'interruptions de 25µs et au bout de 40 incrémente la variable elapsed1ms qui indique à la boucle principale loop que 40x25µs soit 1ms s'est écoulée ce qui permet de gérer les tempos et le clignotement de la Led sans utiliser la fonction delay qui est une fonction bloquante.donc inadaptée au temps réel.

      Tester avec un GBF et un oscillo est une bonne idée à condition de bien choisir la fréquence et la base de temps. En effet un moteur essence de voiture à un régime moteur maximum de 8000 tours/mn (en zone rouge) ce qui fait 133 tours par secondes ( Ou 133 Hz soit une période de 7,5 ms pour 1 tour) et puis sur un moteur 4 temps il n'y a que 1 injection par cylindre tous les quatre tours donc 133/4 = 33 Hz (période 30ms). De plus le temps maximum d'injection ne dure qu'une infime partie de la période et ne peut pas déborder sur la durée d'injection du cylindre suivant soit 7,5ms dans cet exemple donc en gros ne dépasse jamais un rapport cyclique de 25%.
      En résumé pour vos essais ne dépassez pas une fréquence de 133Hz et rapport cyclique de 25% et encore ce sont des valeurs extrêmes impossible à atteindre pour un moteur essence en utilisation réelle.

      Supprimer
    2. Bonjour,
      Merci pour toutes les explication mais j'ai constaté une légère erreur de calcule :
      le moteur 4 temp il y'a 1 injection par cylindre chaque demi tour, ou bien 2 tours pour un cycle complet pour les 4 cylindres
      donc 8000tr/mn = 133 tours seconde 133/2 = 66.5 ( période 15 ms )
      désolé si je me trompe
      cordialement

      Supprimer
  5. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
    Réponses
    1. Bonsoir,
      Je ne sais pas si c'est le bon endroit pour ma question, mais je voudrais savoir quelle est la différence entre l'ATtiny84 et l'Atmega328P car on peut programmer ce dernier drectement sur un carte Arduino alors que pour le premier il faut faire une carte adaptatrice. Est-ce qu'un programme fonctionne sur les deux? Comment est-il possible d'envoyer un mail à l'auteur de ce blog?
      Merci de votre aide
      Cordialement
      Thierry

      Supprimer
  6. Bonjour,

    Avant tout félicitation pour votre travail !

    Puis je me permettre de vous poser la question suivante, à savoir pourquoi n'avez vous pas réalisez des versions pour 6 ou 8 cylindres?

    Y a t-il une raison particulière ?

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Tout simplement parce que je n'ai pas de véhicule à 6 ou 8 cylindres.
      Pour un 8 cylindre il est possible d'utiliser 2 boîtiers sinon il est pas difficile de modifier le montage et le programme.

      Supprimer
  7. Bonsoir,
    Je ne sais pas si c'est le bon endroit pour ma question, mais je voudrais savoir quelle est la différence entre l'ATtiny84 et l'Atmega328P car on peut programmer ce dernier directement sur un carte Arduino alors que pour le premier il faut faire une carte adaptatrice. Est-ce qu'un programme fonctionne sur les deux? Comment est-il possible d'envoyer un mail à l'auteur de ce blog?
    Merci de votre aide
    Cordialement
    Thierry

    RépondreSupprimer
    Réponses
    1. L'attiny84 est une version économique du 328p, moins d'entrées/sorties, moins de timers et sans multiplications/division hardware. En revanche il ne nécessite pas de quartz externe pour fonctionner et est basse consommation. Donc pratique pour l'embarqué.
      La plupart des programme Arduino fonctionneront, on peut parfaitement utiliser une carte Uno pour réaliser un prototype et ensuite passer à un circuit imprimé avec un Attiny84 avec peut d'adaptations au programme.

      Supprimer
  8. Bonjour, j'ai une question à propos de l'interrupteur 3 position. Peut être que je me trompe mais la position du milieu quand la valeur max est 20k c'est celle qui correspond à 100% E85 c'est bien ça ?

    RépondreSupprimer
  9. bonjour et merci pour ce beau travail ,
    j’aimerai bien rajouter une petite option si vous voulez bien sûr , alors je m’explique : moi je roule à l’éthanol 100% depuis plusieurs années sans faire la moindre modification sur l’injection , par contre au début j’avais quelques soucis de démarrage en hiver , alors j’ai installé un petit bouton poussoir avec qui j’alimente les 4 injecteur avant de démarrer le moteur , ça injecte une petite dose d’éthanol et le moteur démarre quart de tour à -5 degré, ce que je propose , c’est de rajouter une ligne au programme qui va donner une impulsion de 100ms au 4 injecteurs à une température inférieure à 15* juste après avoir mis le contacte qui va réglé le problème de démarrage à froid. je vais entamer la réalisation de ce montage cette semaine et espérant bien qu’il va y avoir cette modification.
    merci beaucoup pour votre travail
    cordialement

    RépondreSupprimer
    Réponses
    1. Dans le programme il y a déjà une gestion du starter automatique pour les démarrages à froid.

      Supprimer
  10. Bonjour, Je compte tester ce montage.
    J'ai fait un montage similaire à base d'arduino nano mais je rencontres des difficultés de calculs à partir d'un certain régime en pleine charge uniquement (recouvrement des boucles du programmes que je n'ai pas réussi à résoudre...).
    Mon véhicule a une injection simultané : 4 injecteurs en simultané, donc 50% de la quantité d'essence nécessaire par cycle vilebrequin, c'est une injection digifant vw sur golf 3 gti (bosch LE-Jetronic).
    Je roule à 100% sans rien, mon lambda est un peu pauvre sur les phases de progressivité, et en pleine charge.

    Ma question est : puis-je branché du coup qu'une seule broche vu que je n'ai qu'un rail à gérer ? Dois-je mettre des résistances sur les autres sortie pour simuler la présence d'injecteurs ou dois-je simplement effacer les assignations des autres injecteurs dans le code ?

    Est-on obligé de mettre la CTN ? Le calculateur gère déjà très bien le rapport afr/T° sur mon auto
    Merci à vous.
    Cordialement.

    RépondreSupprimer
  11. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  12. Bonjour, c'est avec une grande passion que j'ai suivi ce blog sur E85 qui a demandé beaucoup de travail et de réflexion un grand merci donc de nous faire partager cela. J'ai décidé de me lancer. J'ai commencé par la programmation de ATtiny 84 piloté par un Arduino Uno avec 3 leds sur les sorties 7,8,9. Sur le shield de ATtiny cela c'est bien passé en apparence pas d'erreur sur la console, le voyant qui clignote en cours de programmation , j'ai bien respecté les consignes etc.
    Mais en phase de test en reliant les broches 12 et 13 à la masse pas de clignotement de la led (mis sur la broche 5 avec résistance en série) ni en mettant la broche 12 au + 5 volts rien.
    Après deux jours de galère, j'ai chargé une ancienne version d’Arduino 1.8.9 et ajouté la bibliothèque Attiny : http://drazzy.com/package_drazzy.com_index.json
    Tuto sur youtube : https://www.youtube.com/watch?v=gXXdoeu7yWw pour la mise en œuvre. Impeccable pour les tests avec le voyant cela fonctionne, j'attends les connecteurs pour les injecteurs Bosch EV1.
    J'ai essayé de comprendre le programme Arduino et là mortel pour moi, il y a des passages très obscurs pour moi. Ce que j'ai compris, lorsqu'un injecteur est activé (mise à la masse, front descendant) on mesure ce temps et on lui rajoute un temps supplémentaire. Oui je sais c'est très basique.

    RépondreSupprimer
    Réponses
    1. Bonjour Blackrideric, d'abord merci a Dominique pour ce beau travail , j'ai bien suivi les étapes une par une et je me suis aperçu que j'avais exactement le même problème que vous Blackrideric, et on regardant votre commentaire, j'ai essayer votre méthode et comme par magie tout fonction a merveille , je vous remercie vous aussi Blackrideric pour le partage de votre solution.
      Cordialement .

      Supprimer
    2. Bonjour muss, merci pour votre réponse, je suis content que cela fonctionne, j'espère que cela permettra à d'autres utilisateurs d'avancer sur ce sujet. Je vois de plus sur des sites de vente un adaptateur E85 sur OBD2, juste à connecter et le véhicule peux travailler à 85 % de E85. Qui a de l'expérience sur ce sujet ? A vos claviers
      Cordialement

      Supprimer
    3. Bonjour,
      J'avais aussi programmé avec des versions récentes d'Arduino, et rien ne fonctionnait, même si le téléversement aboutissait.Finalement, j'ai utilisé une version 1.6.13, et tout fonctionne nickel (au moins aux tests sur table, avec les 3 positions de l'interrupteur). Mais là, je suis confiant! Une journée à chercher.....

      Supprimer
  13. Bonjour, j'aimerais savoir pour quel type de connecteur est dessiné le CI? Ca ressemble à un pas de 5mm, en mesurant grossièrement sur le CI; mais pour quel marque? Molex, JST...ou autre? Merci d'avance. Cordialement. Pour l'instant j'ai programmé le Attiny, mais avant de commander les composants, je voudrais commander aussi les connecteurs. Patrick

    RépondreSupprimer
    Réponses
    1. Bonjour , ce sont des connecteurs au pas de 5.08mm .Personnellement j'ai soudé directement les fils sur le circuit .Cdlt Yves

      Supprimer
    2. Bonjour Troublouse,
      Merci pour la réponse. Petite question supplémentaire...Je cherche désespérément les connecteurs et contre-connecteurs pour les injecteurs de ma clio. Où est ce que l'on trouve ce genre de connectiques. Merci d'avance. Cordialement. Patrick

      Supprimer
    3. Quel type de connecteur , va voir là : https://www.ebay.fr/itm/322135657164 et dis moi lequel

      Supprimer
  14. Bonjour Troublouse, Merci pour ta réponse. Je viens de plonger dans le moteur avec une lampe et mon téléphone, pour faire des photos. J'ai pu lire 11285 sur les injecteurs. En cherchant sur le net, j'ai trouvé que c'était des connecteurs Toyota 11285. C'est exactement ça:
    https://fr.aliexpress.com/item/1005001703665879.html
    Sur ta page, cela correspond à quels connecteurs? Ca ressemble à des Nippon-Denso.

    RépondreSupprimer
    Réponses
    1. Voila l'ensemble que je cherche, et qui correspond à la marque de la page que tu m'as proposé. Si tu peux me confirmer, que c'est équivalent au Toyota 11285, je vais commander 3 sets complets de connecteurs. J'ai un 3 cylindres. Merci d'avance.
      Cordialement. Patrick

      Supprimer
    2. Avec le lien, c'est mieux....
      https://www.amazon.fr/Connecteur-dinjecteur-90980-11153-0280157012-6189-0060/dp/B00IB7K5RC/ref=sr_1_6?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=2CFQD70VW7K13&keywords=connecteur+d%27injecteur+-+nippon+denso+11285&qid=1660404283&s=automotive&sprefix=connecteur+d%27injecteur+-+nippon+denso+11285%2Cautomotive%2C73&sr=1-6

      Supprimer
    3. En effet ce doit être des Nippon-denso ,pour le câblage sur les injecteurs j'ai utilisé du câble AWG18.

      Supprimer
    4. Bonjour,
      D'accord, merci.
      Cdt.
      Patrick

      Supprimer

Enregistrer un commentaire

Posts les plus consultés de ce blog

Rouler à l'E85 version Arduino simplifiée et sécurisée

Roulez à l'E85 la conception d'un boitier