Machine Learning na Franzininho WiFi: Classificação de Movimento com Acelerômetro e LEDs (Parte 1)

Este post faz parte da série Machine Learning na Franzininho WiFi

Introdução

Neste projeto, vamos coletar dados de movimento usando o acelerômetro LIS3DH e a Franzininho WiFi, com o suporte da plataforma Edge Impulse. O objetivo é treinar um modelo capaz de classificar três tipos de movimento: parado, caminhando e pulando. Ao longo do processo, vamos integrar a Franzininho WiFi com o acelerômetro, realizar a coleta de dados e treinar um modelo que, na parte 2, será implementado no microcontrolador para inferências em tempo real.

Hardware necessário

  • 1 Franzininho Wifi
  • 1 Acelerômetro
  • 1 Led RGB
  • 3 resistores

Esquemático

Conexões:

  • LIS3DH:
    • MOSI: Pino 35
    • MISO: Pino 37
    • CLK: Pino 36
    • CS: Pino 34
  • LED RGB:
    • Vermelho (caminhando): Pino 14
    • Azul (pulando): Pino 12
    • Verde (parado): Pino 13

Código Leitura Aceleração

Para ler os dados do acelerômetro, utilizaremos a biblioteca  “Adafruit_LIS3DH”. Certifique-se de instalá-la na sua IDE do Arduino, assim como a biblioteca Adafruit Unified Sensor”.

No código, configuraremos a leitura do acelerômetro para uma frequência de 50 Hz, o que corresponde a 50 leituras por segundo. A comunicação entre o acelerômetro e o Franzininho WiFi será realizada via SPI. Além disso, o sensor será configurado com um intervalo de ±2g e operará no modo Normal.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>


#define FREQUENCY_HZ        50
#define INTERVAL_MS         1000/(FREQUENCY_HZ+1)
static unsigned long last_interval_ms = 0;


#define LIS3DH_CLK 36
#define LIS3DH_MISO 37
#define LIS3DH_MOSI 35
#define LIS3DH_CS 34


// software SPI
Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS, LIS3DH_MOSI, LIS3DH_MISO, LIS3DH_CLK);


void setup(void) {
  Serial.begin(115200);
  //Serial.println("LIS3DH test!");
  if (!lis.begin(0x18)) {   // change this to 0x19 for alternative i2c address
    Serial.println("Couldn't start");
    while (1) yield();
  }
  lis.setRange(LIS3DH_RANGE_2_G);   // 2, 4, 8 or 16 G
  lis.setPerformanceMode(LIS3DH_MODE_NORMAL); //LIS3DH_MODE_LOW_POWER, LIS3DH_MODE_NORMAL, LIS3DH_MODE_HIGH_RESOLUTION
  lis.setDataRate(LIS3DH_DATARATE_50_HZ); //1Hz (1 leitura por segundo), 10Hz, 25Hz, 50Hz, 100Hz, 200Hz, 400Hz, POWERDOWN, LOWPOWER_5KHZ, LOWPOWER_1K6HZ
}


void loop() {
  // get accel X, Y and Z in m/s^2
  sensors_event_t event;
  lis.getEvent(&event);
  if (millis() > last_interval_ms + INTERVAL_MS) {
    last_interval_ms = millis();
    Serial.print(event.acceleration.x);
    Serial.print(",");
    Serial.print(event.acceleration.y);
    Serial.print(",");
    Serial.println(event.acceleration.z);
  }
}

Ingestão de Dados no Edge Impulse

Etapa conexão dispositivo na Edge Impulse

Para que o Edge Impulse receba os dados coletados pela sua placa, utilizaremos a ferramenta de ingestão fornecida pela plataforma para conectar o dispositivo ao Edge Impulse. Certifique-se de ter essa ferramenta instalada em sua máquina. Caso ainda não tenha, siga o passo a passo de instalação disponível em edge-impulse-cli

Após instalado o edge impulse cli, abra o terminal e execute o seguinte comando:

edge-impulse-data-forwarder –device-name “nomeSuaEscolha”

Quando a ferramenta detectar a porta serial e a frequência de comunicação, você será solicitado a nomear os dados que estão sendo lidos. Insira x,y,z para os eixos do acelerômetro. Em seguida, escolha um nome para o seu dispositivo; por exemplo, “Franzininho”.

Se tudo correr conforme o esperado, ao abrir a plataforma Edge Impulse, você verá o dispositivo listado e conectado.

Etapa Coleta de Dados

Para coleta de dados, no menu do Edge Impulse clique em “Data acquisition” e, em seguida, modifique “Collect data”

Escolha o dispositivo que será utilizado e, no campo “Sensor”, selecione o tipo de dados a serem lidos. Em “Label”, rotule os dados de acordo com a categoria que está sendo coletada, para o treinamento do modelo é preciso no mínimo 2 categorias de dados.

Para nosso exemplo, coletamos dados de treino em três condições diferentes, cada uma com duração de 5 minutos:

  • Dados enquanto o dispositivo está parado.
  • Dados enquanto o dispositivo está em movimento, nessa etapa segurei o dispositivo e andei, simulando uma caminhada.
  • Dados enquanto o dispositivo está em movimento rápido, nessa etapa segurei o dispositivo e pulei, simulando saltos.

Em seguida, coletamos 1 minuto de dados para cada uma das condições mencionadas, mas desta vez para fins de teste.

Após as coletas, obtivemos uma divisão de dados de 83% para teste e 17% para treinamento.

Etapa Criação Impulso

Seguindo para etapa de criação de impulso, clique em “Impulse design” > “Create Impulse” e siga os seguintes passos:

  1. Adicione um bloco de “processing”. Nele vamos escolher “Spectral Analysis”
  1. Adicione o bloco de “learning”. Nele vamos escolher “Classificação”.
  1. Por fim, salve o Impulso.

Etapa Treinamento Modelo

Nesta etapa, primeiro vá em “Impulse design” > “Spectral features” e clique em “Generate Features”. Essa etapa transforma os dados brutos coletados em características (ou features) que podem ser usadas para treinar um modelo de machine learning. 

Você notará que as features estão bem distribuídas. 

Depois de gerar as features (características), vá para “Impulse design” > “Classifier” e clique em “Save & Train”. Aqui vamos treinar o modelo. 

Em seguida, “Impulse design” > “Retrain Model”, clique em “Train Model”. Essa etapa, realiza o re-treino do modelo para ajustar ou melhorar o desempenho do modelo de machine learning com base em novos dados ou alterações na configuração do Impulso. 

Após o retrain, nosso modelo está pronto para ser usado e você pode testá-lo em “Model Testing”. 

Resultados do Treinamento Modelo

Com os dados coletados e o modelo treinado, obtivemos uma acurácia excelente de 98,76%. O modelo também está conseguindo diferenciar com precisão os três movimentos — parado, caminhando e pulando — com poucas confusões entre caminhar e pular.

Etapa Deploy

Após a coleta dos dados, o treinamento do modelo e a validação dos resultados, é hora de implantar o modelo convertendo-o em um arquivo .tflite, que pode ser carregado no microcontrolador. No Edge Impulse, vá até a aba “Deployment”, selecione a plataforma desejada (neste exemplo, Arduino IDE), e clique em “Build” para iniciar o processo de conversão. Após a conclusão, um arquivo .zip contendo o seu modelo será gerado.

Na Parte 2, utilizaremos este arquivo para classificar novos dados e acender LEDs diferentes dependendo do tipo de movimento detectado.

Conclusão

Neste tutorial, mostramos como coletar dados de movimento com o acelerômetro LIS3DH e a Franzininho WiFi, treinar um modelo de Machine Learning usando o Edge Impulse. O modelo obteve uma acurácia alta, de 98,76%. A etapa final envolveu a conversão do modelo para um arquivo .tflite, pronto para ser carregado no microcontrolador. Na Parte 2, utilizaremos esse modelo para realizar inferências em tempo real e acender LEDs diferentes com base no movimento detectado. Continue acompanhando para implementar o modelo na Franzininho Wifi. 

Machine Learning na Franzininho WiFi

Machine Learning na Franzininho WiFi: Inferência de Temperatura e Umidade (Parte 2) Machine Learning na Franzininho WiFi: Classificação de Movimento com Acelerômetro e LEDs (Parte 2)
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Inteligência Artificial » Machine Learning na Franzininho WiFi: Classificação de Movimento com Acelerômetro e LEDs (Parte 1)

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: