Ir ao conteúdo
  • Cadastre-se

Calcular velocidade média no arduino


eric_ts

Posts recomendados

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 
}
}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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

Link para o comentário
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. 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...