- Materials necessaris
- Calculant la velocitat i mostrant-la al velocímetre analògic
- Diagrama de circuits i connexions
- Explicació de la programació
Mesurar la velocitat / rpm d’un vehicle o d’un motor sempre ha estat un projecte fascinant. En aquest projecte, construirem un velocímetre analògic amb Arduino. Utilitzarem el mòdul del sensor IR per mesurar la velocitat. Hi ha altres maneres / sensors per a això, com el sensor de sala per mesurar la velocitat, però utilitzar un sensor d’IR és fàcil perquè el mòdul de sensor d’IR és un dispositiu molt comú i el podem obtenir fàcilment del mercat i també es pot utilitzar en qualsevol tipus de automòbil.
En aquest projecte, mostrarem velocitat tant en forma analògica com digital. En fer aquest projecte, també millorarem les nostres habilitats en l’aprenentatge del motor Arduino i Stepper, ja que aquest projecte implica l’ús d’interrupcions i temporitzadors. Al final d'aquest projecte, podreu calcular la velocitat i les distàncies cobertes per qualsevol objecte giratori i mostrar-les en una pantalla LCD de 16x2 en format digital i també en un comptador analògic. Comencem, doncs, amb aquest Circuit de velocímetre i comptaquilòmetres amb Arduino
Materials necessaris
- Arduino
- Un motor pas a pas bipolar (4 fils)
- Controlador de motor pas a pas (mòdul L298n)
- Mòdul de sensor IR
- Pantalla LCD de 16 * 2
- Resistència de 2,2 k
- Connexió de cables
- Taula de pa.
- Font d'alimentació
- Impressió d'imatges del velocímetre

Calculant la velocitat i mostrant-la al velocímetre analògic
Un sensor IR és un dispositiu que pot detectar la presència d’un objecte al davant. Hem utilitzat dos rotors de pales (ventilador) i hem col·locat el sensor IR prop de manera que cada vegada que giren les pales el sensor IR el detecti. A continuació, utilitzem l'ajuda de temporitzadors i interrupcions a Arduino per calcular el temps que es triga a fer una rotació completa del motor.

Aquí, en aquest projecte, hem utilitzat la interrupció de màxima prioritat per detectar rpm i l’hem configurat en mode ascendent. De manera que, sempre que la sortida del sensor vagi BAIX a Alt, s’executarà la funció RPMCount () . I ja que hem utilitzat dos rotors de fulla, significa que la funció es cridarà 4 vegades en una volta.
Un cop conegut el temps que necessitem, podem calcular el RPM mitjançant les fórmules següents: on 1000 / temps que ens portarà ens donarà el RPS (revolució per segon) i, multiplicant-lo amb 60, obtindreu el RPM (revolució per minut).
rpm = (60/2) * (1000 / (millis () - temps)) * REV / bladesInFan;
Després d’obtenir RPM, la velocitat es pot calcular mitjançant la fórmula donada:
Velocitat = rpm * (2 * Pi * radi) / 1000
Sabem que Pi = 3,14 i el radi és de 4,7 polzades
Però primer hem de convertir el radi en metres de polzades:
radi = ((radi * 2,54) / 100,0) metres Velocitat = rpm * 60,0 * (2,0 * 3,14 * radi) / 1000,0) en quilòmetres per hora
Aquí hem multiplicat rpm per 60 per convertir rpm a rph (revolució per hora) i dividit per 1000 per convertir metres / hora a quilòmetres / hora.
Després de tenir velocitat en kmh podem mostrar aquests valors directament a la pantalla LCD en format digital, però per mostrar la velocitat en forma analògica hem de fer un càlcul més per esbrinar que no. de passos, el motor pas a pas s’ha de moure per mostrar la velocitat del comptador analògic.
Aquí hem utilitzat un motor pas a pas bipolar de 4 fils per al mesurador analògic, que té 1,8 graus significa 200 passos per revolució.

Ara hem de mostrar 280 kmh al velocímetre. Per tant, per mostrar 280 kmh el motor pas a pas ha de moure’s 280 graus
Per tant, tenim maxSpeed = 280
I maxSteps serà
maxSteps = 280 / 1,8 = 155 passos
Ara tenim una funció al nostre codi Arduino, és a dir, la funció de mapa que s’utilitza aquí per mapear la velocitat en passos.
Passos = mapa (velocitat, 0, maxSpeed , 0, maxSteps);
Ara ho tenim
passes = mapa (velocitat, 0,280,0,155);
Després de calcular els passos, podem aplicar aquests passos directament a la funció del motor pas a pas per moure el motor pas a pas. També hem de tenir cura dels passos o angles actuals del motor pas a pas mitjançant l’ús de càlculs donats
currSteps = Passos passos = currSteps-preSteps preSteps = currSteps
aquí currSteps és els passos actuals que provenen de l'últim càlcul i preSteps són els darrers passos realitzats.
Diagrama de circuits i connexions
El diagrama de circuits d’aquest velocímetre analògic és senzill, aquí hem utilitzat LCD de 16 x 2 per mostrar la velocitat en forma digital i un motor pas a pas per girar l’agulla del velocímetre analògic.
La pantalla LCD de 16 x 2 es connecta als següents pins analògics d’Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0

S’utilitza una resistència de 2,2 k per configurar la brillantor de la pantalla LCD. Un mòdul de sensor IR, que s'utilitza per detectar la fulla del ventilador per calcular la rpm, està connectat per interrompre 0 significa pin D2 d'Arduino.
Aquí hem utilitzat un controlador de motor pas a pas, és a dir, el mòdul L293N. Els pins IN1, IN2, IN3 i IN4 del controlador de motor pas a pas estan connectats directament a D8, D9, D10 i D11 d'Arduino. La resta de connexions es donen al diagrama de circuits.

Explicació de la programació
Al final es dóna el codi complet per a Arduino Speedomete r, aquí en detallem una part important.
A la part de programació, hem inclòs totes les biblioteques necessàries, com ara la biblioteca de motor pas a pas, la biblioteca LCD LiquidCrystal i els pins declarats.
#incloure
Després d'això, hem pres algunes variables i macros per realitzar els càlculs. Els càlculs ja s’expliquen a la secció anterior.
byte volàtil REV; sense signar int rpm llarg, RPM; st llarg sense signar = 0; molt de temps sense signar; int ledPin = 13; int led = 0, RPMlen, prevRPM; int flag = 0; int flag1 = 1; #define bladesInFan 2 radi flotant = 4,7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; floS maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Després d'això, inicialitzem el motor LCD, sèrie, interrupció i pas a pas a la funció de configuració
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("velocímetre"); endarreriment (2000); attachInterrupt (0, RPMCount, RISING); }
Després d'això, llegim la funció rpm en bucle i realitzem un càlcul per obtenir velocitat i la convertim en passos per executar el motor pas a pas per mostrar la velocitat en forma analògica.
bucle buit () { readRPM (); radi = ((radi * 2,54) / 100,0); // convergint en metres int Velocitat = ((flotant) RPM * 60,0 * (2,0 * 3,14 * radi) /1000,0); // RPM en 60 minuts, el diàmetre del pneumàtic (2pi r) r és de radi, 1000 per convertir en km int Passos = mapa (Velocitat, velocitat mínima, velocitat màxima, velocitats mínimes, valors màxims); 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 ("Velocitat"); lcd.print (velocitat); lcd.print ("Km / h"); bandera1 = 0; } int currSteps = Passos;int steps = currSteps-preSteps; preSteps = currSteps; myStepper.step (passos); }
Aquí tenim la funció reapRPM () per calcular RPM.
int readRPM () { if (REV> = 10 o millis ()> = st + 1000) // ACTUALITZARÀ AFETR CADA 10 LECTURES o 1 segon inactiu { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - temps)) * REV / bladesInFan; temps = millis (); REV = 0; int x = rpm; mentre que (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; retard (500); st = millis (); bandera1 = 1; } }
Finalment, tenim una rutina d’interrupcions que és responsable de mesurar la revolució de l’objecte
void RPMCount () { REV ++; if (led == BAIX) { led = HIGH; } else { led = BAIX; } digitalWrite (ledPin, led); }
Així és com podeu construir simplement un velocímetre analògic mitjançant Arduino. Això també es pot construir mitjançant el sensor Hall i la velocitat es pot visualitzar al telèfon intel·ligent. Seguiu aquest tutorial del velocímetre Arduino.
