Tabla de contenido:

Use Arduino para mostrar las RPM del motor: 10 pasos (con imágenes)
Use Arduino para mostrar las RPM del motor: 10 pasos (con imágenes)

Video: Use Arduino para mostrar las RPM del motor: 10 pasos (con imágenes)

Video: Use Arduino para mostrar las RPM del motor: 10 pasos (con imágenes)
Video: Contador de REVOLUCIONES POR MINUTO o TACOMETRO con ARDUINO y sensor de EFECTO HALL 2024, Mes de julio
Anonim
Use Arduino para mostrar las RPM del motor
Use Arduino para mostrar las RPM del motor
Use Arduino para mostrar las RPM del motor
Use Arduino para mostrar las RPM del motor
Use Arduino para mostrar las RPM del motor
Use Arduino para mostrar las RPM del motor

Esta guía describirá cómo usé un Arduino UNO R3, una pantalla LCD de 16x2 con I2C y una tira de LED para usar como indicador de velocidad del motor y luz de cambio en mi auto de pista Acura Integra. Está escrito en términos de alguien con alguna experiencia o exposición al software Arduino o codificación en general, el software matemático MATLAB y la creación o modificación de circuitos eléctricos. En el futuro, esto puede revisarse para que sea más fácil de entender para alguien con poca o ninguna experiencia con estos temas.

Paso 1: elija un cable Sigal

Elija un cable Sigal
Elija un cable Sigal

Necesitará obtener una señal que se correlacione con la velocidad del motor. Es posible agregar un sistema que mida la velocidad del motor, pero es mucho más práctico conectarse a un cable existente que lleva información sobre la velocidad del motor. Un solo automóvil puede tener múltiples fuentes para esto, y puede variar enormemente incluso de un año a otro en un solo modelo de vehículo. Por el bien de este tutorial, usaré el ejemplo de mi automóvil, un Acura Integra LS 2000 modificado en pista. Encontré en mi motor (B18B1 con OBD2) que hay una salida de voltaje sin usar que es de 12 V de alto y cae a 0 V al completar una revolución completa.

Cosas que ayudarán a identificar una posible señal de velocidad del motor:

  • Diagrama de cableado de su vehículo
  • Búsqueda de foros para su vehículo que involucran señales de motor / ECU
  • Un mecánico amigable o un entusiasta de los automóviles.

Paso 2: extienda el cable a la placa Arduino

Extienda el cable a la placa Arduino
Extienda el cable a la placa Arduino
Extienda el cable a la placa Arduino
Extienda el cable a la placa Arduino

Una vez que haya elegido una señal adecuada, deberá extenderla a donde sea que esté colocando su placa Arduino. Decidí colocar el mío dentro del vehículo donde solía estar la radio, así que pasé el nuevo cable del motor, a través de una arandela de goma en la pared contra incendios, y directamente al área de la radio. Dado que ya hay una gran cantidad de guías prácticas sobre cómo pelar, soldar y proteger el cableado, no explicaré este proceso.

Paso 3: análisis de señales

Análisis de señales
Análisis de señales

Aquí es donde las cosas pueden complicarse. Tener una comprensión general del análisis y los controles de señales le ayudará mucho, pero es factible con pocos conocimientos.

Lo más probable es que el cable de señal elegido no arroje el valor exacto de la velocidad del motor. Será necesario darle forma y modificarlo para que proporcione el número exacto de RPM del motor que desea. Debido al hecho de que cada automóvil y cable de señal diferente elegido puede ser diferente, a partir de este punto explicaré cómo usé la señal de posición del distribuidor en mi Integra.

Mi señal es normalmente de 12 V y cae a 0 V al completar una rotación completa. Si conoce el tiempo para completar una rotación completa o un ciclo completo, esto se puede traducir fácilmente en revoluciones / min utilizando algunos conceptos básicos.

1 / (segundos por ciclo) = ciclos por segundo o Hz

Revoluciones por minuto = Hz * 60

Paso 4: codifique su análisis de señal

Codifique su análisis de señal
Codifique su análisis de señal

Este método requiere obtener el tiempo que tarda la señal de entrada en completar un ciclo completo. Afortunadamente, el software Arduino IDE tiene un comando que hace exactamente eso, PulseIn.

Este comando esperará una señal para cruzar un umbral, comenzará a contar y dejará de contar cuando se vuelva a cruzar el umbral. Hay algunos detalles que deben tenerse en cuenta al usar el comando, por lo que incluiré un enlace a la información de PulseIn aquí:

PulseIn devolverá un valor en microsegundos, y para mantener las matemáticas simples, esto debería convertirse inmediatamente en segundos normales. Siguiendo las matemáticas del paso anterior, esta duración de tiempo se puede equiparar directamente a RPM.

Nota: después de prueba y error, descubrí que el distribuidor completa dos rotaciones por cada rotación del cigüeñal del motor, así que simplemente dividí mi respuesta por 2 para dar cuenta de eso.

Paso 5: identificar un filtro

Identificar un filtro
Identificar un filtro

Si tiene suerte, su señal no tendrá "ruido" (fluctuaciones) y la velocidad del motor será exacta. En mi caso, había mucho ruido proveniente del distribuidor que a menudo daba voltajes lejos de lo esperado. Esto se convierte en lecturas muy falsas de la velocidad real del motor. Este ruido deberá filtrarse.

Después de un análisis de la señal, casi todo el ruido llegó a frecuencias (Hz) mucho más altas que las que emitía el motor en sí (lo que es cierto para la mayoría de los sistemas dinámicos reales). Esto significa que un filtro de paso bajo es un candidato ideal para encargarse de esto.

Un filtro de paso bajo permite que pasen las frecuencias bajas (deseadas) y atenúa las frecuencias altas (no deseadas).

Paso 6: filtrado: parte 1

Filtrado: Parte 1
Filtrado: Parte 1
Filtrado: Parte 1
Filtrado: Parte 1
Filtrado: Parte 1
Filtrado: Parte 1

El diseño del filtro se puede hacer a mano, sin embargo, utilizar MATLAB acelerará esto significativamente si tiene acceso al software.

Un filtro de paso bajo puede equipararse a una función de transferencia (o fracción) en el dominio de Laplace (dominio de frecuencia). La frecuencia de entrada se multiplicará por esta fracción y la salida es una señal filtrada que solo tiene la información que desea utilizar.

La única variable de la función es tau. Tau es igual a 1 / Omega, donde Omega es la frecuencia de corte que desea (debe estar en radianes por segundo). La frecuencia de corte es el límite donde se eliminarán las frecuencias más altas y se mantendrán las frecuencias más bajas.

Establezco la frecuencia de corte igual a una RPM que mi motor nunca alcanzará (990 RPM o 165 Hz). Los gráficos FFT muestran aproximadamente qué frecuencias transportaba mi señal sin procesar y las frecuencias que salieron del filtro.

Paso 7: filtrado: parte 2

Filtrado: Parte 2
Filtrado: Parte 2
Filtrado: Parte 2
Filtrado: Parte 2

Aquí se volvió a utilizar MATLAB por cuestión de tiempo. Se define la frecuencia de corte y, a partir de ella, se muestra la función de transferencia resultante. Tenga en cuenta que esta fracción solo se aplica al dominio de Laplace y no se puede usar directamente en un microcontrolador basado en el tiempo como Arduino UNO R3.

Paso 8: filtrado: parte 3

Filtrado: Parte 3
Filtrado: Parte 3
Filtrado: Parte 3
Filtrado: Parte 3

MATLAB tiene un comando que convertirá una función continua (dominio de frecuencia) en una función discreta (dominio de tiempo). La salida de este comando proporcionará una ecuación que se puede incorporar fácilmente al código IDE de Arduino.

Paso 9: filtrado: parte 4

Filtrado: Parte 4
Filtrado: Parte 4
Filtrado: Parte 4
Filtrado: Parte 4

En el boceto de Arduino, incluya las variables uey antes de la configuración. El comando float simplemente define cómo la variable almacenará los datos (cosas como valor máximo, decimales, etc.) y aquí se proporcionará un enlace para obtener más información sobre esto: https://www.arduino.cc/reference/en/language / varia…

En el bucle donde se lleva a cabo la conversión de la señal sin procesar a la velocidad del motor, incluya la variable uy la ecuación múltiple y. Hay varias formas de emplear esto, pero la variable u debe establecerse igual a la señal de entrada sin procesar que se está midiendo, y la variable y será el valor filtrado.

Recomendado: