Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
Para o nosso projeto de hoje, usamos o MAX7219CWG de 8 dígitos, bem como o Módulo infravermelho.
Etapa 2: STM32 NUCLEO-L432KC
Etapa 3: 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
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
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:
EU NÃO