ÍNDICE DE CONTEÚDO
Grande parte dos sistemas que necessitam obter a orientação de algum objeto, realizar análise de vibrações, detecção de quedas e outros, necessitam do uso do acelerômetro. Existem vários modelos bastantes difundidos no mercado, cujo princípio de funcionamento já foi explicado anteriormente neste post. Neste artigo utilizaremos a placa MMA845X que possui um acelerômetro de 3-eixos, e possui tais características:
Sobre o MMA845X
O acelerômetro MMA845X, possui como características:
- Aceleração instantânea nos 3 eixos, com resolução configurável entre 8 e 12 bits.
- Tensão de alimentação entre 1.95V e 3.6V
- Fundo de escala selecionável dinamicamente entre: ±2g/±4g/±8g
- Taxa de saída de dados (Output Data Rate-ODR) de 1.56 Hz até 800 Hz
- Interface de comunicação I2C
- Consumo de corrente muito baixo, variando de 6 a 165 μA
- Detecção de queda livre
- Detecção de orientação (paisagem ou retrato)
Como a comunicação é realizada por meio do protocolo I2C, é necessário configurar o endereço. O MMA845X, por padrão, possui dois endereços disponíveis: 0x1D e 0x1C. A escolha do endereço a ser utilizado, depende do nível lógico aplicado no pino SA0 do acelerômetro, assim, para utilizar o endereço 0x1D, deve-se aplicar nível lógico ALTO (lembre-se que neste pino o nível alto é de 3V3!!). E, para utilizar o endereço 0x1C deverá ser aplicado o nível lógico baixo, conectando o pino SA0 ao GND.
O diagrama de conexão do MMA845x com a Raspberry Pi é mostrado na Figura 1:
Configuração da Raspberry
Agora que o acelerômetro está conectado à Raspberry, é necessário configurar a Raspberry para usar a comunicação I2C, garantindo assim, que o barramento I2C está ativo. Para isto, deve abrir o terminal e digitar o seguinte comando:
1 |
~/sudo raspi-config |
Em seguida, aparecerão as opções tal como mostrado na Figura 2. Selecione a opção “5 – Interfacing Options”.
Em seguida, selecione a opção “P5 – I2C”, e depois, selecione a opção SIM. tal como mostrado nas Figuras 3 e 4.
Após estes passos, nos certificamos que a Raspberry está com o barramento I2C disponível para ser utilizado para tráfego de informações.
Adicionando biblioteca
A biblioteca para uso do MMA845X, está disponível NESTE repositório. Assim, para usá-lo basta fazer o download ou clonar em uma pasta do seu interesse utilizando o seguinte comando:
1 |
~/ git clone https://github.com/ASdOliveira/MMA845X.git |
Em seguida abra a pasta MMA845X, cujos arquivos baixados são mostrados na Figura 5. E por fim, execute o código example.py
Explicando o código para usar o acelerômetro MMA845X com Raspberry Pi
Primeiramente são adicionadas as bibliotecas que serão utilizadas.
1 2 |
from library.accelerometer import * from time import sleep |
Nesse caso, a biblioteca accelerometer, responsável pelo controle do acelerômetro e a biblioteca time, por meio da qual é possível usar a função sleep, podendo assim dando um delay em um determinado ponto.
1 2 |
accelerometer_address = 0x1C myAccel = accelerometer(accelerometer_address) |
Em seguida, é instanciada a classe accelerometer, cujo único parâmetro é o endereço que como dito anteriormente, deve ser 0x1D ou 0x1C a depender do nível lógico aplicado no pino SA0.
A última parte do código é responsável por adquirir a aceleração instantânea em cada eixo e imprimir estas informações na tela, assim como obter a orientação da placa do acelerômetro e printar esses dados na tela.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
try: while True: myAccel.read() #Imprimir a aceleração de cada eixo print("x = {0}, y = {1}, z = {2}".format(myAccel.x, myAccel.y, myAccel.z)) #Imprimir a orientação do acelerômetro print(myAccel.readPosition()) sleep(0.3) except KeyboardInterrupt: pass |
O método read() é responsável por ler a aceleração de cada eixo e guardar nas variáveis x, y e z da classe. Enquanto que o método readPosition() retorna uma string informando a orientação em que se encontra o acelerômetro, que pode ser: Flat, retrato ou paisagem.
Parabéns pelo artigo. Bem detalhado. Obrigado por compartilhar com todos nós.
Muito obrigado, Ismael!