Olá,  sou novo por aqui, fiz um analisador de gases para medir variáveis respiratórias de atletas. 

Esse analisador um dos sensores é responsável pela leitura do fluxo de ar que sai da boa do atletas, que nada mais que dados calculados de duas portas analógicas usando um sensor de fio quente ( vou testar usar sensor de pressão futuramente, mais barato e robusto), em fim essa leitura gera um grafico que sobe e desce em cada respiração, queria contar quantas vezes o atleta respira a parir desse gráfico, para assim poder calcular a frequência respiratória.

tentei usar o if(VE>10) {FR = FR+1;)

sendo que 10 é um valor que sem sobra de duvidas em todas respirações irá ultrapassar, mas como já esperava ele não conta 1 em cada respiração e sim 1 em cada amostra de cada respiração, não sendo um valor preciso, já que a frequência respiratória aumenta com o passar do tempo.

Alguém pode dar uma ajuda?

Desde já agradeço a atenção.

Exibições: 507

Responder esta

Respostas a este tópico

Você pode fazer seu IF verificar também a condição anterior, ou seja, se VE[x]>10 e VX[x-1]<10
Outra alternativa, já que você quer ver a frequência dessa onda, é a utilização de DTF (Discrete Fourier Transform) que irá lhe fornecer a frequência do sinal amostrado. Existem inúmeros algoritmos prontos para isso. Caso não se importe muito com o tempo de processamento disso, posso lhe passar um algoritmo de simples implementação, mas caso o tempo de processamento seja crítico, pesquise por FFT (Fast Fourier Transform)

Com relação ao FFT vc tem a função ou pode dar uma dia para encontrar mais rápido?

Obrigado 

João, pelo que sei de FFT ou DFT são usadas quando se tem várias medições. 

Pelo que estou entendendo , ele nem esta conseguindo medir a frequência respiratória. 

Thiago, qual é a faixa de frequência que espera medir ? ( por exemplo 10 Hz a 100 Hz ( eu não sei o que é normal e esperado. 

Pode adaptar programas de medição de frequência ou RPM, para fazer as suas medições.

http://interface.khm.de/index.php/lab/interfaces-advanced/frequency...

http://playground.arduino.cc/Main/ReadingRPM

http://www.themakersworkbench.com/content/tutorial/reading-pc-fan-r...

Jose, a transformada de Fourier precisa sim de várias medições, porem no domínio do tempo (analogRead e uma array ja resolvem) que aparentemente ele ja tem pois consegue gerar o gráfico no domínio do tempo e com isso consegue-se as amostras no domínio da frequência. 

Realmente não sei se esse é o meio mais viável pra esse aplicação, mas é uma alternativa

Obrigado pela resposta dos dois, 

Como disse sou bem novo nisso, rs bem novo mesmo, e não tenho formação em ares referentes a isso, se fizer alguma pergunta boba desconsiderem...rsrs 

No caso a primeira sugestão, é algo que já pensem mas nos dados salvos do arduino como posso indica que o valor é o desejado, por exemplo:

Na figura tem no canto direito as variáveis de Volume Expirado, notar as ondas do gráfico ( daria por volta de 23 rpm, reparações por minuto), 

Tem alguma forma de indicar ao arduino que quero pegar o valor especifico de tal variável, por ex, quer pegar as primeiras 10 amostras, ou  pegar as amostras de determinado tempo ( por ex 10 segundos).

Se tiver com , como indico isso na programação?

brigado mais uma vez

Thiago não entendi direito seu post, acho que era pra ter alguma imagem e você esqueceu de postar kk

Mas sobre a sua pergunta, é possível sim. Primeiro você deve ter em mente um numero aproximado de amostra que você precisa, digamos que por meio de analises você chegou a conclusão de que precisa de 100 amostras e o intervalo entre elas (tempo de amostragem), por exemplo 0.01 segundo (10 milissegundos)

Primeiro define-se a array que recebera esses valores

float Amostras[100];

Agora faça as leituras respeitando o intervalo entre elas e salva dentro desse array

for(int i=0 i<100; i++)

{

    Amostras[i] = analogRead(pino);

    delay(10);

}

Pronto, a variavel 'Amostras' agora contem os valores de todas as 100 amostras sendo Amostras[0] a primeira amostra e Amostras[99] a ultima.

Uma observação sobre o tempo de amostragem: Tempo de amostragem é igual ao inverso da frequência de amostragem, essa freqüência de amostragem deve ser no MINIMO duas vezes maior que a maior freqüência a ser amostrada. Digamos que seu sinal varie entre 10Hz a 100Hz, a freqüência de amostragem deve ser no mínimo 200Hz e portanto o tempo de amostragem deve ser no máximo 5 milissegundos.

Show, obrigado mais uma vez, 

Esqueci a imagem mesmo, vou adicionar, mas acho que vou precisar fazer alguns testes.

Sem criar a Array, não existe maneira de indexar as amostras, imagino. 

O jeito que sugeriu usai para calcular media móvel nesse mesmo projeto, 

ME veio mais uma duvida, é possível criar uma array, com numero de amostra variavel, por ex, a array vai ter o tamanho do tempo de analise?

Se não me engano é possível declarar uma array baseada no valor de uma variavel.

Não sei se consegui me expressar direito então vou dar um exemplo. Crie uma varaivel, por exemplo X. Nessa variavel X você define um valor para ser o numero de amostras e em seguida declara a array Amostras[X]. 

Outra alternativa (não é o mais eficiente mas funciona) é criar uma array grande de forma a servir para todos os casos, por exemplo Amostras[10000] e escolher um valor que represente o final da leitura, por exemplo -10 (tem que ser um valor que nunca será lido). Agora digamos que você tenha apenas 10 leituras, ou seja vai de Amostras[0] até Amostras[9] coloque Amostras[10]=-10 indicando o final.

Show, 

Como não sou especialista imagino sempre o caminho mais complicado... 

Cada dia que passo vejo o tamanho do mundo da programação, estou me divertindo com isso, apesar de ser de outra área do conhecimento, apenas me aventuro nisso. 

É hora que quebrar cabeça, rs

Penso no futuro fazer alguns projetos mais complexos para uso próprio e posteriormente  comercializar, apesar de estar me divertindo com isso, não tenho muito tempo e acredito que vou acabar precisa de ajuda mais direta de profissionais especialista em programação e eletrônica. 

Se tiver interesse podemos amadurecer a ideia. 

O que acha ?

Realmente esse "mundo" é bem grande, ouso dizer que se limita apenas pela imaginação do programador.

Sobre projetos mais complexos, continue estudando e "dando um passo de cada vez" e o pessoal daqui com certeza irá te auxiliar nessa jornada, inclusive, quando for um assunto da minha área eu também poderei ajudar.

Já para assuntos comerciais, ai a conversa é um pouco diferente. Recomendo tentar uma pareceria com alguém da área ou então buscar uma consultoria, afinal de contas conhecimento vale dinheiro. Se tiver algo em mente, envie-me uma mensagem inbox com um breve resumo.

Não lembro exatamente onde está, mas sei que existe um tópico aqui no LdG sobre anuncio de contratação de serviço, talvez possa lhe ser útil no futuro.

Devagarinho vou aprendendo, como disse, muito divertido trabalhar com isso, o que esta faltando é tempo mesmo, rs

Encontrei o post relativo a procure de profissionais para tal, mas ninguém dispôs por enquanto, a turma tem coração muito bom, só quer ajudar sem retorno financeiro ...rsrsrs

Vou prepara algo e mando diretamente para ver se é de seu interesse. 

Acredito que seja, pois é algo que deve dar um retorno razoável e pelo que estou vendo não parece ser muito complicado para quem já esta acostumado. 

Obrigado mais uma vez. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço