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
Tags:
As respostas para este tópico estão encerradas.
http://labdegaragem.com/forum/topics/ajuda-cron-grafo-bal-stico
Calculando a velocidade de um projetil:
http://forum.arduino.cc/index.php?topic=114435.0
Fotografando uma bala:
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.
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
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por