Controlling Light with PWM

With the knowledge that you have so far gained, you could build an interactive lamp that can be controlled—and not just with a boring on/off switch, but maybe in a way that's a bit more elegant. One of the limitations of the blinking LED examples that we have used so far is that you can turn the light only on and off. A fancy interactive lamp needs to be dimmable. To solve this problem, we can use a little trick that makes a lot of things such as TV or cinema possible: persistence of vision.

As I hinted after the first example in Chapter 4, if you change the numbers in the delay function until you don't see the LED blinking any more, you will notice that the LED seems to be dimmed at 50% of its normal brightness. Now change the numbers so that the LED is on is one quarter of the time that it's off. Run the sketch and you'll see that the brightness is roughly 25%. This technique is called pulse width modulation (PWM), a fancy way of saying that if you blink the LED fast enough, you don't see it blink any more, but you can change its brightness by changing the ratio between the on time and the off time. Figure 5-3 shows how this works.

This technique also works with devices other than an LED. For example, you can change the speed of a motor in the same way.

While experimenting, you will see that blinking the LED by putting delays in your code is a bit inconvenient, because as soon as you want to read a sensor or send data on the serial port, the LED will flicker ...

Get Getting Started with Arduino now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.