# How the light brightness stays constant when we increase the frequency of stroboscope

Well I am trying to make a Stroboscop. I found this code at blow: and tried. It works normally. But if I increase the RPM so decrease the "strobeDelay" time, the brightness of the LEDs goes out. Even if I try the GreatScott code. The same problem persists at high RPM. I am using power LED.

On the other hand there is a stroboscop which is Fluke 820, it says

Features high-intensity 7-LED array—4,800 Lux @ 6,000 FPM/30cm

How they achieve that constant brightness under the high frequency?

    // Gray text are just helpful comments, you don’t need to type them. :)

/******* -----=====!! EASY STUFF TO MESS WITH !!=====------ ******/

// What analog pin should we use to read the value from the potentiometer?
int analogPin = 2; // Yep, you heard right: The coolest of the Analog pins...

// What pin is the LED connected to?
int ledPin = 13; // Contains a built in resistor!

// How much time should the light stay on between delays, in Microseconds (millionths of a second)?
/* Big number = more blur, more perceived brightness
* Small number = less blur, less perceived brightness  */
long onTime = 250;

// What should the minimum delay be in milliseconds (thousandths of a second)?
// This sets the bottom delay range of the strobe, as a delay of 0 doesn't actually flash =P
// The strobe starts with this as the "fastest" mode, and goes slower from there, adding to the delay
int minDelay = 1; // 1 is the lowest we can actually do without a better delay function

// What should the maximum delay be in milliseconds?
// This is the longest time that the biggest potentiometer value will be mapped to, and longest
// time between strobe flashes.
int maxDelay = 100;

/******* -----=====^^ EASY STUFF TO MESS WITH ^^=====------ ******/

// Initialize the number to hold our strobe delay. Isn't used till we get to the main loop
long strobeDelay = 0;

void setup() {
pinMode(ledPin, OUTPUT); // Setup ledPin as an output.
}

void loop() {
// To make the math easier, we use map(value, fromMin, fromMax, toMin, toMax) to convert the
// 0 to 1023 range we get from analogRead, into our strobe delay range of 1 to 100 :D
strobeDelay = map(analogRead(analogPin), 0, 1023, minDelay, maxDelay);

digitalWrite(ledPin, HIGH); // Switch the ledPin to HIGH, turn it on!
delayMicroseconds(onTime); // Delay while on, for the given onTime.
digitalWrite(ledPin, LOW); // Switch the ledPin to LOW, turn if off!
delay(strobeDelay); // Delay while off, for given strobeDelay.
}


For those who wonder there is a video, but another brand same result, brightness constant even if RPM changes. I tried 2 different power LED. on of them is this, the other LED is I found in a broken projector, I used them 2 working strip. No doubt in your mind, this led strip is very bright at low frequency. Both of them same result like this:

• How are you driving the LEDs? Commented Dec 13, 2020 at 11:12
• I think the answer is in the comments on the code you posted: Big number = more blur, more perceived brightness * Small number = less blur, less perceived brightness Short duration makes for lower perceived brightness. The actual brightness is the same, but our eyes see it as less when the duration is shorter. Commented Dec 13, 2020 at 12:47
• I don't think the term RPM applies here. What do you mean by it? What parameter are you changing and what exactly is the effect, that you see with what values? The analogRead() currently only changes the delay between the pulses. The onTime stays constant. Each pulse will be as bright as the other one. Though you might see the overall brightness rising with lower delays, as your eyes will start tying the pulses together - more pulses per second means more overall brightness. Commented Dec 13, 2020 at 13:05
• @Majenko a npn channel mosfet (IRFZ44N) datasheet is here datasheet.octopart.com/… Commented Dec 13, 2020 at 19:38
• @chrisl Actually your says looks absolutly right, but in realty not works.I've never heard of it yet, but is there a time required for the leds to flash? I will change leds and try again. Commented Dec 13, 2020 at 19:42

• Try delayMicroseconds(strobeDelay*250); (instead of delayMicroseconds(onTime);). This should give you the same perceived brightness, not matter what speed/"RPM" is selected. Commented Dec 13, 2020 at 16:15