Arduino e strisce led rgb collegamento non funzionante

Buonasera, mi presento mi chiamo Roberto, sono nuovo di questo forum e volevo fare una domanda dato che ho qualche problema con un collegamento di una striscia led rgb smd 5050 60 led/m con arduino. Premetto che non molta dimestichezza con l'elettronoca edd ho seguito alcuin consigli che ho trovato su questo forum e su internet per fare un piccolo proggetto. Vado al dunque, ho collegato l'arduino come in figura (la figura l'ho presa da internet, di diverso c'è solo che io ho collegato il +12 della striscia led al vin di arduino ed ad arduino ci ho collegato un trasformatore a 12v dc) alla striscia led ed ho utilizzato questo tipo di transistor: Transistor MOSFET canale N IRF520N, ma la striscia led non funziona. cosa ho sbagliato?
Ringrazio anticipatamente per il vostro aiuto, Roberto.

ciao, ho fatto anche io una cosa simile, però la mia da l'alimentazione dei 12V diretti alla striscia, passando per un diodo, e prima dei mosfet ci va una resistenza.

Tra l'altro non so se si può alimentare direttamente a 12 l'arduino.

Prendi quello che dico con le pinze perchè non sono molto esperto, meglio attendere la risposta di qualcuno più fico :slight_smile:

Da quello che ho letto si può collegare arduino fino a 12v...
riformulo la domanda dato che ho già fatto uno shield tramite fritzing, e collegandola ad arduino la striscia led non funzioina volevo sapere se cambiando il tipo di transistor, senza aggiungere un altri componenti, riesco a salvare la shield e non buttare 70 euro. grazie ancora, roberto

scusa ma che shield hai?

è una che ho fatto fare da fritzing per un proggetto che avevo in mente allego per far capire una foto con i componenti ancora non saldati...

untitled.png

lo schema e' corretto, anche il discorso dei 12V per Arduino e poi il prelievo degli stessi da Vin va bene.

quindi restano due variabili
1- posta lo sketch che usi
2- la striscia led funziona attaccata direttamente tra Vin e GND di arduino ?

lo sketch è questo, ma ne ho provati diversi e niente...quindi credo che sia qualcosa di fisico, invio in allegato anche la figura di frinzing della sheild che ho postato prima...
cosa intendi attaccata a vin e gnd? come la devo collegare per fare una prova?

int statoVentola = 1; //variabile stato del pulsante auto-man ventola
int statoLed = 1; //variabile stato del pulsante on/off led
int ventola = 6;
int sensore; //sensore
int pulsanteVentola = 2; //pulsante auto-man ventola
int pulsanteLed = 1; //pulsante on/off led
int rosso = 11;
int blu = 10;
int verde = 9;
int readingVentola; //variabile lettura pulsante auto-man ventola
int previousVentola = LOW; //vecchia lettura pulsante auto man ventola
long timeVentola = 0; //variabile tempo pulsante auto man ventola
long debounceVentola = 200; //variabile debounce auto-man ventola
int readingLed; //variabile lettura pulsante auto-man ventola
int previousLed = LOW; //vecchia lettura pulsante auto man ventola
long timeLed = 0; //variabile tempo pulsante auto man ventola
long debounceLed = 200; //variabile debounce auto-man ventola
const int fadeTimerFreq = 20; //variabile incrementa-decrementa ventola
const int fadeTime = 3000; //variabile incrementa-decrementa ventola
int currentTime, fadeTimerLast; //variabile incrementa-decrementa ventola
const int incrementaVentola = 4; //pulsante Incrementa ventola
const int decrementaVentola= 3; //pulsante Decrementa ventola
const int fadeRange = 254; //variabile incrementa decrementa ventola
const float fadeStep = (float(fadeTimerFreq) / (fadeTime)) * fadeRange; //variabile incrementa decrementa ventola
int buttonValue, fadeTarget, fadeValueTweened; //variabile incrementa decrementa ventola
float fadeValue; //variabile incrementa decrementa ventola

void setup() {
pinMode(ventola, OUTPUT);
pinMode(pulsanteVentola, INPUT);
pinMode(pulsanteLed, INPUT);
pinMode(incrementaVentola, INPUT);
pinMode(decrementaVentola, INPUT);
pinMode(rosso, OUTPUT);
pinMode(blu, OUTPUT);
pinMode(verde, OUTPUT);
Serial.begin(9600);
}

void loop() {
readingVentola = digitalRead(pulsanteVentola); //pulsante ventola quando premuto cambia in auto e manuale
if (readingVentola == HIGH && previousVentola == LOW && millis() - timeVentola > debounceVentola) {
if (statoVentola ==1)
statoVentola = 2;
else
statoVentola = 1;
timeVentola = millis();
}
previousVentola = readingVentola;

switch (statoVentola){
case 1: //utilizzo automatico
sensore = analogRead (0);
analogWrite (ventola, sensore/4); //ventola in automatico con valore sensore
delay(1000);
break;

case 2: // utilizzo manuale: la ventola funziona con i pulsanti incrementa/decrementa
currentTime = millis();
if ( abs(currentTime - fadeTimerLast) >= fadeTimerFreq) {
fadeTimerLast = currentTime;
buttonValue = digitalRead(incrementaVentola);
if(buttonValue == 1){
fadeValue = fadeValue + fadeStep;
}
buttonValue = digitalRead(decrementaVentola);
if(buttonValue == 1){
fadeValue = fadeValue - fadeStep;
}
fadeValue = constrain(fadeValue, 0, fadeRange);
fadeValueTweened = Quad_easeInOut(fadeValue, 0, fadeRange);
analogWrite(ventola, fadeValueTweened);
}
break;
}

readingLed = digitalRead(pulsanteLed); //pulsante led quando premuto cambia in on e off
if (readingLed == HIGH && previousLed == LOW && millis() - timeLed > debounceLed) {
if (statoLed ==1)
statoLed = 2;
else
statoLed = 1;
timeLed = millis();
}
previousLed = readingLed;

switch (statoLed){
case 1: //on led
sensore = analogRead (0);

if (sensore>0 && sensore<=113) { //led in automatico con valore sensore
analogWrite (rosso, 0);
analogWrite (verde, 0);
analogWrite (blu, 255);
}

if (sensore>113 && sensore<=226) {
analogWrite (rosso, 0);
analogWrite (verde, 127);
analogWrite (blu, 255);
}

if (sensore>226 && sensore<=339) {
analogWrite (rosso, 0);
analogWrite (verde, 255);
analogWrite (blu, 255);
}

if (sensore>339 && sensore<=452) {
analogWrite (rosso, 34);
analogWrite (verde, 139);
analogWrite (blu, 34);
}

if (sensore>452 && sensore<=565) {
analogWrite (rosso, 102);
analogWrite (verde, 255);
analogWrite (blu, 0);
}

if (sensore>565 && sensore<=678) {
analogWrite (rosso, 173);
analogWrite (verde, 255);
analogWrite (blu, 47);
}

if (sensore>678 && sensore<=791) {
analogWrite (rosso, 253);
analogWrite (verde, 233);
analogWrite (blu, 16);
}

if (sensore>791 && sensore<=904) {
analogWrite (rosso, 255);
analogWrite (verde, 153);
analogWrite (blu, 0);
}

if (sensore>904 && sensore<=1023) {
analogWrite (rosso, 255);
analogWrite (verde, 0);
analogWrite (blu, 0);
}
delay(1000);
break;

case 2: // off led
analogWrite (rosso, 0);
analogWrite (verde, 0);
analogWrite (blu, 0);
break;
}
Serial.println(sensore);
}
float Quad_easeInOut(float t, float fixedScaleStart, float fixedScaleEnd){
float b = fixedScaleStart;
float c = fixedScaleEnd - fixedScaleStart;
float d = fixedScaleEnd;
if ((t/=d/2) < 1) return c/2tt + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}

metti il +12V della barra led direttamente al Vin di arduino e G (led verdi) a GND di arduino.
deve accendersi fisso tutta la striscia verde, fai poi la stessa cosa con gli altri colori

ATTENZIONE: lo shield che hai postato ha i pin connessi diversamente sui mosfet, forse sono di altro modello o e' un errore.
confrontali tu stesso con lo schema che hai messo all'inizio e vedi

Ma parli dei pin connessi su arduino ( cioè n. 9, 10 e 11)? o ho collegato male proprio i transistor? ma i transistor hanno un verso? io praticamente ho attaccato il pin centrale del transistor alla striscia led, quello di destra al gnd e quello di sinistra al pin di arduino...forse ho sbagliato questo?

Cmq ho provato la stricia come mi hai detto +12 al vin e G al gnd e funziona.
Grazie per la pazienza, roberto.

scusa ma alla domanda "I transistor hanno un verso", io mi fermo.
spero ci siano altri con piu' pazienza e voglia.
scusa
ciao

Ciao..si i transistor hanno un "verso"...ti consiglio di studiarti bene lo schema elettrico dei tuoi transistor prima di montarli per evitare di fare danni...esistono un'immensità di tipologie di transistor con "configurazione" dei pin differenti...

Forse hai solo montato il transistor al contrario...
o forse l'hai montato giusto.. ma ti va bene e basta ruotarlo di 180° rispetto a come lo avevi previsto per farlo andare..
forse non ho guardato con sufficiente attenzione gli schemi che hai postato....
ma forse vale la pena fare qualche prova in piu' se veramente hai speso 70 euro per il circuito (spero non uno e nemmeno 10...)
ciao
teo

alla fine ho collegato solo male i transistor (li ho saldati al contratio) scusate l'ignoranza non lo sapevo proprio...cmq ho fatto fare 3 basette con fritzing ed il costo compreso di spedizione è stato quello, le prossime proverò a farmele da solo...
ora ho qualche problema con lo sketch (quello che ho postato ieri) in pratica su arduino ci ho montato un sensore della qualità dell'aria, una ventola, una striscia led e 4 pulsanti.

  • un pulsante gestisce la ventola manuale o automatica: in automatico aumenta e decrementa la velocità a seconda del valore del sensore, in manuale 2 pulsanti incerementano e decrementano la velocità;
  • l'ultimo pulsante gestisce la striscia led off o automatico: off ai spegne la striscia, automatico la striscia varia di colore a seconda del sensore.

il problema che ho è che con questo sketch non riesco a far funzionare il pulsante della striscia led, forse sarà lo switch case del pulsante della ventola?

un'altra domanda: collegando il tutto ad un trasformatore 12v su arduino ho notato che arduino scalda parecchio è normale? può causare problemi? sarebbe meglio che alimentare la ventola e la striscia led separatamente?

grazie, roberto