Desenvolva um Sistema de Alarme STM32 com Sensores Avançados

Este artigo unificado combina técnicas avançadas e práticas para desenvolver um sistema de alarme robusto usando sensores de movimento e microcontroladores STM32Famílias de microcontroladores STM32: Uma visão geralFamílias de microcontroladores STM32: Uma visão geralProfundo mergulho nas famílias STM32, explorando arquitetura, aplicações e desempenho. Descubra dicas e casos práticos para projetos embarcados.. Abordaremos desde a seleção de componentes até técnicas de otimização energética, com exemplos reais de código, diagramas e estratégias para evitar falsos positivos.

Índice🔗

1. Arquitetura do Sistema

2. Materiais e Seleção de Componentes

3. Configuração de Hardware e Periféricos

4. Desenvolvimento do Firmware

5. Lógica de Detecção e Técnicas de Debounce

6. Comunicação com Atuadores e Alertas

7. Otimização de EnergiaGerenciamento de energia e modos de baixo consumo no STM32Gerenciamento de energia e modos de baixo consumo no STM32Aprenda a reduzir o consumo de energia com os modos STM32, garantindo eficiência e prolongando a vida útil de baterias em sistemas embarcados.

8. Exemplo Prático Completo

9. Testes e Validação

Arquitetura do Sistema🔗

O sistema integra três blocos principais:

graph TD A[Sensor PIR/Radar] -->|Sinal Digital| B(STM32) B -->|GPIO/PWM| C[Sirene/LED] B -->|UART/I2C| D[GSM/Display LCD] E[Bateria] --> B E --> A E --> C

Materiais e Seleção de Componentes🔗

Sensores Recomendados

SensorTipoConsumoAlcanceAplicação
HC-SR501PIR65μA7mInteriores
RCWL-0516Radar Doppler3mA5-7mAmbientes com poeira
VL53L1XToF Laser20mA4mPrecisão milimétrica

Microcontrolador STM32

Componentes Adicionais

  • Atuadores: Buzzer (5V), LED, relé.
  • Módulo GSM (SIM800L) para alertas remotos.
  • Fonte de 3.3V/5V com regulador de tensão.

Configuração de Hardware e Periféricos🔗

Esquema de Conexões

graph LR A[RCWL-0516] -- GPIO PA0 --> B[STM32F411] B -- GPIO PA1 --> C[Buzzer] B -- UART2 --> D[SIM800L] E[3.7V Battery] --> B E --> D

Configuração de GPIOs e Interrupções

// STM32CubeIDE (Artigo 1)
void MX_GPIO_Init(void) {
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  // Sensor PIR (Entrada)
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  // Sirene (Saída PWM)
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// Configuração de EXTI (Artigo 2)
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);

Timer para Debounce e Filtragem

$$ t_{debounce} = \frac{(ARR + 1) \times (PSC + 1)}{f_{clock}} $$

Exemplo: TimerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. de 100ms com clock de 84MHz:

htim3.Instance = TIM3;
htim3.Init.Prescaler = 8399;  // 84MHz / 8400 = 10kHz
htim3.Init.Period = 999;      // 1000 contagens = 100ms
HAL_TIM_Base_Start(&htim3);

Desenvolvimento do Firmware🔗

Estrutura Básica com Interrupção

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  if (GPIO_Pin == GPIO_PIN_0) {
    if (__HAL_TIM_GET_COUNTER(&htim3) > DEBOUNCE_TIME) {
      trigger_alarm();
      send_sms("Movimento detectado!");
    }
    __HAL_TIM_SET_COUNTER(&htim3, 0); // Reinicia timer
  }
}

Controle de Atuadores com PWM

void trigger_alarm(void) {
  TIM_OC_InitTypeDef sConfig = {0};
  sConfig.OCMode = TIM_OCMODE_PWM1;
  sConfig.Pulse = 500;  // PWM de 50% (2kHz)
  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfig, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  HAL_Delay(5000);  // Alarme ativo por 5s
  HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);
}

Lógica de Detecção e Técnicas de Debounce🔗

Filtragem por Média Móvel

$$ S_{filtrado}[n] = \frac{1}{N} \sum_{i=0}^{N-1} S[n-i] $$

Implementação em C:

#define SAMPLE_SIZE 5
uint8_t readings[SAMPLE_SIZE] = {0};
uint8_t index = 0;
bool is_movement_detected() {
  readings[index] = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
  index = (index + 1) % SAMPLE_SIZE;
  uint8_t sum = 0;
  for (int i = 0; i < SAMPLE_SIZE; i++) sum += readings[i];
  return (sum >= 3);  // Confirma se 3/5 leituras são positivas
}

Debounce por Hardware

  • Use capacitor de 100nF em paralelo com o sensor.
  • Resistores de pull-up/down conforme necessidade.

Comunicação com Atuadores e Alertas🔗

Envio de SMS via GSM (SIM800L)

void send_sms(const char *message) {
  HAL_UART_Transmit(&huart2, "AT+CMGF=1\r", 10, 100);  // Modo texto
  HAL_UART_Transmit(&huart2, "AT+CMGS=\"+5511987654321\"\r", 24, 100);
  HAL_UART_Transmit(&huart2, message, strlen(message), 100);
  HAL_UART_Transmit(&huart2, "\x1A", 1, 100);  // Ctrl+Z para enviar
}

Controle de Múltiplos Atuadores

Otimização de Energia🔗

Modos de Baixo Consumo do STM32

ModoConsumoWake-up SourcesAplicação
Sleep1.2mAEXTI, TimerDetecção ocasional
Stop20μAEXTI, RTCSensores de intervalo
Standby2.1μAReset, RTC, EXTILongo período inativo
void enter_low_power(void) {
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  SystemClock_Config();  // Reativa clock após wake-up
}

Exemplo Prático Completo🔗

Hardware

  • MCU: STM32F411RE (Black Pill)
  • Sensor: RCWL-0516 (3.3V)
  • Comunicação: SIM800L (GSM)
  • Alarme: Buzzer ativo (5V) com transistor driver.

Código Principal

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_USART2_UART_Init();
  HAL_TIM_Base_Start(&htim3);
  while (1) {
    if (is_movement_detected()) {
      trigger_alarm();
      send_sms("Alerta: Movimento na área monitorada!");
      enter_low_power();  // Retorna ao modo de baixo consumo
    }
  }
}

Testes e Validação🔗

Etapas de Teste

1. Unitário:

2. Integração:

  • Simule falsos positivos (ex: luzes bruscas) para ajustar debounce.
  • Teste envio de SMS com cartão SIM real.

3. Campo:

  • Monitore consumo energético em standby (alvo: < 50μA).
  • Avalie tempo de resposta total (alvo: < 200ms).

Depuração Avançada

Considerações Finais

Este sistema combina eficiência energética, resposta rápida e robustez contra interferências. Para ambientes críticos, considere redundância com múltiplos sensores e criptografia nas comunicações. A plataforma STM32O que é STM32 e por que usá-lo?O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora. oferece flexibilidade para expansões futuras, como integração com IA para reconhecimento de padrões.

graph TB A[Detecção] --> B{Validação} B -->|Válido| C[Acionar Alarme] B -->|Inválido| D[Ignorar] C --> E[Registrar Evento] E --> F[Enviar Alerta] F --> G[Modo Baixo Consumo]

Dica Pro: Para sistemas multi-sensor, utilize RTOS para gerenciar tarefasImplementando um sistema multitarefa com STM32 e RTOSImplementando um sistema multitarefa com STM32 e RTOSAprenda a migrar de código bare-metal para multitarefa robusta usando FreeRTOS no STM32. Descubra técnicas avançadas e exemplos práticos. concorrentes e priorizar processos críticos.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados