Hola a todos.
Estoy realizando un proyecto que consiste en medir los tiempos en los que ocurre un evento, es decir, tengo una torre de sensores lasers y dejo caer una bola que va cortando los lasers.
Debo medir los tiempos en los que ocurre dichos eventos para saber las velocidades en cada punto y las aceleraciones.
Para medir estos tiempos estoy haciendo uso de una interrupción hardware (uso un arduino mega) de manera que cada vez que detecto un corte en el sensor guardo en un vector el valor de micros() en ese momento.
El problema es que los tiempos que está midiendo son muy grandes, y teóricamente no deberían ser tan grandes y no encuentro el motivo por el cual me da esa medida errónea.
Otro problema que encuentro es que para dejar caer la bola utilizo un relé que funciona con 12v. Para activar dicho relé pulso un boton que genera un pulso y ese pulso lo detecto con la sentencia digitalRead(). Cuando pulso el botón, el relé se activa pero empieza a activarse y a desactivarse solo y sin motivo aparente.
Adjunto el código para ver si alguien puede ayudarme.
Un cordial saludo y gracias de antemano.
volatile int lasers = 8;
volatile int activar = 3;
volatile int inter0 = 2;
int estado = 0;
volatile int ctrrele = 9;
volatile unsigned long vect[6] = {0, 0, 0, 0, 0, 0};
volatile int i = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(lasers,OUTPUT);
pinMode(ctrrele,OUTPUT);
pinMode(activar,INPUT);
pinMode(inter0,INPUT);
attachInterrupt(0,medicion,FALLING);
digitalWrite(ctrrele,LOW);
}
void loop() {
// put your main code here, to run repeatedly:
estado = digitalRead(activar);
if(estado == 1 && i == 0){
delay(500);
digitalWrite(lasers,HIGH);
delay(500);
digitalWrite(ctrrele,HIGH);
i++;
estado = 0;
}
if(i == 6){
mostrar();
}
}
void medicion(){
vect[i] = micros();
i++;
}
void mostrar(){
vect[1] = vect[2] - vect[1];
vect[2] = vect[3] - vect[1];
vect[3] = vect[4] - vect[1];
vect[4] = vect[5] - vect[1];
Serial.println(vect[0]);
Serial.println(vect[1]);
Serial.println(vect[2]);
Serial.println(vect[3]);
Serial.println(vect[4]);
digitalWrite(lasers,LOW);
digitalWrite(ctrrele,LOW);
i = 0;
vect[0] = 0;
vect[1] = 0;
vect[2] = 0;
vect[3] = 0;
vect[4] = 0;
}