geschwindigkeitsmessung

hey ich habe eine laserlichtschranke gebaut bei deren durchbrechen eine led anfängt zu leuchten.
das ist der sketch:

void setup() {
pinMode(4, OUTPUT); // das ist einfach ein aufgeschraubter laserpointer
pinMode(13, OUTPUT);
}

void loop(){
digitalWrite(4, HIGH);
if(analogRead(0) < 400){
digitalWrite(13, HIGH);
} else{
digitalWrite(13, LOW);
}
}

damit könnte ich doch eigentlich auch eine geschwindigkeitsmessung durchführen wenn ich davor weiß wie lang der gegenstand ist.
dafür müsste ich aber auch wiessen wie oft in einer bestimmten zeit das arduino sozusagen neue daten bekommt.
ist das so ein kleiner zeitraum das ich das am besten mit einem delay mache, indem ich einfach die zei der neuen messung missachte und nur die zeit des delays beachte??
hat jemand sowas in der art schoneinmal gemacht und hat erfahrung und tipps für mich ??
im vorrausch schon mal vielen dank
ctsmeatboy

Es gibt millis() für Millisekunden und micros() für Mikrosekunden (mit 4µs Auflösung). Das gibt dir die Zeit seit dem Einschalten aus. Wenn du das zweimal machst und voneinander abziehst hast du die Zeit.

Du kannst z.B. testweise das machen:

void loop()
{
    unsigned long time1 = millis();
    delay(500);
    unsigned long time2 = millis();
    Serial.println(time2 - time1);
}

Da sollte dann jeweils ein Unterschied von 500 sein.

Das ist wie gesagt nur für das Prinzip. Bei dir würdest du die Zeit einmal beim Aktiveren der Lichtschranke messen und einmal wenn der Gegenstand durch ist. Ohne delays.

Was nimmst Du als Empfänger?
Einen Fototransistor?
Grüße Uwe

Die IF Abfrage in Deinem Originalsketch ist übrigens unnötig.

void loop(){
    digitalWrite(4, analogRead(0) < 400);
}

wäre völlig ausreichend.

Was die Geschwindigkeitsmessung angeht: der Arduino ist nicht wirklich gut im Zeitmessen. Problem ist, daß Dir immer wieder Interrupts in die Quere kommen. Ein weiteres Problem ist, daß die neuen Unos nur einen Resonator haben. Wie schon mehrfach festgestellt wurde ist der nur etwa 0.5% genau. Könnte aber sein, daß das für Deine Genauigkeitsanforderungen ausreicht, dann ist das tatsächlich relativ einfach zu machen.

@Serenifly ich verstehe den sketch den du geschrieben hast, nur wie soll ich dass dann so in der art einbetten einmal nach der if schleife und einmal nach dem else oder wie??
@uwefed ja einen fototransistor
@udo klein ja 0,5 prozent abweichung würde noch gehen

Am besten wäre es du machst da ein Digital Signal draus und gibst es auf einen Interrupt-Eingang. Das geht schneller als eine Analog-Digital-Wandlung und du kannst zwei Interrupt-Handler machen. Einen für die steigende und einen für die fallende Flanke.

Heho.

Das hier dürfte dir eventuell weiterhelfen.

Mfg
His