Problème d'interférences, mesure de vitesse moteur et km/h voiture

Bonjour à tous,

Je suis en train de fabriquer un compte-tour moteur (tr/min) et compteur de vitesse (km/h) pour ma voiture.

Le code: (Il y a surement quelques trucs à améliorer)

#include <SoftwareSerial.h>
SoftwareSerial btserie(10, 11); // (RX, TX) (pin Rx BT, pin Tx BT)

const int nbpulse = 1;  // Nombre d'impulsions attendue pour calcul
const int nbpartr = 2;  //  Nombre d'impulsions reçue pour 1 tour moteur
const int droue = 50;   // Diamètre de la roue en cm

const int hallm = 2;     // Capteur vitesse moteur sur pin 2
const int hallv = 3;      // Capteur vitesse voiture sur pin 3

int rpm = 0;
int vitesse = 0;
int countm = 0;
long tprec1 = 0;
long tprec2 = 0;
boolean changement = 0;

void setup(){ 
  pinMode(hallm, INPUT_PULLUP );
  pinMode(hallv, INPUT_PULLUP );
  Serial.begin(9600);
  btserie.begin(9600);
  attachInterrupt(0, signm, FALLING);
  attachInterrupt(1, signv, FALLING);
  tprec1 = millis();
  tprec2 = millis();
}

void signm()
{
  
  countm++;
  if (countm >= nbpulse) {
    rpm = 60000 / (millis() - tprec1) / nbpartr  * countm;
    tprec1 = millis();
    countm = 0; 
    
    changement = 1;
  }
}

void signv()
{
  
  vitesse = 36000000 / (millis() - tprec2) * droue * 3.14 / 1000000;
  tprec2 = millis();
  
  changement = 1;
}

void loop() {
 
  if (changement == 1){
    btserie.print("|");
    btserie.print(rpm);
    btserie.print("!");
    btserie.println(vitesse);
    changement = 0;
   }
}

Le matériel : Un arduino nano.
Un module HC-05 pour envoyer les valeurs sur mon téléphone.
Deux capteurs hall(US5881).

Le premier capteur mesure la vitesse de rotation d'une roue et me permet de calculer la vitesse de la voiture. Il est fixé face à un cardan sur lequel est collé un aimant.

Le second est fixé contre un faisceaux d'allumage (un fil qui alimente en haute tension les bougies d'allumage), le passage bref du courant (ou de la tension?) dans le faisceaux génère un champ magnétique qui est reçus par le capteur.
Ça marche pas super bien, il y a quelque impulsions qui ne sont pas captées mais vu la fréquence d'actualisation, les défaut ne restent pas affiché longtemps à l’écran et ça n'empèche pas de lire la valeur.

Le problème c'est que j'ai des interférences, en faisant tourner la roue à la main avec le moteur arrêté ça fonctionne bien, mais quand j'allume le moteur mes valeurs font n'importe quoi.
Quand je débranche le capteur de vitesse moteur (moteur toujours allumé),la valeur de vitesse voiture marche bien, j'ai juste quelques "pics" dans la valeur de temps en temps mais rien de bien méchant.

Aujourd'hui j'ai même pas réussis à avoir une valeur de vitesse moteur correcte, alors que hier et avant hier ça marchait asses bien...

Je précise que mes capteurs sont connectés à l'arduino avec des câble blindé 3 fils de 2M de long, le blindage est relié à la masse uniquement côté arduino, le capteur est relié à la masse avec un des trois fils.

J'utilise la résistance interne de l'arduino (INPUT_PULLUP) pour le signal des capteurs, j'ai essayé de rajouter une résistance de 2K en plus, ça à légèrement amélioré le signal.

Qu'es que je peux faire pour réduire les interférences? Mettre une résistance de pullup plus faible ou proche du capteur ? Un condensateur sur les broche d'alimentation des capteur?

Si je pouvais éviter d'avoir recourt à un optocoupleur ça m'arrangerais...

Merci de m'avoir lu.

Hello,

J’avais débuté un projet similaire il y a quelques années mais il est tombé à l’eau car je n’avais pas les compétences et le temps de les travailler haha.

J’avais eu pas mal d’aide sur ce topic : Mesure de régime moteur - Français - Arduino Forum. L’idée de l’alternateur est pas bête mais en fonction de la précision que tu veux tu peux être un peu faussé par le glissement de la courroie en fonction du régime et de la charge.

Il y a aussi ce sujet qui devrait t’aider : http://arduino.cc/forum/index.php/topic,88051.0.html

Pour ce qui est clairement de ton problème sur ton capteur de roue, je suis surpris que ce soit les interférences qui te gênent. Comment est fait ton support capteur? Est ce que ce ne serait pas lui qui vibrerait et du coup tu verrais des mesures faussées ? Comment tu as fait pour attacher ton capteur sur une partie fixe et toujours avoir la même distance par rapport à l’aimant ? Tu t’es mis côté boîte?

Sinon fait attention car te prendre uniquement sur une roue ne sera pas représentatif en fonction du glissement et du rayon du virage que tu prends. Il faudrait mesurer à minima aux deux roues (ce que tu fais peut être déjà).

Bon courage! Tu fais ça pour une application circuit?

Salut castu !

J'ai déjas lu vu ton topic il y a un moment, ma première idée était de capter le signal de l'allumage avec un capteur inductif, mais ça n'a pas vraiment marché comme il faut...

Pour l'alternateur ça peut être intéressant mais le mien ne dispose pas de sortie compte-tour...

Il y a aussi le capteur PMH mais dans mon cas il est inductif et je n'ai pas trouvé de schéma pour adapter son signal.

Le support du capteur est un morceau de tôle galvanisé que j'ai plié en équerre.
Sur ma voiture (Peugeot 309) le cardan droit est équipé d'un roulement entre la boite et la roue, qui est fixé sur le châssis par des vis, l'une d'elle dépasse près du cardan , j'ai percé et fixé mon équerre avec des rondelles et un écrous sur cette vis.
Le capteur est collé à l’époxy sur l'autre côté, face au cardan et a l'aimant qui est collé dessus.
Le montage est asses rigide et je pense pas que le capteur puisse vibrer.

Pour ce qui est du défaut de mesure dans les virage c'est pas gênant, je mesure que sur une roue mais je ne fait pas du tout de circuit, et globalement à part dans les rond point je dois tourne autant à droite que à gauche donc la valeur peut être faussée légèrement mais rien de bien méchant..

A la base je voulais faire une compte-tour parce que je n'en ai pas sur ma voiture et que au passage pourquoi ne pas afficher la vitesse réelle (enfin plus que celle du compteur d'origine).
Plus tard pourquoi pas récupérer un débitmètre et afficher la consommation en L/100km, je suis confiné donc j'ai le temps !:stuck_out_tongue:

Pour l'origine des perturbation, je pense à deux cas possible:
Soit les câbles captent des interférences, je soupçonne plus particulièrement le câble du capteur de vitesse moteur qui touche le faisceaux d'allumage et qui longe le câble de l'autre capteur sur un peu moins de 1M, se qui explique peut être que même en débranchant le capteur moteur la vitesse de déplacement soir perturbé...

Soit les perturbations viennent de l’alimentation de l’arduino par le 12V de la voiture et régulateur 5V. C'est bizarre par ce que jusqu’à hier ça a marché plusieurs fois.
Il faudra que j'essaye de brancher l'arduino sur une autre alimentation pour voir

Soit c'est autre chose auquel je n'ai pas pensé...
Si les interférences viennent des capteurs et de leurs câbles, auriez vous une idée pour les absorber et qu'elle ne perturbent pas le fonctionnement de l'arduino?