Hallo!
Vor einiger Zeit habe ich ja schon einen Geschwindigkeitsmesser auf
Basis zweier Lichtschranken, einer bi- und a-stabilen Kippschaltung und
einem CD4026 digital counter gebastelt. Funktioniert(e) eigentlich sehr
gut. Das besondere war der aufwändige Strahlengang beider Laser zur
Detektion des Projektils. Durch den zickzack-Verlauf konnten auch
kleinere Projektile verlässlich und ohne genauere Ausrichtung detektiert
werden. Habe dann noch eine einfachere Variante ohne Mehrfachreflexionen
gebaut. Nun bin ich gerade dabei, einen Geschwindigkeitsmesser mit
Arduino umzusetzen.
Als Lichtschranken kommen zwei Photodioden (wohl SFR203) in
Sperrrichtung zum Einsatz, die von je einem 3V-Laser (2 in Serie an 5V)
bestrahlt werden. Im Setup werden die Werte ohne Projektil eingelesen
und dann für die Auslöseschwellen mit 0.95 oder weniger multipliziert.
Ein Analogread dauert normal rund 112 µs, kann aber durch andere Taktung
deutlich beschleunigt werden, sodass ein Einlesevorgang nur noch 4 µs
dauert.
Die Halterungen für die Lichtschranken bzw. den Arduino bastel ich aus
Matador-Bausteinen, die habe ich noch von meinen "Kindern" übrig.
1
#include <LiquidCrystal_I2C.h>
2
#include <Wire.h>
3
4
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!!
5
6
// Anschlüsse:
7
// GND - GND
8
// VCC - 5V
9
// SDA - ANALOG Pin 4
10
// SCL - ANALOG pin 5
11
12
unsigned long time_start;
13
unsigned long time_end;
14
unsigned long time;
15
16
int PD_start; // value of the start-PD
17
int PD_end; // value of the end-PD
18
int Werte[100];
19
long start;
20
int i;
21
22
float velocity; // velocity of the projectile
23
float multiplier; // multiplier of the PD-value to start or finish the measurement
Christoph E. schrieb:> Ein Analogread dauert normal rund 112 µs, kann aber durch andere Taktung> deutlich beschleunigt werden, sodass ein Einlesevorgang nur noch 4 µs> dauert.
Ein digitalReadFast() ist wesentlich schneller und immer noch langsamer
als ein direktes Capture per Timer. Dazu brauchst du nur einen
Komparator, dessen Schwelle du per TP-gefiltertem PWM anhand der
initialen Messung vorgeben kannst.
Danke einmal... Die Geschwindigkeiten liegen im Bereich 0-100 m/s
(kartoffelkanone, coilgun etc.). Dies ist auch der Bereich der erfasst
werden soll. Mit dem arduino lese ich die verstrichene Zeit in
microsekunden ein. Die Auflösung ist da glaube ich 4 microsekunden. Von
daher müsste der oben genannte Bereich aufzulösen sein, da die Flugzeit
zwischen den beiden Lichtschranken minimal 2 Millisekunden beträgt.
Christoph E. schrieb:> Durch den zickzack-Verlauf konnten auch> kleinere Projektile verlässlich und ohne genauere Ausrichtung detektiert> werden.
Interessant - Wie klein waren denn die kleineren Projektile?
bzw. hältst du es grundsätzlich für möglich den zickzack Vorhang so fein
zu gestalten, dass man Diabolos (4,5mm) oder Pfeilspitzen (7mm)
detektieren kann?
ich würde den IR-Sender (mit großen Strahlwinkel) und Empfänger auf
einer Seite positionieren und die Gegenseite eher nicht reflektierend
auslegen, das Projektil selber reflektiert dann die IR Strahlung. Das
ganze 2 mal hintereinander. Der erste Punkt startet den Timer und der
2te Punkt Captured den Wert im Timer, danach hast du zeit bis zum
nächsten Schuss das Captureregister auszulesen und in eine
Geschwindigkeit umzurechnen und anzuzeigen.
>Wie klein waren denn die kleineren Projektile?>bzw. hältst du es grundsätzlich für möglich den zickzack Vorhang so fein>zu gestalten, dass man Diabolos (4,5mm) oder Pfeilspitzen (7mm)>detektieren kann?
Also die 7mm dürften kein Problem sein. Schau dir oben mein Bild
"Geschwindigkeitsmesser_08" an. Die Steigung eines einzelnen Strahls
entspricht genau der Hälfte des Abstands zweier benachbarter
Reflexionen...
Danke für den Vorschlag mit der Reflexion. Ich probiere einmal den
Aufbau mit Laserlichtschranken. Falls ich damit scheitern sollte, kann
ich es noch immer ausprobieren. Ich möchte sie Sache halt so simpel wie
möglich halten.
Volker S. schrieb:> Interessant - Wie klein waren denn die kleineren Projektile?> bzw. hältst du es grundsätzlich für möglich den zickzack Vorhang so fein> zu gestalten, dass man Diabolos (4,5mm) oder Pfeilspitzen (7mm)> detektieren kann?
Das ist für mich eine Frage des Winkels und der Aufweitung des
Laserstrahls auf die sich ergebende Strecke.
Ist die Anordnung mit dem Laserstrahl nicht sehr
erschütterungsempfindlich?
Winkeländerungen summieren sich mit jeder Reflexion auf, oder?
Wie groß muss der Erfassungsbereich sein?
Könne man nicht einen Lichtstrahl mit einer Linse aufweiten und am
anderen Ende mit einer Linse wieder konzentrieren.
Wenn der Lichtstrahl moduliert ist, ähnlich wie bei den
IR-Fernbedienungen, dann könnte man das Umgebungslicht sehr leicht
unterdrücken und das Nutzsignal sehr gut verstärken, digitalisieren und
dem MC Eingang zur Verfügung stellen. Mit der Flanke einen Interrupt
auslösen, die Zeit in der Interruptroutine speichern. Mit der zweiten
Lichtschranke in der gleichen Art und Weise verfahren und die Werte
subtrahieren.
GEKU schrieb:> Könne man nicht einen Lichtstrahl mit einer Linse aufweiten und am> anderen Ende mit einer Linse wieder konzentrieren
Entsprechend minimal wird auch die Reduktion der Strahlenergie durch das
relativ kleine Geschoss sein - und entsprechend "feinfühliger" muss
gemessen werden.
OssiFant schrieb:> "feinfühliger"
Man kann heute schon durch kleine Helligkeitsschwankungen Exo-Planeten
entdecken und sogar ihre Größe bestimmen. Es ist nur eine Frage des
Aufwandes.
Die Idee mit dem Lichtvorhang ist zwar gut, aber falsch umgesetzt!
Du musst normalerweise nur ein Lichtsensor nehmen und einen
Differenzierer. Sobald die Kugel durchfliegt deckt sie mit ihrer Fläche
einen Teil des ankommenden Lichtes aus der Umgebung ab (genau so wie man
es mit dem Kepplerteleskop macht um extrasolare Planeten zu finden). Der
Differenzierer gibt dir dabei einen Impuls aus.
Raph schrieb:> Der> Differenzierer gibt dir dabei einen Impuls aus.
Dieser Impuls verstärkt auf Logikpegel könnte dann einen Interrupt
auslösen und in der Interruptroutine die Zeit stoppen.
Der Aufbau ist soweit fertig und die Laser ausgerichtet. Jetzt warte ich
nur noch auf die schnellen SFH203 Photodioden von reichelt. Müssten aber
diese Woche noch ankommen.
Die beiden Lichtschranken kann ich vom Sockel abnehmen um sie dann ggf.
variabel zu positionieren...
So, habe den Geschwindigkeitsmesser einmal mit bereits vorhandenen
Photodioden unbekannten Typs ausprobiert. Er machte einige Probleme.
Zuerst einmal konnte ich analogread() nicht bis aufs Maximum
beschleunigen. Jetzt habe ich eine Einlesezeit pro analogread() von 9
µs, was eigentlich auch mehr als reichen sollte. Dann gab es
eigenartigerweise beim ersten Einlesen des Analogwerts auch Probleme,
indem er einen zu niedrigen Wert einlas. Jetzt lese ich davor einfach
einmal zusätzlich ein ohne den Wert dann zu verwenden.
Mit einer Gewindestange komme ich schon einmal auf Geschwindigkeiten um
die 11 m/s. Seine Feuertaufe wird das Messgerät aber erst bei Verwendung
der Kartoffelkanone oder des Druckluftgewehrs bestehen müssen...
Nachdem die Lichtschranke nur auf größere Projektile (d > 5mm)
angesprochen hat, habe ich nun die Eintrittslöcher zu den Photodioden
mit einer Abdeckplatte und einem 1.5mm Bohrer deutlich verkleinert.
Jetzt spricht der Geschwindigkeitsmesser auch auf einen Zahnstocher an,
wenn ich ihn durch die beiden Lichtschranken ziehe. Gedacht ist sie aber
ohnehin für deutlich größere Armbrustpfeile, Nerfpatronen, Eisenkugeln
oder eben Kartoffeln bzw. Bälle ...
Heute sind die SFH203 Photodioden von reichelt angekommen und ich konnte
diese gleich einbauen. Trotz des relativ kleinen Eintrittlochs fallen an
den beiden 47k Widerständen ohne Projektil die vollen 5V (analogread =
1023) ab. Bei Abschattung liegen die Werte nur noch bei 2V (analogread =
ca. 400). Als Schwelle zur Detektion sind 95% des Ausgangswerts
eingestellt.