Forum: Mikrocontroller und Digitale Elektronik Zeitmessung mit Reflex-Lichtschranke


von Thomas S. (tomjaul)


Lesenswert?

Hallo,

es gibt ähnliche Artikel zu meinem Problem, jedoch konnten die mir 
leider nicht so richtig weiter helfen. Daher versuche ich mal mein Glück 
in einem neue Thread :)

Ich möchte gerne eine Zeitmessung mit einer Reflex-Lichtschranke 
druchführen. Für einen Prüfstand soll die Schwingdauer von einem 
rotierenden Werkstück ermittelt werden. Auf dem Werkstück ist 
dementsprechend eine Fototransistor angebracht. Es soll also die Zeit 
gemessen werden, in der das Lichtsignal reflektiert wird!

Da der Arduino ein Timer besitzt, bin ich mir sicher, dass es mit der 
Hardware und der Software dafür funktionieren wird...
--> Jedoch habe habe Probleme beim Verständnis, wie der Timer gestartet 
und gestoppt wird. Irgendeinen Wert muss die Software ja auslesen, sodas 
sie weiß das sie die Zeitmessung starten bzw. beenden soll...


Ich wäre für jede Hilfe dankbar!

von Uwe (de0508)


Lesenswert?

Hallo Thomar.

was schreibt AVR im Datenblatt deines µC ?

Wir kennen deinen µC nicht !

von Amateur (Gast)


Lesenswert?

Hä?

>Es soll also die Zeit
>gemessen werden, in der das Lichtsignal reflektiert wird!
Da das Licht, mit der sprichwörtlichen Lichtgeschwindigkeit, durch die 
Gegend hetzt, dürfte diese Messung wohl in die Hose gehen.

Schick doch mal eine Skizze.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Schröder schrieb:

> rotierenden Werkstück ermittelt werden. Auf dem Werkstück ist
> dementsprechend eine Fototransistor angebracht. Es soll also die Zeit
> gemessen werden, in der das Lichtsignal reflektiert wird!


Du willst aber nicht die Lichtlaufzeit messen, oder?

Ich denke du willst den zeitlichen Abstand von einer Reflexion des 
Lichtstrahls bis zur nächsten Reflexion, wenn das Werkstück eine 
Schwingung gemacht hat, messen.


> --> Jedoch habe habe Probleme beim Verständnis, wie der Timer gestartet
> und gestoppt wird. Irgendeinen Wert muss die Software ja auslesen, sodas
> sie weiß das sie die Zeitmessung starten bzw. beenden soll...

Im Idealfall startest und stoppst du den Timer überhaupt nicht.

Wie misst du denn die Zeit, die dein fahrradfahrender Kumpel für 100 
Meter braucht, wenn du nichts weiter als eine Uhr mit Sekundenzeiger 
hast?

Genau. Du merkst dir auf welcher Zahl der Sekundenzeiger stand, als dein 
Kumpel weggefahren ist und du merkst dir die Zahl auf der der 
Sekundenzeiger steht, wenn er durchs Ziel fährt. Die Differenz davon ist 
die Anzahl der Sekunden, die er unterwegs war.
Und das ganz ohne das du deine Uhr starten oder anhalten musstest.

Wie genau musst du denn messen?
Dein Arduino hat zb eine bereits funktionsfähige 'Systemzeit', die in 
Millisekunden Auflösung operiert. Wenn dir das reicht, dann sieh dir 
einfach mal die Funktion millis() an.

: Bearbeitet durch User
von Thomas S. (tomjaul)


Lesenswert?

Hallo,

schomal vielen Dank für die Infos!
Ich bin in dem Thhemengebiet Messtechnik trotz meines Studiums eher ein 
Laie, ich habe mich wohl nicht so deutlich ausgedrückt...

Ich möchte naütrlich nicht die Lichtgeschwindigkeitmessen, sondern die 
Schwingungsdauer für z.b. 10 Schwingungen von einem rotierenden 
Werkstück.
Das Lichtsignal soll dazu benutzt werden, den Timer zu starten und nach 
10 maligen überqueren des Fototransistors wieder den Timer stoppen.

Von der Funktion millis() habe ich schon gelesen, und diese Zeitgröße 
reicht mir auch.

Nur ist halt mein Problem, wie aus dem Sensor(Reflex-Lichtschranke) 
heraus gelesen wird, dass der Timer startet bzw. gestoppt wird...

------------------------
Der Versuch sieht im großen und ganzen so aus:
http://www.physik.fh-aachen.de/fileadmin/inhalte/etechnik/pdf/praktikum/Massentraegheitsmoment.pdf 
--->Kapitel 4.2
"Messen Sie für jeweils 5 Schwingungen (5T) die Zeit bei einer Amplitude 
zwischen 10<Phi<20 und berechnen Sie den Mittelwert der Schwingungsdauer 
T"


Skizze ist auf der Seite 6, b)

: Bearbeitet durch User
von wendelsberg (Gast)


Lesenswert?

Thomas Schröder schrieb:
> Schwingungsdauer für z.b. 10 Schwingungen von einem rotierenden
> Werkstück.

Was denn nun Schwingungen oder Umdrehungen?
Das solltest Du zuerst klarstellen.

wendelsberg

von Thomas S. (tomjaul)


Lesenswert?

wendelsberg schrieb:
> Thomas Schröder schrieb:
>> Schwingungsdauer für z.b. 10 Schwingungen von einem rotierenden
>> Werkstück.
>
> Was denn nun Schwingungen oder Umdrehungen?
> Das solltest Du zuerst klarstellen.
>
> wendelsberg


Im Groben ist es eigentlich nicht so wichtig was, weil es mir um die 
Zeitmessung geht. Für meinen Prüfstand geht es um Umdrehungen

von Karl H. (kbuchegg)


Lesenswert?

Thomas Schröder schrieb:

> Nur ist halt mein Problem, wie aus dem Sensor(Reflex-Lichtschranke)
> heraus gelesen wird,

Das nennt man dann eben 'programmieren'.

Wann willst du denn von deiner "Systemuhr" (nichts anderes ist ja 
millis()) die aktuelle Zeit wissen? Na immer dann wenn sich der Zustand 
der Lichtschranke von "nicht unterbrochen" auf "unterbrochen" ändert. 
Denn genau zu diesem Zeitpunkt hat das Objekt offenbar damit begonnen 
die Lichtschranke zu uterbrechen. Kurz zuvor war der Lichtstrahl noch 
intakt (vor ein paar Mykrosekunden), jetzt aber ist er unterbrochen

nur so als Skizze
1
...
2
unsigned char previousState;
3
unsigned long previousTime;
4
5
void loop()
6
{
7
  unsigned char stateNow = digitalRead( .... );
8
9
  if( stateNow != previousState ) {
10
    if( stateNow == LOW ) {     // oder HIGH, je nachdem wie die LS verschaltet ist
11
      timeNow = millis();
12
13
      timeDifference = timeNow - previousTime;
14
      previousTime = timeNow;
15
16
      ... mach was mit timeDifference
17
    }
18
  }
19
  previousState = stateNow;
20
}

So ungefähr. Das ist zwar nicht die beste Methode und sie hat ihre 
Schwächen. Vor allen Dingen darf der Teil ... mach was mit ... nicht 
allzu lange dauern, weil du die nächste unterbrechung nicht verpassen 
darfst.
Aber hey ... es ist DEIN Prüfstand und eigentlich solltest du etwas mehr 
programmieren können, wenn du dich an solche Sachen wagst! (meine 
Meinung)

von Amateur (Gast)


Lesenswert?

In erster Näherung brauchst Du zwei Eingänge.

Einen um die Messung zu starten bzw. zu wiederholen.
Meist ein Tastereingang - setzt alles zurück.

Einen zweiten, der mit Deiner Lichtschranke verbunden ist.
Hier wird das erste Ereignis als Startreferenz (Zeit merken) genutzt und 
die dann folgenden neun Ereignisse gezählt. Mit dem zehnten Ereignis 
wird das System angehalten, die aktuelle Zeit ermittelt usw.

Wie man Eingänge abfragt, die Zeit ermittelt und eventuelle Ergebnisse 
ausgibt kannst Du Dir hier in den verschiedenen Foren und aus den, dem 
Rechner beigefügten Beispielen, zusammensuchen.

Ein bisschen kümmern musst Du Dich allerdings auch selbst.
Auf Posts, nach dem Motto: "Ich habe keine Ahnung - helft mir doch 
bitte, indem Ihr meine Arbeit macht", reagieren hier viele recht 
unwirsch.

von Axel S. (a-za-z0-9)


Lesenswert?

Thomas Schröder schrieb:
> Der Versuch sieht im großen und ganzen so aus:
> 
http://www.physik.fh-aachen.de/fileadmin/inhalte/etechnik/pdf/praktikum/Massentraegheitsmoment.pdf
> --->Kapitel 4.2

Aha. Also ein Drehpendel. Konntest du das nicht gleich sagen?

> Im Groben ist es eigentlich nicht so wichtig was, weil es mir um die
> Zeitmessung geht. Für meinen Prüfstand geht es um Umdrehungen

Nein. Ein Drehpendel macht i.d.R. keine ganzen Umdrehungen. Es dreht 
sich aus der Ruhelage um einen bestimmten Winkel \phi, stoppt und dreht 
sich zurück; überquert die Ruhestellung und dreht sich in die andere 
Richtung (ohne Reibung bis -\phi). Was gefragt ist, ist die 
Wiederholfrequenz, gleichbedeutend mit der Frage, nach welcher Zeit das 
Pendel die gleiche Extremauslenkung wieder erreicht bzw. nach welcher 
Zeit es die Ruhestellung in der gleichen Richtung durchquert.

Es erscheint auf den ersten Blick am einfachsten, die Lichtschranke so 
aufzubauen, daß sie in der Extremstellung auslöst. Dann muß man einfach 
die Zeit zwischen zwei Auslösungen messen. Allerdings ist das 
unpraktisch, weil jetzt die initiale Auslenkung des Pendels zur Position 
der Lichtschranke passen muß. Außerdem wird das Pendel durch Reibung 
ständig Energie verlieren und dadurch die Messung (irgendwann, aber 
deutlich vor dem Ende der Pendelbewegung) abbrechen - weil der 
Pendelausschlag einfach zu klein wird um die Lichtschranke auszulösen.

Eine zweite Variante wäre, die Lichtschranke so zu positionieren, daß 
sie bei jedem Nulldurchgang auslöst. Jetzt muß man allerdings beachten, 
daß man zwei Impulse pro Pendelperiode bekommt.

Die dritte Variante ist eine Abwandlung der ersten. Wenn das Pendel ein 
Rad ist und \phi < 180°, dann kann man eine Hälfte des Radumfangs 
schwarz färben, die andere hell. Die Lichtschranke positioniert man dann 
so, daß sie in Ruhestellung gerade auf der hell/dunkel Grenze ist. Dann 
bekommt man genau eine Auslösung je Pendelperiode.


XL

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.