Support officiel Megasquirt, Tech Edge WBO2, Tuner Pro, AutoSport Labs et Fenixecu 

  • Alpine GTA V6 3.0 24S

  • Vos montages, vos projets, vos remarques, c'est ici ;-)
Vos montages, vos projets, vos remarques, c'est ici ;-)
 #8828  par Gégé13821
 03 sept. 2019 14:49
Manu a écrit :
03 sept. 2019 08:35
.........Menu "Paramètres de base" -> Correction T°Air/T°Eau :
Cette courbe représente de pourcentage de température moteur qui se mélange avec l’air ............
Waouh je l'avais oubliée celle là :oops: :oops:
Après vérification sur le projet : tout est à zéro : Aucune correction ;) ;)

Petite analyse des mesures effectuées :

Comparaison Température Eau (CLT) et Température Air (MAT)

Image
On voit clairement, sans aucune correction, que la température de l'air suit la température de l'eau.
Peut être pas utile d'ajouter une correction.

Comparaison Température Air (MAT) et Débit Air
Pour trouver une image du débit d'air, j'ai créé une variable [TPS] * [RPM] (ouverture papillon multiplié par le régime moteur)

Image
Quand le débit augmente, la température de l'air mesuré diminue.
Normal, la température extérieure de la pipe d'admission est d'environ 65°C.
La température de l'air extérieur es d'environ 30 à 35°C.
Avec un débit faible on obtient : ~ 59°C
Avec un débit élevé (TPS à 100% et RPM à 5000 tr/mn) on obtient : ~ 55°C
1 - La baisse de température est simultanée avec l’augmentation de de débit (absence de retard). Pourrait signifier que l'on mesure la température de l'air et non celle de la structure (pipe d'admission)
2 - La température mesurée ~ 55°C et toujours très éloignée de la température de l'air ambiant ~ 30 à 35°C. ................

Pour faciliter la compréhension, une photo avec l'emplacement du capteur de température (MAT)
Pipe d'admission ouverte.

Image
Peut être un peu court, il ne dépasse pas beaucoup dans la veine fluide. ;) ;)
 #8829  par Phil 911 SC
 03 sept. 2019 17:31
Ah ! Du vécu..
A l'origine sur mon moteur, le capteur MAP était logé dans le corps de la boite à air. Tout comme toi il m'indiquait des températures beaucoup trop hautes par rapport à la température de l'air ambiant. Je l'avais déplacé dans le capot du filtre et c'était déjà mieux, mais encore trop lent en réaction. Alors j'ai viré la protection de la thermo-résistance, et la le résultat était bien meilleur.
IMG_3371.JPG
IMG_3371.JPG (99.29 Kio) Vu 3860 fois
 #8990  par Gégé13821
 11 déc. 2019 23:07
Tableau de bord - TunerStudioMS et Raspberry PI
L'objectif n'est pas de remplacer le tableau de bord principal, mais de le compléter par un tableau de bord intelligent capable d'afficher tous les paramètres et/ou de les enregistrer.

Afficher des paramètres et/ou les enregistrer, les modifier, .... c'est le boulot de TunerStudioMS
Il suffit donc de garder le PC connecté sur le boîtier d'injection. Mais c'est un peu encombrant :!: :!:

Automatiser le système : démarrage et arrêt automatique. A la clé de contact.

Matériel nécessaire :
Un écran (tactile) de 7 pouces pour l'affichage (tactile pour les commandes de base)
Un Raspberry PI 3B - Pour exécuter TunerStudio MS.
Les interfaces nécessaires.

Pourquoi un Raspberry PI ? Puissant, compact, économique et fonctionnement sous Linux.

Quelques images du système :
Écran du Raspberry avec Raspbian
Image
Écran du Raspberry en fonction Tableau de Bord
*C'est l'écran qui apparaît au démarrage. Lancement automatique du logiciel TunerStudio en mode plein écran.*
Image
Écran du Raspberry en fonction Surveillance
Image Nota : J'ai découvert qu'avec un écran tactile on pouvait faire défiler les différents tableaux de bord en balayant l'écran (sans sortir du mode plein écran !!!
Écran du Raspberry en fonction Modification Paramètres
Image
Écran du Raspberry en fonction Modification Table Injection 3D
Image
Enfin une photo du hard (Raspberry PI, Écran, câbles !!!!!)
Image

Le système fonctionne.
L'écran LCD de 7 pouces (1024x600) et "touchscreen"
Le Raspberry PI3B+ (Raspbian, TunerStudioMS).

Reste à mettre dans une boite. La plus petite possible, l'écran de 7 pouces à été choisi comme le moins encombrant.
Le problème : **les câbles**.
Le câble HDMI est beaucoup trop raide, les câbles USB beaucoup trop encombrants et longs.
Je dois trouver des prises HDMI, USB, .... à câbler avec des nappes hyper souples.
Si vous avez des pistes, je suis preneur.

Deuxième partie du projet : le système d'alimentation, de mise en marche, de mise à l'arrêt.
(actuellement on utilise la prise allume cigare - alimentée en permanence - et un adaptateur 12V/5V)

Le système doit démarrer à la mise du contact.
Le système doit s'arrêter à la coupure du contact (sauf si on le remet rapidement), le Raspberry PI doit s'arrêter proprement.

Arrêt propre du Raspberry PI : Le Raspberry PI fonctionne comme un ordinateur. Il a les mêmes exigences qu'un ordinateur : il ne supporte pas toujours un arrêt par coupure de l'alimentation électrique. Certains fichiers nécessaires au démarrage peuvent être endommagés s'ils ont ouverts ou en cours d'écriture au moment de la coupure.
Il est donc nécessaire de lui donner un ordre d'arrêt avant de couper l'alimentation.
Pour le démarrage, c'est plus simple, il démarre automatiquement à la mise sous tension.

J'ai choisi d'utiliser un Arduino nano pour piloter 2 relais et diverses tempos.
(c'est très économique, je sais le programmer, çà consomme très peu - fonctionnement permanent, c'est robuste - arrêt par coupure d'alimentation, démarrage très rapide, ......
Un relais envoi un signal d'arrêt au Raspberry PI (pendant x secondes)
Un relais gère l'alimentation générale.

Prototype
Image

Le prototype est fonctionnel.
2 leds permettent de simuler les entrées du Raspberry PI (alimentation 5V après relais, contact fermé pour signal d'arrêt).

Le signal d'arrêt sera envoyé sur le port GPIO du Raspberry PI - Mise à la masse pendant 2 secondes du port GPIO 23. (Entrée 23 choisie car situe à proximité d'un port Masse.

Un script (écrit en python) tourne en tâche de fond. A la réception du signal sur la broche GPIO 23 (pendant une durée de 2 secondes), il lance les instructions nécessaires :
- à la fermeture de TunerStudio.
- à l'arrêt du Raspberry PI.

Le script python : piShutdown.py
Code : Tout sélectionner
# !/bin/python
# -*- coding: utf-8 -*-
# Simple script pour arrêter le Raspberry PI à la réception d'un signal d'arrêt sur une broche GPIO

import RPi.GPIO as GPIO #Librairie pour l'utilisation du port GPIO
import time # Librairie pour les fonctions temps
import os # Librairie pour les commandes d'arrêt

# Utilise la numérotation Broadcom SOC pour les numéros de broches
# Configure la broche d'entrée en  pullup

GPIO.setmode(GPIO.BCM)
GPIO_shutdown=23 # Numero de connecteur pour le bouton d'arrêt
GPIO.setup(GPIO_shutdown, GPIO.IN, pull_up_down=GPIO.PUD_UP)

#La fonction à exécuter lors d'un signal d'arrêt

while True: #Boucle infinie.
     if GPIO.input(GPIO_shutdown) == GPIO.LOW: #Teste si la broche d'entrée est à la masse
        time.sleep(1) # Attend pour confirmer
        if GPIO.input(GPIO_shutdown) == GPIO.LOW: #Teste pour vérifier que la broche d'entrée est toujours à la masse
            os.system("killall -w java") #Fermeture de TunerStudio
            os.system("shutdown now -h") #Arrêt du PI
     time.sleep(1) # Temps d'attente pour ne pas surcharger le processeur.

Pour que dispositif fonctionne, il faut exécuter le script au démarrage. Modifier le fichier rc.local (rc.local est une liste de tâches que le Pi suit au démarrage). Ouvrir en tant que super utilisateur (sudo). Utiliser leafpad pour éditer rc.local (c’est plus simple que nano).
Code : Tout sélectionner
sudo leafpad /etc/rc.local
Dans rc.local, ajouter une commande pour exécuter le script d’arrêt, à la ligne précédant l’exit 0.
Code : Tout sélectionner
sudo python /home/pi/piShutdown.py &
exit 0
Important le «&» à la fin indique au Pi d’exécuter ce programme en arrière-plan.

Le relais "intelligent" (à base d'Arduino nano) gérant le démarrage et l'arrêt du TdB par la clé de contact.
Le signal d'entrée :
- Présence ou non du 12 Volts après contact.
Les signaux de sortie :
- Signal d'arrêt du Raspberry PI (relais)
- Signal alimentation du TdB - Raspberry PI & Ecran - (relais).
La fonction :
- Démarrage du tableau de bord à la mise du contact (+12V ApC)
- Arrêt du tableau de bord à la coupure du contact (+12V ApC) - avec arrêt "propre" du Raspberry PI.
- Maintien en service du tableau de bord à la coupure du contact de courte durée (+12V ApC)

Le schéma de principe :
Image
Le convertisseur 12v -> 5V
Image
Le relais pour la mise en service de l'alimentation
Image
La platine à base d'Arduino nano et ses composants
ImageElle dispose de sa propre alimentation 12V en 5V, un micro relais pour le signal d'arrêt vers le Raspberry PI.

Le code pour l'Arduino : RelaisTempo.ino
Code : Tout sélectionner
int APC = 2;
int RELAIS = 3;
int RASPSTOP = 8;

// Déclaration des variables
int memoireAPC = LOW;               // Mémoire présence 12 volts après contact
int etatAPC = LOW;                  //Etat actuel du 12 volts après contact
int etatRelais = LOW;               //Etat du relais
int etatRasp = LOW;                 //Etat signal de commande du Raspberry
unsigned long tempsDem = 45000;     //Temps d'attente pour le démarrage du Raspberry
unsigned long tempsArret = 30000;   //Temps d'attente pour l'arrêt du Raspberry
unsigned long tempsAtt = 60000;     //Temps d'attente avant la mise à l'arrêt du Raspberry après coupure ApC

void setup() {
  // On initialise les entrées/sorties
  // Serial.begin(9600);
  pinMode(APC, INPUT);
  pinMode(RELAIS, OUTPUT);
  pinMode(RASPSTOP, OUTPUT);
  digitalWrite(RELAIS, etatRelais); // On écrit l'état du relais
  digitalWrite(RASPSTOP, etatRasp); // On écrit l'état du raspberry
}

void readAPC() {
  // Récupération de l'état actuel du Contact (+ 12 Volts Après contact) - toutes les secondes
  while (etatAPC == memoireAPC) {
    delay(1000);
    etatAPC = digitalRead(APC);
    /* Serial.print("etatAPC = ");
    Serial.print(etatAPC);
    Serial.print("; mémoireAPC = ");
    Serial.print(memoireAPC);
    Serial.print("; etatRelais = ");
    Serial.print(etatRelais);
    Serial.println(); */
    if (etatAPC == LOW && memoireAPC == HIGH) {
      // Serial.println("Attente .....");
      // On attend pour confirmer la coupure contact.
      delay(tempsAtt);
      etatAPC = digitalRead(APC);
    }
  }
}

void loop() {

  readAPC();

  // Si l'état est différent de la mémoire et qu'il est à HIGH (Front montant)
  if (etatAPC != memoireAPC && etatAPC == HIGH) {

    // Si relais est LOW - Démarrage du RPI
    if (etatRelais == LOW) {

      // On demande à le passer à HIGH
      etatRelais = HIGH;
      digitalWrite(RELAIS, etatRelais);

      // On mémorise l'état du Contact (+12V Après contact)
      memoireAPC = etatAPC;

      // Et on attend ..... le temps que le raspberry démarre
      // Serial.println("Démarrage ..............");
      delay(tempsDem);

    }
  }

  // Si l'état est différent de la mémoire et qu'il est à LOW (Front descendant)
  if (etatAPC != memoireAPC && etatAPC == LOW) {

    // Si relais est HIGH
    if (etatRelais == HIGH) {

      // On demande au Rasberry de s'arrêter
      etatRasp = HIGH;
      digitalWrite(RASPSTOP, etatRasp);

      // On maintient le signal 3s
      delay(3000);
      etatRasp = LOW;
      digitalWrite(RASPSTOP, etatRasp);


      // On attend .... secondes l'arrêt du Raspberry
      // Serial.println("Arrêt .....");
      delay(tempsArret);

      // On demande au relais de passer à LOW
      etatRelais = LOW;
      digitalWrite(RELAIS, etatRelais);

      // On mémorise l'état du Contact (+12V Après contact)
      memoireAPC = etatAPC;

    }
  }
}

Un lien vers un dossier Relais Tempo

Reste à traiter :
- La transmission automatique des fichiers "Datalogs" (si créés).
- .........

Nota : Soyons pragmatiques, la manipulation d'un "mini" ordinateur avec un écran tactile et un clavier virtuel est assez limitée. Merci à VNC Viewer qui permet d'utiliser l'écran et le clavier du PC portable via le réseau !!!!

Bonne lecture, à votre disposition si besoin de détails.
 #8991  par Phil 911 SC
 12 déc. 2019 09:09
Salut Gégé,
Tu fais comment pour afficher la vitesse ? traqueur gps ou signal de la bv ?
 #8992  par Gégé13821
 12 déc. 2019 10:10
Phil 911 SC a écrit :
12 déc. 2019 09:09
Tu fais comment pour afficher la vitesse ? traqueur gps ou signal de la bv ?
J'ai une roue dentée (type ABS) sur une transmission avec un capteur hall. J'utilise ce signal en entrée vss de la ms3.
 #8993  par Manu
 12 déc. 2019 17:11
Salut Gégé,

Beau projet pour les longues soirées d'hiver.

Au niveau du code arduino je vois que tu utilises
Code : Tout sélectionner
int etatAPC = LOW; 
Il vaut mieux utiliser
Code : Tout sélectionner
bool etatAPC = false
int, c'est pour les entiers et eut avoir beaucoup de valeurs. bool, c'est un booléen en ne peut avoir que deux états : vrai ou faux (true / false).

Moi pour commencer je ferais cela :
Code : Tout sélectionner
DEFINE APC 2
DEFINE RELAIS 3
DEFINE RASPSTOP 8

bool memoireAPC = false;               // Mémoire présence 12 volts après contact
bool etatAPC = false;                  //Etat actuel du 12 volts après contact
bool etatRelais = false;               //Etat du relais
bool etatRasp = false;                 //Etat signal de commande du Raspberry
uint16_t tempsDem = 45000;     //Temps d'attente pour le démarrage du Raspberry
uint16_t  tempsArret = 30000;   //Temps d'attente pour l'arrêt du Raspberry
uint16_t  tempsAtt = 60000;     //Temps d'attente avant la mise à l'arrêt du Raspberry après coupure ApC
C'est pas grand chose, mais au moins tes variables sont celles qui intéressent ;-)

Ensuite, pour les tests, on préfère ecrire :
Code : Tout sélectionner
if ((etatAPC == false) && (memoireAPC == true)) {
à
Code : Tout sélectionner
if (etatAPC == LOW && memoireAPC == HIGH) {
Note les parenthèses en plus dans la condition. C'est très utile car selon le compilateur ton expression à toi peut être mal interprétée, contrairement à la mienne ;-)
++
Manu
 #8994  par Gégé13821
 12 déc. 2019 18:50
Merci Manu pour ces conseils de pro.
Pour les longues soirées d'hiver, j'ai un peu de boulot sur la Berlinette ;) ;)
 #8995  par Manu
 15 déc. 2019 14:10
Code : Tout sélectionner
DEFINE APC 2
DEFINE permet de déclarer des constantes. On ne met pas de ; après un DEFINE et on place les DEFINE en tête du code.
 #9061  par Gégé13821
 22 janv. 2020 18:53
Élucubrations : Volant moteur.

Actuellement, le moteur tourne avec un volant moteur type Renault 66-2-2-2.
66 dents (positions) et 3 emplacement des dents manquantes.
Emplacements notés -2 dans la litérrature, mais en réalité une dent plus longue. Ce qui complique (ou a compliqué) le décodage !!!
Bilan : Le moteur ne démarre pas instantanément - un certain temps pour obtenir une vitesse différente de zéro.

Objectif à moyen terme : Remplacer le volant moteur par un de caractéristiques mieux connues !!!

Le volant moteur d'origine Peugeot a deux inconvénients :
Type 60-2-2-2 - 60 trous avec 3 fois deux trous manquants.
1- Il n'est pas connu de la MS3
2- La position des trous manquants n'est pas compatibles avec la position du capteur PMH Renault.
Mais il a deux avantages :
1- Les dents sont remplacées par des trous. Il est plus facile de percer ou de boucher des trous que de former de nouvelles dents.
2- Il est assez facile de passer à une solution 60-2 en perçant 4 trous.

Réflexion sur dent vs trous
Signal VR.jpg
Signal VR.jpg (276.06 Kio) Vu 3548 fois
Le schéma permet de comparer les différents types de roues.
En 1 : la roue dentée classique (avec dents manquantes qui donne un signal classique.
En 2 : la roue dentée avec des trous. Les deux trous manquants ont été remplacés par un lumière pour donner (je pense) le même signal que la roue 1.
En 3 : la roue avec des trous. Et 2 trous manquants. Il est probable que dans cette configuration le signal soit modifié. Il est probable que le creux du signal en "a" provoqué par la descente de la dernière dent, soit déplacé en "b" (descente dans le premier trou).

La solution 3 est elle compatible avec le décodage 60-2 de la MS3 ?

Ci dessous les différents angles à respecter pour le nouveau volant moteur.
45 ° angle fait entre le cylindre 1 et la verticale (un V6 mais à 90° !!!
52.5° position du capteur de point mort haut par rapport à la verticale.
60° Position idéale sur un V6 de la dent 1 par rapport au capteur quant le piston est au PMH.
Les 60° ne seront pas strictement respectés (il faudrait déplacer les trous actuels).
Choisir une dent (un trou) après 60° (soit un angle compris entre 60 et 66°).
Signal VR 2b.png
Signal VR 2b.png (87.13 Kio) Vu 3543 fois
Merci de me faire toutes les remarques que vous jugerez utiles, ........
Faudrait pas que je remplace le volant moteur et que le fonctionnement soit dégradé :mrgreen: :mrgreen:
 #9072  par Manu
 24 janv. 2020 11:33
Moi j'ai juste une question : Penses-tu réellement obtenir un démarrage plus rapide avec un volant moteur 60-2 ?
Personnellement je n'en suis pas sûr...
  • 1
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41