- Απαιτούμενα υλικά
- Υπολογισμός ταχύτητας και εμφάνιση σε αναλογικό ταχύμετρο
- Διάγραμμα κυκλώματος και συνδέσεις
- Επεξήγηση προγραμματισμού
Η μέτρηση της ταχύτητας / σ.α.λ. ενός οχήματος ή ενός κινητήρα ήταν πάντα ένα συναρπαστικό έργο που μπορείτε να δοκιμάσετε. Σε αυτό το έργο, πρόκειται να κατασκευάσουμε ένα αναλογικό ταχύμετρο χρησιμοποιώντας το Arduino. Θα χρησιμοποιήσουμε τη μονάδα IR Sensor για να μετρήσουμε την ταχύτητα. Υπάρχουν άλλοι τρόποι / αισθητήρες για αυτό, όπως ο αισθητήρας αίθουσας για τη μέτρηση της ταχύτητας, αλλά η χρήση ενός αισθητήρα υπερύθρων είναι εύκολη επειδή η μονάδα αισθητήρα υπερύθρων είναι πολύ κοινή συσκευή και μπορούμε να την αποκτήσουμε εύκολα από την αγορά και επίσης μπορεί να χρησιμοποιηθεί σε οποιονδήποτε τύπο μηχανοκίνητο όχημα.
Σε αυτό το έργο, θα δείξουμε ταχύτητα σε αναλογική και ψηφιακή μορφή. Κάνοντας αυτό το έργο, θα ενισχύσουμε επίσης τις δεξιότητές μας στην εκμάθηση του Arduino και του Stepper motor, καθώς αυτό το έργο περιλαμβάνει τη χρήση Διακοπτών και Χρονόμετρων. Στο τέλος αυτού του έργου θα μπορείτε να υπολογίσετε την ταχύτητα και τις αποστάσεις που καλύπτονται από οποιοδήποτε περιστρεφόμενο αντικείμενο και να τις εμφανίσετε σε μια οθόνη LCD 16x2 σε ψηφιακή μορφή και επίσης σε αναλογικό μετρητή. Ας ξεκινήσουμε λοιπόν με αυτό το κύκλωμα ταχύμετρου και οδομέτρου με το Arduino
Απαιτούμενα υλικά
- Arduino
- Ένας διπολικός βηματικός κινητήρας (4 καλώδια)
- Πρόγραμμα οδήγησης κινητήρα Stepper (L298n Module)
- Μονάδα αισθητήρα IR
- Οθόνη LCD 16 * 2
- 2.2k αντίσταση
- Σύνδεση καλωδίων
- Ψωμί.
- Παροχή ηλεκτρικού ρεύματος
- Εκτύπωση εικόνας ταχύμετρου
Υπολογισμός ταχύτητας και εμφάνιση σε αναλογικό ταχύμετρο
Ένας αισθητήρας IR είναι μια συσκευή που μπορεί να ανιχνεύσει την παρουσία ενός αντικειμένου μπροστά του. Χρησιμοποιήσαμε δύο ρότορες λεπίδας (ανεμιστήρα) και τοποθετήσαμε τον αισθητήρα υπερύθρων κοντά του με τέτοιο τρόπο ώστε κάθε φορά που περιστρέφονται οι λεπίδες ο αισθητήρας υπερύθρων να τον εντοπίζει. Στη συνέχεια, χρησιμοποιούμε τη βοήθεια χρονοδιακόπτων και διακοπών στο Arduino για τον υπολογισμό του χρόνου που απαιτείται για μία πλήρη περιστροφή του κινητήρα.
Εδώ σε αυτό το έργο, χρησιμοποιήσαμε τη διακοπή υψηλής προτεραιότητας για να ανιχνεύσουμε τις σ.α.λ. και το έχουμε διαμορφώσει σε λειτουργία ανόδου. Έτσι ώστε κάθε φορά που η έξοδος του αισθητήρα πηγαίνει LOW στο High, θα εκτελείται η συνάρτηση RPMCount () . Και καθώς έχουμε χρησιμοποιήσει δύο ρότορες λεπίδων, αυτό σημαίνει ότι η λειτουργία θα κληθεί 4 φορές σε μία περιστροφή.
Μόλις γίνει γνωστός ο χρόνος που μπορούμε να υπολογίσουμε το RPM χρησιμοποιώντας τους παρακάτω τύπους, όπου 1000 / χρόνος που απαιτείται θα μας δώσουν το RPS (περιστροφή ανά δευτερόλεπτο) και τον πολλαπλασιασμό περαιτέρω με 60 θα σας δώσει το RPM (περιστροφή ανά λεπτό)
rpm = (60/2) * (1000 / (millis () - time)) * REV / bladesInFan;
Αφού λάβετε RPM, η ταχύτητα μπορεί να υπολογιστεί με δεδομένο τύπο:
Ταχύτητα = rpm * (ακτίνα 2 * Pi *) / 1000
Γνωρίζουμε ότι το Pi = 3,14 και η ακτίνα είναι 4,7 ίντσες
Αλλά πρώτα πρέπει να μετατρέψουμε την ακτίνα σε μέτρα από ίντσες:
ακτίνα = ((ακτίνα * 2,54) / 100,0) μέτρα Ταχύτητα = rpm * 60,0 * (2,0 * 3,14 * ακτίνα) / 1000,0) σε χιλιόμετρα ανά ώρα
Εδώ πολλαπλασιάσαμε τις rpm με 60 για να μετατρέψουμε τις rpm σε rph (περιστροφή ανά ώρα) και διαιρούμενος με 1000 για να μετατρέψουμε τα μέτρα / ώρα σε χιλιόμετρα / ώρα.
Αφού έχουμε ταχύτητα σε kmh μπορούμε να δείξουμε αυτές τις τιμές απευθείας πάνω από την οθόνη LCD σε ψηφιακή μορφή, αλλά για να δείξουμε ταχύτητα στην αναλογική μορφή πρέπει να κάνουμε έναν ακόμη υπολογισμό για να μάθουμε όχι. βημάτων, ο βηματικός κινητήρας πρέπει να κινηθεί για να δείξει ταχύτητα στον αναλογικό μετρητή.
Εδώ έχουμε χρησιμοποιήσει έναν διπολικό κινητήρα 4 καλωδίων για αναλογικό μετρητή, ο οποίος έχει 1,8 μοίρες σημαίνει 200 βήματα ανά περιστροφή.
Τώρα πρέπει να δείξουμε 280 Kmh στο ταχύμετρο. Έτσι, για να δείξουμε 280 Kmh, ο κινητήρας stepper πρέπει να κινηθεί 280 μοίρες
Έτσι έχουμε maxSpeed = 280
Και το maxSteps θα είναι
maxSteps = 280 / 1.8 = 155 βήματα
Τώρα έχουμε μια συνάρτηση στον κώδικα Arduino μας, δηλαδή τη λειτουργία χάρτη που χρησιμοποιείται εδώ για να χαρτογραφήσει την ταχύτητα σε βήματα.
Βήματα = χάρτης (ταχύτητα, 0, maxSpeed , 0, maxSteps);
Τώρα έχουμε
βήματα = χάρτης (ταχύτητα, 0,280,0,155);
Μετά τον υπολογισμό των βημάτων μπορούμε να εφαρμόσουμε άμεσα αυτά τα βήματα στη λειτουργία κινητήρα stepper για να μετακινήσουμε τον κινητήρα stepper. Πρέπει επίσης να προσέξουμε τα τρέχοντα βήματα ή τη γωνία του κινητήρα stepper χρησιμοποιώντας δεδομένους υπολογισμούς
currSteps = Βήματα βήματα = currSteps-preSteps preSteps = currSteps
εδώ το CurrSteps είναι τα τρέχοντα βήματα που προέρχονται από τον τελευταίο υπολογισμό και το preSteps είναι τα τελευταία βήματα.
Διάγραμμα κυκλώματος και συνδέσεις
Το διάγραμμα κυκλώματος για αυτό το αναλογικό ταχύμετρο είναι απλό, εδώ έχουμε χρησιμοποιήσει οθόνη LCD 16x2 για να δείξουμε ταχύτητα σε ψηφιακή μορφή και βηματικό κινητήρα για περιστροφή της αναλογικής βελόνας ταχύμετρου.
Η οθόνη LCD 16x2 συνδέεται στις ακόλουθες αναλογικές ακίδες του Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Χρησιμοποιείται μια αντίσταση 2.2k για τη ρύθμιση της φωτεινότητας της οθόνης LCD. Μια μονάδα αισθητήρα IR, η οποία χρησιμοποιείται για την ανίχνευση της λεπίδας του ανεμιστήρα για τον υπολογισμό των στροφών, συνδέεται για διακοπή 0 σημαίνει πείρο D2 του Arduino.
Εδώ έχουμε χρησιμοποιήσει ένα πρόγραμμα οδήγησης κινητήρα stepper, δηλαδή το L293N module. Οι ακροδέκτες IN1, IN2, IN3 και IN4 του stepper μοτέρ συνδέονται απευθείας με τα D8, D9, D10 και D11 του Arduino. Οι υπόλοιπες συνδέσεις δίνονται στο Διάγραμμα κυκλώματος.
Επεξήγηση προγραμματισμού
Ο πλήρης κωδικός για το Arduino Speedomete r δίνεται στο τέλος, εδώ εξηγούμε λίγο σημαντικό μέρος αυτού.
Στο μέρος προγραμματισμού, έχουμε συμπεριλάβει όλες τις απαιτούμενες βιβλιοθήκες όπως stepper motor library, LiquidCrystal LCD library και δηλωμένες καρφίτσες για αυτές.
#περιλαμβάνω
Μετά από αυτό, έχουμε λάβει μερικές μεταβλητές και μακροεντολές για την εκτέλεση των υπολογισμών. Οι υπολογισμοί εξηγούνται ήδη στην προηγούμενη ενότητα.
πτητικό REV byte; μη υπογεγραμμένο μεγάλο int rpm, RPM; χωρίς υπογραφή μακρύ st = 0; χωρίς υπογραφή για μεγάλο χρονικό διάστημα · int ledPin = 13; int led = 0, RPMlen, prevRPM; int flag = 0; int flag1 = 1; #define bladesInFan 2 float radius = 4.7; // ιντσών int preSteps = 0; float stepAngle = 360.0 / (float) βήματαPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Μετά από αυτό, αρχικοποιούμε τον κινητήρα LCD, Serial, interrupt και Stepper στη λειτουργία εγκατάστασης
άκυρη ρύθμιση () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Ταχύμετρο"); καθυστέρηση (2000); attachInterrupt (0, RPMCount, RISING); }
Μετά από αυτό, διαβάζουμε rpm σε λειτουργία βρόχου και εκτελούμε έναν υπολογισμό για να πάρουμε ταχύτητα και να το μετατρέψουμε σε βήματα για να τρέξουμε stepper motor για να δείξουμε ταχύτητα σε αναλογική μορφή
void loop () { readRPM (); ακτίνα = ((ακτίνα * 2,54) / 100,0); // μετατροπή σε μετρητή int Ταχύτητα = ((float) RPM * 60,0 * (2,0 * 3,14 * ακτίνα) / 1000,0); // RPM σε 60 λεπτά, η διάμετρος του ελαστικού (2pi r) r είναι ακτίνα, 1000 για μετατροπή σε km int Βήματα = χάρτης (Ταχύτητα, minSpeed, maxSpeed, minSteps, maxSteps); εάν (flag1) { Serial.print (Ταχύτητα); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Ταχύτητα:"); lcd.print (Ταχύτητα); lcd.print ("Km / h"); flag1 = 0; } int currSteps = Βήματα;int βήματα = currSteps-preSteps; preSteps = currSteps; myStepper.step (βήματα); }
Εδώ έχουμε reapRPM () συνάρτηση για τον υπολογισμό RPM.
int readRPM () { if (REV> = 10 ή millis ()> = st + 1000) // ΘΑ ΕΝΗΜΕΡΩΣΕΙ ΜΕΤΑ ΤΗΝ ΚΑΘΕ 10 ΑΝΑΓΝΩΣΗ ή 1 δευτερόλεπτο στο ρελαντί { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - time)) * REV / bladesInFan; χρόνος = χιλιοστά (); REV = 0; int x = σ.α.λ. ενώ (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; καθυστέρηση (500) st = millis (); flag1 = 1; } }
Τέλος, έχουμε ρουτίνα διακοπής που είναι υπεύθυνη για τη μέτρηση της επανάστασης του αντικειμένου
άκυρο RPMCount () { REV ++; αν (led == LOW) { led = HIGH; } αλλιώς { led = LOW; } digitalWrite (ledPin, led); }
Έτσι μπορείτε απλά να δημιουργήσετε ένα αναλογικό ταχύμετρο χρησιμοποιώντας το Arduino. Αυτό μπορεί επίσης να κατασκευαστεί χρησιμοποιώντας αισθητήρα Hall και η ταχύτητα μπορεί να εμφανιστεί σε έξυπνο τηλέφωνο, ακολουθήστε αυτό το φροντιστήριο Arduino Speedometer για το ίδιο.