Sziasztok,
Készítettem egy akvárium világítás vezérlést, ahol PWM-el szabályzom (IRF510-en keresztül) a LED szalagokat.
Fehéret, pirosat, kéket. A célom az volt, hogy ne egyszerűen csak be-, vagy kikapcsoljanak a fények, hanem megfelelően dimmelve szimulálja a beesteledést, és a pirkadatot.
Teljesen jól működik, de valamiért az egész zavaróan vibrál....
Tettem kondenzátorokat a kimenetekre, - és a bejövő tápra is, - valamelyest javult, de még mindig látni vélem a vibrálást....
Van rá valamilyen ötletetek? Találkoztatok ilyesmivel? Lehet, hogy a negyfrekvenciás terhelést nem szereti a táp?
Itt a kód is, a piros és kék szineken van egy 0.75-ös szorzó, mert nem kell a teljes fénye, valamint a kék éjszakára 50-es értéken marad.
Köszi előre is!
---------------------------------------
#include <swRTC.h>
swRTC rtc;
const byte Value[60] = {255,255,255,255,255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0,0,0,0,0};
byte WhitePin = 9;
byte RedPin = 10;
byte BluePin = 6;
byte PWM;
int hr;
int mins;
int sec;
void setup()
{
rtc.stopRTC(); //stop the RTC
rtc.setTime(20,40,0); //set the time here
rtc.setDate(2,1,2018); //set the date here
rtc.startRTC(); //start the RTC
}
void loop()
{
hr = rtc.getHours();
mins = rtc.getMinutes();
//Set White
if (hr <= 6) PWM = 0;
if (hr == 7) PWM = Value[59 - mins];
if (hr >= 8 && hr <= 20) PWM = 255;
if (hr == 21) PWM = Value[mins];
if (hr >= 22) PWM = 0;
analogWrite(WhitePin, PWM);
//Set Red
if (hr <= 5) PWM = 0;
if (hr == 6) PWM = Value[59 - mins] * 0.75;
if (hr >= 7 && hr <= 21) PWM = 255 * 0.75;
if (hr == 22)PWM = Value[mins] * 0.75;
if (hr >= 23) PWM = 0;
analogWrite(RedPin, PWM);
//Set Blue
if (hr <= 5) PWM = 0;
if (hr == 6) PWM = Value[59 - mins] * 0.75;
if (hr >= 7 && hr <= 21) PWM = 255 * 0.75;
if (hr == 22)PWM = Value[mins] * 0.75;
if (hr >= 23) PWM = 0;
if (PWM < 50) PWM = 50;
analogWrite(BluePin, 50);
delay(10000);
}