- Materiali richiesti
- Calcolo della velocità e visualizzazione sul tachimetro analogico
- Schema elettrico e collegamenti
- Spiegazione della programmazione
Misurare la velocità / rpm di un veicolo o di un motore è sempre stato un progetto affascinante da provare. In questo progetto, costruiremo un tachimetro analogico utilizzando Arduino. Useremo il modulo sensore IR per misurare la velocità. Ci sono altri modi / sensori per questo, come il sensore di hall per misurare la velocità, ma usare un sensore IR è facile perché il modulo sensore IR è un dispositivo molto comune e possiamo ottenerlo facilmente dal mercato e può anche essere utilizzato su qualsiasi tipo di veicolo a motore.
In questo progetto, mostreremo la velocità sia in forma analogica che digitale. Facendo questo progetto, miglioreremo anche le nostre capacità nell'apprendimento di Arduino e motori passo-passo poiché questo progetto prevede l'uso di interrupt e timer. Alla fine di questo progetto sarai in grado di calcolare la velocità e le distanze percorse da qualsiasi oggetto rotante e visualizzarle su uno schermo LCD 16x2 in formato digitale e anche su misuratore analogico. Quindi iniziamo con questo tachimetro e circuito contachilometri con Arduino
Materiali richiesti
- Arduino
- Un motore passo-passo bipolare (4 fili)
- Driver del motore passo-passo (modulo L298n)
- Modulo sensore IR
- Display LCD 16 * 2
- Resistenza da 2.2k
- Cavi di collegamento
- Breadboard.
- Alimentazione elettrica
- Stampa dell'immagine del tachimetro
Calcolo della velocità e visualizzazione sul tachimetro analogico
Un sensore IR è un dispositivo in grado di rilevare la presenza di un oggetto davanti ad esso. Abbiamo utilizzato un rotore a due lame (ventola) e posizionato il sensore IR vicino ad esso in modo tale che ogni volta che le lame ruotano il sensore IR lo rilevi. Quindi usiamo l'aiuto di timer e interrupt in Arduino per calcolare il tempo impiegato per una rotazione completa del motore.
Qui in questo progetto, abbiamo utilizzato l'interrupt con la massima priorità per rilevare gli rpm e l'abbiamo configurato in modalità crescente. In modo che ogni volta che l'uscita del sensore passa da LOW a High, verrà eseguita la funzione RPMCount () . E poiché abbiamo utilizzato un rotore a due lame, significa che la funzione verrà chiamata 4 volte in un giro.
Una volta noto il tempo impiegato possiamo calcolare l'RPM utilizzando le formule sottostanti, Dove 1000 / tempo impiegato ci darà l'RPS (giro al secondo) e moltiplicandolo ulteriormente per 60 ti darà gli RPM (giro al minuto)
rpm = (60/2) * (1000 / (millis () - time)) * REV / bladeInFan;
Dopo aver ottenuto l'RPM, la velocità può essere calcolata con la formula data:
Velocità = rpm * (2 * Pi * raggio) / 1000
Sappiamo che Pi = 3,14 e il raggio è di 4,7 pollici
Ma prima dobbiamo convertire il raggio in metri da pollici:
raggio = ((raggio * 2,54) /100,0) metri Velocità = giri / min * 60,0 * (2,0 * 3,14 * raggio) / 1000,0) in chilometri orari
Qui abbiamo moltiplicato rpm per 60 per convertire rpm in rph (giri per ora) e diviso per 1000 per convertire metri / ora in chilometri / ora.
Dopo aver ottenuto la velocità in kmh possiamo mostrare questi valori direttamente sull'LCD in forma digitale, ma per mostrare la velocità in forma analogica dobbiamo fare un altro calcolo per scoprire no. di passi, il motore passo-passo dovrebbe muoversi per mostrare la velocità sul misuratore analogico.
Qui abbiamo usato un motore passo-passo bipolare a 4 fili per misuratore analogico, che ha 1,8 gradi significa 200 passi per giro.
Ora dobbiamo mostrare 280 Kmh sul tachimetro. Quindi, per mostrare 280 Kmh, il motore passo-passo deve muoversi di 280 gradi
Quindi abbiamo maxSpeed = 280
E lo sarà maxSteps
maxSteps = 280 / 1,8 = 155 passi
Ora abbiamo una funzione nel nostro codice Arduino, ovvero la funzione di mappa che viene utilizzata qui per mappare la velocità in passaggi.
Passi = mappa (velocità, 0, maxSpeed , 0, maxSteps);
Quindi ora abbiamo
passi = mappa (velocità, 0,280,0,155);
Dopo aver calcolato i passaggi, è possibile applicare direttamente questi passaggi nella funzione del motore passo-passo per spostare il motore passo-passo. Dobbiamo anche occuparci dei passi correnti o dell'angolo del motore passo-passo utilizzando i calcoli dati
currSteps = Steps passi = currSteps-preSteps preSteps = currSteps
qui currSteps sono i passi correnti che provengono dall'ultimo calcolo e preSteps sono gli ultimi passi eseguiti.
Schema elettrico e collegamenti
Lo schema del circuito per questo tachimetro analogico è semplice, qui abbiamo usato LCD 16x2 per mostrare la velocità in forma digitale e motore passo-passo per ruotare l'ago del tachimetro analogico.
L'LCD 16x2 è collegato ai seguenti pin analogici di Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Un resistore da 2.2k viene utilizzato per impostare la luminosità dell'LCD. Un modulo sensore IR, che viene utilizzato per rilevare la pala della ventola per calcolare il numero di giri, è collegato all'interrupt 0 significa pin D2 di Arduino.
Qui abbiamo utilizzato un driver del motore passo-passo, ovvero il modulo L293N. I pin IN1, IN2, IN3 e IN4 del driver del motore passo-passo sono collegati direttamente a D8, D9, D10 e D11 di Arduino. Il resto dei collegamenti sono riportati nello schema del circuito.
Spiegazione della programmazione
Alla fine viene fornito il codice completo per Arduino Speedomete r, qui ne spieghiamo alcune parti importanti.
Nella parte di programmazione, abbiamo incluso tutte le librerie richieste come la libreria del motore passo-passo, la libreria LCD LiquidCrystal e i pin dichiarati per loro.
#includere
Successivamente, abbiamo preso alcune variabili e macro per eseguire i calcoli. I calcoli sono già spiegati nella sezione precedente.
byte volatile REV; rpm lungo int senza segno, RPM; st lungo senza segno = 0; lungo tempo non firmato; int ledPin = 13; led int = 0, RPMlen, prevRPM; flag int = 0; int flag1 = 1; #define bladeInFan 2 raggio del galleggiante = 4.7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Successivamente, inizializziamo LCD, seriale, interrupt e motore passo-passo nella funzione di configurazione
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Tachimetro"); ritardo (2000); attachInterrupt (0, RPMCount, RISING); }
Successivamente, leggiamo rpm nella funzione loop ed eseguiamo un calcolo per ottenere la velocità e convertirla in passaggi per eseguire il motore passo-passo per mostrare la velocità in forma analogica.
void loop () { readRPM (); raggio = ((raggio * 2.54) /100.0); // convergente in meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * raggio) /1000.0); // RPM in 60 minuti, il diametro del pneumatico (2pi r) r è il raggio, 1000 da convertire in km int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Velocità:"); lcd.print (velocità); lcd.print ("Km / h"); flag1 = 0; } int currSteps = Passi;int passi = currSteps-preSteps; preSteps = currSteps; myStepper.step (passaggi); }
Qui abbiamo la funzione reapRPM () per calcolare gli RPM.
int readRPM () { if (REV> = 10 o millis ()> = st + 1000) // VERRÀ AGGIORNATO DOPO OGNI 10 LETTURE o 1 secondo inattivo { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - time)) * REV / bladeInFan; tempo = millisecondi (); REV = 0; int x = rpm; mentre (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; ritardo (500); st = millis (); flag1 = 1; } }
Infine, abbiamo la routine di interrupt che è responsabile della misurazione della rivoluzione dell'oggetto
void RPMCount () { REV ++; se (led == LOW) { led = HIGH; } altro { led = LOW; } digitalWrite (ledPin, led); }
Ecco come puoi semplicemente costruire un tachimetro analogico usando Arduino. Questo può anche essere costruito utilizzando il sensore Hall e la velocità può essere visualizzata sullo smartphone, segui questo tutorial sul tachimetro Arduino per lo stesso.