Table des matières:

Utilisez Arduino pour afficher le RPM du moteur : 10 étapes (avec des images)
Utilisez Arduino pour afficher le RPM du moteur : 10 étapes (avec des images)

Vidéo: Utilisez Arduino pour afficher le RPM du moteur : 10 étapes (avec des images)

Vidéo: Utilisez Arduino pour afficher le RPM du moteur : 10 étapes (avec des images)
Vidéo: COMMENT VOIR la VITESSE d'un MOTEUR avec ARDUINO 2024, Novembre
Anonim
Utiliser Arduino pour afficher le RPM du moteur
Utiliser Arduino pour afficher le RPM du moteur
Utiliser Arduino pour afficher le RPM du moteur
Utiliser Arduino pour afficher le RPM du moteur
Utiliser Arduino pour afficher le RPM du moteur
Utiliser Arduino pour afficher le RPM du moteur

Ce guide décrira comment j'ai utilisé un Arduino UNO R3, un écran LCD 16x2 avec I2C et une bande LED à utiliser comme indicateur de vitesse du moteur et voyant de changement de vitesse dans ma voiture de piste Acura Integra. Il est écrit en termes d'une personne ayant une certaine expérience ou une exposition au logiciel Arduino ou au codage en général, au logiciel mathématique MATLAB et à la création ou à la modification de circuits électriques. À l'avenir, cela pourrait être révisé pour être plus facile à comprendre pour quelqu'un avec peu ou pas d'expérience avec ces sujets.

Étape 1: Choisissez un fil Sigal

Choisissez un fil Sigal
Choisissez un fil Sigal

Vous aurez besoin d'obtenir un signal qui correspond au régime du moteur. Il est possible d'ajouter un système qui mesure la vitesse du moteur mais il est beaucoup plus pratique de puiser dans un fil existant qui transporte les informations de vitesse du moteur. Une seule voiture peut avoir plusieurs sources pour cela, et cela peut varier énormément même d'une année à l'autre sur un seul modèle de véhicule. Pour les besoins de ce tutoriel, je vais utiliser l'exemple de ma voiture, une piste modifiée 2000 Acura Integra LS. J'ai trouvé sur mon moteur (B18B1 avec OBD2) une tension de sortie inutilisée de 12 V élevée et tombant à 0 V après avoir effectué un tour complet.

Éléments qui aideront à identifier un signal potentiel de régime moteur:

  • Schéma de câblage pour votre véhicule
  • Recherche de forums pour votre véhicule impliquant des signaux moteur/ECU
  • Un sympathique mécanicien ou passionné de voitures

Étape 2: Étendre le fil à la carte Arduino

Étendre le fil à la carte Arduino
Étendre le fil à la carte Arduino
Étendre le fil à la carte Arduino
Étendre le fil à la carte Arduino

Une fois que vous avez choisi un signal approprié, vous devrez l'étendre à l'endroit où vous placez votre carte Arduino. J'ai décidé de placer le mien à l'intérieur du véhicule où se trouvait la radio, alors j'ai acheminé le nouveau fil du moteur, à travers un œillet en caoutchouc dans le mur coupe-feu, et jusqu'à la zone de la radio. Comme il existe déjà une quantité abondante de guides pratiques sur le dénudage, le soudage et la protection du câblage, je n'expliquerai pas ce processus.

Étape 3: Analyse du signal

Analyse des signaux
Analyse des signaux

C'est là que les choses peuvent se compliquer. Avoir une compréhension générale de l'analyse du signal et des commandes vous aidera beaucoup, mais c'est faisable avec peu de connaissances.

Le fil de signal choisi ne crachera probablement pas la valeur exacte de la vitesse du moteur. Il devra être façonné et modifié pour donner le nombre exact de tours par minute du moteur que vous souhaitez. Étant donné que chaque voiture et chaque fil de signal choisis peuvent être différents, à partir de ce moment, je vais expliquer comment j'ai utilisé le signal de position du distributeur sur mon Integra.

Mon signal est normalement de 12 V et tombe à 0 V lorsque je termine une rotation complète. Si vous connaissez le temps nécessaire pour effectuer une rotation complète ou un cycle complet, cela peut facilement être traduit en tours/minute en utilisant certains concepts de base.

1 / (secondes par cycle) = cycles par seconde, ou Hz

Tours par minute = Hz * 60

Étape 4: Codez votre analyse de signal

Codez votre analyse de signal
Codez votre analyse de signal

Cette méthode nécessite d'obtenir le temps nécessaire au signal d'entrée pour effectuer un cycle complet. Heureusement, le logiciel Arduino IDE a une commande qui fait exactement cela, PulseIn.

Cette commande attend qu'un signal franchisse un seuil, commence à compter et arrête de compter lorsque le seuil est à nouveau franchi. Certains détails doivent être notés lors de l'utilisation de la commande, j'inclurai donc un lien vers les informations de PulseIn ici:

PulseIn renverra une valeur en microsecondes, et pour garder le calcul simple, cela devrait être immédiatement converti en secondes normales. En suivant les calculs de l'étape précédente, cette durée peut être assimilée directement en RPM.

Remarque: après essais et erreurs, j'ai découvert que le distributeur effectue deux rotations pour chaque rotation du vilebrequin du moteur, j'ai donc simplement divisé ma réponse par 2 pour en tenir compte.

Étape 5: Identifiez un filtre

Identifier un filtre
Identifier un filtre

Si vous avez de la chance, votre signal n'aura pas de « bruit » (fluctuations) et votre régime moteur sera exact. Dans mon cas, il y avait beaucoup de bruit provenant du distributeur qui donnait souvent des tensions loin de ce qu'on attend. Cela se transforme en des lectures très fausses de la vitesse réelle du moteur. Ce bruit devra être filtré.

Après une analyse du signal, presque tout le bruit est arrivé à des fréquences (Hz) bien supérieures à ce que le moteur lui-même produisait (ce qui est vrai pour la plupart des systèmes dynamiques réels). Cela signifie qu'un filtre passe-bas est un candidat idéal pour s'occuper de cela.

Un filtre passe-bas laisse passer les basses fréquences (désirées) et atténue les hautes fréquences (indésirables).

Étape 6: Filtrage: Partie 1

Filtrage: partie 1
Filtrage: partie 1
Filtrage: partie 1
Filtrage: partie 1
Filtrage: partie 1
Filtrage: partie 1

La conception du filtre peut être effectuée à la main, mais l'utilisation de MATLAB accélérera considérablement cette opération si vous avez accès au logiciel.

Un filtre passe-bas peut être assimilé à une fonction de transfert (ou fraction) dans le domaine de Laplace (domaine fréquentiel). La fréquence d'entrée sera multipliée par cette fraction et la sortie est un signal filtré qui ne contient que les informations que vous souhaitez utiliser.

La seule variable de la fonction est tau. Tau est égal à 1 / Omega, où Omega est la fréquence de coupure que vous souhaitez (doit être en radians par seconde). La fréquence de coupure est la limite où les fréquences supérieures à celle-ci seront supprimées et les fréquences inférieures à celle-ci seront conservées.

Je règle la fréquence de coupure égale à un RPM que mon moteur n'atteindra jamais (990 RPM ou 165 Hz). Les graphiques FFT montrent à peu près quelles fréquences mon signal brut transportait et les fréquences qui sortaient du filtre.

Étape 7: Filtrage: Partie 2

Filtrage: partie 2
Filtrage: partie 2
Filtrage: partie 2
Filtrage: partie 2

Ici, MATLAB a été à nouveau utilisé pour gagner du temps. La fréquence de coupure est définie, et à partir de laquelle la fonction de transfert résultante est affichée. Gardez à l'esprit que cette fraction ne s'applique qu'au domaine Laplace et ne peut pas être directement utilisée sur un microcontrôleur basé sur le temps comme Arduino UNO R3.

Étape 8: Filtrage: Partie 3

Filtrage: Partie 3
Filtrage: Partie 3
Filtrage: Partie 3
Filtrage: Partie 3

MATLAB a une commande qui convertira une fonction continue (domaine fréquentiel) en une fonction discrète (domaine temporel). La sortie de cette commande fournira une équation qui peut être facilement incorporée dans le code Arduino IDE.

Étape 9: Filtrage: Partie 4

Filtrage: Partie 4
Filtrage: Partie 4
Filtrage: Partie 4
Filtrage: Partie 4

Dans l'esquisse Arduino, incluez les variables u et y avant la configuration. La commande float définit simplement comment la variable stockera les données (des choses comme la valeur maximale, les décimales, etc.) et un lien vers plus d'informations à ce sujet sera fourni ici: https://www.arduino.cc/reference/en/language /varia…

Dans la boucle où s'effectue la conversion du signal brut en régime moteur, incluez la variable u et l'équation multiple y. Il existe plusieurs façons d'utiliser cela, mais la variable u doit être définie sur le signal d'entrée brut mesuré et la variable y sera la valeur filtrée.

Conseillé: