Possiedo un paio di barre a led con tensione di alimentazione 24V. E' un po' che cerco su internet senza nessun risultato un alimentatore 24V dimmerabile 0-5V o 0-10V, in modo da creare alba/tramonto con un arduino mega.
Sapete consigliarmi un prodotto di questo tipo?
Grazie.
di che barre stiamo parlando, di queste ?
Monocolore o RGB ?
Se sono di questo tipo non ti serve un alimentatore dimmerabile, ma ti basta un Mosfet gestito in PWM
Cavolo ho cercato tutta la notte alimentatori dimmerabili per niente Provo a guardare fuori come utilizzare un mosfet intanto.
Grazie per l'aiuto!
EDIT: ho provato a variare la tensione alla barra a led ma si accende solo a 24V quindi mi tocca scartare già l'idea di usare questo tipo di illuminazione.
Vi spiego l'utilizzo che ne dovrei fare: attualmente uso una centralina (180€ di roba) che mi fa un semplice alba/tramonto (per le lampade ad incandescenza) e un on/off (neon).
Per eliminare questa centralina vorrei sostituire le lampade ad incandescenza con una barra a led (o strip) da incollare sul neon in modo da avere lo stesso effetto alba/tramonto e con arduino, rtc, schermo 20x4 fare lo stesso lavoro della centralina già in mio possesso.
Chiaramente i led andrebbero pilotati in pwm, ho ancora fatto prove variando un semplice led direttamente con arduino, però non sò proprio come interfacciarmi con appunto uno strip led o altro.
I led funzionano in corrente, non in tensione ... inoltre in genere in quelle barre vengono collegati piu led in serie, e le serie messe in parallelo, in modo da ridurre la corrente richiesta ... quindi se la barra e' data per 24V, difficilmente si accendera' bekne a tensioni inferiori, anche di poco, oppure l'intervalo di funzionamento sara' molto ristretto ...
La soluzione migliore in quel caso e' usare un driver per led (anche se i led nella barra hanno gia una resistenza in serie, dovrebbe funzionare lo stesso, dato che regola la corrente, non la tensione), con un'ingresso per il dimming, che secondo il tipo di driver puo essere per DC oppure per PWM ...
Pero' il datasheet che hai linkato riporta per l'alimentazione "24Vdc non polarizzati", il che per dei led non ha molto senso, a meno che nella barra ci siano o un ponte di diodi, o un driver gia di suo ... se c'e' semplicemente un ponte di diodi, allora la cosa e' fattibile (te ne accorgi perche' riducendo lentamente la tensione, la luminosita' si riduce gradualmente fino al punto di spegnere tutto), mentre invece se la barra incorpora un driver (si vede se riducendo lentamente la tensione i led ad un certo punto si mettono a sfarfallare o si spengono di colpo), allora non c'e' probabilmente nulla da fare ...
EDIT: ho provato a variare la tensione alla barra a led ma si accende solo a 24V quindi mi tocca scartare già l'idea di usare questo tipo di illuminazione.
Come dice Etemenanki, riducendo la tensione dovrebbe affievolirsi la luminosità, ma visto che quelle barre usano 6 Led per gruppo ( 6 Led messi in serie ) non è che puoi scendere molto.
Non sappiamo che Led usi, ma presumibilmente hanno bisogno di almeno 3.5-3.7V ( cadauno ) per illuminarsi.
quindi con 6 led in serie, servono almeno 21-22 V .
Se hai un alimentatore regolabile in tensione puoi fare la prova, altrimenti non e' che se gli dai un 12V puoi sperare di vederli illuminati
Visto che ogni gruppo assorbe 20mA, non credo che ci sia incorporato un driver, a occhio c'e' solo una resistenza di limitazione, quindi un Mosfet collegato come sotto, dovrebbe andare piu' che bene
Per i "24Vdc non polarizzati", presumo che ci sia un ponte raddrizzatore a prova di "elettricista"..... penso !!
la frase "Alimentazione: 24Vdc non pol. +/- 10%" ci dice che è presente un ponte di diodi seguito da 5 linee in parallelo di 6 LED ciascuna e un resistore limitatore di corrente in modo che ciascun ramo assorba 20mA per 100mA totali.
Il circuito MOSFET di Brunello è sufficiente allo scopo, pilotato da PWM a 490Hz (pin 3, 9, 10 ed 11) o meglio a 977Hz (pin 5 e 6).
Vado a memoria perchè non sono a casa al momento, ma sono abbastanza sicuro che la barra si spenga di colpo.
Per quanto riguarda lo schema, non mi è molto chiara una cosa; sula lato sinistro ho pin e gnd di arduino, i 24V invece sono riferiti solo all'alimentazione diretta alla barra e non centrano nulla con il gnd di arduino giusto? Non vorrei fare stupidate nel collegamento.
Sapete darmi un codice di un mosfet che potrei utilizzare per cortesia? Così guardo se lo trovo a lavoro.
Brunello, grazie per l'aiuto! Appena recupero i componenti faccio una prova e vi faccio subito sapere!
Intanto ieri ho comprato un po di roba, Arduino mega, rtc, LCD 20x4, interfaccia i2c per LCD, sensore ds18b20 e joystick per modifica valori! Ho preso anche un sensore di corrente 5a per memorizzare i consumi, vedremo cosa salta fuori
bubba21:
... non centrano nulla con il gnd di arduino giusto?
Al contrario ... se usi il mosfet pilotato direttamente da Arduino, le due masse degli alimentatori (ma solo quelle) devono essere collegate insieme, altrimenti non funziona correttamente ... se invece vuoi tenere isolate anche le masse (isolamento galvanico), devi usare un fotoaccoppiatore per pilotarci il mosfet.
Grazie anche per il tuo consiglio Etemenanki, ho appena provato il tutto seguendo lo schema sopra e funziona tutto perfettamente!
Ho buttato giù al volo uno sketch per provarlo attivando l'alba e il tramonto con due pulsanti separati.
Se può tornare utile a qualcuno lo posto
int ledPin = 6;
int alba = 38;
int tramonto = 39;
boolean cicloAlba = false;
boolean cicloTramonto = false;
int fadeValue;
void setup() {
// nothing happens in setup
Serial.begin(115200);
pinMode(alba, INPUT);
digitalWrite(alba, HIGH);
pinMode(tramonto, INPUT);
digitalWrite(tramonto, HIGH);
} //fine void setup
void loop() {
if ((digitalRead(alba) == LOW) && (cicloTramonto == false)) cicloAlba = true;
if ((digitalRead(tramonto) == LOW) && (cicloAlba == false)) cicloTramonto = true;
if (cicloAlba == true) {
for(fadeValue = 0; fadeValue <= 255; fadeValue +=5) {
analogWrite(ledPin, fadeValue);
delay(200);
if (fadeValue == 255) {
cicloAlba = false;
break;
}
}
} // fine cicloAlba == true
if (cicloTramonto == true) {
for(fadeValue = 255; fadeValue >= 0; fadeValue -=5) {
analogWrite(ledPin, fadeValue);
delay(200);
if (fadeValue == 0) {
cicloTramonto = false;
break;
}
}
} // fine cicloTramonto == true
} //fine void loop
Adesso vorrei ovviamente aumentare e diminuire l'effetto a tempo. Per fare ciò quale sarebbe la soluzione migliore? Calcolare di quanto aumentare il fade oppure modificare il ritardo tra un'analogWrite e l'altro?
Ok ho implementato alba e tramonto impostando manualmente la durata di una e dell'altra e funziona tutto perfettamente togliendo il ciclo for e usando i millis..
Domani se ho tempo inizio a scrivere la gestione dell'Lcd e del joystick..
Intanto vi faccio un'altra domanda al volo..è un po che ci penso,ma come si potrebbe fare a gestire una cosa di questo tipo:
pressione pulsante veloce = ON OFF luci
pressione prolungata = variazione continua di luminosita..
Sono un paio di esempi di come usare un pulsante per funzioni diverse, ovviamente li devi modificare per quello che serve a te' ma potrebbero darti un'idea
Il mio problema è nel calcolo dell'intervalMillisAlba iniziale. Inizialmente ho settato questa variabile come long, però mi sono accorto che il tempo non viene proprio preciso perchè giustamente il calcolo (per esempio un minuto di alba) mi viene approssimato a 235 anzichè a 235,29.
Ho provato a settare la variabile come float, ma anche in questo caso mi esce la stessa approssimazione, dov'è che sbaglio?
Sinceramente non ho tutto questo bisogno di precisione, però effettivamente non tenendo conto della virgola in pochi minuti di alba inizio già ad avere qualche bel secondo di ritardo, non oso immaginare su parecchi minuti.
Rieccomi qui, ho innanzitutto dichiarato la variabile intervalMillisAlba come unsigned long come hai consigliato.
Una domanda, cosa intendi quando dici "Per alterare il tipo di calcolo almeno una variabile o costante del calcolo deve essere quella che ti serve (unsigned long)."
Ho provato ad usare micros() moltiplicandolo *1000 per riottenere i millis, però non funziona, o meglio funziona ad una velocità molto maggiore, l'alba invece di durare 60 secondi dura 10 secondi.
Ah ok, non sapevo si potessero forzare in questa maniera le costanti. Posso chiederti, giusto per capire meglio, cosa cambierebbe così facendo a livello di logica?
Ok, che stupido, adesso ho capito cosa intendevi, quindi in questo caso intervalMicrosAlba se fosse per esempio 5 secondi (quindi dichiarato 5000) lo dichiaro a 5000000. Esatto?