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.