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 reproduz avisos de voz correspondentes pelo alto-falante integrado. Por meio deste tutorial, você aprenderá como ler dados brutos do giroscópio via driver IIO do Linux, 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 de acordo com os 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 essas informações. 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
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 reproduz "Aviso: Não agite o dispositivo".
- Quando o dispositivo é inclinado, ele reproduz "Aviso: O equipamento tombou. Verifique imediatamente o estado do equipamento para evitar qualquer acidente".
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:
- Envie a pasta inteira para a reCamera Pro via SSH:
scp -r ./icm42670_project root@deviceIP:/userdata
- Execute o programa principal:
./main.py
- O programa executará 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
- Ver 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:device1existe e se o arquivoin_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
aplayestá 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-calibpara recalibrar.
Suporte Técnico e Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer 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.
