Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Aunque es algo molesto comprarlo (porque no está disponible en muchas tiendas de Internet), me parece necesario hablar sobre STM32 L432KC. Este chip merece un cariño especial, ya que es ULTRA BAJA POTENCIA. Sin embargo, para aquellos que no poseen el STM32, puede ser reemplazado en este proyecto por el Arduino Uno. Para hacer esto, simplemente cambie el pin de la entrada de interrupción.
Entonces creemos un medidor de RPM usando el STM32 L432KC y un sensor de infrarrojos. Este mismo programa también se puede utilizar para medir la velocidad del viento. La función de bajo consumo de este microcontrolador es perfecta para IOT.
Paso 1: módulos
Para nuestro proyecto de hoy, utilizamos el MAX7219CWG de 8 dígitos, así como el módulo de infrarrojos.
Paso 2: STM32 NUCLEO-L432KC
Paso 3: demostración
En nuestro ensamblaje, tenemos el STM32, la pantalla de 8 dígitos y la entrada de pulsos. La tarjeta de infrarrojos tiene un fototransistor y un LED que capta la luz rebotando en una cinta blanca. Esta cinta está adherida a una rueda y, en cada giro, generará un pulso, que será capturado por la interrupción STM32.
Tenemos un diodo y un condensador en el conjunto que se utilizaron para evitar que el ruido de la señal de lectura de la cinta llegara al STM32, lo que haría interpretar el encendido y apagado.
La demostración muestra nuestro proyecto, así como el medidor Minipa (ambos en funcionamiento).
Paso 4: Montaje
Paso 5: Programa
Haremos un programa en el que el módulo de infrarrojos disparará una interrupción en el STM32 L432KC cada "giro", y haremos los cálculos para mostrar las RPM en la pantalla.
Paso 6: Bibliotecas
Agregue la siguiente biblioteca "DigitLedDisplay".
Simplemente acceda a "Sketch >> Incluir bibliotecas >> Administrar bibliotecas …"
Paso 7: código fuente
Bibliotecas y variables
Comencemos con el código fuente, incluida la biblioteca DigitLedDisplay. Mostraremos el objeto de visualización. Establezco el pin de interrupción, que será 12. Además, entro un operador volátil tanto para el contador de RPM como para el tiempo para evitar problemas de colisión.
/ * Incluye biblioteca DigitLedDisplay * / # incluye "DigitLedDisplay.h" / * Pin Arduino para mostrar Pin 7 en DIN, 6 en CS, 5 en CLK * / // DigitLedDisplay ld = DigitLedDisplay (7, 6, 5); // arduino DigitLedDisplay ld = DigitLedDisplay (4, 2, 3); // STM32 L432KC int pin = 12; // pino de interrupção (módulo IR) volatile unsigned int rpm; // contador de rpm volatile unsigned long timeold; //tempo
Configuración
En el Setup, configuramos la operación de visualización, así como configuramos la interrupción como Ascendente.
configuración vacía () {Serial.begin (115200); / * Establece el brillo mínimo: 1, máximo: 15 * / ld.setBright (10); / * Establecer el recuento de dígitos * / ld.setDigitLimit (8); ld.printDigit (0); attachInterrupt (digitalPinToInterrupt (pin), interruptPin, RISING); rpm = 0; timeold = millis (); }
Círculo
Finalmente, determinamos el intervalo de 1 en 1 minuto para actualizar la pantalla. Después de limpiar la pantalla, imprimimos las RPM. Realizamos la función que llamará la interrupción. Calculamos RPM y tiempo de actualización.
bucle vacío () {retraso (1000); ld.clear (); ld.printDigit (rpm); } void interruptPin () {rpm = 60 * 1000 / (millis () - timeold); timeold = millis (); }
Paso 8: archivos
Descarga los archivos:
INO