Pages: [1] 2   Go Down
Author Topic: Projeto - Cycloduino  (Read 2963 times)
0 Members and 1 Guest are viewing this topic.
Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá galera, sou novo aqui no fórum mas queria divulgar um projeto que estou desenvolvendo o Cycloduino.
A ideia é criar um ciclocomputador completo com velocidade, cadência, temperatura, altitude, frequência cardíaca, log no cartão SD, e outras funções.
O projeto está hospedado no GitHub http://bit.ly/cycloduino e estou a procura de colaboradores para me ajudar no desenvolvimento desse projeto.
Já completei boa parte do projeto, e estou avançando na medida que os sensores vão chegando e que vou tendo tempo livre.
Se você tiver interesse e participar desse projeto entre no repositório dê uma olhada e vamos conversar!

Valeu!
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Portanto... tens este código todo e não tens sensores?

Não seria melhor primeiro ver o que dão os sensores e depois comecar a juntar as coisas? Algo que se calhar pode limitar um pouco o sistema é a escrita para o cartão. Isso talvez demore um pouco mais e limite a frequência de amostragem. Também reparei que usas timers... e uma interrupcão algo complexa. Isso pode tornar dificil fazer as medicões sempre no mesmo intervalo...

Algo que também notei é a ausência de filtros... Mas isso pode ser feito à posteriori já que não vais controlar nada.

Depois mostra o resultado final.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Todo o código foi feito com o sensores que já tenho e já foram testados e estão funcionando... eu vou ampliar na medida que os outros sensores chegarem, barômetro o receptor do polar etc...

O que poderia fazer para melhorar a escrita no cartão? Se eu entendi essa etapa pode demorar e atrasar a execução do resto do código é isso?
Quanto aos timers não entendi a sua colocação, eu estou utilizado os timers justamente para ter uma leitura precisa de quando o imã passa em frente ao sensor reed. Você quis dizer que o código dentro da interrupção está muito complexo?

E em relação aos filtros, o que poderia filtrar?

obrigado pela ajuda!
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estive a pensar um pouco... e se calhar foi um comentário idiota (na altura estava a fazer trend de sinais rápidos e não pensei bem na aplicacão que tens). Certamente que não queres amostrar a cada 100ms... isso seria um tanto ou quanto ridículo.
Dependendo até das tuas voltas de bicicleta, diria que uma amostragem ao segundo seria também um tanto excessiva. O que podes fazer é uma amostragem selectiva... ou seja, em vez de leres todas as variáveis sempre que fazes uma amostragem, lias algumas sempre (tipo frequência cardíaca, velocidade... não sei o que queres dizer com cadência) e outras a cada 10 ou 5 leituras das outras variáveis... a altitude (que julgo eu será um sensor barométrico) não vai variar consideravelmente de segundo a segundo ou mesmo de 10 em 10 segundos.

Mas numa primeira fase, guardar os dados todos seria o melhor. (eventualmente meter um GPS seria bom, mas ter de lidar com as strings do GPS certamente que iria tornar o programa bem mais pesado).

Quanto a filtragens, qualquer sinal analógico pode necessitar de filtragem. Se todos os teus sensores forem digitais, isso é um problema que não se coloca.

Como vais medir a frequência cardíaca e aquilo a que chamas de cadência?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

interessante, realmente talvez fazer todas as leituras a cada segundo seja meio exagerado, vou pensar nisso, vc tem alguma sugestão da melhor forma de fazer  isso?

para a frequência cardíaca eu ainda estou em dúvida, mas tenho duas opções, a primeira é usar RMCM01 que é um módulo OEM compatível com as cintas da Polar, mas está difícil de encontrar ele OEM só encontro a interface da SparkFun - https://www.sparkfun.com/products/8661, mas daí fica muito caro, tem que comprar essa interface e ainda a cinta...

a outra opção é usar o Transceiver nRF24L01+ Module - https://www.sparkfun.com/products/691 para utilizar uma cinta cardíaca da Garmin, é mais barato e teoricamente seria possível se comunicar com outros sensores da Garmin, mas pelo que vi pode ser meio complexo, mas ainda não cheguei nessa etapa...

a cadência nada mais é que as rotações por minuto do pedal e para isso também estou utilizando um reed switch.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Com o millis faz uma leitura de 10 em 10 segundos. :\

Já experimentaste o reed switch na bicicleta? não tiveste problemas de ruído? Por vezes contactos mecânicos podem activar se expostos a choques grandes... o que acontecerá se andares com a bicicleta fora de estrada.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

legal... agora eu estou trabalhando em uma forma incrementar o nome dos logs gerados, se já tiver um log criado ele muda o nome do novo arquivo parar não sobrescrever o log anterior, sempre seguindo uma sequência... RIDE_01.csv, RIDE_02.csv e assim por diante...

quando aos reeds, atualmente estou testando com um toca disco, para não ter que levar a bicicleta no quarto. mas de qualquer forma eu estou reutilizando os reeds de outros velocímetros que tinha instalado em outras bicicletas, eu dei uma olhada na construção deles e realmente podem dar falsos positivos causados por impactos, teria que fazer um teste real em uma trilha para verificar se ocorreriam tantos falsos positivos... acredito que uma alternativa a isso seria utilizar um sensor Hall, não tenho tanto conhecimento assim sobre eletrônica, mas achei esses dois links bem interessantes...

http://www.meder.com/sensor-vs-hall-effect4.html
http://www.kjmagnetics.com/blog.asp?p=reed-switches-and-hall-effect-sensors
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quanto ao nome dos logs, tem em atencão o tamanho. Certamente que depois vais querer importar esses dados para Excel ou algo assim e um ficheiro gigantesco pode não ser aberto e dar imenso trabalho depois a tirar dados para poderes fazer um gráfico.

Existem funcões na libraria SD que dão para ver os nomes, né? Em todo o caso podes tentar manter uns contadores para isso... mas não é ideal.

Os sensores hall devem ser simples de colocar a trabalhar... digo eu. Vais medir no pedal ou nos aros da bicicleta?

Que hardware é que vais usar? Um Arduino mega? Ou um normal?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

quanto ao log, o esse é o trecho do código que estou desenvolvendo:

Code:
  // create a new file
  for (uint8_t i = 0; i < 100; i++)
  {
    logName[5] = i/10 + '0';
    logName[6] = i%10 + '0';
    if (! SD.exists(logName))
    {
      // only open a new file if it doesn't exist
      myFile = SD.open(logName, FILE_WRITE);
      break;  // leave the loop!
    }
  }

estou usando esse pedaço tirado de um tutorial da ladyada, não sei se seria melhor implementar esse mesmo código utilizando um laço while... ainda não testei mas seria algo assim:

Code:
// while the filename exists...
  while(SD.exists(logName))
  {
    logCount += 1;                 // adds 1 to the counter
    logName[5] = logCount / 10 + '0';
    logName[6] = logCount % 10 + '0';
  }   

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open(logName, FILE_WRITE); 


mas ainda não tive tempo de testar...

quando aos sensores, eu estou utilizando um reed no garfo da bicicleta com um imã preso a um aro, e outro imã na parte interna do pedal, para medir a cadência, vc acha que utilizando um sensor hall os problemas com falso negativo seriam eliminados?

no momento estou utilizando um mega 2560, assim que finalizar o projeto quero ver se consigo passar tudo para um arduino mini ou nano, não sei ainda se será possível...
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Talvez porque não está dependente dum contacto mecânico.

Outra coisa que pensei foi nas mudancas. Se medires a cadência no pedal, sabes o trabalho que as tuas pernas estão a fazer, se medires no aro medes a velocidade da bicicleta mas isso não indica o trabalho que fazes. Como disseste que vais medir o ritmo cardíaco, se calhar saber a cadência nos pedais daria uma maior informacão acerca de ti e menos sobre o percurso que estás a fazer. :\

Mas não sei qual é o teu objectivo aqui, a sensacão que fiquei foi que querias fazer um log da tua performance. :\
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

vou ter que fazer alguns testes para ver se vale a pena substituir os reeds por sensores hall...
eu vou medir a cadência e a velocidade pq eu quero colocar um lcd nokia instalado na bike para mostrar as informações...
assim eu posso controlar minha cadencia, que para um treino de ciclismo é mais importante do que manter a velocidade...
e coletando esses dados também poderei fazer algumas comparações e melhorar minha performance...
Logged

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

olá, recentemente meu LCD chegou e já desenvolvi algumas páginas de exibição, para passar para  próxima página eu coloquei um push button, mas coloquei o a verificação de quando botão é pressionado dentro do timer, cada vez que eu pressiono o botão ele pula muitas páginas, eu sei que eu preciso fazer um debounce do botão, mas não estou conseguindo solucionar... parece que não é possível algumas funções quando já tem um timer rodando e fiquei meio confuso...

o código do projeto está aqui: https://github.com/carmolim/cycloduino/blob/master/cycloduino.ino

a parte do push button começa na linha 495.

obrigado!
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se apenas tens um push button, se calhar nada como verificar se houve diferenças no pino do botão de X em X tempo. Isto normalmente soluciona o debouncing duma forma "simples".

Algo assim:

Code:
#define IO_CHECK   500 //500 milisegundos
unsigned long before = 0;


//dentro do loop

if (millis() - before > IO_CHECK) {
   if (digitalRead(botao) == PUSHED) {
       //faz o que pretendes
   }
   before = millis();
}

Podes tentar diminuir o periodo (tipo 100 ms) para melhorar a resposta ao utilizador. Isto não é ideal, mas é a maneira mais simples de evitar bouncing.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Curitiba
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

o problema é que meu loop está com um delay de 1000... por isso estava tentando colocar dentro do timer, mas acho que daí ele não funciona né?
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3216
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Porque é que tens um delay?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1] 2   Go Up
Jump to: