Ein Reaktionszeitmesser

Elektronik-Labor  Projekte  Mikrocontroller  TLScript  




Das vorher mit Hilfe der KI entworfene Programm zur Reaktionszeitmessung habe ich am Ende noch einmal stark vereinfacht. Das betrifft auch die Bedienung. Nach einer zufälligen Wartezeit läuft ein LED-Band mit definierter Geschwindigkeit hoch und kann mit dem Taster gestoppt werden. Zeitmessung und Anzeige fallen damit zusammen. Und das Ergebnis wird so lange angezeigt, wie der der Taster gedrückt gehalten wird. Danach beginnt alles von vorn, Das Programm ist damit so kompakt, dass man mit 24 Befehlen auskommt.

B0 ist ein Eingang mit Pullup. Die hier angeschlossene LED leuchtet nur schwach. Der Befehl Pullup = 1 funktioniert beim Pico, aber nicht beim Arduino. Das Programm läuft aber trotzdem auf beiden, weil der Eingang mit Pout = 3 mit hochgezogen wird. Allerdings sollte beim Arduino hier keine LED liegen, weil dabei wegen der 5V-Betriebsspannung der Pegel durch eine LED noch unter die Schaltschwelle gedrückt werden könnte.

Damit man sich nicht auf einen bestimmten Takt einstellen kann und damit das erste Bit immer überraschend kommt, wird im Bereich L1 und L2 eine Zufallszeit erzeugt. Der Zufall entsteht durch einen Trick. Hier wird der AD-Wandler verwendet und an AD0 ein kurzes Kabel angeschlossen. Der gemessene Wert schwankt stark, vor allem durch einstreuende Wechselfelder und Änderungen statischer Felder. Von diesem Ergebnis werden nur die unteren vier Bit verwendet, dann noch mit 10 addiert und in D geladen. Die Wartezeit ist dann  D-mal 100 ms. Das Verfahren ist mir selbst eingefallen, weil ich oft mit offenen Eingängen herumgespielt habe. Aber ich muss gestehen, dass die Feinabstimmung mit der Hilfe der KI entstanden ist. Die Zufallszeit liegt nun im Bereich  1,0 s …2,5 s.

              Rem Reaktion2
0x09FE  Pdir = 254
0x0A01  Pullup = 1
              L1:
0x3C00  A = AD0
0x120F  A = A AND 15
0x020A  B = 10
0x2A00  A = A + B
0x3800  D = A
              L2:
0x1964  Delay ms = 100
0x2607  D*Jmp L2:
0x0803  Pout = 3
              L3:
0x1932  Delay ms = 50
0x4000  A = Pin0
0x0200  B = 0
0x2213  If A=B Jmp L4:
0x3F00  A = Pin
0x3100  A = A Shl 1
0x1303  A = A OR 3
0x4500  Pout = A
0x200A  Jmp L3:
              L4:
0x19FA  Delay ms = 250
0x4000  A = Pin0
0x2213  If A=B Jmp L4:
0x0800  Pout = 0
0x2002  Jmp L1:

Ursprünglich hatte das Programm eine Auflösung von 0,1 s. Dabei hat sich gezeigt, dass ich fast immer eine Reaktionszeit von 0,2 s oder 0,3 s hatte, dass also nicht mehr als drei LEDs für das Ergebnis standen. Weil ich aber sieben LEDs  ansteuere, konnte die Auflösung verdoppelt werden. Deshalb hat die eigentliche Zeitmessung ab L3 nun eine Verzögerung von nur noch 50 ms. Nun kann ich im Bereich 0,05 s bis 0,35 s messen. Meist jedoch bleibt es bei 0,20 s. Wer kann es schneller?

Info von Alfred Altner

Vor etlichen Jahren gab es in der Berichterstattung zu einem Rodelwettbewerb die Frage, wie schnell man manuell den Start-Stopp-Modus betätigen kann. Sowohl mit mechanischen als auch elektronischen Stoppuhren ist die kürzeste Start-Stopp-Sequenz 0,17 Sekunden, die ein Mensch stoppen kann. Ergo ist eine Reaktionszeit von 0,20 Sekunden schon sehr nah an dem menschlich möglichen. Soweit ich mich erinnere, war der Abstand zwischen Platz 1 und Platz 2 im damaligen Wettbewerb bei 0,10 Sekunden, heute rechnet man diese Abstände bereits in Zentimeter um.



Elektronik-Labor  Projekte  Mikrocontroller  TLScript