ÍNDICE DE CONTEÚDO
- Programando a BBC micro:bit no mbed
- Lendo os botões da micro:bit no mbed
- Lendo o acelerômetro da micro:bit com mbed
- Explorando a matriz de LEDs da micro:bit com mbed
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#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