Índice:

Instrutor inteligente de bicicleta interna faça você mesmo: 5 etapas
Instrutor inteligente de bicicleta interna faça você mesmo: 5 etapas

Vídeo: Instrutor inteligente de bicicleta interna faça você mesmo: 5 etapas

Vídeo: Instrutor inteligente de bicicleta interna faça você mesmo: 5 etapas
Vídeo: Policia brasileira x polícia Russa quem ganha #shorts 2024, Novembro
Anonim
Instrutor inteligente de bicicleta interna faça você mesmo
Instrutor inteligente de bicicleta interna faça você mesmo
Instrutor inteligente de bicicleta interna faça você mesmo
Instrutor inteligente de bicicleta interna faça você mesmo
Instrutor inteligente de bicicleta interna faça você mesmo
Instrutor inteligente de bicicleta interna faça você mesmo

Introdução

Este projeto começou como uma modificação simples para uma bicicleta interna Schwinn IC Elite que usa um parafuso simples e almofadas de feltro para os ajustes de resistência. O problema que eu queria resolver era que o passo do parafuso era muito grande, então a faixa de não ser capaz de pedalar até a roda girar completamente livre era de apenas alguns graus no botão de resistência. A princípio mudei o parafuso para M6, mas depois teria que fazer um botão, então por que não usar um motor de passo esquerdo NEMA 17 para mudar a resistência? Se já existe alguns eletrônicos, por que não adicionar um medidor de potência de manivela e uma conexão bluetooth a um computador para fazer um treinador inteligente?

Isso se mostrou mais difícil do que o esperado, pois não havia exemplos de como emular um medidor de potência com um arduino e bluetooth. Acabei gastando cerca de 20h programando e interpretando as especificações do BLE GATT. Espero que, fornecendo um exemplo, possa ajudar alguém a não perder tanto tempo tentando entender o que exatamente significa "Campo de tipo de anúncio de dados de serviço" …

Programas

Todo o projeto está no GitHub:

github.com/kswiorek/ble-ftms

Eu recomendo fortemente usar o Visual Studio com um plug-in VisualGDB se você planeja fazer algo mais sério do que apenas copiar e colar meu código.

Se você tiver dúvidas sobre o programa, pergunte, sei que meus comentários minimalistas podem não ajudar muito.

Créditos

Obrigado a stoppi71 por seu guia sobre como fazer um medidor de energia. Eu fiz a manivela de acordo com seu projeto.

Suprimentos:

Os materiais para este projeto dependem muito de qual bicicleta você está modificando, mas existem algumas peças universais.

Manivela:

  1. Módulo ESP32
  2. HX711 Sensor de peso ADC
  3. Medidores de tensão
  4. MPU - giroscópio
  5. Uma pequena bateria Li-Po (cerca de 750mAh)
  6. Manga termorretrátil
  7. Driver A4988 Stepper
  8. Regulador 5V
  9. Um macaco de barril arduino
  10. Fonte de alimentação 12V arduino

Console:

  1. NEMA 17 stepper (precisa ser bastante potente,> 0,4 Nm)
  2. Haste M6
  3. 12864 lcd
  4. WeMos LOLIN32
  5. Interruptores de tato

Equipamento

Para fazer isso, você provavelmente conseguirá usar apenas uma impressora 3D, no entanto, você pode economizar muito tempo cortando o gabinete a laser e também pode fazer PCBs. Os arquivos DXF e gerber estão no GitHub, portanto, você pode solicitá-los localmente. O acoplador da haste roscada ao motor foi ligado em um torno e este pode ser o único problema, já que a peça precisa ser bastante forte para puxar as almofadas, mas não há muito espaço nesta bicicleta em particular.

Desde que fiz a primeira bicicleta, adquiri uma fresadora que me permite fazer ranhuras para os sensores na manivela. Isso torna a colagem um pouco mais fácil e também os protege se algo bater na manivela. (Eu já tive esses sensores caindo algumas vezes, então queria estar seguro.)

Etapa 1: A manivela:

The Crank
The Crank
The Crank
The Crank
The Crank
The Crank

É melhor apenas seguir este tutorial:

Basicamente, você precisa colar os sensores na manivela em quatro lugares e conectá-los às laterais da placa.

As conexões adequadas já estão lá, então você só precisa soldar os pares de fios diretamente a essas oito almofadas na placa.

Para conectar os sensores, use o fio mais fino possível - as almofadas são muito fáceis de levantar. Você precisa colar os sensores primeiro e deixar apenas o suficiente deles do lado de fora para soldar e, em seguida, cobrir o restante com epóxi. Se você tentar soldar antes de colar, eles enrolam e quebram.

Para montar o PCB:

  1. Insira os alfinetes de ouro da parte inferior (o lado com traços) em todos os orifícios, exceto os verticais próximos à parte inferior.
  2. Coloque as três placas (ESP32 na parte superior, depois MPU, o HX711 na parte inferior) para que os pinos de ouro fiquem nos dois orifícios.
  3. Solde os cabeçalhos nas placas no topo
  4. Corte os alfinetes de ouro da parte inferior. (Experimente cortá-los antes da montagem, para que você saiba que seus "alfinetes de ouro" não são de aço por dentro - isso os torna quase impossíveis de cortar e você precisa lixá-los ou amolá-los)
  5. soldar os pinos de ouro restantes na parte inferior da placa.
  6. Faça upload do firmware para a manivela

A última etapa é embalar toda a manivela com manga termorretrátil.

Este método de fazer o tabuleiro não é o ideal, pois os tabuleiros ocupam muito espaço no qual você poderia colocar outras coisas. O melhor seria soldar todos os componentes na placa diretamente, mas eu mesmo não tenho habilidade para soldar esses pequenos SMDs. Eu precisaria fazer o pedido montado e provavelmente cometeria alguns erros e acabaria fazendo o pedido três vezes e esperando um ano antes que chegassem.

Se alguém pudesse projetar a placa, seria ótimo se ela tivesse alguns circuitos de proteção da bateria e um sensor que ligaria o ESP se a manivela começasse a se mover.

IMPORTANTE

O sensor HX711 por padrão é definido para 10 Hz - é muito lento para a medição de potência. Você precisa levantar o pino 15 da placa e conectá-lo ao pino 16. Isso leva o pino HIGH e ativa o modo 80Hz. A propósito, esse 80Hz define a taxa de todo o loop do Arduino.

Uso

O ESP32 está programado para hibernar após 30 segundos sem nenhum dispositivo bluetooth conectado. Para ligá-lo novamente, você precisa pressionar o botão de reinicialização. Os sensores também são alimentados por um pino digital, que fica BAIXO no modo de espera. Se você quiser testar os sensores com o código de exemplo das bibliotecas, você precisa acionar o pino HIGH e esperar um pouco antes que os sensores sejam ligados.

Após a montagem os sensores precisam ser calibrados lendo o valor sem força e depois com peso aplicado (usei um kettlebell de 12kg ou 16kg pendurado no pedal). Esses valores precisam ser colocados no código powerCrank.

É melhor tarar a manivela antes de cada viagem - ela não deve ser capaz de tarar a si mesma quando alguém está pedalando, mas é melhor prevenir do que remediar e é possível tarar apenas uma vez a cada virada. Se você notar alguns níveis de energia estranhos, precisará repetir este processo:

  1. Coloque a manivela para baixo até que a luz comece a piscar.
  2. Depois de alguns segundos, a luz permanecerá acesa - não toque nela então
  3. Quando a luz se apaga, ela define a força atual detectada como um novo 0.

Se você quiser usar apenas a manivela, sem o console, o código está aqui no github. Tudo o resto funciona da mesma maneira.

Etapa 2: o console

O console
O console
O console
O console
O console
O console

A caixa é cortada em acrílico de 3 mm, os botões são impressos em 3D e há espaçadores para o LCD, cortados em acrílico de 5 mm. É colado com cola quente (adere muito bem ao acrílico) e há um "suporte" impresso em 3D para prender o PCB ao LCD. Os pinos do LCD são soldados na parte inferior para que não interfiram com o ESP.

O ESP é soldado de cabeça para baixo, para que a porta USB se encaixe no case

O PCB de botão separado é colado com cola quente, de modo que os botões são capturados em seus orifícios, mas eles ainda pressionam os interruptores. Os botões são conectados à placa com conectores JST PH 2.0 e a ordem dos pinos é fácil de deduzir do esquema

É muito importante montar o driver de passo na orientação correta (o potenciômetro perto do ESP)

Toda a parte do cartão SD está desabilitada, pois ninguém o usava na primeira versão. O código precisa ser atualizado com algumas configurações de IU, como peso do piloto e configuração de dificuldade.

O console é montado usando "braços" de lasercut e zipties. Os dentinhos cravam no guidão e seguram o console.

Etapa 3: o motor

O motor
O motor
O motor
O motor
O motor
O motor

O motor se mantém no lugar do botão de ajuste com um suporte impresso em 3D. Em seu eixo é montado um acoplador - um lado possui um orifício de 5 mm com parafusos de fixação para prender o eixo, o outro possui uma rosca M6 com parafusos de fixação para travá-lo. Se quiser, você provavelmente pode fazer em uma furadeira de estoque redondo de 10 mm. Não precisa ser extremamente preciso, pois o motor não está montado com muita firmeza.

Um pedaço de haste roscada M6 é aparafusada no acoplador e puxa uma porca M6 de latão. Eu usinei, mas pode ser facilmente feito de um pedaço de latão com uma lima. Você pode até mesmo soldar algumas brocas em uma porca normal, para que ela não gire. Uma porca impressa em 3D também pode ser uma solução.

A rosca precisa ser mais fina do que o parafuso padrão. Seu passo é de cerca de 1,3 mm, e para M6 é de 0,8 mm. O motor não tem torque suficiente para girar o parafuso de estoque.

A porca precisa ser bem lubrificada, pois o motor mal consegue girar o parafuso nas configurações mais altas

Etapa 4: Configuração

Configuração
Configuração
Configuração
Configuração

Para fazer upload do código para ESP32 do Arduino IDE, você precisa seguir este tutorial:

A placa é "WeMos LOLIN32", mas o "módulo Dev" também funciona

Eu sugiro usar o Visual Studio, mas muitas vezes pode falhar.

Antes do primeiro uso

A manivela deve ser configurada de acordo com a etapa "Manivela"

Usando o aplicativo "nRF Connect", você precisa verificar o endereço MAC da manivela ESP32 e configurá-lo no arquivo BLE.h.

Na linha 19 de indoorBike.ino você precisa definir quantas rotações do parafuso são necessárias para definir a resistência de completamente solta ao máximo. (O "máximo" é subjetivo propositalmente, você ajusta a dificuldade com essa configuração.)

O treinador inteligente tem "engrenagens virtuais" para configurá-los corretamente, você precisa calibrá-lo nas linhas 28 e 29. Você precisa pedalar com uma cadência constante em uma determinada configuração de resistência, depois ler a potência e configurá-la no arquivo. Repita isso novamente com outra configuração.

O botão mais à esquerda muda do modo ERG (resistência absoluta) para o modo de simulação (engrenagens virtuais). O modo de simulação sem uma conexão com o computador não faz nada, pois não há dados de simulação.

A linha 36. define as engrenagens virtuais - o número e as proporções. Você os calcula dividindo o número de dentes da engrenagem dianteira pelo número de dentes da engrenagem traseira.

Na linha 12. você coloca o peso do piloto e da bicicleta (em [newtons], massa vezes a aceleração gravitacional!)

Toda a parte física disso é provavelmente muito complicada e nem mesmo eu me lembro o que faz exatamente, mas eu calculo o torque necessário para puxar o ciclista morro acima ou algo assim (é por isso que a calibração).

Esses parâmetros são altamente subjetivos, você precisa configurá-los após algumas viagens para que funcionem corretamente.

A porta COM de depuração envia dados binários diretos recebidos pelo bluetooth entre aspas ('') e dados de simulação.

O configurador

Como a configuração da física supostamente realista acabou sendo um grande incômodo para torná-la realista, criei um configurador de GUI que deve permitir que os usuários definam graficamente a função que converte da inclinação da colina para o nível de resistência absoluta. Ainda não está totalmente acabada e não tive a oportunidade de testá-la, mas no próximo mês irei converter outra moto, por isso irei lapidá-la então.

Na guia "Engrenagens", você pode definir a proporção de cada engrenagem movendo os controles deslizantes. Em seguida, você precisa copiar a parte do código para substituir as engrenagens definidas no código.

Na aba "Nota", você recebe um gráfico de uma função linear (sim, parece que a matéria mais odiada em matemática é realmente útil) que pega a nota (eixo vertical) e produz passos de resistência absoluta (eixo horizontal). Vou entrar na matemática um pouco mais tarde para os interessados.

O usuário pode definir esta função usando os dois pontos colocados sobre ela. À direita há um lugar para trocar a marcha atual. A marcha selecionada, como você pode imaginar, muda a maneira como o nivelamento é mapeado para a resistência - em marchas mais baixas é mais fácil pedalar em aclives. Mover o controle deslizante altera o segundo coeficiente, que influencia como a marcha selecionada altera a função. É mais fácil brincar um pouco para ver como se comporta. Também pode ser necessário tentar algumas configurações diferentes para descobrir o que funciona melhor para você.

Ele foi escrito em Python 3 e deve funcionar com bibliotecas padrão. Para usá-lo, você precisa descomentar as linhas imediatamente após "descomentar essas linhas para usar o configurador". Como eu disse, não foi testado, então pode haver alguns erros, mas se acontecer algo, por favor, escreva um comentário ou abra um problema, para que eu possa corrigi-lo.

A matemática (e física)

A única maneira de o controlador parecer que você está subindo uma colina é girando o parafuso de resistência. Precisamos converter a nota para o número de rotações. Para facilitar a configuração, toda a gama, desde completamente frouxa até não conseguir girar a manivela, é dividida em 40 etapas, as mesmas utilizadas no modo ERG, mas desta vez com números reais em vez de inteiros. Isso é feito com uma função de mapa simples - você pode procurá-la no código. Agora estamos um degrau acima - em vez de lidar com as revoluções do parafuso, estamos lidando com etapas imaginárias.

Agora, como isso realmente funciona quando você sobe uma ladeira de bicicleta (assumindo uma velocidade constante)? Obviamente precisa haver alguma força empurrando você para cima, ou então você rolaria para baixo. Essa força, como nos diz a primeira lei do movimento, deve ser igual em magnitude, mas na direção oposta à força que puxa você para baixo, para que você esteja em movimento uniforme. Ela vem do atrito entre a roda e o solo e se você desenhar o diagrama dessas forças, ela precisa ser igual ao peso da bicicleta e ao ciclista vezes a inclinação:

F = Fg * G

Agora, o que faz a roda aplicar essa força? Como estamos lidando com engrenagens e rodas, é mais fácil pensar em termos de torque, que é simplesmente a força vezes o raio:

t = F * R

Como há engrenagens envolvidas, você dá um torque na manivela, que puxa a corrente e gira a roda. O torque necessário para girar a roda é multiplicado pela relação de transmissão:

tp = tw * gr

e de volta da fórmula de torque, obtemos a força necessária para girar o pedal

Fp = tp / r

Isso é algo que podemos medir usando o medidor de energia na manivela. Como o atrito dinâmico está linearmente relacionado à força e como esta bicicleta em particular usa molas para transmitir essa força, ele é linear ao movimento do parafuso.

Potência é a força vezes a velocidade (assumindo a mesma direção dos vetores)

P = F * V

e a velocidade linear do pedal está relacionada à velocidade angular:

V = ω * r

e assim podemos calcular a força necessária para girar os pedais em um determinado nível de resistência. Como tudo está linearmente relacionado, podemos usar proporções para fazer isso.

Isso era essencialmente o que o software precisava calcular durante a calibração e usando uma forma indireta para nos obter um composto complicado, mas uma função linear que relaciona o grau com a resistência. Eu escrevi tudo no papel, calculei a equação final e todas as constantes se tornaram três coeficientes.

Esta é tecnicamente uma função 3D que representa um plano (eu acho) que usa o grau e a relação de engrenagem como argumentos, e esses três coeficientes estão relacionados àqueles necessários para definir um plano, mas como as engrenagens são números discretos, era mais fácil para torná-lo um parâmetro em vez de lidar com projeções e tal. O primeiro e o terceiro coeficientes podem ser definidos por uma única linha e (-1) * o segundo coefiiciente é a coordenada X do ponto, onde a linha "gira" ao mudar de marcha.

Nesta visualização os argumentos são representados pela linha vertical e os valores pela horizontal, e eu sei que isso pode ser chato, mas foi mais intuitivo para mim e se encaixou melhor na GUI. Essa é provavelmente a razão pela qual os economistas desenham seus gráficos dessa forma.

Etapa 5: Concluir

Agora você precisa de alguns aplicativos para usar em seu novo treinador (o que economizou cerca de US $ 900:)). Aqui estão minhas opiniões sobre alguns deles.

  • RGT Cycling - na minha opinião o melhor - tem uma opção totalmente gratuita, mas tem algumas pistas. Lida melhor com a parte de conexão, pois seu celular se conecta via bluetooth e um PC mostra a trilha. Usa vídeo realista com um ciclista de RA
  • Rouvy - um monte de faixas, apenas assinatura paga, por algum motivo o aplicativo para PC não funciona com isso, você precisa usar seu telefone. Pode haver problemas quando o seu laptop usa a mesma placa para bluetooth e WiFi, muitas vezes atrasa e não quer carregar
  • Zwift - um jogo animado, apenas pago, funciona muito bem com o treinador, mas a IU é bastante primitiva - o inicializador usa o Internet Explorer para exibir o menu.

Se você gostou da construção (ou não), por favor me diga nos comentários e se você tiver alguma dúvida pode perguntar aqui ou enviar um problema para o github. Terei prazer em explicar tudo, pois é bastante complicado.

Recomendado: