Control variable resistance with CDS cell and PWM-driven incandescent lamp?

I have a need to control variable resistance with the Arduino.

Would a reasonable solution be to have a small incandescent lamp mated to a CDS cell and then control the brightness of the lamp by PWM?

To me it sounds like a weird way to go about things, but it would (hopefully) be easy to implement (in theory) and reliable (except for if the bulb would burn out). Would an LED work as the light source? (My guess is "no", but I figure it's worth asking)

Does a CDS cell provide a fairly stable resistance at a given light level?

Thanks GB

Can you tell us more - what is connected to this variable resistance?

Hi, Also, how fast do you to change the resistance? Seconds? Milliseconds?

This is workable; I've used dozens of CDs Light Dependent Resistors in large audio consoles etc. I used DC from Pots and also from Automatic Gain controls. LEDs clear-epoxied on the cells. There are also similar units with Incandescent bulbs which are good because the bulb integrates the PWM a lot and you don't get PWM variations in resistance. With an LED this would be more of a problem unless you filtered the PWM to make it more slowly changing DC.

A small 6V bulb run on 5V would probably work well and not burn out for a long time..

You can also make the PWM frequency high as possible. See The standard Arduino PWM frequencies are 500Hz and 1000Hz

You can do this and I have done in back in the 60s. The problem with it is the response you get is very non linear. That is the control appereas to be very sudden compared to the brightness of the bulb. It is almost a double log law

Cool, I’m glad it is not a totally hairbrained idea :slight_smile:

What I want to use it for is speed control of an 120vac blower motor. The idea is to take an off-the-shelf speed control which uses a pot to control speed, and use the cds/lamp assembly in place of the pot. The resistance does not need to change very fast at all so response speed is not critical. The non-linear response is also not a big deal. So long as it is consistent at a given PWM rate, I can just do some trial/error testing and build a table of PWM values vs. fan rate.

I realize this can be accomplished in other more “direct” ways, such as by building a circuit to allow the Arduino to directly modify the AC sine wave, but that would take more effort, more components, and also require me to most likely dedicate an Arduino to the task, since it’d require tight timing and interrupts.

The only problem I can foresee is matching the value of the pot to the CDS cell. You might have to use more than one and wire them in series or parallel.
Also make sure it is a variable resistance rather that a pot. If it is a pot you might have trouble getting end to end tapping control. That means you would have to have one end as a fixed resistor and that would prevent the tap point ever looking like the top end.

The pot looks to be wired as a VR since only two of the three terminals are connected to the circuit. And yes, matching the values could be a challenge. I wish there was an easier way to accomplish this task but I have yet to discover one.

I also toyed with the idea of using a stepper motor to actually turn the pot wiper but that introduces its own set of challenges. As would using a stepper to open/close the air metering plate (which is what you normally use to vary the air flow on this blower).

FYI, just to expand on my explaination of this project. This is the combustion blower on my coal stoker stove. You have to adjust it according to the draft in your chimney, which you do by moving a metal plate over the inlet. Too little air from the blower and you don't burn the coal completely or get the full heating capacity. To much air from the blower and you push CO out of the stove (bad). Unfortunately, the draft from the chimney varies according to outside conditions (temperature and wind) as well as the temperature of chimney itself (which naturally increases as the stove is run harder). So basically I'd like to remove the metering plate and adjust the speed of the fan itself based on a pressure reading taken at the stove exhaust pipe.

If anyone can suggest an easier/better way to control an AC motor's speed via the Arduino, even if it involves buying a pre-made board, I'm certainly open to suggestion!


Hi, Not to add another Glitch, but:

These little stepper motors, with driver board, are used in literally millions of air conditioners to ... Move the air flap vane.

They are geared down for this task.

Seems like you don't need or want speed....


DISCLAIMER: Mentioned stuff from my own shop...!

The tricky part would be putting together the mechanical aspect of it. I'd have to fabricate a bracket out of metal which I don't really know how I'd do.

BTW thanks for the link to your site.

I just wanted to post back my latest progress...

I had the idea to take an exposure lamp regulator board out of an old copier and experiment with that as a means to control my AC motor speed. According to the service manual of the copier, the lamp board accepts a PWM signal from the main board to vary the intensity of the lamp. By looking at the components on the regulator board, I could tell it was probably doing the modified sine wave thing so it seemed like exactly what I've been looking for!

While the service manual did not give specific parameters, such as the PWM frequency the regulator board might be looking for, I tried it with the standard Arudino PWM output and low and behold, it worked!

The one thing that I noticed that is a little unfortunate is when I have the PWM at 100%, the AC output from the regulator board only measures ~85vac. That is not totally surprising because a copier exposure lamp is not 120v, it's more like 80v. What I may have to do is have two circuits powering the motor, one being an on/off so I can drive the motor at 100% and the other coming from this regulator board. Still, that's far less complicated than any of the other alternatives...