/
/
Assistente de Treino com Arduino

Assistente de Treino com Arduino

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

blog-eletrogate-assistente-treino-capa

Introdução

No post de hoje, nós vamos fazer um "ajudante" para quem faz exercícios físicos em casa. O projeto consiste em um dispositivo que conta as suas flexões e quantas séries você fez. Ele utiliza um Arduino Uno, um sensor Ultrassônico HC-SR04, um display Oled e um buzzer.

O projeto

Nesse projeto, o sensor HC-SR04 mede a distância em cm, e compara para ver se ela é menor do que 10 centímetros. Se for menor do que 10 cm, ele adiciona 1 número na quantidade de flexões. Quando a quantidade de flexões chegar a 15 flexões, ele encerra uma série e inicia o descanso.

Circuito

Código

O código será o seguinte:

//Aqui incluimos as bibliotecas
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//aqui configuramos o tamanho do display
#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define OLED_RESET -1 
#define SCREEN_ADDRESS 0x3C 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int flexoes = 15; // aqui você escolhe quantas flexões quer fazer

int contador = 0; //cria uma variável para o contador de flexões
int series = 0; //
int trig = 7; // Pino usado para disparar os pulsos do sensor
int echo = 6; // pino usado para ler a saida do sensor
int buzzer = 5; //pino onde o buzzer está conectado
float TempoEcho = 0;
const float VelocidadeSom_mporus = 0.000340; //velocidade do som
bool flexaobaixo = false;
bool flexaoalto = false;


void setup() {
  Serial.begin(9600);

  pinMode(trig, OUTPUT); //define o pino Trigger como saída
  digitalWrite(trig, LOW);
  pinMode(echo, INPUT); // define pino ECHO como entrada
  pinMode(buzzer , OUTPUT);//define o buzzer como saída

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // declara o endereço do display
  display.clearDisplay();
  
  digitalWrite(buzzer,LOW);
}

void loop() {
 
  DisparaPulsoUltrassonico(); //dispara um pulso 
  TempoEcho = pulseIn(echo, HIGH);

  Serial.println(CalculaDistancia(TempoEcho)*100);

  if((CalculaDistancia(TempoEcho)*100) < 10 ){ //se a distancia lida for menor do que 10 cm
   flexaobaixo = true; //altera o valor da booleana
  }

  if((CalculaDistancia(TempoEcho)*100) > 20 && (CalculaDistancia(TempoEcho)*100) < 30 ){ //se a distancia lida estiver entre 20 e 30 
   flexaoalto = true; //altera o valor da booleana
  }

  if((flexaoalto == true) && (flexaobaixo == true)){ //faz a comparação das duas booleanas para ver se foi uma flexão completa
    contador++;
    display.clearDisplay(); //limpa o display
    display.setTextSize(3); //define o tamanho da letra
    display.setTextColor(1); 
    display.setCursor(0,20); 
    display.print(contador/2); // escreve no display quantas flexões
    display.setTextSize(1);
    display.setCursor(70,20);
    display.print("Series: ");
    display.setCursor(120,20);
    display.print(series); //escreve no display quantas séries feitas
    display.display();
    flexaoalto = false;
    flexaobaixo = false;
  }

  if(contador == flexoes*2){ //se o contador ler 30(equivalente a 15 flexões),chama a função responsável pelo descanso
    descanso();
  }
}

void DisparaPulsoUltrassonico(){
  // Para fazer o HC-SR04 enviar um pulso ultrassonico, nos temos
  // que enviar para o pino de trigger um sinal de nivel alto
  // com pelo menos 10us de duraçao
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  }

// Função para calcular a distancia em metros
float CalculaDistancia(float tempo_us){
  return((tempo_us*VelocidadeSom_mporus)/2);
}

void descanso(){
 //apita para iniciar o tempo de descanso
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(500);
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 display.clearDisplay();
 display.setTextSize(2);
 display.setTextColor(1); 
 display.setCursor(0,32);
 display.print("Descanso!");//escreve na tela o descanso
 display.display();


 delay(30000); // tempo de descanso

 digitalWrite(buzzer,HIGH); //apita o buzzer 5 vezes para indicar o fim do descanso
 delay(300);
 digitalWrite(buzzer,LOW);
 delay(300);
 digitalWrite(buzzer,HIGH);
 delay(300);
 digitalWrite(buzzer,LOW);
 delay(300);
 digitalWrite(buzzer,HIGH);
 delay(300);
 digitalWrite(buzzer,LOW); 
 delay(300);
 digitalWrite(buzzer,HIGH);
 delay(300);
 digitalWrite(buzzer,LOW);
 delay(300);
 digitalWrite(buzzer,HIGH);
 delay(300);
 digitalWrite(buzzer,LOW);
 series++; //adiciona 1 na quantidade de séries
 contador = 0 ; // zera o contador de flexões
}
Nessa parte do código, é possível alterar a quantidade de flexões desejada:
int flexoes = 15; // aqui você escolhe quantas flexões quer fazer

Testes

No vídeo, utilizei a minha mão para simular a aproximação do corpo:

Mudei o tempo de descanso somente para ficar mais rápido do vídeo: Agora, fica o desafio: bater o meu recorde (4 flexões). Brincadeiras à parte, agora é só aproveitar o ajudante e não perder mais a conta!

Sobre o Autor


Arthur Almeida

Estudante do Ensino médio , aficionado por criar novos projetos eletrônicos e automações, principalmente com o Arduino. No meu tempo livre eu gosto de pesquisar sobre novas tecnologias e tento criar projetos com elas.

No post de hoje, nós vamos fazer um “ajudante” para quem faz exercícios físicos em casa. Venha conferir!

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *