Πίνακας περιεχομένων:

Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής: 10 βήματα (με εικόνες)
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής: 10 βήματα (με εικόνες)

Βίντεο: Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής: 10 βήματα (με εικόνες)

Βίντεο: Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής: 10 βήματα (με εικόνες)
Βίντεο: Hack: modify 20A DC 10-60V PWM Motor Speed Controller and control with Arduino 2024, Νοέμβριος
Anonim
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής
Χρησιμοποιήστε το Arduino για να εμφανίσετε RPM μηχανής

Αυτός ο οδηγός θα περιγράψει τον τρόπο με τον οποίο χρησιμοποίησα ένα Arduino UNO R3, μια οθόνη LCD 16x2 με I2C και μια λωρίδα LED που θα χρησιμοποιηθεί ως μετρητής στροφών κινητήρα και μετατόπιση φωτός στο μονοπάτι Acura Integra. Γράφεται με όρους κάποιου με κάποια εμπειρία ή έκθεση στο λογισμικό Arduino ή την κωδικοποίηση γενικά, το μαθηματικό λογισμικό MATLAB και τη δημιουργία ή την τροποποίηση ηλεκτρικών κυκλωμάτων. Στο μέλλον αυτό μπορεί να αναθεωρηθεί για να είναι πιο εύκολο να κατανοηθεί για κάποιον με μικρή έως καθόλου εμπειρία με αυτά τα θέματα.

Βήμα 1: Επιλέξτε ένα Sigal Wire

Επιλέξτε ένα Sigal Wire
Επιλέξτε ένα Sigal Wire

Θα χρειαστεί να λάβετε ένα σήμα που συσχετίζεται με τις στροφές του κινητήρα. Είναι δυνατόν να προστεθεί ένα σύστημα που μετρά τις στροφές του κινητήρα, αλλά είναι πολύ πιο πρακτικό να πατήσετε σε ένα υπάρχον καλώδιο που μεταφέρει πληροφορίες για τις στροφές του κινητήρα. Ένα μόνο αυτοκίνητο μπορεί να έχει πολλαπλές πηγές για αυτό και μπορεί να διαφέρει πολύ από έτος σε έτος σε ένα μοντέλο οχήματος. Για χάρη αυτού του σεμιναρίου θα χρησιμοποιήσω το παράδειγμα του αυτοκινήτου μου, ένα κομμάτι τροποποιημένο 2000 Acura Integra LS. Βρήκα στον κινητήρα μου (B18B1 με OBD2) υπάρχει μια αχρησιμοποίητη τάση που είναι 12V υψηλή και πέφτει στα 0V με την ολοκλήρωση μιας πλήρους περιστροφής.

Πράγματα που θα σας βοηθήσουν να εντοπίσετε ένα πιθανό σήμα στροφών κινητήρα:

  • Διάγραμμα καλωδίωσης για το αυτοκίνητό σας
  • Αναζήτηση φόρουμ για το όχημά σας που περιλαμβάνει σήματα κινητήρα/ECU
  • Ένας φιλικός μηχανικός ή λάτρης του αυτοκινήτου

Βήμα 2: Επεκτείνετε το Wire στο Arduino Board

Επέκταση Wire στο Arduino Board
Επέκταση Wire στο Arduino Board
Επέκταση Wire στο Arduino Board
Επέκταση Wire στο Arduino Board

Μόλις επιλέξετε ένα κατάλληλο σήμα, θα χρειαστεί να το επεκτείνετε σε όποιο μέρος και αν τοποθετήσετε τον πίνακα Arduino. Αποφάσισα να τοποθετήσω το δικό μου μέσα στο όχημα εκεί που ήταν το ραδιόφωνο, έτσι έβγαλα το νέο καλώδιο από τον κινητήρα, μέσα από μια λαστιχένια σχάρα στον τοίχο της φωτιάς, και ακριβώς στην περιοχή του ραδιοφώνου. Δεδομένου ότι υπάρχει ήδη άφθονος αριθμός οδηγιών για την απογύμνωση, τη συγκόλληση και την προστασία της καλωδίωσης, δεν θα εξηγήσω αυτήν τη διαδικασία.

Βήμα 3: Ανάλυση σήματος

Ανάλυση σήματος
Ανάλυση σήματος

Εδώ μπορεί να περιπλέκονται τα πράγματα. Η γενική κατανόηση της ανάλυσης και των ελέγχων σήματος θα σας βοηθήσει πολύ, αλλά είναι εφικτό με λίγες γνώσεις.

Το καλώδιο σήματος που επιλέγεται πιθανότατα δεν θα φτύσει την ακριβή τιμή των στροφών του κινητήρα. Θα πρέπει να διαμορφωθεί και να τροποποιηθεί ώστε να δίνει τον ακριβή αριθμό στροφών ανά λεπτό του κινητήρα που θέλετε. Λόγω του γεγονότος ότι κάθε διαφορετικό καλώδιο αυτοκινήτου και σήματος που επιλέξατε μπορεί να είναι διαφορετικό, από αυτό το σημείο και μετά θα εξηγήσω πώς χρησιμοποίησα το σήμα θέσης από τον διανομέα στο Integra μου.

Το σήμα μου είναι κανονικά 12V και πέφτει στα 0V όταν ολοκληρώνω μία πλήρη περιστροφή. Εάν γνωρίζετε το χρόνο για να ολοκληρώσετε μια πλήρη περιστροφή ή έναν πλήρη κύκλο, αυτό μπορεί εύκολα να μεταφραστεί σε περιστροφές/λεπτό χρησιμοποιώντας ορισμένες βασικές έννοιες.

1 / (δευτερόλεπτα ανά κύκλο) = κύκλοι ανά δευτερόλεπτο ή Hz

Περιστροφές ανά λεπτό = Hz * 60

Βήμα 4: Κωδικοποιήστε την ανάλυση σήματος

Κωδικοποιήστε την ανάλυση σήματος
Κωδικοποιήστε την ανάλυση σήματος

Αυτή η μέθοδος απαιτεί τον χρόνο που απαιτείται για να ολοκληρωθεί το σήμα εισόδου για έναν πλήρη κύκλο. Ευτυχώς, το λογισμικό Arduino IDE έχει μια εντολή που κάνει ακριβώς αυτό, το PulseIn.

Αυτή η εντολή θα περιμένει ένα σήμα για να περάσει ένα όριο, θα αρχίσει να μετράει και θα σταματήσει να μετράει όταν το κατώφλι ξαναπεραστεί. Υπάρχουν μερικές λεπτομέρειες που πρέπει να σημειωθούν κατά τη χρήση της εντολής, οπότε θα συμπεριλάβω έναν σύνδεσμο προς πληροφορίες του PulseIn εδώ:

Το PulseIn θα επιστρέψει μια τιμή σε μικροδευτερόλεπτα και για να κρατήσει τα μαθηματικά απλά αυτό θα πρέπει να μετατραπεί αμέσως σε κανονικά δευτερόλεπτα. Μετά τα μαθηματικά στο προηγούμενο βήμα, αυτή η χρονική διάρκεια μπορεί να εξομοιωθεί απευθείας σε RPM.

Σημείωση: μετά από δοκιμή και λάθος ανακάλυψα ότι ο διανομέας ολοκληρώνει δύο περιστροφές για κάθε περιστροφή του στροφαλοφόρου άξονα του κινητήρα, οπότε απλώς διαιρούσα την απάντησή μου με 2 για να το εξηγήσω.

Βήμα 5: Προσδιορίστε ένα φίλτρο

Προσδιορίστε ένα φίλτρο
Προσδιορίστε ένα φίλτρο

Εάν είστε τυχεροί, το σήμα σας δεν θα έχει «θόρυβο» (διακυμάνσεις) και οι στροφές του κινητήρα σας θα είναι ακριβείς. Στην περίπτωσή μου, υπήρχε πολύς θόρυβος από τον διανομέα που συχνά έδινε τάσεις μακριά από αυτό που αναμενόταν. Αυτό μετατρέπεται σε πολύ ψευδείς μετρήσεις της πραγματικής ταχύτητας του κινητήρα. Αυτός ο θόρυβος θα πρέπει να φιλτραριστεί.

Μετά από κάποια ανάλυση σήματος, σχεδόν όλος ο θόρυβος ήρθε σε συχνότητες (Hz) πολύ υψηλότερες από αυτές που έβγαζε ο ίδιος ο κινητήρας (κάτι που ισχύει για τα περισσότερα πραγματικά δυναμικά συστήματα). Αυτό σημαίνει ότι ένα φίλτρο χαμηλής διέλευσης είναι ο ιδανικός υποψήφιος για να το φροντίσει αυτό.

Ένα φίλτρο χαμηλής διέλευσης επιτρέπει τη διέλευση χαμηλών συχνοτήτων (επιθυμητό) και εξασθενεί τις υψηλές συχνότητες (ανεπιθύμητες).

Βήμα 6: Φιλτράρισμα: Μέρος 1

Φιλτράρισμα: Μέρος 1
Φιλτράρισμα: Μέρος 1
Φιλτράρισμα: Μέρος 1
Φιλτράρισμα: Μέρος 1
Φιλτράρισμα: Μέρος 1
Φιλτράρισμα: Μέρος 1

Ο σχεδιασμός του φίλτρου μπορεί να γίνει με το χέρι, ωστόσο η χρήση του MATLAB θα το επιταχύνει σημαντικά εάν έχετε πρόσβαση στο λογισμικό.

Ένα φίλτρο χαμηλής διέλευσης μπορεί να εξομοιωθεί με μια συνάρτηση μεταφοράς (ή κλάσμα) στον τομέα Laplace (τομέας συχνοτήτων). Η συχνότητα εισόδου θα πολλαπλασιαστεί με αυτό το κλάσμα και η έξοδος είναι ένα φιλτραρισμένο σήμα που έχει μόνο τις πληροφορίες που θέλετε να χρησιμοποιήσετε.

Η μόνη μεταβλητή στη συνάρτηση είναι το tau. Το Tau είναι ίσο με 1 / Ωμέγα, όπου το Ωμέγα είναι η συχνότητα διακοπής που θέλετε (πρέπει να είναι σε ακτίνια ανά δευτερόλεπτο). Η συχνότητα διακοπής είναι το όριο όπου οι συχνότητες υψηλότερες από αυτές θα αφαιρεθούν και οι συχνότητες χαμηλότερες από αυτές θα διατηρηθούν.

Ρυθμίζω τη συχνότητα διακοπής ίση με RPM που ο κινητήρας μου δεν θα φτάσει ποτέ (990 RPM ή 165 Hz). Τα γραφήματα FFT δείχνουν περίπου ποιες συχνότητες έφερε το ακατέργαστο σήμα μου και τις συχνότητες που βγήκαν από το φίλτρο.

Βήμα 7: Φιλτράρισμα: Μέρος 2

Φιλτράρισμα: Μέρος 2
Φιλτράρισμα: Μέρος 2
Φιλτράρισμα: Μέρος 2
Φιλτράρισμα: Μέρος 2

Εδώ το MATLAB χρησιμοποιήθηκε ξανά για χάρη του χρόνου. Ορίζεται η συχνότητα διακοπής και από αυτό εμφανίζεται η συνάρτηση μεταφοράς που προκύπτει. Λάβετε υπόψη ότι αυτό το κλάσμα ισχύει μόνο για τον τομέα Laplace και δεν μπορεί να χρησιμοποιηθεί απευθείας σε μικροελεγκτή με βάση το χρόνο, όπως το Arduino UNO R3.

Βήμα 8: Φιλτράρισμα: Μέρος 3

Φιλτράρισμα: Μέρος 3
Φιλτράρισμα: Μέρος 3
Φιλτράρισμα: Μέρος 3
Φιλτράρισμα: Μέρος 3

Το MATLAB έχει μια εντολή που μετατρέπει μια συνεχή συνάρτηση (πεδίο συχνότητας) σε μια διακριτή συνάρτηση (χρονικός τομέας). Η έξοδος αυτής της εντολής παρέχει μια εξίσωση που μπορεί εύκολα να ενσωματωθεί στον κώδικα Arduino IDE.

Βήμα 9: Φιλτράρισμα: Μέρος 4

Φιλτράρισμα: Μέρος 4
Φιλτράρισμα: Μέρος 4
Φιλτράρισμα: Μέρος 4
Φιλτράρισμα: Μέρος 4

Στο σκίτσο του Arduino, συμπεριλάβετε τις μεταβλητές u και y πριν από τη ρύθμιση. Η εντολή float ορίζει απλώς τον τρόπο με τον οποίο η μεταβλητή θα αποθηκεύει δεδομένα (πράγματα όπως η μέγιστη τιμή, δεκαδικοί αριθμοί, κλπ …) και ένας σύνδεσμος για περισσότερες πληροφορίες θα παρέχεται εδώ: https://www.arduino.cc/reference/en/language /varia…

Στο βρόχο όπου λαμβάνει χώρα η μετατροπή από το ακατέργαστο σήμα στις στροφές του κινητήρα, συμπεριλάβετε τη μεταβλητή u και την πολλαπλή εξίσωση y. Υπάρχουν πολλοί τρόποι για να το χρησιμοποιήσετε, αλλά η μεταβλητή u πρέπει να οριστεί ίση με το ακατέργαστο σήμα εισόδου που μετριέται και η μεταβλητή y θα είναι η φιλτραρισμένη τιμή.

Συνιστάται: