Medidor RPM com STM32: 8 etapas
Medidor RPM com STM32: 8 etapas
Anonim
Medidor RPM com STM32
Medidor RPM com STM32

Embora seja um tanto incômodo de comprar (porque não está disponível em muitas lojas na Internet), acho necessário discutir o STM32 L432KC. Este chip merece um carinho especial, pois é ULTRA BAIXO POTÊNCIA. Porém, para quem não possui o STM32, ele pode ser substituído neste projeto pelo Arduino Uno. Para fazer isso, basta alterar o pino da entrada de interrupção.

Vamos então criar um medidor de RPM usando o STM32 L432KC e um sensor infravermelho. Este mesmo programa também pode ser usado para medir a velocidade do vento. O recurso de baixo consumo de energia deste microcontrolador é perfeito para IOT.

Etapa 1: Módulos

Módulos
Módulos
Módulos
Módulos

Para o nosso projeto de hoje, usamos o MAX7219CWG de 8 dígitos, bem como o Módulo infravermelho.

Etapa 2: STM32 NUCLEO-L432KC

STM32 NUCLEO-L432KC
STM32 NUCLEO-L432KC

Etapa 3: demonstração

Demonstração
Demonstração

Em nossa montagem, temos o STM32, o display de 8 dígitos e a entrada de pulso. O cartão infravermelho tem um fototransistor e um LED que capta a luz refletindo em uma fita branca. Essa fita é presa a uma roda e, a cada giro, vai gerar um pulso, que será capturado pela interrupção STM32.

Temos um diodo e um capacitor na montagem que foram usados para evitar que o ruído do sinal da leitura da fita chegasse ao STM32, o que faria com que ele interpretasse o liga e desliga.

A demonstração mostra nosso projeto, assim como o medidor Minipa (ambos em operação).

Etapa 4: Montagem

conjunto
conjunto

Etapa 5: Programa

Faremos um programa no qual o módulo infravermelho irá disparar uma interrupção no STM32 L432KC a cada “turno”, e faremos os cálculos para mostrar o RPM no display.

Etapa 6: Bibliotecas

Bibliotecas
Bibliotecas

Adicione a seguinte biblioteca "DigitLedDisplay".

Basta acessar "Sketch >> Incluir Bibliotecas >> Gerenciar Bibliotecas…"

Etapa 7: Código Fonte

Bibliotecas e variáveis

Vamos iniciar o código-fonte incluindo a biblioteca DigitLedDisplay. Mostraremos o objeto de exibição. Eu defino o pino de interrupção, que será 12. Além disso, insiro um operador volátil para o contador de RPM e o tempo para evitar problemas de colisão.

/ * Incluir Biblioteca DigitLedDisplay * / # include "DigitLedDisplay.h" / * Arduino Pin para Exibir Pino 7 para DIN, 6 para CS, 5 para 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

Configurar

No Setup configuramos o funcionamento do display, bem como configuramos a interrupção como Rising.

void setup () {Serial.begin (115200); / * Defina o brilho mínimo: 1, máximo: 15 * / ld.setBright (10); / * Definir a contagem de dígitos * / ld.setDigitLimit (8); ld.printDigit (0); attachInterrupt (digitalPinToInterrupt (pin), interruptPin, RISING); rpm = 0; tempo = milis (); }

Ciclo

Finalmente, determinamos o intervalo de 1 em 1 minuto para atualizar a exibição. Depois de limpar a tela, imprimimos o RPM. Executamos a função que a interrupção irá chamar. Calculamos o RPM e o tempo de atualização.

loop vazio () {atraso (1000); ld.clear (); ld.printDigit (rpm); } void interruptPin () {rpm = 60 * 1000 / (milis () - tempo antigo); tempo = milis (); }

Etapa 8: Arquivos

Baixe os arquivos:

PDF

EU NÃO