Os acelerômetros são sensores inerciais de tecnologia MEMS usados para detectar aceleração, orientação e inclinação. São usados em diversos dispositivos, como, por exemplo, o seu smartphone e/ou tablet. Eles também são usados para detectar desaceleração em veículos, acionando os airbags em caso de acidentes.
Neste artigo vou te ensinar a manipular o acelerômetro da micro:bit fazendo uso do mbed, servindo como base para aplicações e estudos desse dispositivo.
Acelerômetro da micro:bit
A micro:bit possui um acelerômetro de 3 eixos onboard, o MMA8653FC da NXP. Esse acelerômetro comunica-se com o microcontrolador principal da placa através de I2C e pode fazer leituras ±2 g, ±4 g, e ±8 g a uma taxa de saída de 1,56 Hz a 800 Hz. Sua saída é digital em 10 bits.
Confira mais detalhes sobre acelerômetros na série de artigos escritos por Henrique Torres:
Código para leitura do acelerômetro da micro:bit no mbed
A biblioteca criada pela Lancaster University já está preparada para leitura do acelerômetro, tornando mais simplificada a manipulação desse dispositivo no mbed. Confira a documentação da API aqui.
Como testes iniciais, vamos fazer a leitura dos três eixos e plotá-los na serial. Digite o seguinte código:
#include "MicroBit.h"
MicroBit uBit;
int main()
{
// Initialise the micro:bit runtime.
uBit.init();
while(1)
{
uBit.serial.printf("%d",uBit.accelerometer.getX());
uBit.serial.printf(" ");
uBit.serial.printf("%d",uBit.accelerometer.getY());
uBit.serial.printf(" ");
uBit.serial.printf("%d\n",uBit.accelerometer.getZ());
uBit.sleep(100);
}
}
Eu usei o Serial Plotter do Arduino para visualizar os dados de forma gráfica:
Outro recurso interessante da API é a leitura de movimentos pré definidos, como inclinação, queda livre, etc. O exemplo a seguir exibe a leitura dos gestos e a impressão dos eventos na serial:
#include "MicroBit.h"
MicroBit uBit;
int main()
{
// Initialise the micro:bit runtime.
uBit.init();
while(1)
{
uBit.accelerometer.getX();
uBit.accelerometer.getY();
uBit.accelerometer.getZ();
int x = uBit.accelerometer.getGesture();
switch (x) {
case MICROBIT_ACCELEROMETER_EVT_TILT_UP:
uBit.serial.printf("Inclinado para cima\n");
break;
case MICROBIT_ACCELEROMETER_EVT_TILT_DOWN:
uBit.serial.printf("Inclinado para baixo\n");
break;
case MICROBIT_ACCELEROMETER_EVT_TILT_LEFT:
uBit.serial.printf("Inclinado para esquerda\n");
break;
case MICROBIT_ACCELEROMETER_EVT_TILT_RIGHT:
uBit.serial.printf("Inclinado para direita\n");
break;
case MICROBIT_ACCELEROMETER_EVT_FACE_UP:
uBit.serial.printf("Face virada para cima\n");
break;
case MICROBIT_ACCELEROMETER_EVT_FACE_DOWN:
uBit.serial.printf("Face virada para baixo\n");
break;
case MICROBIT_ACCELEROMETER_EVT_FREEFALL:
uBit.serial.printf("Queda livre\n");
break;
}
uBit.sleep(100);
}
}
Os eventos são exibidos em um terminal serial. Vire a placa e veja a mensagem no terminal:
Você pode estudar a implementação para leitura do acelerômetro através da documentação e código escrito em C/C++ disponibilizados pela Lancaster University para o mbed.
Se ficou alguma dúvida, crítica ou sugestão, deixe seu comentário abaixo.
Saiba mais
Utilizando o acelerômetro e LED RGB da FRDM KL25Z no mbed












