Innholdsfortegnelse:

Bruk Arduino til å vise motorens turtall: 10 trinn (med bilder)
Bruk Arduino til å vise motorens turtall: 10 trinn (med bilder)

Video: Bruk Arduino til å vise motorens turtall: 10 trinn (med bilder)

Video: Bruk Arduino til å vise motorens turtall: 10 trinn (med bilder)
Video: Her er hvorfor Koenigsegg bil koster $ 4,8 millioner. Den kjører som en rakett og er verdt prisen. 2024, November
Anonim
Bruk Arduino til å vise motorens turtall
Bruk Arduino til å vise motorens turtall
Bruk Arduino til å vise motorens turtall
Bruk Arduino til å vise motorens turtall
Bruk Arduino til å vise motorens turtall
Bruk Arduino til å vise motorens turtall

Denne guiden vil beskrive hvordan jeg brukte en Arduino UNO R3, en 16x2 LCD -skjerm med I2C og en LED -stripe som skulle brukes som motorhastighetsmåler og skiftelys i min Acura Integra -sporbil. Det er skrevet i form av noen med noen erfaring eller eksponering for Arduino -programvare eller koding generelt, den matematiske programvaren MATLAB, og opprette eller endre elektriske kretser. I fremtiden kan dette bli revidert for å være lettere å forstå for noen med liten eller ingen erfaring med disse emnene.

Trinn 1: Velg en Sigal Wire

Velg en Sigal Wire
Velg en Sigal Wire

Du må få et signal som korrelerer med motorens turtall. Det er mulig å legge til et system som måler motorhastighet, men det er langt mer praktisk å koble til en eksisterende ledning som bærer informasjon om motorhastighet. En enkelt bil kan ha flere kilder for dette, og den kan variere veldig til og med fra år til år på en enkelt bilmodell. Av hensyn til denne opplæringen vil jeg bruke eksemplet på bilen min, et spor endret 2000 Acura Integra LS. Jeg fant på motoren min (B18B1 med OBD2) at det er en ubrukt spenning ute som er 12V høy og faller til 0V etter fullstendig omdreining.

Ting som vil hjelpe til med å identifisere et potensielt motorhastighetssignal:

  • Koblingsskjema for bilen din
  • Søker i forum etter bilen din som involverer motor-/ECU -signaler
  • En vennlig mekaniker eller bilentusiast

Trinn 2: Utvid Wire til Arduino Board

Forleng ledningen til Arduino Board
Forleng ledningen til Arduino Board
Forleng ledningen til Arduino Board
Forleng ledningen til Arduino Board

Når du har valgt et passende signal, må du utvide det til uansett hvor du plasserer Arduino -kortet. Jeg bestemte meg for å plassere min inne i bilen der radioen pleide å være, så jeg førte den nye ledningen fra motoren, gjennom en gummigummi i brannveggen og rett til radioområdet. Siden det allerede finnes en mengde veiledninger om stripping, lodding og beskyttelse av ledninger, vil jeg ikke forklare denne prosessen.

Trinn 3: Signalanalyse

Signalanalyse
Signalanalyse

Det er her ting kan bli kompliserte. Å ha en generell forståelse av signalanalyse og kontroller vil hjelpe deg langt, men er mulig med liten kunnskap.

Signaltråden som er valgt vil mest sannsynlig ikke spytte ut den nøyaktige verdien av motorhastigheten. Den må formes og modifiseres til å gi det eksakte antallet motorturtall du vil ha. På grunn av det faktum at hver bil og signalkabel som er valgt kan være forskjellige, vil jeg fra dette tidspunktet forklare hvordan jeg brukte posisjonssignalet fra distributøren på min Integra.

Mitt signal er normalt 12V og faller til 0V når jeg fullfører en full rotasjon. Hvis du kjenner tiden for å fullføre en full rotasjon, eller en hel syklus, kan dette lett oversettes til omdreininger/min ved hjelp av noen grunnleggende konsepter.

1 / (sekunder per syklus) = sykluser per sekund, eller Hz

Omdreininger per minutt = Hz * 60

Trinn 4: Kode din signalanalyse

Kode din signalanalyse
Kode din signalanalyse

Denne metoden krever at du får tiden det tar for inngangssignalet å fullføre en hel syklus. Heldigvis har Arduino IDE -programvaren en kommando som gjør akkurat det, PulseIn.

Denne kommandoen vil vente på at et signal skal krysse en terskel, begynne å telle og slutte å telle når terskelen er krysset igjen. Det er noen detaljer som bør bemerkes når du bruker kommandoen, så jeg vil inkludere en lenke til informasjon om PulseIn her:

PulseIn vil returnere en verdi i mikrosekunder, og for å holde matematikken enkel bør dette umiddelbart konverteres til normale sekunder. Etter regnestykket på forrige trinn kan denne tidsperioden sidestilles direkte med RPM.

Merk: Etter prøving og feiling oppdaget jeg at distributøren fullfører to rotasjoner for hver rotasjon av motorens veivaksel, så jeg delte mitt svar med 2 for å ta hensyn til det.

Trinn 5: Identifiser et filter

Identifiser et filter
Identifiser et filter

Hvis du er heldig vil signalet ditt ikke ha noe "støy" (svingninger), og motorhastigheten vil være nøyaktig. I mitt tilfelle kom det mye støy fra distributøren som ofte ga spenninger langt fra det som er forventet. Dette blir til meget falske avlesninger av det faktiske motorhastigheten. Denne støyen må filtreres bort.

Etter litt signalanalyse kom nesten all støy med frekvenser (Hz) langt høyere enn det motoren selv sendte ut (noe som er sant for de fleste virkelige dynamiske systemer). Dette betyr at et lavpassfilter er en ideell kandidat for å ta vare på dette.

Et lavpassfilter lar lave frekvenser (ønsket) passere og demper høye frekvenser (uønsket).

Trinn 6: Filtrering: Del 1

Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1

Designet av filteret kan gjøres for hånd, men bruk av MATLAB vil øke dette betydelig hvis du har tilgang til programvaren.

Et lavpassfilter kan sidestilles med en overføringsfunksjon (eller brøk) i Laplace -domenet (frekvensdomene). Inngangsfrekvensen vil bli multiplisert med denne brøkdelen, og utgangen er et filtrert signal som bare har informasjonen du vil bruke.

Den eneste variabelen i funksjonen er tau. Tau er lik 1 / Omega, hvor Omega er cutoff -frekvensen du ønsker (må være i radianer per sekund). Grensefrekvensen er grensen hvor frekvenser høyere enn den vil bli fjernet og frekvenser lavere enn den vil bli beholdt.

Jeg angir grensefrekvensen lik en o / min motoren min aldri vil nå (990 RPM eller 165 Hz). FFT -grafene viser omtrent hvilke frekvenser råsignalet mitt bar og frekvensene som kom ut av filteret.

Trinn 7: Filtrering: Del 2

Filtrering: Del 2
Filtrering: Del 2
Filtrering: Del 2
Filtrering: Del 2

Her ble MATLAB utnyttet igjen for tidens skyld. Avbruddsfrekvensen er definert, og fra den vises den resulterende overføringsfunksjonen. Husk at denne brøkdelen bare gjelder for Laplace-domenet og ikke kan brukes direkte på en tidsbasert mikrokontroller som Arduino UNO R3.

Trinn 8: Filtrering: Del 3

Filtrering: Del 3
Filtrering: Del 3
Filtrering: Del 3
Filtrering: Del 3

MATLAB har en kommando som vil konvertere en kontinuerlig funksjon (frekvensdomene) til en diskret funksjon (tidsdomene). Utdataene fra denne kommandoen vil gi en ligning som enkelt kan inkorporeres i Arduino IDE -koden.

Trinn 9: Filtrering: Del 4

Filtrering: Del 4
Filtrering: Del 4
Filtrering: Del 4
Filtrering: Del 4

I Arduino -skissen, inkluder variablene u og y før oppsettet. Flytekommandoen definerer ganske enkelt hvordan variabelen skal lagre data (ting som maksimalverdi, desimaler osv.), Og en lenke til mer informasjon om dette vil bli gitt her: https://www.arduino.cc/reference/en/language /varia …

I sløyfen der konverteringen fra råsignalet til motorhastighet finner sted, inkluderer du u -variabelen og y -multiplikasjonen. Det er flere måter å bruke dette på, men variabelen u bør settes lik det råe inngangssignalet som måles, og variabelen y vil være den filtrerte verdien.

Anbefalt: