Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
eric_ts

Calcular velocidade média no arduino

Recommended Posts

Tenho um projeto da faculdade onde um imã irá percorrer um tubo de pvc com comprimento de 500mm gerando tensão em 3 bobinas (nas extremidades e no meio), irei utilizar um sensor magnético ou pegar a tensão gerada pelas bobinas nas extremidades, para calcular a velocidade média pelo arduino UNO e mostrar em um display 16x2 (PC1602F) ou um display touch screen (ILI9325). Sou iniciante em programação, e preciso muito dessa programação urgente! Por favor me ajudem, segue abaixo o que tenho até o momento de programação!

 

-------------------------------------------------------------------------------------------------------------

 

 

unsigned long Inicio=0; // variavel interia positiva para guardar o inicio da medida
unsigned long finish=0; // variavel interia positiva para guardar o fim da medida
float distance=10; // variavel floatpoint para informar a distancia para medida 
// informar aqui a distancia entre os sensores em cm
float interval; // variavel floatpoint para guardar o calculo ente inicio e fim 
float velocity; // variavel floatpoint para guardar guardar o calculo da velocidade
int done=1; // Flag para informar que foi feita a medida

int FlagInicio = 0; // Flag para informar que foi medido o tempo inicial
int FlagFinal = 0; // Flag para informar que foi medido o tempo final 

int startPin = 4; // pino de entrada para sensor de inicio
int finishPin = 8; // pino de entrada para sensor de inicio 
// ----------------------------------------------- 
void setup() 
{
Serial.begin(9600); // Inicialização da serial
pinMode(startPin, INPUT_PULLUP); // definição do pino startPin como entrada e pull-up resistor
pinMode(finishPin, INPUT_PULLUP); // definição do pino finishPin como entrada e pull-up resistor

Serial.println("Medida de velocidad de projetil "); // Msg inicial
}
// ----------------------------------------------- 
void loop() 
{
while(digitalRead(startPin) == LOW) // Faça se pino startPin esta obstruido
{
if (FlagInicio == 0) // Faça se ainda não tem medida inicial
{
Inicio = millis(); // Salva medida inicial em miliseg
Serial.println("Inicio "); // Informa que tem medida inicial 
// Serial.println(Inicio); // informa valor da medida inicial
FlagInicio = 1; // informa que já tem medida inicial
}
}
while(digitalRead(finishPin) == LOW) // Faça se pino finishPin esta obstruido 
{
if (FlagInicio == 1) // Faça se tem medida inicial
{
if (FlagFinal == 0) // Faça se ainda não tem medida final
{
finish = millis(); // Salva medida final em miliseg
Serial.print("Final "); // Informa que tem medida final 
// Serial.println(finish); // informa valor da medida final 
Serial.println(" "); // new line
done = 0; // informa que tudo foi medido 
FlagFinal = 1; // informa que já tem medida final 


}
while(!done) // fa;ca se tudo foi medido
{
interval = float(finish-Inicio); // calcula a diferença entre o inicio e o final em miliseg
velocity = (distance/interval)*60*60; // Divide distancia pelo tempo e multiplica por 3600(miliseg --> minuto
Serial.println("Velocidade do projetil "); // Msg
Serial.print(velocity,4); // Imprime velocidade em cm/min com 4 casas decimais
Serial.println(" cm/min"); // msg sufixo
Serial.println("-----------------------"); // separador de msg
done = 1; // prepara para nova medida
FlagInicio = 0; // prepara para nova medida
FlagFinal = 0; // prepara para nova medida 
finish = 0; // prepara para nova medida 
Inicio = 0; // prepara para nova medida 
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não devo te ajudar na programação (como de fato nem analisei), apenas conjecturar ok?

Desafio +- simples penso que precisas de apenas 2 sensores (sua bobina). Ao passar pelo 1º dispara um contador pré zerado até atingir o 2º quando vai capturar o dado. Se for mais complexo que isso, perdão.

 

Pergunte se o autor deste tópico

teve algum progresso pois penso que o princípio é o mesmo. Continuo achando que mesmo sendo muito simples, você pode criar um fluxograma da problemática pra te ajudar na solucionática ... estranho parece que to tendo um de ja vu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a questão do código,  você só declarou  inicio e fim da variável, é recomendado declarar inicio, meio e fim. 

Editado por Pinhed
retificação

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

@Pinhed Me desculpe, não sabia do outro tópico! E sobre declarar o meio, poderia me ajudar como isso ficaria na lógica de programação ?

adicionado 2 minutos depois

@Isadora Ferraz Obrigado! Irei prosseguir conforme o recomendado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tiveram essa mesma ideia e/ou trabalho que o seu, vou ver encontro o link e deixo aqui. 

 

Cara, não estou me lembrando de onde já vi uma aplicação similar.  Mas a ideia é exatamente a mesma. Você já declarou o inicio e o fim nos unsigned, declare o valor intermediário. 

 

unsigned long Inicio=0; unsigned long meio=0; unsigned long final = 0  // declare todas as variáveis como sendo inteiras. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@eric_ts ,

 

Se a velocidade de seu projétil for alta, pode ser que o seu sensor não consiga fazer a detecção na passagem.

Se usar as bobinas , e utilizar um comparador de tensão, acho que fica mais fácil...

 

Paulo

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×