Cadência no arduino


Saúdo todos freneticamente!

De tempos em tempos eu pedalo ativamente nos parques locais. E então ocorreu-me que, talvez, eu não os encerrasse corretamente. Comecei a estudar a questão. A Cyclopedia afirma que a cadência média deve estar entre 80 e 110 rpm. ESTÁ BEM. Então você precisa de um computador de bicicleta com um sensor de cadência. A China não queria levar. Naryl Sigma 16.12 STS + Cadência por 2900 rublos. O preço não é barato, mas no quintal, kryzys e eu, por assim dizer, desempregados B-) eu descobri e decidi ... Na verdade, o papel do computador de bicicleta para mim é desempenhado por um monte de iPhones, programas Cyclometer e relógios Casio STB-1000- e esse bando está bem comigo. E o testemunho de cadência é necessário apenas por algum tempo. Então o corpo se acostuma e o monitoramento constante não faz sentido. Em uma palavra, veio a compreensão de que precisamos coletar uma porcaria temporária de merda e paus de arduino e estoques.

Idéia: colocamos dois LEDs no volante - verde e vermelho. Verde - a cadência é normal. Vermelho, respectivamente, não. Então, ele teve a ideia de que o vermelho só queima quando a velocidade está acima do normal. Então as baterias comem menos.

Implementação:
- sobre a “pena” de um interruptor reed de uma loja de rádio nas proximidades, na “biela” um ímã de neodímio
- Eu vou empurrar os LEDs dentro do envelope chinês
- o controlador irá desempenhar o papel de Arduino Pro Mini 3.3V 8MHz

eu montei a coisa toda em uma placa de ensaio com o UNO (é mais fácil de costurar e rebaixam ) Em vez de um interruptor de palheta, um botão de relógio.


E carregou o esboço com a saída de dados para a porta.
Esboço do teste:
int cadInt = 0;  //    0=pin2
int ledGreen = 10;  //   
int ledRed = 11;  //   

int count = 0;  //  
int lastCount;  //      
int count4period;  //     

//           :
long time;  //       
long lastTime;  //      
int period;  //   

void setup() {
  pinMode (cadInt, INPUT);  //   ()  
  pinMode (ledGreen, OUTPUT);  //    
  pinMode (ledRed, OUTPUT);  //  
  
  attachInterrupt(cadInt, swap, RISING);
  
  lastTime = millis();  //     
  
  Serial.begin(9600);  //     
}

void swap() {
  count = count+1;
}

void loop() {
  delay(5000);
  
  count4period = count - lastCount;
  
  time = millis();  //      
  period = time - lastTime;  //      
 
  Serial.println(period);  //     
  Serial.println(count4period);  //     
  
  if (count4period >= 6 && count4period <= 9)
  {
    Serial.println ("Green");  //     
    digitalWrite(ledGreen, HIGH);
    digitalWrite(ledRed, LOW);
    } else {
        if(count4period > 9){
        Serial.println ("Red");  //     
        digitalWrite(ledGreen, LOW);
        digitalWrite(ledRed, HIGH);
        } else {
          Serial.println ("LOW CADENCE");  //     
          digitalWrite(ledGreen, LOW);
          digitalWrite(ledRed, LOW);
        }
     }
      
  lastTime = time;  //     
  lastCount = count;  
}


Tudo está bem. Tudo está funcionando.


Então ele remontou tudo isso em uma tábua de pão e enfiou um vison.


A propósito, aqui está o diagrama:

só tenho três baterias, porque haverá poucas, mas Fritz não mostra três.

E eis a aparência do tamanho da bicicleta chinesa:


Na análise e no processo de solda:

tive que soldar apenas uma luz, porque a segunda transparente é na verdade vermelha.

Aqui está o que ele parecia no final da operação:

No processo de refletir sobre o projeto, pensava-se que, em vez de LEDs verdes e vermelhos, poderíamos colocar dois RGB, mas não havia nenhum na loja eletrônica mais próxima, porque temos o que temos.

Bem, coloquei o interruptor de palheta em um tubo de plástico e o selei com uma pistola de cola.


E então, e quanto aos custos ... Eu só tinha que gastar dinheiro em um interruptor de palheta (15 rublos), três baterias AA (86 rublos) e ímãs de neodímio (comprei stsuko porque estava procurando um dreno, mas não estava pronto para esperar com Ali (160 rublos)). O resto estava todo deitado em caixas e aguardando a aplicação. Aqui está um fio principal de um mouse Coolermaster morto aplicado:


Ainda há poucas pessoas ...







Atenção! Ficarei feliz em ver um pão com chifres nos comentários;) Mas sério. De fato, foi possível usar calmamente o Atmega8 L em vez de um arduino inteiro e abandonar dois cortes nas luzes e controlá-los com PWM. Mas, no zashashnik, tenho apenas o habitual e não há suporte para a bateria 18650 para alimentar esse negócio. Talvez mais tarde ...

... O esboço final. (Não bata no "programador" que ele escreve como pode):
Cadence_1.0
int cadInt = 0;  //    0=pin2
int ledGreen = 10;  //   
int ledRed = 11;  //   

int count = 0;  //  
int lastCount = 0;  //      
int count4period = 0;  //     

void setup() {
  pinMode (cadInt, INPUT);  //   ()  
  pinMode (ledGreen, OUTPUT);  //    
  pinMode (ledRed, OUTPUT);  //  
  
  attachInterrupt(cadInt, swap, RISING);
}

void swap() {
  count = count+1;
}

void loop() {
  delay(5000);
  
  count4period = count - lastCount;
  
  if (count4period >= 6 && count4period <= 9) {
    digitalWrite(ledGreen, HIGH);
    digitalWrite(ledRed, LOW);
    } else {
        if(count4period > 9){
        digitalWrite(ledGreen, LOW);
        digitalWrite(ledRed, HIGH);
        } else {
          digitalWrite(ledGreen, LOW);
          digitalWrite(ledRed, LOW);
        }
    }
      
  lastCount = count;  
}



Fotos no local:




... e ao máximo


Para um vídeo de lanche:


PS Um artigo não pode ser reimpresso sem o tipo de demanda ©. O projeto pode ser aprimorado e reformulado. Toda uma semana de trabalho frutífera! E eu ando de bicicleta!

O PPS Today fez um teste. Conclusões:
- Tudo funciona bem. A falha foi notada apenas uma vez. Aparentemente, uma conversa escorregou.
- Vale a pena usar LEDs RGB - sob a luz do sol, será mais claro.

All Articles