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.
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.
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
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!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!