Como usar o acelerômetro ADXL345 com Raspberry PI

Tempo de leitura: 6 minutes

Oi hoje, vamos usar ADXL345 Acelerômetro com Raspberry Pi.

O QUE VOCÊ PRECISA :

RaspBerry PI 3
Cartão SD (8gb + recomendado)
Fonte de energia
Acelerômetro ADXL345
ProtoBoard

O CIRCUITO :

 

PREPARANDO FRAMBOESA PI:

1. Antes que possamos fazer com que nosso Raspberry Pi recupere dados de nosso acelerômetro ADXL345, existem algumas alterações que devemos fazer na configuração do Pi.

Vamos primeiro garantir que tudo está atualizado, executando os dois comandos a seguir.

sudo apt-get update
sudo apt-get upgrade

2. Assim que o Raspberry Pi tiver concluído a atualização, precisaremos prosseguir e iniciar a ferramenta de configuração do Raspberry para que possamos habilitar o I2C no Raspberry Pi.

Execute o seguinte comando para iniciar a ferramenta de configuração raspi.

sudo raspi-config

3. Nesta tela, você precisa ir ao menu “5 Interfacing Options”.

Você pode navegar pelos menus das ferramentas raspi-config usando as teclas de seta. Use a tecla ENTER para selecionar opções específicas.

4. Agora, no menu de opções de interface, vá em frente e selecione “P5 I2C“.

Quando perguntado se você gostaria de habilitar a interface ARM I2C, selecione “<YES>“.

5. Depois de ativar a interface I2C, você precisará reiniciar o Raspberry Pi executando o seguinte comando.

sudo reboot

6. Agora que habilitamos o I2C e reiniciamos o Raspberry Pi, podemos prosseguir com a instalação dos pacotes dos quais contaremos para conversar com nosso acelerômetro.

Execute o seguinte comando para instalar.

sudo apt-get install python3-dev python3-pip python3-smbus i2c-tools -y

7. Com todos os nossos pacotes necessários instalados, vamos verificar se nosso Raspberry Pi pode ver nosso acelerômetro ADXL345.

Podemos fazer isso executando o seguinte comando.

sudo i2cdetect -y 1

A partir deste comando, você deve ver um pouco exibido na linha de comando. Dentro deste resultado, você deve ver pelo menos um número como “53“.

Se nada aparecer, certifique-se de ter conectado o acelerômetro ADXL345 ao Raspberry Pi corretamente e de que todos os pontos de solda nos pinos do sensor estão limpos. Se você vir um erro, tente reativar I2C novamente

 

CODIFICANDO O SCRIPT:

1. Com todos os pacotes de que precisamos agora instalados no Raspberry Pi, podemos agora continuar a escrever um pequeno script Python. Este script é para que possamos ler as informações do acelerômetro.

Para conversar com o ADXL345, estaremos utilizando a biblioteca ADXL34x Python da Adafruit. Para instalar esta biblioteca para que possamos utilizá-la, você precisa executar o seguinte comando pip.

sudo pip3 install adafruit-circuitpython-ADXL34x

2. Com a biblioteca instalada, podemos agora continuar a codificar nosso pequeno script Python.

Comece a escrever este arquivo executando o seguinte comando.

nano ~/accelerometer.py

3. Em nosso novo script, escreva as seguintes linhas de código.

import time

Começamos importando a biblioteca “time”. Utilizamos a biblioteca “time” para que possamos colocar o script para dormir por um curto período.

import board

Aqui, importamos a biblioteca de “board” da Adafruit. Esta biblioteca exclusiva foi projetada para saber rapidamente quais pinos estão disponíveis em um dispositivo.

Portanto, em vez de especificar um pino específico, podemos usar algo como “board.scl” e isso retornará o pino correto para o microcontrolador atual. No nosso caso, é o Raspberry Pi.

import busio

Em seguida, importamos o módulo “busio” da Adafruit. Este módulo contém uma variedade de bibliotecas diferentes para lidar com vários protocolos seriais. Estaremos usando esta biblioteca de módulos para lidar com o protocolo serial I2C.

import adafruit_adxl34x

Agora importamos a biblioteca “adafruit_adxl34x”. Essa biblioteca contém todo o código de que precisamos para ler as informações de nosso acelerômetro ADXL345 e torna o processo incrivelmente simples.

i2c = busio.I2C(board.SCL, board.SDA)

Aqui, utilizamos a biblioteca “busio” para preparar uma conexão I2C para nossas placas atuais SCL e pinos SDA. Armazenamos o identificador em nossa variável “i2c”.

accelerometer = adafruit_adxl34x.ADXL345(i2c)

Agora instanciamos a biblioteca ADXL345 em nosso objeto “accelerometer”. Utilizaremos este objeto para ler e obter informações de nosso sensor. No construtor da biblioteca, passamos nosso identificador I2C.

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(0.5)

Aqui iniciamos um loop infinito usando “while True:“.

Dentro desse loop infinito, imprimimos os valores de aceleração X, Y e Z que foram recuperados do acelerômetro pela biblioteca.

Depois de imprimir os valores X, Y e Z, colocamos o script em hibernação por meio segundo.

Suspendemos o script para impedi-lo de inundar a linha de comando com os valores fornecidos pelo acelerômetro.

4. A versão final do código do acelerômetro deve se parecer com o que temos abaixo. Compare seu código final com este.

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    time.sleep(1)

Quando estiver satisfeito com o fato de que todo o código está correto, você pode salvá-lo pressionando CTRL + X, em seguida, Y seguido de ENTER.

5. Com o código pronto, vamos prosseguir e executar o script executando o seguinte comando.

python3 ~/accelerometer.py

6. Ao executar este código, você deve começar a ver os valores sendo lidos no acelerômetro.

0.117680 0.313813 8.355266
0.117680 0.313813 8.394492
0.117680 0.313813 8.355266
0.117680 0.353039 8.316039
0.117680 0.431493 8.316039
0.117680 0.313813 8.276813

7. Agora que sabemos que o acelerômetro está retornando dados e que o Raspberry Pi está lendo corretamente, podemos explorar algumas das outras funcionalidades da biblioteca ADXL345.

 

BIBLIOTECAS DE ACELERÔMETRO:

1. Nesta seção deste tutorial do acelerômetro Raspberry Pi, exploraremos algumas das outras funcionalidades fornecidas pela biblioteca de acelerômetro ADXL345 da Adafruit.

Em particular, examinaremos os “events” que a biblioteca pode detectar automaticamente quando ativada.

Para começar, vamos abrir nosso script “accelerometer.py” usando o seguinte comando.

nano ~/accelerometer.py

2. Dentro do arquivo, encontre e adicione as linhas mostradas abaixo. Explicaremos para que serve cada nova seção e para que serve.

Encontrar

accelerometer = adafruit_adxl34x.ADXL345(i2c)

Adicione as seguintes linhas abaixo da linha acima.

accelerometer.enable_freefall_detection(threshold=10, time=25)

Esta linha habilita o evento de detecção de queda livre das bibliotecas. Ele inclui duas variáveis, uma sendo o limite, a outra é o tempo.

O limite (threshold) é o valor que a aceleração em todos os eixos deve estar abaixo para que seja registrada como uma queda. O fator de escala é 62,5 mg, então nosso exemplo é 10*62,5=625mg.

Em seguida, a variável de tempo é a quantidade de tempo que a aceleração em todos os eixos deve ser menor que o limite para que eles sejam registrados como sendo descartados. O fator de escala é 5 ms, então nosso exemplo é 25×5=125ms.

accelerometer.enable_motion_detection(threshold=18)

Esta linha habilita o evento de detecção de movimento das bibliotecas. Leva em uma variável, o limite.

A variável de limite (threshold) é o valor que a aceleração em todos os eixos deve exceder para que um movimento seja detectado. Se você achar que isso é muito sensível ou não o suficiente, você pode modificar este valor. O fator de escala é 62,5 mg, então nosso exemplo é 18*62,5=1125mg.

accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

Esta linha habilita o evento de detecção de tap das bibliotecas.

A variável tap_count é se você deseja detectar um único toque ou um toque duplo. Defina como 1 para toque único ou 2 para toques duplos.

A seguir está a variável de limite (threshold), e ela define o quão sensível você deseja que o tap seja, quanto maior o valor, menos sensível será o código para detectar um tap. Como as outras variáveis ​​de limite, o fator de escala é 62,5 mg.

A variável de duração (duration) é o período de tempo em nanossegundos que o movimento deve ocorrer. Se a duração do movimento for muito longa, não será detectado como um toque. Este valor deve ser em ms.

Agora, a variável de latência (latency) é a duração de tempo após o impulso inicial para começar a procurar a segunda torneira. O valor da latência deve ser em ms.

Por último, a variável de window é o período de tempo em que o código deve procurar a ocorrência do segundo toque. Novamente, esse valor deve ser em ms.

Encontrar

print("%f %f %f"%accelerometer.acceleration)

Adicione as seguintes linhas abaixo

print("Dropped: %s"%accelerometer.events["freefall"])
print("Tapped: %s"%accelerometer.events['tap'])
print("Motion detected: %s"%accelerometer.events['motion'])

Essas linhas adicionais imprimem o status de todos os eventos que ativamos anteriormente no script. Essas linhas de impressão permitirão que você saiba se algum dos eventos está sendo acionado no momento.

Normalmente, você não verificará todos esses eventos ao mesmo tempo.

3. Com todas as alterações feitas no código do acelerômetro, ele deve se parecer um pouco com o que temos abaixo.

import time
import board
import busio
import adafruit_adxl34x

i2c = busio.I2C(board.SCL, board.SDA)
accelerometer = adafruit_adxl34x.ADXL345(i2c)
accelerometer.enable_freefall_detection(threshold=10, time=25)
accelerometer.enable_motion_detection(threshold=18)
accelerometer.enable_tap_detection(tap_count=1, threshold=20, duration=50, latency=20, window=255)

while True:
    print("%f %f %f"%accelerometer.acceleration)
    print("Dropped: %s"%accelerometer.events["freefall"])
    print("Tapped: %s"%accelerometer.events['tap'])
    print("Motion detected: %s"%accelerometer.events['motion'])
    time.sleep(0.5)

Quando estiver satisfeito com o código correto, você pode salvá-lo pressionando CTRL + X e depois Y seguido de ENTER.

4. Com o código pronto, vamos prosseguir e executar o script executando o seguinte comando.

python3 ~/accelerometer.py

5. Ao executar este código, você deve começar a ver o texto impresso na linha de comando, mostrando as posições X, Y e Z recebidas, bem como o status de todos os eventos.

0.235360 0.353039 8.355266
Dropped: False
Tapped: False
Motion detected: False

Com tudo isso feito, agora você deve ter algum conhecimento de como usar o acelerômetro ADXL345 com o Raspberry Pi.

Fazer projetos eletrônicos é muito simples conosco.