Für den Physikunterricht benötigt man immer wieder einmal ein Stroboskop. Mit dem Arduino und einer 20–100W LED lässt sich ein solches sehr leicht umsetzen. Einstellbar ist nicht nur die Blitzfrequenz im Bereich zwischen 14 und 1400 Hz, sondern auch die Blitzdauer zwischen 5 und 100 µs.
Hier der komplette Schaltplan:
Als einfache Anwendung kann man zum Beispiel die Drehzahl eines Lüfters bestimmen. Hierzu reduziert man die Blitzfrequenz und notiert jeweils die Frequenzen, bei denen ein stehendes Bild entsteht. Mit der Anzahl der Lüfterfinnen lässt sich dann leicht die tatsächliche Motorfrequenz ermitteln. In meinem Fall hatte der Lüfter 7 Finnen. Das erste stehende Bild erfolgte bei einer Blitzfrequenz von 132 Hz. Bei dieser Blitzfrequenz schaffte der Motor aber nur 1/7 einer vollständigen Rotation von einer Finne eben zur nächsten. Die Motorfrequenz betrug daher 132/7 = ca. 19 Hz = 1140 Umdrehungen pro Minute. Bei 19 Hz Blitzfrequenz stand das Bild zum Beispiel ebenfalls, nur schaffte dann der Lüfter auch tatsächlich eine vollständige Umdrehung pro Blitz…
Das sehr überschaubare Arduino-Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 const byte interruptPin = 2; long time_old, time_new; float frequency; // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); pinMode(interruptPin, INPUT_PULLUP); //pinMode(interruptPin, INPUT); attachInterrupt(digitalPinToInterrupt(interruptPin), Puls, RISING); lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Stroboskop"); lcd.setCursor(0,1); lcd.print("Version 1.0"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); time_old = 0; } // =========================== // ======= LOOP ========= // =========================== void loop() { lcd.setCursor(0,0); lcd.print("f = "); lcd.print(frequency,0); lcd.print(" Hz "); delay(20); } // ============================== // ======= INTERRUPT ========= // ============================== void Puls() { time_new = micros(); frequency = 1000000.0 / (time_new - time_old); time_old = time_new; } |
Hier noch das Youtube-Video: