dimming 240 volts

Hi, as above I am dimming a 240volt bulb by using arduino to control a 240 volt pwm board ( from eBay)

It works well so far . I am trying to modify the very basic code which I got with the board - see below.

I am just changing the delay values and seeing what happens and it works ok if a little choppy.

I am just a bit unsure what the three delay values actually relate to if anyone could enlighten me.

Also in other sketches I have used for dimming led's there is usually an element to control the light intensity numerically. This seems to be missing in this sketch. Should this be included somewhere?

Any suggestions for improving this would be welcome,

thanks in advance,

keef

unsigned int i;

void setup()
{
pinMode(3, OUTPUT);
}

void loop() {

for(i=240;i>20;i--)
{
analogWrite(3,i);
delay(20);
}

delay(1000);

for(i=20;i<240;i++)
{
analogWrite(3,i);
delay(20);
}

}

Perhaps something to do with aliasing? https://www.google.com.au/search?q=aliasing&tbm=isch

A 50-hz cycle is 20ms per cycle, so something weird could be going on there.

Try

for(i=20;i<240;i+=10)
{
analogWrite(3,i);
delay(200);
}

Aliasing has nothing to do with it. Cheap PWMs use either a Triac, or a Thyristor(SCR), as the switching device. The device is turned on when the input AC signal reaches a certain voltage, and it turns off by itself when the AC voltage drops to near 0V. The analogWrite sets the "on" voltage. Changing this more than once per cycle of the AC will have no discernable effect, since the device can only be turned on once per cycle, so the result would be similar to increasing the analogWrite value by more than one ever AC cycle.

Reducing the 20 mSec delay will make the dimming faster, and "steppier". Increasing the 20mSec delay will make the dimming slower, but it should be changed in 20mSec increments (for 50Hz AC, or 16.67mSec increments for 60Hz). The one second delay simply makes it stay off for one second before it starts turning on again.

Regards,
Ray L.

You could apply nilly-willy (i.e. without zero-cross monitoring), as you are, a pulse every 20msec and achieve one result and re-initialize and result another; the results depend on when during the alternation the trigger/ing occurs.

Triggering a triac, for purposes of dimming with predictable results, has to be done synchronously with the line frequency with respect to the zero-cross (assuming you're trying to achieve reliable phase control).

A quick Google search for "240 volt pwm board" brought up this.

OP, is that the sort of thing you're using? If that's the case, the code you posted is written simply to increase and decrease the output power (e.g. brightness of a light globe). To answer your question, the two lines which say delay(20) are used to control how fast the increase/decrease happens. The delay(1000) line is how long it waits between being fully off and starting to brighten again.

The example code from this one is done synchronously.

The triggering of the Triac/Thyristor IS done synchronously, by a comparator comparing the AC line voltage to the "control" voltage. It makes relatively little difference when the control voltage itself changes, as long as it doesn't change more than once per cycle of the AC input. The only thing that changes is whether it triggers on the "old" or "new" value of the control voltage.

Regards,
Ray L.

240 volt pwm board ? is it this board?

Hi all.
thanks for all the replies.
Here is a picture of the board I am using:
pwm board on ebay

keef

RayLivingston:
The triggering of the Triac/Thyristor IS done synchronously, by a comparator comparing the AC line voltage to the "control" voltage.

Where is there an input taken into account in the OP sketch?

There is no input to the sketch. The comparison is done in hardware on the PWM board.

Regards,
Ray L.

Any suggestions for improving this would be welcome,

An interconnected devices have a protocol they use to communicate intelligently AKA work together.
Your xino is connected to device x who is connected to / operates mains.
The interface between xino and your x device , calling it PWM board is not correct, is via analog output from xino.

The question is - what "analog value " i corresponds to what output on the x board.
You need to know that first.

It is called "device specification" and is written SOMEWHERE in board x datasheet.
The datasheet may also say how often - what (maximum) frequency - you can switch / change the triac setting.

If you can verify that i = 240 means full AC output from your x board than you can work on your software without further guessing.

You do not have to know anything about how triac works, unless you want to know of course.
Whoever makes the x board wouldn't be in business if they switched the triac in wrong phase.
Jim

julyjim:
Any suggestions for improving this would be welcome,

An interconnected devices have a protocol they use to communicate intelligently AKA work together.
Your xino is connected to device x who is connected to / operates mains.
The interface between xino and your x device , calling it PWM board is not correct, is via analog output from xino.

The question is - what "analog value " i corresponds to what output on the x board.
You need to know that first.

It is called "device specification" and is written SOMEWHERE in board x datasheet.
The datasheet may also say how often - what (maximum) frequency - you can switch / change the triac setting.

If you can verify that i = 240 means full AC output from your x board than you can work on your software without further guessing.

You do not have to know anything about how triac works, unless you want to know of course.
Whoever makes the x board wouldn't be in business if they switched the triac in wrong phase.
Jim

It would appear you did not bother to look at the actual device he is using. The "protocol" IS a logic-level PWM signal, NOT an analog voltage. This is an E-Bay purchase, there is NO "device specification", and no datasheet. There are a few basic specifications given in the ad, a non-functional link to sample Arduino code, and that's about it. Operation is quite clear, and the exact characteristics you get to figure out once you have the device in-hand. Five minutes with some simple code and a voltmeter will tell you everything you need to know.

Regards,
Ray L.

keef476:
I am just changing the delay values and seeing what happens and it works ok if a little choppy.

The for loop at the beginning decrements from high to low, the other for loop increments from low to high.
The delays inside the for loops stipulate how long to dwell at that analogWrite value before going to the next.
The delay(1000) makes a 1 second delay between the two for loops.

This sketch may result smoother (less choppy) transitions. It does for LEDs, but I don't know how it will go for your ac dimming module :

extern const uint8_t gamma[];
int led = 3;           // the PWM pin the LED is attached to
int brightness;    // how bright the LED is
int corrected;

int dwell;

void setup() 
{
  pinMode(led, OUTPUT);
  dwell = 500;
}

void loop() 
{
  for (brightness = 20; brightness < 240; brightness ++)
  {
    corrected = pgm_read_byte(&gamma[brightness]);
    analogWrite(led, corrected);
    delay(dwell);
  }
  
  for (brightness = 240; brightness > 20; brightness --)
  {
    corrected = pgm_read_byte(&gamma[brightness]);
    analogWrite(led, corrected);
    delay(dwell);
  }
}

const uint8_t PROGMEM gamma[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255};