Compteur de vitesse et compte tour mécanique

Bonjour,

alors tout d'abord j'ai aucune connaissance en programmation Arduino mais je suis ouvert pour apprendre.

J'ai pour projet avec un ami de modifier le compteur de sa voiture pour qu'il soit entrainer grâce a un moteur a courant continu au lieu des vieux câble d'époque ( La raison : le moteur a été swap et il souhaite garder le look de son ancien compteur)

Pour cela on pensais utiliser un capteur de proximité avec un aimant ou un effet hall (je sais pas ce qui sera le mieux) pour récupérer l'info du nombre de tours de roue par min pour le retranscrire au moteur qui sera branché au cul du compteur et remplacera les câbles

On est en train de faire des test pour définir le nombre de tour que le moteur doit faire pour afficher 100km/h par exemple et définir une courbe a partir de ces données ( Et faire de même avec le compte tours)

Donc si mes souvenirs de physique sont encore bon on devrait tirer une sinusoïde du capteur et sa fréquence variera en fonction du nombre de tours de roue, on souhaiterai donc contrôler le moteur en fonction de cette fréquence. (Pour le compte tours on veut réutiliser le capteur pmh qui est un effet hall donc la manip sera très similaire)

Maintenant je fait appel a vous parce que j'ai aucune idée pour arriver a tout ca. Je sais que l'Arduino est une bonne solution mais j'ai aucune idée de comment m'y prendre.

Je vous demande pas de le faire pour moi mais de m'éclairer et me guider pour que j'y arrive. C'est mieux que de copier comme un con et au moins je pourrais apprendre le fonctionnement en même temps

Voila merci d'avances a ceux qui nous ferons l'honneur de nous aider

Axel

Bonjour Oaxel

Sujet intéressent et pas si compliqué à premier abord.
Il y a la possibilité optique avec un capteur à réflexion, il y a des modules "tout faits"
image
Il suffit d'avoir, sur la partie mobile, une zone (ou plusieurs) de contraste pour détecter le passage.

Il y a la possibilité magnétique
image
En incluant un ou plusieurs aimants à la partie mobile. Attention, avec ce type de capteurs à base de A3144 le sens de l'axe N/S ou S/N a son importance.

Les 2 méthodes génèrent des impulsions par lesquelles on peu en déduire des tours/minute et en extrapoler un signal PWM dont le rapport cyclique sera en rapport avec les t/Min. PWM qui va piloter le moteur CC qui va faire "comme" le câble.
Il est important de connaître les tours/minute du compteur ou compte/tours à déviation maximum pour savoir s'il faut un moteur à réducteur ou pas.
Le moteur CC pourrait être piloté par un circuit à base de L298.
image

Mais le principal problème et là

Je veux bien te "piloter", à condition que tu soit à l'aise avec l'environnement Arduino ainsi que son langage, il te faut faire quelques exercices des exemples, comme lire des impulsions sur un port d'entrée, en mesurer la période, comment faire varier l'intensité d'une LED au moyen de commandes PWM (analogWrite()).
Quels sont tes connaissances en électronique?

A+
Cordialement
jpbbricole

Salut jpbbricole

Alors déjà merci pour ta réponse.

Je penchais plus sur un capteur magnétique que optique car dans une baie moteur on est pas a l'abris de saleté qui pourrais venir gêner le capteur optique

Ensuite j'ai prévu de définir la vitesse nécessaire en entré de mes compteur pour choisir mon moteur mais je ne m'y suis pas encore attelé

Et pour répondre a ta dernière question, je ne connait pas du tout l'environnement Arduino (A part passer mon imprimante 3d sous marlin avec l'ide je n'y ai jamais touché et encore la je suivait un guide sans vraiment comprendre)

je me documente depuis hier mais je me trouve face a tellement d'infos que je m'y perd :sweat_smile:

Je vais commencer a regarder les exercices que tu me parle, hier j'avais trouver comment faire tourner un moteur avec un potentiomètre sur tinkercad mais c'est tout

Je cherchais un moyen de lire une fréquence depuis un générateur de fonction au sein de tinker car il n'y a pas de capteur magnétique dans la bibliothèque mais je m'y perd encore plus au final

Bonjour 0axel

En fin de compte, ce n'est jamais que mesurer le temps entre 2 impulsions ou compter des impulsions pendant un temps défini qu'elle provienne d'un capteur magnétique, d'un capteur optique ou d'un générateur, c'est du même.
Dans Tinkercad recherches tachometer et motor pwm, motor pwm pour s'inspirer du programme, pas pour la commande du moteur, il est préférable d'utiliser du L298 comme driver.

A+
Cordialement
jpbbricole

Merci pour les infos,

j'ai pas mal chercher cet après midi et je suis arriver a un résultats

Voici le code que j'ai composer

int compteur = 0;
int broche_PWM = 10;
int Valeur_PWM = 0;

void interruption0()
{
  compteur++; 
}

void setup() {
  Serial.begin(9600);
  attachInterrupt(0,interruption0,RISING);
  pinMode(broche_PWM, OUTPUT);
}                                         
 
void loop() {
  delay(1000);              
  Serial.print(compteur*60); 
  Serial.println(" RPM");	//Nbr tr/min a la roue
  Serial.print(compteur);
  Serial.println(" Hz");	//Passage de l'aimant devant le capteur/seconde
  Serial.print(compteur*6.6096);
  Serial.println(" Km/h");	//Vitesse vehicule   
  compteur = 0;
  
  Valeur_PWM = analogRead(compteur*10);
  analogWrite(broche_PWM,Valeur_PWM);

}

J'ai calculé que ma roue ne tournera pas plus que 25tr/sec d'ou le multiplicateur de 10 sur le analogread

Il se trouve par contre que la valeur prise au multimètre sur tinkercad en sorti de broche 10 est pas du tout fixe même si ma fréquence en entré ne change pas

Voici le montage effectué

j'essaie vraiment de découvrir a tâtons donc il se peut que ce que j'ai fait soit horrible pour vos yeux, je m'en excuse d'avance

Merci

Axel

Bonjour
C'est quoi comme voiture/compteur d'origine ?
Il existe pas mal de rétrofit possible (moteur, servo, etc...)

Bonjour Artouste

La voiture est une Honda civic MK2 de 1983 avec son compteur d'origine

Le moteur est un 1.7 de civic de 2001. Je comptais récupérer son capteur pmh pour les tr/min du moteur et mettre un capteur quelques part sur la transmission pour la vitesse roue

On a déjà regarder a soit changer les bloc compteur pour du moderne mais on gardait pas le look et le budget était trop élevé.

Avec l'arduino je pensais trouver une solution moins onéreuse mais pas forcément plus simple :joy:

Bonjour,

Qu'est ce que c'est supposé faire ?
Je suppose que tu veux simplement faire
Valeur_PWM = compteur*10;

Je viens d'essayer si je supprime "analogread" comme tu me l'a conseiller ça ne sort plus aucun voltage

Sur cette pin 10 je souhaite un courant continu qui change en fonction de la fréquence en entré pin 2 avec les facteur de multiplication que j'ai appliqué selon les spécificités de mon système

La finalité est d'y brancher un moteur a courant continu à la place du multimètre

analogRead(compteur*10) ne corespond à rien du tout.
Affiches la valeur de compteur et de Valeur_PWM sur le moniteur série

La valeur de compteur est déjà affiché en hz. Elle correspond au nombre de passage de mon aimant devant mon capteur que j'ai simulé grâce au générateur de fonction et qui est fixé à 20Hz

Dès que je rajoute la ligne pour inscrire les Valeur_PWM ça me met en vrac ma ligne "RPM" qui affiche des valeurs incohérente

Et Valeur_PWM oscille entre 0 et 1000 on dirais sans être constant

Bonsoir Oaxel

Pour transposer les Hz en PWM il faut employer la fonction map()
Tu ajoutes 2 variables:

const int kmhHzMax = 25;
const int kmhPwmMax = 255;     //Max 255

et, avant l'affichage, tu ajoutes ça:

	Valeur_PWM = map(compteur, 0, kmhHzMax, 0, kmhPwmMax);

C'est bien claire que la définition est basse, avec les valeurs actuelles on a que 25 division, mais le principe est là.

Cordialement
jpbbricole

Valeur_PWM est calculée après la remise à zéro de compteur
Il faut faire la remise à éro à la toute fin de la loop()

Bonsoir kamill

Non, j'ai spécifié

la loop corrigée:


void loop() {
	delay(1000);
	Serial.print(compteur*60);
	Serial.println(" RPM");	//Nbr tr/min a la roue
	Serial.print(compteur);
	Serial.println(" Hz");	//Passage de l'aimant devant le capteur/seconde
	Serial.print(compteur*6.6096);
	Serial.println(" Km/h");	//Vitesse vehicule
	Valeur_PWM = map(compteur, 0, kmhHzMax, 0, kmhPwmMax);
	Serial.print("PWM "); Serial.println(Valeur_PWM);	//Vitesse vehicule
	compteur = 0;
	
	analogWrite(broche_PWM,Valeur_PWM);

}

Donc, pas de problème

Cordialement
jpbbricole

Est ce que tu as vu que je répondais à @0axel ???

Bonsoir kamill

Oupsss!! Milles excuses :blush: comme ça venait après mon post qui parlait de valeur_PWM...

Cordialement
jpbbricole

Super merci a vous, je regarde tout ça à tête reposé quand j'ai 5min dans la semaine :grin:

Après je passerai sur le hardware et je pourrais ajuster le programme à la réalité

Bonjour a tous,

J'ai réalisé la solution de jpbbricole mais toujours pareil j'ai des valeurs de tension qui varient énormément en sortie de pin 10 et qui varient de la même façon qu'avec le code que j'avais fait avant

Bonjour 0axel

Mets ton code, au complet sur le site.

Cordialement
jpbbricole

Si la mesure de la fréquence de rotation de la roue est bonne il n'y a aucune raison pour que la consigne du PWM fluctue.
Il faudrait peut-être travailler de manière un peu plus méthodique.

  1. Tu écris le code qui mesure la fréquence de rotation de la roue.
  2. Tu testes la valeur retournée en t'assurant qu'elle est juste et stable. Tu envoies la valeur par un Serial.writeln() et tu la visualises dans le traceur série.
  3. Tu ajoutes la conversion fréquence en valeur PWM
  4. Tu testes la valeur retournée en t'assurant qu'elle est juste et stable. Même principe qu'au pas (2)

Au passage, un aimant unique pour tester la fréquence de rotation de la roue c'est trop peu. La solution actuelle de multiplier par 10 la fréquence n'apporte rien, cela n'augmente pas la précision.
Si tu veux avoir une mesure de fréquence plus précise il faut :

  1. soit qu'il y ait plus d'aimants sur la roue. C'est pour ça que sur les ABS on trouve une couronne avec un nombre important d'encoches. L'augmentation du nombre d'aimants améliore la résolution de la mesure, le temps de mesure étant fixe (1 seconde actuellement)
  2. soit mesurer la période de rotation. En utilisant un timer pour compter le nombre d'impulsions d'une horloge de référence entre 2 passages de l'aimant devant le capteur. Là, l'augmentation du nombre d'aimant assurera une mesure plus rapide, la résolution de la mesure dépendant de la fréquence de l'horloge de référence.

Attention, la mesure de la période en règle générale donne un résultat plus rapidement, sauf à très basse vitesse et surtout à l'arrêt il faut une sécurité sinon on ne sort jamais de la fonction de mesure.