Trabalho Final — Esteira Ergométrica Inteligente no Visuino

Projeto acadêmico de sistemas embarcados

Esteira Eletrônica com Arduino Mega

Desenvolvimento e simulação de uma esteira de academia utilizando Visuino Pro e SimulIDE

Tempo Velocidade Distância Calorias Batimentos

Equipe: Beatriz Moresco Joaquim e Haiko Rüdiger

Curso: Ciência da Computação

Disciplina: Visuino

Professor(a): Miguel Alexandre Wisintainer

Data: 30/07/2026

16
displays de 7 segmentos
16
transistores NPN
5
indicadores
3
botões de controle

1. Introdução

Este projeto apresenta o desenvolvimento de uma esteira eletrônica simulada, inspirada nos painéis encontrados em esteiras de academia. O sistema foi construído com um Arduino Mega 2560, programado por meio do Visuino Pro, enquanto todo o circuito eletrônico foi montado e testado no simulador SimulIDE.

O painel informa cinco grandezas importantes durante o exercício: tempo, distância percorrida, calorias estimadas, batimentos cardíacos simulados e velocidade. Além disso, o usuário controla o funcionamento por três botões: Iniciar, Parar/Continuar e Reset.

O trabalho reúne conteúdos de programação embarcada, eletrônica digital, leitura analógica, temporização, cálculo matemático, controle de estados e multiplexação de displays. Embora seja uma simulação acadêmica, a organização utilizada se aproxima da estrutura de um equipamento real: entradas são lidas pelo microcontrolador, os valores são processados e os resultados são apresentados em um painel.

Ideia central: transformar a posição de um potenciômetro em uma velocidade entre 0 e 16 km/h e, a partir dessa velocidade, atualizar o tempo, a distância e as calorias enquanto a esteira estiver em execução.

2. Objetivos do projeto

2.1 Objetivo geral

Desenvolver e simular um painel eletrônico de esteira capaz de controlar o início, a pausa, a continuação e o reinício do exercício, apresentando as principais informações em displays de sete segmentos.

2.2 Objetivos específicos

  • Utilizar um Arduino Mega 2560 como unidade central de processamento.
  • Ler um potenciômetro para definir a velocidade da esteira.
  • Limitar a velocidade apresentada à faixa de 0 a 16 km/h.
  • Exibir o tempo no formato minutos e segundos.
  • Acumular a distância sem diminuí-la quando a velocidade for reduzida.
  • Manter a distância congelada quando a velocidade for igual a zero.
  • Estimar as calorias com base na distância e em um peso médio.
  • Simular uma faixa de batimentos cardíacos durante o exercício.
  • Congelar todos os valores ao pausar e continuar do mesmo ponto.
  • Zerar o sistema por meio de um botão exclusivo de reset.
  • Organizar o circuito com túneis para reduzir a quantidade de fios visíveis.

3. Ferramentas utilizadas

Visuino Pro

Ambiente de programação visual utilizado para criar a lógica do Arduino por blocos. Cada componente representa uma função, como contador, gerador de pulsos, conversor, cálculo, display ou código personalizado.

SimulIDE

Simulador de circuitos utilizado para montar o Arduino Mega, os displays, os resistores, os transistores, o potenciômetro e os botões. Ele permite carregar o programa compilado e observar o funcionamento do circuito.

Arduino Mega 2560

Placa escolhida por possuir uma quantidade elevada de pinos digitais e analógicos. Isso foi necessário porque o projeto utiliza 16 dígitos multiplexados, cinco conjuntos de segmentos e três botões.

Diagrama completo da programação visual desenvolvida no Visuino Pro

4. Arquitetura geral do sistema

O funcionamento pode ser dividido em quatro etapas: entrada, controle, processamento e saída.

🎛️
Entradas
Potenciômetro e botões
🧠
Controle
Arduino Mega
🧮
Processamento
Tempo, distância e calorias
🔢
Saídas
16 displays

Quando o sistema é energizado, ele permanece aguardando o botão Iniciar. Após o início, geradores de pulsos habilitam os contadores e as atualizações periódicas. A leitura do potenciômetro é convertida em velocidade, a velocidade alimenta o cálculo da distância e a distância alimenta o cálculo das calorias. Paralelamente, um gerador aleatório simula os batimentos cardíacos.

O botão Parar/Continuar não apaga os valores. Ele apenas desabilita ou habilita as atualizações. O botão Reset, por outro lado, reinicia o programa e retorna todos os valores para o estado inicial.

5. Componentes do circuito eletrônico

Componente Quantidade Função no projeto
Arduino Mega 25601Executa o programa, lê as entradas, realiza os cálculos e controla os displays.
Display de 7 segmentos16Apresenta tempo, distância, calorias, batimentos e velocidade.
Transistor BJT NPN16Seleciona o dígito ativo durante a multiplexação.
Rede de resistores de 100 Ω5Limita a corrente dos segmentos A a G.
Rede de resistores de 1 kΩ5Limita a corrente aplicada às bases dos transistores.
Potenciômetro de 1 kΩ1Permite selecionar a velocidade simulada.
Botão normalmente aberto3Controla as funções Parar/Continuar, Iniciar e Reset.
TúneisVáriosSubstituem fios longos por conexões identificadas por nomes.

5.1 Arduino Mega 2560

O Arduino Mega foi escolhido principalmente pela quantidade de pinos. Cada conjunto de displays precisa de sete linhas para os segmentos A, B, C, D, E, F e G, além de uma linha para selecionar cada dígito. Como o projeto possui cinco conjuntos e 16 dígitos, uma placa com poucos pinos dificultaria a montagem.

Outra vantagem é que as entradas analógicas do Mega também podem funcionar como pinos digitais. No projeto, os pinos digitais 54 a 69 correspondem às entradas analógicas A0 a A15. O pino 54/A0 é usado para o potenciômetro, enquanto vários dos demais são usados como saídas digitais para os displays.

5.2 Potenciômetro

O potenciômetro funciona como um divisor de tensão. Seus terminais externos são ligados à alimentação e ao terra, enquanto o terminal central fornece uma tensão variável para a entrada A0 do Arduino. No Visuino, essa leitura é representada normalmente por um valor decimal entre 0 e 1.

5.3 Botões com pull-up interno

Os três botões são conectados entre o pino digital e o GND. Os pinos 3, 4 e 5 utilizam o pull-up interno do Arduino. Dessa forma, o pino permanece em nível lógico alto quando o botão está solto e vai para nível baixo quando o botão é pressionado.

Como essa lógica é invertida em relação à leitura mais intuitiva, foram adicionados componentes inversores no Visuino. Depois da inversão, pressionar o botão passa a ser interpretado como verdadeiro.

6. Displays de sete segmentos e multiplexação

6.1 O que é um display de sete segmentos?

Um display de sete segmentos é formado por sete barras luminosas identificadas pelas letras A, B, C, D, E, F e G. Ao acender combinações específicas dessas barras, é possível formar os algarismos de 0 a 9.

Identificação dos segmentos
   ─ A ─
  |     |
  F     B
  |     |
   ─ G ─
  |     |
  E     C
  |     |
   ─ D ─

Os displays utilizados no SimulIDE são configurados como cátodo comum. Isso significa que o terminal comum do dígito deve ser conectado ao GND para que os segmentos possam acender quando recebem nível alto.

6.2 Por que utilizar transistores?

Cada um dos 16 dígitos possui um transistor BJT NPN. O emissor do transistor é conectado ao GND, o coletor é conectado ao cátodo comum do display e a base recebe o sinal do Arduino através de um resistor de 1 kΩ.

Quando o Arduino ativa a base, o transistor conduz e conecta o cátodo daquele dígito ao terra. Dessa forma, o Arduino consegue selecionar individualmente qual display ficará ativo.

6.3 Como funciona a multiplexação?

Não é necessário manter os 16 displays ligados ao mesmo tempo. O programa ativa um dígito, envia o padrão dos segmentos, desativa esse dígito e passa rapidamente para o próximo. Esse ciclo se repete muitas vezes por segundo.

Como a troca é muito rápida, ocorre o efeito conhecido como persistência da visão: para o observador, todos os dígitos parecem permanecer acesos simultaneamente.

Vantagem: os dígitos de um mesmo indicador compartilham as sete linhas de segmentos. Assim, um indicador de três dígitos utiliza sete linhas de segmentos e três linhas de seleção, em vez de 21 linhas independentes.

6.4 Resistores utilizados

As redes de resistores de 0 Ω ficam nas linhas dos segmentos e limitam a corrente dos LEDs internos. As redes de 1 kΩ ficam nas bases dos transistores e limitam a corrente de acionamento.

O arquivo do SimulIDE possui cinco redes de 0 Ω e cinco redes de 1 kΩ, uma dupla para cada conjunto: tempo, distância, calorias, batimentos e velocidade.

6.5 Organização dos túneis

Os túneis do SimulIDE conectam pontos com o mesmo nome sem a necessidade de desenhar um fio entre eles. Isso evita cruzamentos e deixa o circuito legível.

Indicador Túneis dos segmentos Dígitos
TempoA, B, C, D, E, F e G4
DistânciaA1, B1, C1, D1, E1, F1 e G13
CaloriasA2, B2, C2, D2, E2, F2 e G23
BatimentosA3, B3, C3, D3, E3, F3 e G33
VelocidadeA4, B4, C4, D4, E4, F4 e G43

7. Mapeamento dos pinos do Arduino Mega

O mapeamento abaixo foi extraído da configuração final do projeto no Visuino. A coluna “dígitos” corresponde às linhas que acionam as bases dos transistores.

Indicador A B C D E F G Seleção dos dígitos
Tempo6968676665646359, 60, 61 e 62
Distância4948464744454241, 40 e 43
Calorias3938373635343330, 31 e 32
Batimentos2928272625242320, 21 e 22
Velocidade535251505857562, 15 e 55

7.1 Pinos das entradas

Entrada Pino Configuração
PotenciômetroA0 / digital 54Entrada analógica
Parar/Continuar3Entrada com pull-up interno
Iniciar4Entrada com pull-up interno
Reset5Entrada com pull-up interno
Observação técnica: os pinos 20 e 21 também são usados pelo barramento I²C, e os pinos 50 a 53 também são usados pelo barramento SPI. Neste projeto eles funcionam como GPIOs comuns. Portanto, esses barramentos não devem ser utilizados simultaneamente sem remapear os displays.

8. Estrutura do programa no Visuino

O Visuino permite construir a lógica conectando componentes. O arquivo final utiliza componentes para tempo, velocidade, distância, calorias, batimentos, displays e controle dos botões.

Componente do Visuino Função Uso no projeto
PulseGenerator1Gera pulsos periódicos.Avança o contador de segundos.
Counter1Conta de 0 a 59.Representa os segundos.
CounterMinutosConta de 0 a 59.Recebe o pulso de estouro dos segundos.
DynamicDisplay7SegmentTempoMultiplexa quatro dígitos.Mostra minutos e segundos com zeros à esquerda.
MapRangeVelocidadeConverte uma faixa numérica em outra.Transforma a leitura de A0 na faixa de 0 a 16.
Snapshot1Captura o valor existente em um instante.Amostra a velocidade quando recebe um pulso.
PulseGenerator3Gera o clock de amostragem.Atualiza a velocidade e a distância periodicamente.
AnalogToInteger1Converte decimal para inteiro.Gera a velocidade inteira de 0 a 16.
DivideByValue1Divide um valor inteiro.Divide a velocidade por 4 para obter o incremento de distância da simulação.
Add1Soma entradas.Soma o novo incremento ao total anterior por realimentação.
IntegerToAnalog1Converte inteiro para decimal.Prepara a distância para o cálculo das calorias.
DivideByValue3Divide por 1.000.Converte metros em quilômetros.
MultiplyByValue3Multiplica por 70.Aplica o peso médio definido em quilogramas.
MultiplyByValue4Multiplica por 0,7.Aplica o fator simplificado de gasto calórico.
AnalogToInteger2Converte o resultado para inteiro.Envia as calorias ao display.
RandomUnsignedGenerator1Gera números aleatórios sem sinal.Simula valores entre 60 e 115 bpm.
PulseGenerator2Gera pulsos periódicos.Solicita um novo valor de batimento.
DynamicDisplay7Segment...Controla segmentos e seleção de dígitos.Há um componente para cada indicador.
InverterBotao...Inverte verdadeiro e falso.Compensa a lógica ativa em nível baixo do pull-up.
ControleTresBotoesExecuta código C++ personalizado.Implementa iniciar, pausar, continuar, debounce e reset.

9. Controle e exibição do tempo

O tempo é apresentado por quatro dígitos no formato MM:SS. O componente PulseGenerator1 envia pulsos ao Counter1, que representa os segundos.

PulseGenerator1 → Counter1 (segundos) → CounterMinutos → Display de tempo

O contador de segundos possui mínimo 0 e máximo 59. Ao atingir o valor máximo, sua saída de limite envia um pulso ao contador de minutos. O contador de minutos também trabalha de 0 a 59.

O componente de display possui dois grupos internos: um grupo com dois dígitos para os segundos e outro com dois dígitos para os minutos. A opção Leading Zeroes está habilitada, por isso valores menores que 10 são apresentados com zero à esquerda, como 01:05.

00:00 00:59 01:00

10. Controle da velocidade

O potenciômetro é ligado à entrada A0 do Arduino. O Visuino recebe essa leitura e a envia ao componente MapRangeVelocidade, configurado com saída máxima igual a 16.

A0 → MapRangeVelocidade (0 a 16) → Snapshot1 → AnalogToInteger1 → Display

O Snapshot1 não envia continuamente cada pequena variação do potenciômetro. Ele captura o valor quando recebe o pulso do PulseGenerator3. Isso cria uma atualização controlada e fornece o mesmo valor para o display e para o cálculo da distância.

Como os displays apresentam números inteiros, o componente AnalogToInteger1 converte o valor decimal em uma velocidade inteira. Assim, o painel mostra valores entre 000 e 016 km/h.

11. Cálculo e acumulação da distância

11.1 Fórmula física

A distância é calculada a partir da velocidade e do tempo. A fórmula básica é:

d = v × t

Como a velocidade está em quilômetros por hora e a distância deve ser apresentada em metros, a conversão correta é:

v(m/s) = v(km/h) ÷ 3,6

Em um intervalo de um segundo, a distância acumulada pode ser expressa por:

distância nova = distância anterior + velocidade ÷ 3,6

11.2 Implementação utilizada no projeto

No arquivo final do Visuino, a velocidade inteira passa pelo componente DivideByValue1, configurado com o valor 4. O resultado é enviado ao primeiro terminal de Add1.

A saída de Add1 retorna ao seu segundo terminal. Essa realimentação é o que cria a acumulação:

incremento atual + total anterior = novo total

Essa estrutura corrige o problema de a distância acompanhar diretamente o potenciômetro. Ao reduzir a velocidade, a distância total não diminui; apenas passa a crescer mais lentamente. Em velocidade zero, o incremento é zero e o último valor permanece armazenado.

Importante: a divisão por 4 é uma aproximação inteira utilizada na simulação. Por exemplo, 16 ÷ 4 resulta em 4 unidades por atualização. Pela conversão física exata, 16 km/h correspondem a aproximadamente 4,44 m/s. Uma versão mais precisa pode manter o valor em ponto flutuante e dividir por 3,6.

11.3 Exemplo

Considerando a implementação atual e uma velocidade de 16 km/h:

16 ÷ 4 = 4 metros adicionados por atualização

Se a velocidade for reduzida para 8 km/h, o incremento passa para 2. Se for reduzida para zero, nenhum novo valor é somado, mas o total anterior continua no display.

12. Cálculo das calorias

O cálculo das calorias utiliza uma fórmula simplificada baseada na distância em quilômetros, em um peso médio de 70 kg e em um fator igual a 0,7:

calorias = distância(km) × peso(kg) × 0,7

No Visuino, o fluxo é:

Distância → converter para decimal → ÷ 1.000 → × 70 → × 0,7 → converter para inteiro → display
  1. IntegerToAnalog1: converte a distância inteira em valor decimal.
  2. DivideByValue3: divide por 1.000 para transformar metros em quilômetros.
  3. MultiplyByValue3: multiplica pelo peso médio de 70 kg.
  4. MultiplyByValue4: multiplica pelo fator 0,7.
  5. AnalogToInteger2: converte o resultado para um número inteiro.

12.1 Exemplo com 128 metros

Conversão: 128 m = 0,128 km

Cálculo: 0,128 × 70 × 0,7 = 6,272

Valor inteiro exibido: aproximadamente 6 calorias

Aviso: esse cálculo é uma estimativa educacional. Uma esteira real pode utilizar modelos mais complexos, considerando idade, sexo, inclinação, intensidade, frequência cardíaca e metabolismo individual.

13. Simulação dos batimentos cardíacos

O circuito não possui um sensor cardíaco real. Para representar essa informação no painel, foi utilizado o componente RandomUnsignedGenerator1.

Ele está configurado para gerar valores inteiros entre 60 e 115 bpm. O PulseGenerator2 envia pulsos ao gerador, fazendo o valor variar periodicamente durante a execução.

060 bpm 082 bpm 104 bpm 115 bpm

Quando o sistema é pausado, o gerador aleatório e o gerador de pulsos são desabilitados. Por isso, o último valor permanece congelado no display. Quando a execução continua, novos valores voltam a ser gerados.

Não é uma medição médica: os valores são apenas simulados. Para uma versão física seria necessário utilizar um sensor apropriado e tratar corretamente o sinal.

14. Botões e código personalizado

A lógica dos três botões foi centralizada no componente de código personalizado ControleTresBotoes. Ele possui três entradas digitais e uma saída chamada Executando.

Iniciar

Retira o sistema do estado de espera, define Executando = true e habilita todas as atualizações.

Parar/Continuar

Alterna o valor de Executando. Na pausa, os valores ficam congelados; no próximo toque, continuam.

Reset

Desabilita a execução e reinicia o programa, zerando contadores, acumuladores e displays.

14.1 Estados internos

  • FAguardandoInicio: informa se o sistema ainda aguarda o primeiro início.
  • FExecutando: indica se as atualizações devem acontecer.
  • FResetArmado: impede múltiplos resets durante o mesmo pressionamento.
  • FPararArmado: garante uma alternância por pressionamento do botão de pausa.
  • FUltimoParar, FUltimoIniciar e FUltimoReset: armazenam o instante do último acionamento.

14.2 Debounce

Botões mecânicos podem produzir pequenas oscilações elétricas durante o contato, fazendo um único toque parecer vários. O código verifica se passaram pelo menos 80 milissegundos desde o último acionamento. Esse processo é chamado de debounce.

14.3 Saída Executando

A saída Executando é ligada às entradas de habilitação de quatro componentes:

  • PulseGenerator1 — contagem do tempo;
  • PulseGenerator2 — atualização dos batimentos;
  • PulseGenerator3 — amostragem da velocidade e cálculo da distância;
  • RandomUnsignedGenerator1 — geração dos batimentos simulados.

Ao pausar, esses componentes são desabilitados. Os componentes de display continuam multiplexando os últimos valores recebidos, evitando que a tela apague.

14.4 Código utilizado

Clique para visualizar o código dos três botões
// Variáveis internas
bool FAguardandoInicio = true;
bool FExecutando = false;
bool FResetArmado = false;
bool FPararArmado = true;

unsigned long FUltimoParar = 0;
unsigned long FUltimoIniciar = 0;
unsigned long FUltimoReset = 0;

// Entrada Parar/Continuar
if( !AValue )
{
  FPararArmado = true;
}
else if( FPararArmado )
{
  FPararArmado = false;

  if( !FAguardandoInicio )
  {
    unsigned long AAgora = millis();

    if(( AAgora - FUltimoParar >= 80 ) || ( FUltimoParar == 0 ))
    {
      FUltimoParar = AAgora;
      FExecutando = !FExecutando;
      Executando.Send( FExecutando );
    }
  }
}

// Entrada Iniciar
if( AValue )
{
  unsigned long AAgora = millis();

  if(( AAgora - FUltimoIniciar >= 80 ) || ( FUltimoIniciar == 0 ))
  {
    FUltimoIniciar = AAgora;
    FAguardandoInicio = false;
    FExecutando = true;
    Executando.Send( true );
  }
}

// Entrada Reset
if( !AValue )
{
  FResetArmado = true;
}
else if( FResetArmado )
{
  unsigned long AAgora = millis();

  if(( AAgora - FUltimoReset >= 80 ) || ( FUltimoReset == 0 ))
  {
    FResetArmado = false;
    FUltimoReset = AAgora;
    FExecutando = false;
    FAguardandoInicio = true;
    Executando.Send( false );
    delay( 20 );
    asm volatile ( "jmp 0" );
  }
}

// Inicialização
FAguardandoInicio = true;
FExecutando = false;
Executando.Send( false );
O comando asm volatile ("jmp 0") faz o fluxo do programa retornar ao início. Na prática deste projeto, isso reinicializa as variáveis e os componentes do sketch, fazendo os displays voltarem ao estado inicial.
Botões Parar/Continuar, Iniciar e Reset conectados aos pinos 3, 4 e 5

15. Testes realizados

Para validar o funcionamento, foram considerados diferentes cenários de uso.

Teste Procedimento Resultado esperado
Estado inicialLigar a simulação sem pressionar Iniciar.Valores permanecem parados.
InícioPressionar Iniciar.Tempo e demais atualizações começam.
Velocidade máximaLevar o potenciômetro ao máximo.Display mostra 016 km/h.
Redução da velocidadeDiminuir o potenciômetro durante a execução.Distância continua aumentando, porém mais devagar.
Velocidade zeroPosicionar o potenciômetro em zero.Distância permanece no último valor.
PausaPressionar Parar/Continuar.Todos os valores ficam congelados.
ContinuaçãoPressionar novamente Parar/Continuar.Contagem continua do ponto anterior.
ResetPressionar Reset.Valores zeram e o sistema volta a aguardar Iniciar.
Virada do minutoAguardar a passagem de 00:59.Tempo passa para 01:00.

16. Problemas encontrados e soluções aplicadas

Problema: a distância diminuía ao reduzir a velocidade.

Solução: deixar de apresentar diretamente um valor calculado a partir da posição atual do potenciômetro e criar um acumulador com realimentação no componente Add1.

Problema: a distância zerava quando a velocidade chegava a zero.

Solução: somar incremento zero ao total anterior, preservando o valor acumulado.

Problema: o botão Parar não congelava todo o sistema.

Solução: criar uma saída única chamada Executando e conectá-la às entradas Enabled dos geradores e do gerador aleatório.

Problema: necessidade de continuar do ponto em que parou.

Solução: desabilitar as fontes de atualização sem zerar os contadores nem o acumulador.

Problema: múltiplos acionamentos provocados pelo botão.

Solução: aplicar debounce de 80 ms e variáveis de armamento para pausa e reset.

Problema: grande quantidade de fios no SimulIDE.

Solução: utilizar túneis A–G e A1–G4 para organizar cada conjunto de displays.

Problema: falta de pinos em placas menores.

Solução: utilizar o Arduino Mega e aproveitar pinos analógicos como saídas digitais.

17. Limitações e possíveis melhorias

O projeto atende ao objetivo de demonstrar o funcionamento de um painel de esteira, mas algumas melhorias poderiam aproximá-lo ainda mais de um equipamento real.

  • Substituir a divisão inteira por 4 por um cálculo decimal usando velocidade ÷ 3,6.
  • Utilizar o intervalo real entre atualizações, calculado com millis(), para tornar a distância independente da frequência exata do pulso.
  • Implementar tratamento explícito para valores acima de 999 nos displays de três dígitos.
  • Substituir os batimentos aleatórios por um sensor de frequência cardíaca.
  • Adicionar controle de inclinação da esteira.
  • Simular ou controlar um motor com PWM.
  • Adicionar alerta sonoro, botão de emergência e indicação de estado.
  • Salvar o treino em memória para não perder os dados em uma queda de energia.
  • Utilizar um circuito integrado de expansão de saídas ou drivers de display para reduzir a quantidade de pinos.
  • Montar uma interface gráfica em LCD ou TFT como evolução do painel.
Mesmo com essas possibilidades de evolução, a versão atual demonstra corretamente os conceitos principais: leitura de entrada, controle por estados, multiplexação, contagem, acumulação e apresentação de dados.

18. Conclusão

O desenvolvimento da esteira eletrônica permitiu integrar software e hardware em um único projeto. O Arduino Mega recebeu informações do potenciômetro e dos botões, processou o tempo, a velocidade, a distância e as calorias e controlou 16 displays de sete segmentos por multiplexação.

O Visuino facilitou a construção da lógica por componentes, tornando visíveis as etapas de processamento. O SimulIDE permitiu testar as ligações e visualizar o comportamento do circuito antes de uma possível montagem física.

Um dos principais aprendizados foi compreender que a distância deve ser acumulada a partir dos incrementos de movimento, em vez de ser ligada diretamente à posição do potenciômetro. Outro ponto importante foi o controle de pausa: para congelar os valores sem apagá-los, foi necessário interromper as fontes de atualização e manter os displays apresentando o último estado.

O código personalizado dos botões complementou a programação visual e possibilitou implementar uma máquina simples de estados, com espera, execução e pausa. O debounce evitou acionamentos indevidos, enquanto o reset de software retornou todo o sistema à condição inicial.

Dessa forma, o trabalho alcançou o objetivo de simular um painel completo de esteira de academia e demonstrou conceitos importantes de sistemas embarcados, eletrônica e programação.

Links dos projetos:
ProjetoBeatrizHaiko 

Resultado final

O sistema inicia somente após o comando do usuário, apresenta cinco informações simultâneas, responde à alteração de velocidade, acumula distância e calorias, simula batimentos, pausa sem perder dados e retorna ao estado inicial pelo botão Reset.

Apêndice — Resumo do funcionamento

Informação Origem Processamento Exibição
TempoGerador de pulsosContadores de segundos e minutos4 dígitos
VelocidadePotenciômetro em A0Mapeamento de 0 a 163 dígitos
DistânciaVelocidade amostradaDivisão e soma acumulativa3 dígitos
CaloriasDistância acumuladakm × 70 × 0,73 dígitos
BatimentosGerador aleatórioFaixa de 60 a 1153 dígitos
Projeto desenvolvido com Arduino Mega 2560, Visuino Pro e SimulIDE.

Comentários