- Materiales necesarios
- Calcular la velocidad y mostrarla en el velocímetro analógico
- Diagrama de circuito y conexiones
- Explicación de programación
Medir la velocidad / rpm de un vehículo o un motor siempre ha sido un proyecto fascinante de probar. En este proyecto, vamos a construir un velocímetro analógico usando el Arduino. Usaremos el módulo Sensor IR para medir la velocidad. Hay otras formas / sensores para esto, como el sensor de pasillo para medir la velocidad, pero usar un sensor de infrarrojos es fácil porque el módulo de sensor de infrarrojos es un dispositivo muy común y podemos obtenerlo fácilmente en el mercado y también se puede usar en cualquier tipo de Vehículo de motor.
En este proyecto, vamos a mostrar velocidad tanto en forma analógica como digital. Al hacer este proyecto, también mejoraremos nuestras habilidades para aprender Arduino y el motor paso a paso, ya que este proyecto implica el uso de interrupciones y temporizadores. Al final de este proyecto podrás calcular la velocidad y distancias recorridas por cualquier objeto giratorio y mostrarlas en una pantalla LCD 16x2 en formato digital y también en medidor analógico. Así que comencemos con este circuito de velocímetro y odómetro con Arduino
Materiales necesarios
- Arduino
- Un motor paso a paso bipolar (4 hilos)
- Controlador de motor paso a paso (módulo L298n)
- Módulo de sensor de infrarrojos
- Pantalla LCD 16 * 2
- Resistencia de 2.2k
- Cables de conexión
- Tablero de circuitos.
- Fuente de alimentación
- Impresión de la imagen del velocímetro
Calcular la velocidad y mostrarla en el velocímetro analógico
Un sensor de infrarrojos es un dispositivo que puede detectar la presencia de un objeto frente a él. Hemos utilizado un rotor de dos aspas (ventilador) y hemos colocado el sensor de infrarrojos cerca de él de tal forma que cada vez que las aspas giran el sensor de infrarrojos lo detecta. Luego usamos la ayuda de temporizadores e interrupciones en Arduino para calcular el tiempo necesario para una rotación completa del motor.
Aquí en este proyecto, hemos utilizado la interrupción de máxima prioridad para detectar rpm y la hemos configurado en modo ascendente. De modo que siempre que la salida del sensor pase de LOW a High, se ejecutará la función RPMCount () . Y como hemos utilizado rotor de dos palas, significa que la función se llamará 4 veces en una revolución.
Una vez que se conoce el tiempo necesario, podemos calcular las RPM utilizando las fórmulas siguientes, donde 1000 / tiempo empleado nos dará el RPS (revolución por segundo) y multiplicarlo por 60 le dará las RPM (revolución por minuto)
rpm = (60/2) * (1000 / (milis () - tiempo)) * REV / bladesInFan;
Después de obtener las RPM, la velocidad se puede calcular mediante la fórmula dada:
Velocidad = rpm * (2 * Pi * radio) / 1000
Sabemos que Pi = 3,14 y el radio es de 4,7 pulgadas
Pero primero necesitamos convertir el radio a metros de pulgadas:
radio = ((radio * 2.54) /100.0) metros Velocidad = rpm * 60.0 * (2.0 * 3.14 * radio) / 1000.0) en kilómetros por hora
Aquí hemos multiplicado las rpm por 60 para convertir las rpm a rph (revoluciones por hora) y dividido por 1000 para convertir metros / hora a kilómetros / hora.
Después de tener la velocidad en kmh, podemos mostrar estos valores directamente sobre la pantalla LCD en forma digital, pero para mostrar la velocidad en forma analógica, necesitamos hacer un cálculo más para averiguar que no. de pasos, el motor paso a paso debe moverse para mostrar la velocidad en el medidor analógico.
Aquí hemos utilizado un motor paso a paso bipolar de 4 cables para medidor analógico, que tiene 1.8 grados significa 200 pasos por revolución.
Ahora tenemos que mostrar 280 Kmh en el velocímetro. Entonces, para mostrar 280 Kmh, el motor paso a paso debe moverse 280 grados
Entonces tenemos maxSpeed = 280
Y maxSteps será
maxSteps = 280 / 1.8 = 155 pasos
Ahora tenemos una función en nuestro código Arduino, a saber, función de mapa que se usa aquí para asignar la velocidad en pasos.
Pasos = mapa (velocidad, 0, maxSpeed , 0, maxSteps);
Entonces ahora tenemos
pasos = mapa (velocidad, 0,280,0,155);
Después de calcular los pasos, podemos aplicar directamente estos pasos en la función del motor paso a paso para mover el motor paso a paso. También debemos cuidar los pasos actuales o el ángulo del motor paso a paso utilizando los cálculos dados.
currSteps = Pasos pasos = currSteps-preSteps preSteps = currSteps
aquí currSteps son los pasos actuales que provienen del último cálculo y preSteps son los últimos pasos realizados.
Diagrama de circuito y conexiones
El diagrama de circuito de este velocímetro analógico es simple, aquí hemos utilizado una pantalla LCD de 16x2 para mostrar la velocidad en forma digital y un motor paso a paso para girar la aguja del velocímetro analógico.
La pantalla LCD de 16x2 está conectada a los siguientes pines analógicos de Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Se usa una resistencia de 2.2k para configurar el brillo de la pantalla LCD. Un módulo de sensor de infrarrojos, que se utiliza para detectar la pala del ventilador para calcular las rpm, está conectado para interrumpir 0 significa pin D2 de Arduino.
Aquí hemos utilizado un controlador de motor paso a paso llamado módulo L293N. Los pines IN1, IN2, IN3 e IN4 del controlador del motor paso a paso están conectados directamente a D8, D9, D10 y D11 de Arduino. El resto de conexiones se dan en el diagrama de circuito.
Explicación de programación
El código completo para Arduino Speedomete r se da al final, aquí estamos explicando algunas partes importantes.
En la parte de programación, hemos incluido todas las bibliotecas necesarias, como la biblioteca de motores paso a paso, la biblioteca LiquidCrystal LCD y los pines declarados para ellos.
#incluir
Después de esto, hemos tomado algunas variables y macros para realizar los cálculos. Los cálculos ya se explican en la sección anterior.
byte volátil REV; rpm largo int sin firmar, RPM; st largo sin signo = 0; sin firmar desde hace mucho tiempo; int ledPin = 13; int led = 0, RPMlen, prevRPM; int bandera = 0; int flag1 = 1; #define bladesInFan 2 flotante radio = 4.7; // pulgada int prePasos = 0; flotar stepAngle = 360.0 / (flotar) pasosPerRevolución; float minSpeed = 0; float maxSpeed = 280.0; flotar minSteps = 0; flotar maxSteps = maxSpeed / stepAngle;
Después de esto, inicializamos el LCD, Serie, interrupción y motor paso a paso en la función de configuración
configuración vacía () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, SALIDA); lcd.begin (16,2); lcd.print ("Velocímetro"); retraso (2000); attachInterrupt (0, RPMCount, RISING); }
Después de esto, leemos rpm en la función de bucle y realizamos un cálculo para obtener la velocidad y la convertimos en pasos para ejecutar el motor paso a paso para mostrar la velocidad en forma analógica.
bucle vacío () { readRPM (); radio = ((radio * 2.54) /100.0); // convergiendo en metros int Velocidad = ((flotación) RPM * 60.0 * (2.0 * 3.14 * radio) /1000.0); // RPM en 60 minutos, diámetro de la llanta (2pi r) r es radio, 1000 para convertir en km int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Velocidad); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Velocidad:"); lcd.print (Velocidad); lcd.print ("Km / h"); flag1 = 0; } int currSteps = Pasos;int steps = currSteps-preSteps; preSteps = currSteps; myStepper.step (pasos); }
Aquí tenemos la función reapRPM () para calcular las RPM.
int readRPM () { if (REV> = 10 o millis ()> = st + 1000) // ACTUALIZARÁ DESPUÉS DE CADA 10 LECTURAS o 1 segundo en inactivo { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (milis () - tiempo)) * REV / bladesInFan; tiempo = milis (); REV = 0; int x = rpm; mientras que (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; retraso (500); st = milis (); flag1 = 1; } }
Finalmente, tenemos la rutina de interrupción que es responsable de medir la revolución del objeto
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Así es como puede simplemente construir un velocímetro analógico usando Arduino. Esto también se puede construir usando el sensor Hall y la velocidad se puede mostrar en un teléfono inteligente, siga este tutorial del velocímetro Arduino para lo mismo.