Passos de caminhada e calculadora de distância baseados em Arduino

Um recurso muito comum em aplicativos de fitness para Android e iOS é calcular o número de passos que o usuário dá e a distância que ele percorre. Esses aplicativos calculam o número de passos percorridos pelo usuário usando a localização GPS e manipulando os dados geoespaciais ou monitorando o vetor de aceleração do dispositivo usando um sensor acelerômetro.

Neste projeto, projetamos uma calculadora de passos de caminhada semelhante na plataforma Arduino. O método utilizado neste projeto é monitorar o vetor de aceleração do dispositivo. Para isso, o acelerômetro ADXL345 faz interface com o Arduino. O número de passos percorridos pelo usuário e a distância percorrida por ele são exibidos em uma tela OLED. A lógica utilizada neste projeto pode ser facilmente replicada em uma aplicação smartwatch. Você pode facilmente portar a lógica do código para qualquer outra linguagem, pois ela simplesmente lê os dados do sensor do acelerômetro e manipula esses dados para detectar o movimento do usuário.

Componentes necessários

  1. Arduino UNO x1
  2. Sensor Acelerômetro ADXL345 x1
  3. Tela OLED SSD1306 x1
  4. Conectando fios/fios de jumper

Conexões de circuito
Para a concepção deste projeto, o sensor acelerômetro ADXL345 e o OLED SSD1306 fazem interface com o Arduino. Para fazer isso, conecte seus pinos GND e VCC ao terra do Arduino e aos pinos de saída de 3,3V. Em seguida, conecte os pinos SDA e SCL do sensor do acelerômetro aos pinos SDA e SCL na porta I2C do Arduino.

Neste projeto, um módulo OLED SSD1306 de 7 pinos é conectado ao Arduino UNO. O módulo é conectado ao Arduino da seguinte maneira.

Diagrama de circuito do pedômetro baseado em Arduino

Diagrama de circuito do pedômetro baseado em Arduino

Esboço do Arduino

Como funciona
Quando o dispositivo é ligado, o display OLED SSD1306 é inicializado e o logotipo “EEWORLDONLINE” e o nome do dispositivo “Contador de passos” piscam na tela. O número inicial de etapas é exibido como 0 e a distância percorrida também é exibida como 0. Agora, tudo o que o usuário precisa fazer é manter o dispositivo consigo.

O dispositivo monitora continuamente seu vetor de aceleração com a ajuda do sensor acelerômetro ADXL345. Quando o usuário caminha, ocorre uma mudança no vetor de aceleração. Quando o usuário dá um passo à frente, a mudança imediata no vetor de aceleração torna-se negativa. À medida que o usuário pisa com o outro pé equilibrando-se no pé anterior, a mudança imediata no vetor de aceleração torna-se positiva.

Os valores médios de aceleração são calculados quando o dispositivo é ligado e as mensagens iniciais aparecem na tela. Os valores médios também são derivados da média de 50 leituras consecutivas do acelerômetro ADXL345. Esses valores médios para a aceleração do dispositivo nos eixos x, y e z servem como ponto de referência.

Após a conclusão da configuração inicial, o dispositivo calcula novamente a aceleração nos eixos x, y e z 50 vezes consecutivas e deriva uma média desses valores. O vetor de aceleração do dispositivo é calculado calculando a raiz quadrada da diferença dos valores atuais de aceleração em comparação com os valores de referência.

Após um atraso de 250 milissegundos, o dispositivo calcula novamente a aceleração nos eixos x, y e z por 50 vezes consecutivas e deriva a média desses valores. O vetor de aceleração do dispositivo é calculado novamente em um intervalo de 250 ms, extraindo a raiz quadrada da diferença dos valores atuais de aceleração em comparação com os valores de referência. A diferença entre o vetor de aceleração agora e o vetor de aceleração 250 ms antes é calculada e, se a diferença for superior a 0,05, um passo é incrementado. O valor da distância percorrida é calculado multiplicando o número de passos por um pé ou 0,3048 metros, assumindo que um passo médio tem um pé de comprimento.

O número de passos e a distância percorrida são atualizados na tela OLED, com atraso de 400 ms. O processo de cálculo da diferença entre dois vetores de aceleração consecutivos do dispositivo em um intervalo de 250 ms é continuado para monitorar o movimento do usuário.

Deve-se notar que o atraso de 250 ms entre o cálculo de dois vetores de aceleração médios consecutivos e a diferença de 0,05 é obtido após calibração cuidadosa do dispositivo.

Confira este link para saber mais sobre como o acelerômetro ADXL345 se comunica com o Arduino através do protocolo I2C.

Para saber mais sobre a interface do SSD1306 OLED com o Arduino, confira este link.

Você deve observar que o botão de reinicialização do Arduino atua como um botão de reinicialização do dispositivo e zera o número de etapas e a distância percorrida.

O código
O código começa importando wire.h para comunicação I2C com o sensor acelerômetro ADXL345 e SPI.h para comunicação com display OLED SSD1306. As bibliotecas Adafruit para trabalhar com display OLED são importadas e as constantes necessárias para interface OLED e parâmetros definidos. Uma exibição de objeto é inicializada para a classe SSD1306. O bitmap do logotipo EEWORLDONLINE é armazenado no PROGMEM do Arduino e convertido em um objeto array. As variáveis ​​para armazenar os valores de aceleração média, atual e imediatamente seguinte são declaradas. Uma variável para armazenar o número de etapas é declarada.

Na função setup , três funções diferentes são chamadas. O ssd1306_init é chamado para inicializar o display OLED SSD1306 e exibir mensagens iniciais nele. O adxl345_init é chamado para inicializar o sensor de aceleração. A função read_av_acc é chamada para calcular valores de aceleração de referência quando o dispositivo está em repouso.

Na função loop , o vetor de aceleração é calculado duas vezes em um intervalo de 250 ms, e se a diferença entre dois valores for maior que 0,05, um passo é incrementado. O número de passos e a distância percorrida são atualizados no display OLED.

Resultado

Pedômetro baseado em Arduino usando ADXL345 e SSD1306

Pedômetro baseado em Arduino usando ADXL345 e SSD1306

Vídeo de demonstração

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.