FAVORITAR
Faça login para como favoritoFechar

Detecção de Queda Livre com acelerômetro LIS3DH e Franzininho C0

Introdução

A identificação de queda livre é uma aplicação frequente em sistemas com  acelerômetros, sendo muito utilizada em dispositivos como smartphones, wearables e sistemas de segurança. Essa técnica permite que dispositivos reconheçam quando estão em uma queda, o que pode disparar uma série de ações automáticas, como a ativação de alarmes de emergência ou sistemas de proteção.

Neste terceiro artigo com o acelerômetro LIS3DH, vamos implementar a detecção de queda livre que acionará um LED e exibirá a informação pela Serial. 

Circuito:

Configuração CubeMx

  1. Abra STM32Cube, crie um novo projeto e selecione o microcontrolador “STM32C011F6P6”. 
  1. Vá para a página de configurações de relógio e em HCLK digite 48 MHz para a frequência de saída desejada do sistema. Depois volte para a página de configuração dos pinos, selecione “Trace and Debug” e  habilite “Serial Wire.
  1. Para configurar a UART, selecione o pino PA10 como “USART1_RX” e PA9 como “USART1_TX”. Em “Connectivity” selecione a opção “USART1” e em Mode escolha o “Asynchronous”. As demais configurações deixe padrão. 
  1. Para a configuração do SPI, vá em “Connectivity’ > “SPI”, habilite o modo “FullDuplex Master” e  mude o “Clock Parameter” > “Prescaler (Baud Rate)” para 32. Os demais parâmetros de configuração não será necessário modificar. 
  1. O pino de CS é necessário configurar manualmente, então, selecione o PA4 como “GPIO_Output”.
  1. Configure também o pino PB6 como “GPIO_Output”, nele está conectado o LED.
  1. Por fim, gere o código em “Project” > “Generate Code”.

Implementação Código

  1. Crie em “Inc” “lis3dh.h” e em “Src” crie “lis3dh.c”. 
  1. Em  lis3dh.h, adicione algumas definições (#define) dos registradores do acelerômetro LIS3DH, assim como os protótipos das funções que serão implementadas em lis3dh.c:
  1. Em li3dh.c, adicione a inclusão das bibliotecas e seguintes variáveis: 
  1. Depois, adicione as funções de leitura e escrita por SPI:
  1. Em seguida, crie as funções de configuração dos registradores no LIS3DH para trabalhar com identificação de queda livre:
  • CTRL_REG1: Ative o sensor e defina a taxa de dados (ODR). Por exemplo, para configurar uma taxa de 50Hz com todos os eixos ativos, envie: 0x97 (10010111).
  • CTRL_REG3: Configure as interrupções. Para roteá-las para o pino INT1, envie: 0x40 (01000000).
  • CTRL_REG4 (0x23): Configure a faixa de medição, se necessário. Para uma faixa de ±2g, por exemplo, envie: 0x88 (10001000).
  • INT1_CFG (0x30): Configure o tipo de evento para gerar a interrupção. Para detecção de queda livre, você deve monitorar quando todas as acelerações nos eixos caem abaixo de um determinado limiar. Configure: 0x95 (10010101) para habilitar a interrupção em todos os eixos com “6-direction movement recognition”.
  • INT1_THS: Defina o limiar de aceleração para detectar queda livre. Valores baixos, como 0x10 (0010000).
  • INT1_DURATION: Defina a duração mínima para considerar como queda livre. Um valor baixo, como 0x03 é  suficiente para detectar quedas rápidas.
  1. Ainda no arquivo li3dh.c, crie a função para identificar queda livre:

Essa função verifica se houve uma queda livre lendo o registrador de interrupção do acelerômetro. Primeiro, checa se o bit que indica uma interrupção de queda livre está ativado. Se estiver, a função então verifica se os eixos X, Y e Z estão todos abaixo do limite configurado. Se sim, a função aciona envia uma mensagem pela UART e alterna o estado de um LED.

  1. Veja na imagem abaixo o código do arquivo lis3dh.c
  1. Depois da finalização do código em  lis3dh.c, acesse main.c. Nele incluímos a biblioteca “lis3dh.h” adicionando ao ínicio do código:
  1. Depois modificamos o int main com:

Nessa etapa, é chamado a configuração do acelerômetro com LIS3DH_FreeFallConfig e depois é lido continuamente o estado com freeFallStatus.

Seminário Linux Embarcado 2024: Evento Presencial em São Paulo

Participe do Seminário Linux Embarcado 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.

Inscreva-se

Gravação

Ao finalizar o código, partiremos para gravação. Nessa etapa você pode utilizar o ST-Link seguindo as conexões da imagem abaixo e clicando em “run” no STM32CubeIde.

Ou você pode optar por utilizar um cabo usb e gravar conforme explicado no seguinte tutorial: gravar-franzininho-c0-via-stm32cubeprogrammer

Funcionamento

Para testar o funcionamento simule um queda, como jogar a placa.

Desafio extra 

No exemplo deste artigo estamos verificando constantemente o status da queda livre dentro no loop infinito. No entanto, essa não é a melhor abordagem, como desafio, configure um pino na Franzininho C0 para interrupção externa e o conecte no “INT1” do acelerômetro, então chame a verificação do status da queda livre sempre que houver interrupção no pino. Em caso de dúvidas temos um artigo explicando como configurar interrupção externa, acesse:  https://embarcados.com.br/aprendendo-a-trabalhar-com-interrupcoes-externas-e-usart-na-franzininho-c0/

Conclusão

Neste artigo, demonstramos como configurar o acelerômetro LIS3DH para detectar quedas livres usando a Franzininho C0. Configuramos os registradores necessários e a implementamos o código para verificar o status de queda, acionando um LED e enviando uma mensagem pela Serial. Essa solução básica permite a identificação de quedas de forma simples e pode ser expandida com o uso de interrupções para otimizar o desempenho do sistema.

Outros artigos da série

<< Medição de ângulo com acelerômetro LIS3DH e Franzininho C0
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Detecção de Queda Livre com acelerômetro LIS3DH e Franzininho C0

EM DESTAQUE

WEBINARS

LEIA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste:


Seminário de
Sistemas Embarcados e IoT 2024
 
Data: 25/06 | Local: Hotel Holiday Inn Anhembi, São Paulo-SP
 
GARANTA SEU INGRESSO

 
close-link