Pular para o conteúdo principal

Usando a IMU integrada da reCamera Pro para detecção de inclinação e agitação

Introdução​

Este artigo explica como usar a unidade de medição inercial (IMU) de seis eixos integrada da reCamera Pro — o giroscópio ICM-42670-P — para implementar a detecção de inclinação e agitação do dispositivo. Quando o dispositivo é inclinado ou agitado, o sistema reproduzirá avisos de voz correspondentes pelo alto-falante integrado. Por meio deste tutorial, você aprenderá como ler dados brutos do giroscópio via driver Linux IIO, reproduzir sons de aviso usando o driver de áudio ALSA e, por fim, integrar um programa completo de detecção e alerta.

Preparação de Hardware​

  • uma reCamera Pro
reCamera Pro

Princípio de Implementação​

Ao coletar dados brutos de velocidade angular do giroscópio integrado (ICM-42670-P), o sistema determina se o dispositivo foi inclinado ou agitado. A implementação atual usa uma lógica simples baseada em limiar, que pode ser otimizada posteriormente com base nos requisitos reais.

Detecção de Agitação​

Quando o valor absoluto da velocidade angular em qualquer eixo excede um limiar predefinido, isso é determinado como uma agitação.

Detecção de Inclinação​

Quando o valor absoluto da velocidade angular em qualquer eixo excede um limiar predefinido, isso é determinado como uma inclinação.

Aquisição de Dados do Giroscópio Integrado​

O ambiente Linux da reCamera Pro usa o driver IIO (Industrial I/O), que expõe dados e configurações do sensor por meio da interface sysfs, permitindo que aplicações em espaço de usuário acessem esses dados. O caminho dos dados do sensor é:

/sys/bus/iio/devices/iio:device1

Os arquivos de dados brutos do giroscópio são expostos neste diretório, como mostrado na imagem abaixo:

Para obter os dados brutos do giroscópio, basta ler o arquivo correspondente. Por exemplo, para obter os dados do eixo X do giroscópio, leia o arquivo in_anglvel_x_raw:

cat /sys/bus/iio/devices/iio:device1/in_anglvel_x_raw

O resultado da execução é mostrado abaixo:

Uso do Alto-falante Integrado​

O alto-falante integrado da reCamera Pro é controlado por meio do driver padrão ALSA do Linux. Você pode visualizar os dispositivos de placa de som atuais com o seguinte comando:

aplay -l

Use o seguinte comando para reproduzir um arquivo de áudio:

aplay test.wav
nota

aplay é um reprodutor ALSA PCM. Ele só pode reproduzir dados em formato PCM/WAV e não consegue decodificar MP3. Você pode usar o seguinte comando para converter MP3 para o formato WAV:

ffmpeg -i test.mp3 test.wav

Código de Implementação Básica​

Agora que entendemos como ler dados brutos do giroscópio e reproduzir áudio, vamos escrever o código para implementar toda a funcionalidade.

Aquisição de Dados do Giroscópio​

Abaixo está um exemplo de função mínima demonstrando como coletar dados do giroscópio no eixo X. Você pode estender essa função para obter dados de outros eixos.

#!/usr/bin/env python3

DEVICE = "/sys/bus/iio/devices/iio:device1"

with open(f"{DEVICE}/in_anglvel_scale", "r") as f:
scale = float(f.read().strip())

with open(f"{DEVICE}/in_anglvel_x_raw", "r") as f:
raw = int(f.read().strip())

gyro_x = raw * scale

print(f"Gyroscope X: {gyro_x:.6f} rad/s")

Reprodução de Áudio​

Quando o dispositivo aciona uma inclinação ou agitação, é necessário reproduzir um aviso de voz correspondente. O código a seguir demonstra como reproduzir áudio usando Python:

#!/usr/bin/env python3

import subprocess

AUDIO = "test.wav"

subprocess.run([
"aplay",
AUDIO
])

Código Final de Implementação​

  • Quando o dispositivo é agitado, ele reproduzirá "Aviso: Não agite o dispositivo".
  • Quando o dispositivo é inclinado, ele reproduzirá "Aviso: O equipamento tombou. Verifique imediatamente o estado do equipamento para evitar quaisquer acidentes".

O código relevante pode ser baixado em reCamera_PRO_IMU_Detect.

Implantação do Código​

As etapas a seguir descrevem como implantar o código na reCamera Pro e executá-lo:

  1. Envie a pasta inteira para a reCamera Pro via SSH:
scp -r ./icm42670_project root@deviceIP:/userdata
  1. Execute o programa principal:
./main.py
nota
  1. O programa realizará uma operação de calibração na primeira execução. Certifique-se de que o dispositivo esteja colocado de forma estável antes de executar main.py. Se for necessário recalibrar (a duração padrão da calibração é de 3 segundos), execute:
./main.py --force-calib
  1. Ver visualização de ajuda de uso do código:
./main.py --help

Solução de Problemas​

  • Não é possível ler dados do giroscópio: Verifique se o caminho /sys/bus/iio/devices/iio:device1 existe e se o arquivo in_anglvel_x_raw é legível. Se o caminho não existir, o driver IIO pode não estar carregado; verifique os módulos do kernel.
  • Falha na reprodução de áudio: Confirme se o arquivo de áudio está em formato WAV e se o comando aplay está disponível. Se o alto-falante estiver sem som, verifique as configurações de volume do ALSA.
  • Falha na calibração: Certifique-se de que o dispositivo esteja parado e nivelado durante a calibração. Se o tempo de calibração for insuficiente, use --force-calib para recalibrar.

Suporte Técnico e Discussão de Produto​

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...