Gå till innehåll

Montera motstånd på Meanwell ldd-1000h driver


pkarl

Rekommenderade inlägg

God jul på er allihop!

Sitter här och funderar på en sak angående en fix till månbelysning. Den består idag av 2 st 3w royal blue led's från Cree. Jag blev tyvärr tvungen att använda en meanwell ldd-1000h driver i o m att det var det som blev över när jag byggde min belysning...

Allt fungerar nu som det skall och allt styrs från en arduino uno. Månljuset följer måncykeln som det skall men i o m att jag har så kraftig driver så har jag blivit tvungen att sätta ner max output (pwm styrning) till 50 istället för 255. Annars så blir det för ljust på natten. Kruxet är att jag järna skulle vilja ha den satt på 255 i o m att jag skulle få en jämnare samt större skiftning i intensitet.

Enklast vore nu att byta ut drivaren till en på 300 istället men funderade istället på om jag inte kunde montera dit ett motstånd eller pot istället. Skulle det fungera eller skulle jag förstöra drivern?

Mvh

Patrik

Länka till kommentar
Dela på andra sidor

Tänk även på att vid omstart så går de igång max för att sedan gå ned när arduino har startat. Lösningen var att montera ett motstånd mellan pwm och vin- enligt siten i usa med påföljden hos mig att man pajade en drivare. Skall koppla via relä som arduino får dra igång istället så löser jag problemet.

Köp en ldd-300 via ebay så får du rätt saker.

Länka till kommentar
Dela på andra sidor

Tänk även på att vid omstart så går de igång max för att sedan gå ned när arduino har startat. Lösningen var att montera ett motstånd mellan pwm och vin- enligt siten i usa med påföljden hos mig att man pajade en drivare. Skall koppla via relä som arduino får dra igång istället så löser jag problemet.

Köp en ldd-300 via ebay så får du rätt saker.

Har du någon aning om varför detta hände?

Jag har tänkt börja koppla in mina 10 LDD-1000 idag eller i morgon och har kallt räknat med att sätta 10 st. 10Kohms motstånd mellan PWM och jord.

Det blir ju lite krångligare med relä, och så tappar man en port på Arduinon.

/Håkan

Länka till kommentar
Dela på andra sidor

Pkarl: ldd-1000 är ju bara en strömbregränsare så driver du dina led med säg en trafo på 400mA så hjälper inte LDD alls förutom PWM signalen. Men driver du med 10A så gör LDD-1000 nytta med att skicka ut 1A endast.

Garion: Vet ej varför men relä blev varmt eller ljummet och sedan slutade den att fungera, kan vara att kopplingen skall vara annorlunda men jag följde hur de gjorde på den siten men fel resultat för mig varje fall. Använder hellre en kanal extra än lödar in något som kanske inte fungerar varje fall. Sedan kan man stänga hela systemet på ström om du använder dig av relä istället. Programmering sak att göra ljus biten strömlöst om man skall pilla lite, jag har varje fall 48V i mitt och även om det är ganska riskfritt så känns det skönt att ha systemet strömlöst medan övriga är i gång.

Någon som har en bra ide om att lösa det får gärna skriva men tror inte att Meanwell rekommender att koppla in något mellan pwm och övrigt. PWM skall ju ha endast 5V max och då koppla in motstånd mellan pwm och minus känns fel, sätta mellan +48V till pwm känns också helt fel i mitt huvud varje fall. Default varje fall är ju att ingen signal på pwm ger max ljus.

Länka till kommentar
Dela på andra sidor

I databladet framgår (om jag minns rätt) att du kan till och med kan kortsluta mellan pwm och vin- för att ha den släkt så det kommer fungera. Du måste se till att ha gemensam jord för din arduino och led. Dvs. jord på arduinon och vin- skall kopplas samman, annars kan du få lustigheter och ev. släppa ut den "magiska röken".

Vill man att led:en skall starta avstängd så kan man som Garion säger koppla ett pulldown motstånd mellan pwm och vin- samt pwm till arduinon. Jag har om jag minnst rätt även ett motstånd mellan pwm och arduinon.

Länka till kommentar
Dela på andra sidor

Hmm, tror inte det berodde på hur det var kopplat, då det i databladet står att man kan kortsluta den till -Vin, toleransen på den pinnen är -Vin till +6V.. Det är inte så att den råkade komma åt pinnarna intill på kapseln, som är +Vin, som kan röka den rätt bra om man har på lite spänning på den, det är ju egentligen lite dumt att dem har den intill de pinnar den inte får röra och inte på andra sidan där det inte spelar nån roll om man skulle råka kortsluta den. Men den fortsätter fungera även efter att PWM pinnen slutade fungera? men med full styrka?

Länka till kommentar
Dela på andra sidor

  • 2 veckor senare...

Har nu fått tag i en 350mA drivare (stort tack till Alivedreamer som skickade en till mig). Upptäckte dock att även med detta så blir det för ljust på natten. Har dock funderingar på om man inte skulle kunna blockera ljuset från dessa 2 st led på något sätt (tejp eller liknande). Någon som testat? Annars så undrar jag om vad använder ni andra som månljus?

Efter sökning på internet så verkar rekommendationen vara en drivare på 100mA, något som saknas i ldd serien. Minsta där är på 300mA. Så, nu vet jag inte riktig hur jag skall göra. Kan visserligen dimma ljuset i sketchen men vill helst inte göra detta. Har den redan nu satt till 40 (max=255) Vill helst kunna utnyttja all stegen för större variation i ljusintensiteten

Mvh

Patrik

Länka till kommentar
Dela på andra sidor

Använder du inte map funktionen? pwm_value=map(pwm_value, 0, 100, 0, 255);

Kolla stilo_3 på code.google så ser du hur han har gjort för du kan ställa värdena under natten också utan problem.

//Jonas

Är lite osäker på vad som menas med map funktionen tyvärr. Använder Jason's sketch som finns publicerad på reefcentral (länk). Efter en del modifering så ser min sketch ut så här:

// Natural Reef Aquarium Lighting V2.5.6
// 30/11/2013
// Developed by J. Harp (nUm - RTAW Forums, Numlock10 - Reef Central Forums)
// Formulas based off of information from NOAA website for sunrise / sunset times.
// Includes Lunar Simulation.
// Compiled in Arduino 1.5.2
//
// Testing;
// Moon Correction (was inverted)
// Will not calculate string values if Channel count is 0 to save on processor time
// Float Map for moonlight with corrected formula
//
// Future Development:
// Weather Simulation
//
// Please feel free to use this and modify as you see fit, if you have any comments or suggestions please let me know via messages on the forums listed above.
//

#include <math.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68

// RTC variables
byte second, rtcMins, oldMins, rtcHrs, oldHrs, dayOfWeek, dayOfMonth, month, year, psecond;

// LED variables (Change to match your needs)
byte bluePins[] = { 6 }; // PWM pins for blues
byte whitePins[] = { 10, 11 }; // PWM pins for whites
byte uvPins[] = { 5, 9 }; // PWM pins for UVs
byte moonPins[] = { 3 }; // PWM pins for moonlights

byte blueChannels = 1; // how many PWMs for blues (count from above)
byte whiteChannels = 2; // how many PWMs for whites (count from above)
byte uvChannels = 2; // how many PWMs for uv (count from above)
byte moonChannels = 1; // how many PWMs from moon (count from above)

byte BluePWMHigh[] = { 255 }; // High value for Blue PWM each vale is for each string - if your values are noraml this is 255, if your values are inverted this is 0
byte BluePWMLow[] = { 0 }; // Low value for Blue PWM - if your values are noraml this is 0, if your values are inverted this is 255
float BlueFull[] = { 25 }; // Value in degrees (sun angle) that each Blue string will be at max output (Larger = more sunlight)
byte WhitePWMHigh[] = { 255, 255 }; // High value for White PWM - if your values are noraml this is 255, if your values are inverted this is 0
byte WhitePWMLow[] = { 0, 0 }; // Low value for White PWM - if your values are noraml this is 0, if your values are inverted this is 255
float WhiteFull[] = { 37.5, 37.5 }; // Value in degrees (sun angle) that each White string will be at max output (Larger = more sunlight)
byte UVPWMHigh[] = { 255, 255 }; // High value for UV PWM - if your values are noraml this is 255, if your values are inverted this is 0
byte UVPWMLow[] = { 0, 0 }; // Low value for UV PWM - if your values are noraml this is 0, if your values are inverted this is 255
float UVFull[] = { 30, 30 }; // Value in degrees (sun angle) that each UV string will be at max output (Larger = more sunlight)
byte MoonPWMHigh[] = { 20 }; // High value for Moon PWM - if your values are noraml this is 255, if your values are inverted this is 0
byte MoonPWMLow[] = { 0 }; // Low value for Moon PWM - if your values are noraml this is 0, if your values are inverted this is 255

// Set for the location of the world you want to replicate.

float latitude = -17.730211; // + to N Defualt - (-19.770621) Heart Reef, Great Barrier Reef, QLD, Australia
float longitude = 177.127218; // + to E Defualt - (149.238532)
int TimeZone = 12; // + to E Defulat - (10)

// Sunlight Variables

int delayTime = -150; // start time delay in minutes, - will push the day back, + will bring the day forward

float floatMap(float x, float in_min, float in_max, int out_min, int out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

int SunLight(byte _ledPin, byte _ledHigh, byte _ledLow, float _fullSun, byte _year, byte _month, byte _day, byte _hour, byte _min, byte _sec)
{
float a = floor((14.0 - _month) / 12.0);
float y = _year + 4800.0 - a;
float m = _month + (12.0 * a) - 3.0;
float AH;
int result;

float JC = (((_day + floor(((153.0 * m) + 2.0) / 5.0) + (365.0 * y) + floor(y / 4.0) - floor(y / 100.0) + floor(y / 400.0) - 32045.0) + ((_hour / 24.0) + (_min / 1444.0) + (_sec / 86400.0))) - 2451556.08) / 36525.0;

float GMLS = fmod(280.46646 + JC*(36000.76983 + JC * 0.0003032), 360.0);

float GMAS = 357.52911 + JC * (35999.05029 - 0.0001537 * JC);

float EEO = 0.016708634 - JC * (0.000042037 + 0.0000001267 * JC);

float SEoC = sin((GMAS * M_PI) / 180.0)*(1.914602 - JC * (0.004817 + 0.000014 * JC)) + sin(((2.0 * GMAS) * M_PI) / 180.0) * (0.019993 - 0.000101 * JC) + sin(((3.0 * JC) * M_PI) / 180.0) * 0.000289;

float STL = GMLS + SEoC;

float STA = GMAS + SEoC;

float SRV = (1.000001018 * (1.0 - EEO * EEO)) / (1.0 + EEO * cos((STA * M_PI) / 180.0));

float SAL = STL - 0.00569 - 0.00478 * sin(((125.04 - 1934.136 * JC) * M_PI) / 180.0);

float MOE = 23.0 + (26.0 + ((21.448 - JC * (46.815 + JC * (0.00059 - JC * 0.001813)))) / 60.0) / 60.0;

float OC = MOE + 0.00256 * cos(((215.04 - 1934.136 * JC) * M_PI) / 180.0);

float SD = (asin(sin((OC * M_PI) / 180.0) * sin((SAL * M_PI) / 180.0))) * (180.0 / M_PI);

float vy = tan(((OC / 2.0) * M_PI) / 180.0) * tan(((OC / 2.0) * M_PI) / 180.0);

float EQoT = (4.0 * (vy * (sin(2.0 * ((GMLS * M_PI) / 180.0)) - 2.0 * EEO * sin((GMAS * M_PI) / 180.0) + 4.0 * EEO * vy * sin((GMAS * M_PI) / 180.0) * cos(2.0 * ((GMLS * M_PI) / 180.0)) - 0.5 * vy * vy * sin(4.0 * ((GMLS * M_PI) / 180.0)) - 1.25 * EEO * EEO * sin(2 * ((GMAS * M_PI) / 180))))) * (180 / M_PI);

float HAS = acos(cos((90.833 * M_PI) / 180.0) / (cos((latitude * M_PI) / 180.0) * cos((SD * M_PI) / 180.0)) - tan((latitude * M_PI) / 180.0) * tan((SD * M_PI) / 180.0)) * (180.0 / M_PI);

float SN = (720.0 - 4.0 * longitude - EQoT + TimeZone * 60.0);

float SR = SN - HAS * 4.0;

float SS = SN + HAS * 4.0;

float STD = 8.0 * HAS;

float TST = fmod((((_hour)+(_min / 60.0) + (_sec / 3600.0)) / 24.0) * 1440.0 + EQoT + 4.0 * longitude - 60.0 * TimeZone, 1440.0) + delayTime;

if (TST / 4 < 0.0)
{
AH = ((TST / 4.0) + 180.0);
}
else
{
AH = ((TST / 4.0) - 180.0);
}

float SZA = (acos(sin((latitude * M_PI) / 180.0) * sin((SD * M_PI) / 180.0) + cos((latitude * M_PI) / 180.0) * cos((SD * M_PI) / 180.0) * cos((AH * M_PI) / 180.0))) * (180.0 / M_PI);

float SEA = 90.0 - SZA;

if (SEA <= 0.0)
{
result = _ledLow;
}

if (SEA > 0.0 && SEA < _fullSun)
{
result = map(SEA, 0, _fullSun, _ledLow, _ledHigh);
}

if (SEA >= _fullSun)
{
result = _ledHigh;
}

analogWrite(_ledPin, result);
return result;

}

int MoonLight(byte _ledPin, byte _ledHigh, byte _ledLow, byte _year, byte _month, byte _day, byte _hour, byte _min, byte _sec)
{
int result;

float a = floor((14.0 - _month) / 12.0);
float y = _year + 4800.0 - a;
float m = _month + (12.0 * a) - 3.0;

float mJDN = ((_day + ((153.0 * m + 2.0) / 5.0) + (365.0 * y) + (y / 4.0) - ( y / 100.0) + (y / 400.0) - 32045.0) + 730483.71);

float mJDR = (_hour / 24.0) + (_min / 1444.0) + (_sec / 86400.0);

float mJD = mJDN + mJDR;

float moon = fmod((mJD - 2456318.69458333), 29.530589);

if (moon <= 14.7652945)
{
result = floatMap(moon, 0.0, 14.7652945, _ledHigh, _ledLow);
}

if (moon >= 14.7652946)
{
result = floatMap(moon, 14.7652946, 29.530589, _ledLow, _ledHigh);
}
analogWrite(_ledPin, result);
return result;
}


/***** RTC Functions *******/
/***************************/
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ((val / 10 * 16) + (val % 10));
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ((val / 16 * 10) + (val % 16));
}

// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}

void setup() {
delay(500);
Serial.begin(57600);
Wire.begin();
}

void loop() {
getDateDs1307(&second, &rtcMins, &rtcHrs, &dayOfWeek, &dayOfMonth, &month, &year);
if (psecond != second){
psecond = second;
Serial.print(rtcHrs);
Serial.print(":");
Serial.print(rtcMins);
Serial.print(":");
Serial.print(second);
Serial.print(" ");
Serial.print(dayOfMonth);
Serial.print("/");
Serial.print(month);
Serial.print("/");
Serial.println(year);
update_leds();
}
}

void update_leds(){
int i;
byte value;
if (blueChannels > 0){
Serial.println("Blue LED's");
for (i = 0; i < blueChannels; i++)
{
value = SunLight(bluePins[i], BluePWMHigh[i], BluePWMLow[i], BlueFull[i], year, month, dayOfMonth, rtcHrs, rtcMins, second);
Serial.print(map(value, BluePWMLow[i], BluePWMHigh[i], 0, 100));
Serial.print("% ");
}
Serial.println();
}
if (whiteChannels > 0){
Serial.println("White LED's");
for (i = 0; i < whiteChannels; i++)
{
value = SunLight(whitePins[i], WhitePWMHigh[i], WhitePWMLow[i], WhiteFull[i], year, month, dayOfMonth, rtcHrs, rtcMins, second);
Serial.print(map(value, WhitePWMLow[i], WhitePWMHigh[i], 0, 100));
Serial.print("% ");
}
Serial.println();
}
if (uvChannels > 0){
Serial.println("UV LED's");
for (i = 0; i < uvChannels; i++)
{
value = SunLight(uvPins[i], UVPWMHigh[i], UVPWMLow[i], UVFull[i], year, month, dayOfMonth, rtcHrs, rtcMins, second);
Serial.print(map(value, UVPWMLow[i], UVPWMHigh[i], 0, 100));
Serial.print("% ");
}
Serial.println();
}

if (moonChannels > 0){
Serial.println("Moon Value");
for (i = 0; i < moonChannels; i++)
{
value = MoonLight(moonPins[i], MoonPWMHigh[i], MoonPWMLow[i], year, month, dayOfMonth, rtcHrs, rtcMins, second);
Serial.print(map(value, MoonPWMLow[i], MoonPWMHigh[i], 0, 100));
Serial.print("% ");
}
Serial.println();
}
}

Jag har idag satt ner max till 20 och kommer att nöja mig med detta. Stilo's sketch verkar dock väldigt intressant. Dock så saknar jag där möjligheten att följa solens årscykel. Jag har idag min satt så att den följer Fiji's soluppgångar/nedgångar (hela året).

Mvh

Patrik

Länka till kommentar
Dela på andra sidor

if (uvChannels > 0){

Serial.println("UV LED's");

for (i = 0; i < uvChannels; i++)

{

value = SunLight(uvPins, UVPWMHigh, UVPWMLow, UVFull, year, month, dayOfMonth, rtcHrs, rtcMins, second);

Serial.print(map(value, UVPWMLow, UVPWMHigh, 0, 100));

Serial.print("% ");

Du har map funktionen med där och sök på arduinos hemsida så ser du hur den funkar. Men så jag skrev så gör den om värdena 0-100 till 0-255 istället så matar du in 100% typ så

beräknar den om värdet till i detta fall 255 då. Tar du värdet 50 så blir det 127 lr 128.

Skall kolla på din också för det är solens upp och nedgång jag vill ha i mitt då jag kommer att ha fyra kluster av dioder så uppgången blir på höger sida av akvariet

för att gå ned på vänster sida. Men skall först få in allt jag vill ha innan jag kollar på upp och ned gång. Kalibrering av doserpumpar skall med som exempel i mitt projekt.

//Jonas

Länka till kommentar
Dela på andra sidor

  • 10 månader senare...

Nu bumpar jag denna tråd. Skulle kanske starta en helt ny tråd men detta handlar ändå om sketchen jag just nu kör och som finns redovisad tidigare i tråden.

I vilket fall som helst, så har jag kört fast. Vet varken ut eller in längre..Kan f.. inte få till det.

Vad är det då jag vill? Jo, jag vill simulera åska och moln i sketchen. Nu till min fråga: Är det någon vänlig skäl som tipsa mig om hur jag går vidare med detta? Sketcherna jag försökt att "klämma in" är följande: länk1 samt länk2

Mvh

Patrik

Länka till kommentar
Dela på andra sidor

Gå med i konversationen

Du kan posta nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.

Guest
Svara på detta ämne...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Ditt tidigare innehåll har återskapats.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa Ny...