I have an extreme sensitivity to PWM light sources such as computer screens and light bulbs. This can make it very challenging to make a purchase as I end up having to do lots of guesswork with cameras and other methods to try and identify whether PWM is present.

Is there a photo sensor that I can use to obtain a sine wave of a light source and calculate its modulation?

There are several apps already available to do this for mobile devices such as this one:


But the reviews suggest that this isn't a reliable testing method due to the range of hardware. There's no guarantee that one phone's sensor will product the same results as another. Different cameras are calibrated differently and have varying degrees of sensitivity.

Is there a light sensor I can use to build a detector like this? It would have to be in the kHz range. The higher the better.

  • \$\begingroup\$ How sophisticated a readout do you want? Getting an electrical signal that shows how much flicker is pretty easy -- that just takes a photodiode and amplifier. Actually interpreting that is hard; either you need an oscilloscope-type output, which makes it hard for you, or some sort of a one-number "this is how bad the flicker is" number, which would take man-years of research to make it not be bogus. \$\endgroup\$ – TimWescott Mar 18 '19 at 17:44
  • 1
    \$\begingroup\$ I also have 'fast eyes'. I think an ordinary phototransistor, biassed and amplified to give more or less linear output with light, with a DC and an AC detector, would give AC/DC = fractional amount of flicker. A selection of switchable low pass filters in the AC path would allow some crude discrimination of frequency of flicker. \$\endgroup\$ – Neil_UK Mar 18 '19 at 17:49
  • 1
    \$\begingroup\$ You could try something like the BPW34: vishay.com/docs/81521/bpw34.pdf More than fast enough for the application. A simple Arduino solution would seem possible. \$\endgroup\$ – Jack Creasey Mar 18 '19 at 17:57
  • \$\begingroup\$ tap a photo dioide or photo transistor with an oscilloscope, you'll see the "readings" in real-time. You could also amplify the signal and output audio, allowing you to hear the blinking in frequencies of 500Hz-10kHz... \$\endgroup\$ – dandavis Mar 18 '19 at 18:19
  • \$\begingroup\$ This is going to be your problem: "There's no guarantee that one phone's sensor will product the same results as another." To avoid such a problem, you'll need to apply something called calibration. What you have to calibrate and how you calibrate it is another process. Since this is optical, you'll need tight control on the acceptance angle and may need to cope with polarization vagaries and specular vs matte emissions (why they show a diffuser on your page) and variations in the angle of the emitters vs your sensor system, etc. Tell us more about what you are trying to achieve/usage. \$\endgroup\$ – jonk Mar 18 '19 at 21:11

Let me first say that I also have “fast eyes”. It was not that long ago that I would be the only one in the lab complaining to people with CRT screens because their refresh rates wee too low. However, you have a basic misconception.

It is simply not physically possible for a human to perceive anything above 250Hz. Unless you are a bird (whose eyes are about twice as fast as ours for obvious reasons), it’s extremely unlikely that you can perceive anything above 100Hz. Even for a bird, visual fusion is rather certain above 150Hz.

The main reason that some of us apparently perceive “flicker” at higher frequencies than those, is because we have multiple flickering devices around us, each one at slightly different frequencies. These flickering patterns “beat” with each other in our eyes and we perceive the flicker at this much lower beat frequency.

Although the actual frequency does have some influence (light-sensing molecules, phosphors, and hole-electron pairs can only react so fast), there are two basic aspects that make this problem troublesome for sources above 100Hz:

  • the “depth” of the flicker, or the relation between minimum and maximum luminosity.
  • the closeness of the flicker frequencies, if these are more than ~100Hz apart the beat frequency would not be perceived.

That’s why we don’t perceive the flicker of incandescent bulbs (100Hz or 120Hz depending on your country), as the thermal inertia is enough to filter it to nearly nothing. But the same 120Hz/100Hz flicker in a fluorescent can drive some people up a wall (particularly when coupled with a CRT flickering at 65Hz).

That said, almost any phone camera has shutter speeds above 1/1000s (iPhones get to 1/10000s). That’s much more than fast enough to comfortably detect flickers in excess of 250Hz. But, for much faster frequencies, if the depth of the flicker is the actual issue, even the fastest camera wouldn’t be enough.

A related phenomena, the stroboscopic effect, is caused by the combination of flicker and very fast eye motion (sacades). Even in this case 2kHz is considered the limit of the phenomena, and it would only be elicited by flicker that is distinct from the background illumination. This effect is only important for the design of display devices but the terminology used might confuse the issue.

However, you can put together a simple “light oscilloscope” by either modifying an existing < $50 cheap scope, or by simply attaching a photo diode or even just an LED to it (LEDs can work as photodiodes in a pinch). This will be slow, but likely fast enough for this application.

To make it faster, you would just need either to add a current amplifier, or simply a single resistor to some supply within the scope (A photo transistor might work better in this case). You should be able to achieve hundreds ok kHz with this.

| improve this answer | |
  • \$\begingroup\$ In my case, I believe that a lot of the fatigue I experience is a result of PWM combined with my high eyesight prescription and the resulting chromatic aberration from my corrective lenses. \$\endgroup\$ – Zhro Mar 19 '19 at 6:30
  • \$\begingroup\$ @Zhro regardless, anything above 250Hz is physically impossible to perceive. And I do mean that literally. For slow enough phosphors, such as those used in 50Hz PAL CRT TVs, even the 25Hz interlacing would be fast enough to cause fusion. Under low-light conditions, even the very jerky 24Hz flashing of cinema would be very hard to perceive without motion. \$\endgroup\$ – Edgar Brown Mar 19 '19 at 10:16
  • \$\begingroup\$ I agree with your statement but we've already established that it would be unusual to view a source at that frequency without the presence of some additional interference. One of the benefits of being able to measure the frequency of monitors which bother me would be to identify a baseline of frequencies low enough to cause me fatigue. It will also help me identify whether the fatigue is in fact PWM or a result of chromatic aberration. \$\endgroup\$ – Zhro Mar 19 '19 at 12:16

An application note called How to measure light flicker in LED lamps describes using a TSL257 light sensor. It's a through hole part so prototyping is easy. The sensor output is 0 to VCC and can directly feed an ADC input on a microcontroller.

The part is very sensitive. As you can see in the picture below, I needed to put heat shrink tubing on it to avoid saturating the output in bright light conditions. The light through the opening in the tubing around the sensor pins is sufficient to generate a signal.

picture of sensor

In my testing, the sensor easily picked up the ~2KHz PWM on a protoboard LED. You can see the PWM superimposed on the 120 Hz flicker from the LED ambient lighting in the scope trace below. While the part specs quote a typical rise and fall time of ~150uSec, looking at the scope trace the part should be able to measure up to 5KHz or so.

enter image description here

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.