Ich habe genau dieses Experiment über das Wochenende durchgeführt - ausführliche Beschreibung unten. Grundsätzlich handelte es sich um einen Laserpointer, eine Fotodiode, zwei Widerstände, einen Transistor und ein Arduino. Stellen Sie den Arduino-Timer so ein, dass er mit 10 kHz läuft, und der Ausgang der Fotodiode (in den Interrupt-Eingang des Arduino) löst ein "Lesen" des Timers aus. Wenn mindestens eine Sekunde vergangen ist, drucken Sie das Verhältnis, setzen die Zähler zurück und beginnen erneut. Funktioniert sehr gut über einen großen Drehzahlbereich. Ich habe es tatsächlich verwendet, um die Spindown eines zappeligen Spinners zu messen - um zu demonstrieren, dass der Prozess nichtlinear ist, was beweist, dass der Luftwiderstand eine Rolle spielt.
Hier ist ein Bild des "Setups" (auf dem unordentlichen Schreibtisch in meiner "Höhle"):
Ein einfacher Karton enthielt links eine Fotodiode (20 Stück für 4,99 USD bei Amazon * sup>) und rechts eine kleine Laserdiode (10) für \ $ 6.99 bei Amazon). Ich könnte einen rotierenden Zappelspinner im Strahl halten, und der Arduino würde den Rest erledigen.
Und eine Oszilloskopspur des Signals: (etwas verschwommen - die Skala beträgt 20 ms pro Teilung, es gibt also ungefähr 30 Unterbrechungen pro Sekunde, als ich das Bild aufgenommen habe)
Natürlich ist es hilfreich, ein Zielfernrohr zu haben, um so etwas richtig einzustellen - aber wenn Sie einen Laserpointer haben, der auf Ihre Fotodiode gerichtet ist, und eine Möglichkeit haben, den Strahl richtig zu unterbrechen, wenn sich das Rad dreht, haben Sie eine ziemliche viel Spielraum.
UPDATE
Hier ist der Arduino-Code, mit dem ich das Drehzahlmessgerät erstellt habe:
// Code zum Erstellen eines Drehzahlmessers basierend auf einem unterbrochenen optischen Strahl
lange Zeit = 0; // Zeit seit der letzten Messung
lange Klicks = 0; // optische Unterbrechungen seit der letzten Messung
lange Gesamtzeit = 0; // insgesamt verstrichene Zeit seit dem Zurücksetzen
void setup () {
// Pin 2 für Eingabe konfigurieren:
pinMode (2, INPUT_PULLUP);
attachInterrupt (0, reportTime, FALLING);
// Timer einrichten:
cli (); // Interrupts stoppen
// Timer1 Interrupt auf 10 kHz setzen
TCCR1A = 0; // setze das gesamte TCCR1A Register auf 0
TCCR1B = 0; // Gleiches gilt für TCCR1B
TCNT1 = 0; // Zählerwert auf 0 initialisieren;
// Timeranzahl für 10-kHz-Schritte einstellen
OCR1A = 199; // = (16 · 10 & supmin; & sup6;) / (10000 · 8) - 1
// CTC-Modus einschalten
TCCR1B | = (1 << WGM12);
// CS11-Bit für 8 Prescaler setzen
TCCR1B | = (1 << CS11);
// Timer Compare Interrupt aktivieren
TIMSK1 | = (1 << OCIE1A);
sei (); // Interrupts zulassen
// END TIMER SETUP
// Serielle Schnittstelle bei 9600 Baud einschalten:
Serial.begin (9600);
}}
void loop () {
// nichts hier - alles ist unterbrochen
}}
void reportTime () {
Klicks ++;
if (Zeit > 10000) {
// Mindestens eine volle Sekunde ist vergangen
Gesamtzeit + = Zeit;
Serial.print (Gesamtzeit);
Serial.print ("\ t: \ t");
Serial.print (600000 * Klicks / Float (Zeit));
Serial.write ("rpm \ r \ n");
Zeit = 0;
Klicks = 0;
}}
}}
ISR (TIMER1_COMPA_vect) {
// Interrupt bei einer Frequenz von 10 kHz
Zeit ++;
}}
Der Schaltplan ist sehr einfach. Ich habe eine 5-V-Versorgung an das Laserdiodenmodul angeschlossen (das über einen eigenen internen Stromregler verfügt). Es ist möglich, dass es vom Arduino 5 V abläuft (es dauert nur 10 mA), aber das habe ich nicht versucht. Die optische Aufnahme wurde mit dieser Schaltung durchgeführt:
Wenn die Diode leuchtet, wird der Strom zwischen R1 und der Basis des Transistors aufgeteilt. Sobald die Spannung an R1 0,6 Volt erreicht, "schaltet" sich der Transistor ein und zieht Strom aus dem Kollektor. Dadurch wird das an Pin 2 angeschlossene Signal heruntergezogen (mithilfe des internen Pullups des Arduino). Wenn der Strahl unterbrochen wird, wird der Strom reduziert und der Transistor wird ausgeschaltet. Das Einschalten (Herunterziehen) ist mit dieser Schaltung viel schneller als das Ausschalten, sodass wir die fallende Flanke auslösen. Sie können die Schaltung empfindlicher machen, indem Sie R1 erhöhen - je größer sie ist, desto kleiner ist der zum Auslösen erforderliche Lichtpegel. Es wird aber auch empfindlicher gegenüber Umgebungslicht und die Reaktion ist langsamer. Mit der Laserdiode fand ich, dass 420 Ohm ein guter Wert war: schnelle Reaktion, unempfindlich gegenüber Umgebungslicht. Aber das ist definitiv ein Wert, mit dem man spielen kann.
Ich habe die Schaltung bei Frequenzen bis zu 1 MHz getestet (Antrieb des Lasers mit einem Signalgenerator mit Rechteckwelle), und es war in Ordnung - die Reaktionszeit liegt also deutlich unter 1 us. Dies sollte es für viele Anwendungen schnell genug machen.
Ein Beispiel für die Verwendung dieser Funktion zum Messen der Drehzahl eines Zappelspinners:
Es gibt 3 Unterbrechungen pro Umdrehung am Spinner - und ich habe kein Problem damit, 1200 U / min zu messen (3600 Unterbrechungen pro Minute = 60 pro Sekunde). Als ich den Laser mit einem Signalgenerator ansteuerte, konnte ich viel schneller fahren ... bis zu 30 kHz. Zu diesem Zeitpunkt gibt es einen gewissen Überlauf im Programm und die Zahlen sind Unsinn (ich vermute, dass der Arduino nicht schnell genug ist, um 10.000 Taktinterrupts und 30.000 optische Interrupts zu verarbeiten; einige Änderungen an der Skalierung könnten den Bereich erweitern, aber Sie wird das für die meisten Zwecke nicht brauchen).
Wenn ich den Laser mit 1 kHz laufen ließ, sah ich 59988 U / min - das sind offensichtlich "60.000" mit einem numerischen Rundungsfehler (oder der Takt auf dem Arduino ist nicht genau 16 MHz oder ...), also ist das gut.Wenn Sie die Schaltung zu stark drücken, stören sich Interrupts gegenseitig.Der höchste "korrekte" Messwert, den ich erhalten habe, war mit 3 kHz Eingang, 179904 U / min Ausgang.Das sollte für die meisten Anwendungen gut genug sein ... Sogar ein Fahrradrad (mit 32 Speichen) mit 100 Umdrehungen pro Sekunde (ca. 2/3 der Schallgeschwindigkeit) könnte damit zeitlich abgestimmt werden.Natürlich würde das Rad lange vor Erreichen dieser Geschwindigkeit zerreißen ...
* sup> Ich bin nicht mit Amazon oder den Unternehmen verbunden, die diese Komponenten herstellen.Ich wollte Ihnen nur das Auffinden solcher Teile erleichtern