Calculando Velocidade Média, Simples com dois sensores LDR

Bom pessoal podem me ajudar por favor, é urgente e to com muita duvida, Quero calcular a velocidade media entre dois pinos LDR me deram a seguinte dica: 

Comece fazendo a leitura de um sensor em um pino analógico. Depois duplique e faça o mesmo com o segundo pino. Meça a distância entre os dois LDRs e use a rotina Millis( ) para fazer a contagem de tempo.

Mais estou com duvidas tanto na progamação quanto na montagem.

Me ajudem por favor

Exibições: 3352

As respostas para este tópico estão encerradas.

Respostas a este tópico

Cara, um programa básico (de baixa qualidade técnica mas funcional) é esse que encontrei no fórum que o José comentou.

Removi a parte de LCD para que fique mais fácil entender o processo de medição do tempo.

Mas cuidado, a cada 70 minutos o counter do arduino dá overflow, se você der o azar de medir uma amostra nesse exato instante, pode ter um erro de leitura que deverá ser descartado por software.

;)

Se você usar o esquemático do vídeo do José, acredito que o código abaixo irá funcionar.

;)


// measures velocity of projectiles
// projectile breaks foil strips 218 mm apart

unsigned long start=0, finish=0;
int startPin=4, finishPin=8, done=0;
float distance=218.0, interval, velocity;

void setup() {
pinMode(startPin, INPUT_PULLUP);
pinMode(finishPin, INPUT_PULLUP);
// Adicione a configuração da porta seria ou
// o lugar pra onde quer enviar a velocidade calculada (Display LCD por exemplo)
}

void loop() {
done = 0;
while(!start) {
if(digitalRead(startPin) == HIGH)
start = micros();
}
while(!finish) {
if(digitalRead(finishPin) == HIGH)
finish = micros();
}
while(!done) {
interval = float(finish-start);
velocity = distance*1000*3.28/interval;
// Aqui vc pode enviar a velocidade via serial,
//basta adicionar o seu código abaixo

done = 1;
}
}

Oi Renan, boa tarde.

Use esta tablela como referencia.

A informação da velocidade das balas extraí da NET.

  Velocidade de projetil

                Comum          +Rapido

  km/h       400,00           1.000,00
  km/m          6,67              16,67
  km/s           0,11                0,28
  m/s         111,11            277,78
  cm/s   11.111,11      27.777,78
  cm/ms       11,11             27,78
  cm/us      0,0111           0,0278

Tempo para percorrer 5 cm


   5cm           450            180 us

Rui

Renan,

segue cópia do codigo escrito pelo bruno, com modificações para o seu caso:

Como postado aqui no site ele perde a formatção de alinhamentos das decisões e comentários,

postei tanbem no PASTBIN.     

http://pastebin.com/hjn5JeNv

Rui

// measures velocity of projectiles
// baseado no código postado por Bruno Godoi Eilliar

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço