Do you know what's the best way to obtain a sinusoidal wave of brightness of LEDs with a period of 29.5 days?
I would like to change the brightness of the LEDs from 0 to X (during 14.75 days) and then from X to 0 (during 14.75 days) to simulate a moonlight cycle.
I am using arduino uno and RTC.
I found some sketch on the forum, but not sure how to start the project.
Get the day of the month, pop it into an if statement. If it’s <=15, then proceed to work out the percentage of the value out of 15. Then just multiply that percentage by 255 to get a value to send out on a PWM pin.
Do the same (but with a little adaptation) for days >15.
valerio83:
but in such case it is not precise.....isn't?
We're talking about light here.
What's all the interest in "precision"?
The human eye has difficulty discerning differences in light intensity less than say, 20%. The slightest shading or reflection introduces much more than that (which is why you can discern shading). Visual response is essentially logarithmic,
How accurate does that need to be? I mean, do you care if it is 29.5 days and a few minutes, or does this need to stay synchronised to some real-world events such as time-of-day or the actual phase of the moon?
delay() would be OK-ish, if you don't have anything else to do, like monitoring switches, but have a look at the blink without delay example and see if you can do better, and not use delay at all.
valerio83:
I think as a first step 29.5 days and few minutes is ok.
do you have any suggestions.
In that case you probably don't need it any more accurate than the Arduino's hardware clock so you can just use millis() to control your timing. The algorithm would be to calculate the frequency of the sin wave you are generating, multiply that by elapsed time since the sine wave started to get the current phase angle, take the sin of the angle and offset that to get a positivce value giving your required brightness. You might want to perform gamma correction to convert from the required brightness to the PWM value.
You would evaluate this algorithm however often you wanted - I doubt there is much point doing it more often than once per minute, but if you have nothing better to do then there's no harm in doing it more often.