Monte um contador de passos com a Micro:bit 4

Com a chegada da micro:bit, seus projetos agora podem alcançar outras dimensões. Com essa placa você tem na palma de sua mão todo poder de processamento e conectividade Bluetooth Low Energy do SoC nRF51822 da Nordic Semiconductors. Pense nas inúmeras aplicações Bluetooth que temos hoje. Desde pulseiras inteligentes com contador de passos, relógios inteligentes que monitoram seu batimento cardíaco, lâmpadas inteligentes conectadas ao seu celular, sensores esportivos, etc. Muitas dessas aplicações utilizam esse mesmo processador da micro:bit.

Neste tutorial iremos desenvolver uma aplicação do tipo pedômetro, onde a micro:bit, conectada ao seu pé, irá contar o número de passos dados e enviá-los a um aplicativo de celular usando Bluetooth Low Energy.

Contador de passos com micro:bit

Programando a micro:bit via ARM mbed

Entre as inúmeras maneiras de se programar a micro:bit, dentre elas MicroPython, blocos ou Javascript, também é possível programá-la via plataforma ARM mbed utilizando linguagem C/C++. Toda a programação é feita online pelo navegador web e o arquivo .hex é transferido pela USB.

Primeiramente você deverá criar uma conta na plataforma mbed caso ainda não tenha. Posteriormente você deverá adicionar a placa micro:bit à sua plataforma mbed. Siga os passos mostrados nesse vídeo e grave o programa Hello World para testar se tudo está funcionando corretamente.

<span styl.e=”font-weight: 400;”>Publiquei em meus repositórios do mbed a aplicação que deverá ser gravada na micro:bit. É importante notar que a aplicação depende da biblioteca microbit da Lancaster University. Também é importante que a aplicação contenha o arquivo de configuração do Bluetooth mbed_app.json na raiz do projeto

{
    "macros": [ "MICROBIT_BLE_ENABLED=1", 
                "MICROBIT_BLE_PAIRING_MODE=0",
                "MICROBIT_BLE_OPEN=1",
                "MICROBIT_BLE_EVENT_SERVICE=1",
                "MICROBIT_SD_GATT_TABLE_SIZE=0x600"]
}

Você pode simplesmente importar a aplicação em seu ambiente mbed. Segue o link: https://os.mbed.com/users/giobauermeister/code/microbit_accell/

Veja a seguir o código fonte da aplicação:

#include "MicroBit.h"
#include "MicroBitUARTService.h"

MicroBit uBit;
MicroBitUARTService *uart;

uint16_t step_counter = 0;
bool in_range = false;
char stepsString[50];

int connected = 0;

MicroBitImage img("0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n");

int pixel_from_g(int value)
{
    int x = 0;

    if (value > -750)
        x++;
    if (value > -250)
        x++;
    if (value > 250)
        x++;
    if (value > 750)
        x++;

    return x;
}

void onConnected(MicroBitEvent e)
{
    connected = 1;

    while (connected == 1) {
        int x = pixel_from_g(uBit.accelerometer.getX());
        int y = pixel_from_g(uBit.accelerometer.getY());

        uBit.display.image.clear();
        uBit.display.image.setPixelValue(x, y, 255);

        if(y < 4) 
        {
            in_range = true;
            while(in_range)
            {
                y = pixel_from_g(uBit.accelerometer.getY());
                if(y == 4) 
                {
                    in_range = false;
                    step_counter ++;        
                }
            }
            sprintf(stepsString, "%d", step_counter);
            uart->send(stepsString);
                       
            uBit.serial.send("steps: ");                
            uBit.serial.send(step_counter);
            uBit.serial.send("\r\n");            
        }        
        uBit.sleep(100);
    }
}

void onDisconnected(MicroBitEvent e)
{
    connected = 0;
    step_counter = 0;
        
    while(connected == 0)
    {        
        uBit.display.scroll(img, 50, -1);
        uBit.display.scroll(img, 50, +1);
    }
}

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();
    uBit.serial.baud(115200);
    uBit.serial.send("Hello World\n");
    
    uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnected);
    uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected);
    
    uart = new MicroBitUARTService(*uBit.ble, 32, 32);
    
    while(connected == 0)
    {        
        uBit.display.scroll(img, 50, -1);
        uBit.display.scroll(img, 50, +1);
    }
    
    release_fiber();
}

No loop main() temos duas linhas que monitoram os eventos de conexão do bluetooth.

uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnected);
uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected);

Quando conectamos a micro:bit com o celular por exemplo, a função onConected() é chamada. Nessa função fazemos a leitura do acelerômetro e enviamos para o dispositivo conectado através do objeto uart a contagem de passos.

Aplicativo Android com Thunkable

Para visualização do contador de passos, desenvolvemos um aplicativo de celular utilizando o Thunkable. Para desenvolver aplicativos com suporte a BLE é necessário habilitar a extensão BLE.

Clique em Import Extension e copie a URL abaixo para habilitar a extensão BLE:

http://iot.appinventor.mit.edu/assets/resources/edu.mit.appinventor.ble.aix

Veja outras extensões disponíveis como MQTT.

O visual e design do aplicativo consiste em dois botões, um para conectar e outro para desconectar e um label para mostrar a contagem de passos. Use sua criatividade para deixar o app com sua cara!

Aplicativo Android

A estrutura de blocos do aplicativo segue a seguinte lógica.

Primeiramente declaramos os UUID usados pela micro:bit

Então gerenciamos o escaneamento e conexão de dispositivos.

O botão btnDisconnect fica responsável por desconectar o celular da micro:bit

Um Timer verifica se o dispositivo ainda está conectado e se foi recebido algum dado da micro:bit. Assim que um dado é recebido, o evento StringsReceived é disparado, exibindo a contagem de passos no label.

Agora basta gerar um apk e testar o aplicativo no celular. Se quiser modificar o aplicativo, você pode baixar o arquivo do projeto Thunkable aqui.

Funcionamento do projeto contador de passos com micro:bit

Veja abaixo o projeto em funcionamento

Se quiser aprender mais sobre Bluetooth low Energy, veja nosso outro tutorial utilizando um ESP32 com sensor de umidade e temperatura DHT11, onde mostramos alguns conceitos básicos sobre BLE.

Aprenda mais sobre a micro:bit nesse excelente artigo do André Curvello, Aprendendo embarcados e IoT com a BBC micro:bit.

Gostou do projeto contador de passos com a micro:bit? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. 

Faça seu comentário

Acesse sua conta e participe

4 Comentários

  1. Giovanni, demais teu artigo. Parabéns, estou a tempo tentando brincar com o Bluetooth do microbit e estava tomando um laço.
    Se possível, uma perguntinha, tentei ativar o Bluetooth pelo makecode.microbit e mesmo seguindo todos os passos meu programa não reconhece os serviços, já pelo ARM mbed, foi tudo de primeira. Sabe me dizer se existe essa limitação atualmente, por exemplo, não sei se teria como configurar o MICROBIT_SD_GATT_TABLE_SIZE e demais parâmetros pelo makecode.

    Grande abraço, e parabéns pelo artigo.

    1. Olá Samuel! Obrigado pela leitura e pelo ótimo feedback.

      Eu vi que no makecode tem uma aba “avançado” e lá dentro “extensões” e é possível adicionar a extensão bluetooth. Provavelmente foi isso que você tentou certo?
      Ao meu ver pareceu bem limitado apenas com blocos pra leitura de sensores via bluetooth.

      Acho que pra funções mais avançadas talvez teria que usar o Mbed mesmo.

      Abraço!

  2. Boa tarde!!
    Tenho uma dúvida, o microbit é o mesmo que macatrônica?

    1. Olá Priscila!

      Microbit é uma placa de desenvolvimento, utilizada em projetos eletronicos.
      Veja mais sobre essa placa aqui: https://www.makerhero.com/blog/embarcados-e-iot-com-bbc-microbit/

      Mecatrônica seria uma área da engenharia. Veja mais aqui: https://pt.wikipedia.org/wiki/Mecatr%C3%B4nica