Crea sito

Semplice codice per ottenere tutte le tonalità di colore con LED RGB, un potenziometro e Arduino!

Ho da poco iniziato a fare qualche prova con Arduino e i led RGB, il primo test, ed unico per il momento, che ho approntato è stato quello di usare un solo potenziometro per ottenere tutte le tonalità di colori (con 3 potenziometri, uno per colore, non avrebbe neanche senso usare Arduino!!).

La soluzione, secondo me (in realtà è stato un suggerimento di mia sorella che ha fatto il liceo artistico) più semplice, ma che allo stesso tempo da dei risultati ottimi è quella di mescolare i colori solo due alla volta, da qui poi è seguita una breve ricera su internet per trovare qualche rappresentazione di questa soluzione da trasformare in codice: la ruota dei colori!

E questa è quella che mi ha aiutato di più:

Color Wheel

Consiglio di procurarsi un potenziometro multigiri, così si riuscirà a riprodurre tutte le tonalità ed in più si riuscirà ad impostarle con più facilità che con un potenziometro tradizionale.

Il codice:

#define LED_RED 9
#define LED_GREEN 10
#define LED_BLUE 11
#define POT 5
#define BTN 7

int ledPin[] = {9, 10, 11};

unsigned long printTime = 1000;
unsigned long previousPrintTime = 0;

void setup()
{

Serial.begin(9600);

}

void loop()

{

colorWeel();

}

void RGB_led(int red_led, int green_led, int blue_led)
{
analogWrite(LED_RED, red_led);
analogWrite(LED_GREEN, green_led);
analogWrite(LED_BLUE, blue_led);
}

void color_wheel()
{
int red_val = 255;
int green_val = 0;
int blue_val = 0;

int wheel = map(analogRead(POT), 0, 1023, 0, 1535);

if( wheel <= 255 )  //Rosso al max + Verde in crescita
green_val = wheel;  // ottengo al max il Giallo
else if( wheel <= 511 )  //Verde al max + Rosso in diminuzione
{
red_val = abs(wheel – 511);  //Rosso va da 255 a 0
green_val = 255;  //Verde lo tengo al max
}
else if( wheel <= 767 )  //Verde al max + Blu in crescita
{                        //(0, 255, 255) = Ciano
red_val = 0;
green_val = 255;  //Verde al max
blue_val = wheel – 511;  //Blu in crescita da 0 a 255
}
else if( wheel <= 1023 )  //Blu al max + Verde in diminuzione
{     //(0, 0, 255) = Blu
red_val = 0;
green_val =  abs(wheel – 1023); //Verde in diminuzione da 255 a 0
blue_val = 255;  //Blu fisso al max
}
else if( wheel <= 1279 )   //Blu al max + Rosso in crescita
{                          //(255, 0, 255) = Magenta
red_val = wheel – 1023;  //Rosso aumenta da 0 a 255
blue_val = 255;  //Blu fisso al max
}
else {       //Rosso al max + Blu in diminuzione
blue_val = abs(wheel – 1535);
}

if(millis() – previousPrintTime > printTime)
{
previousPrintTime = millis();

Serial.print(“pot: “);
Serial.print(wheel);
Serial.print(“, red: “);
Serial.print(red_val);
Serial.print(“, green: “);
Serial.print(green_val);
Serial.print(“, blue: “);
Serial.println(blue_val);

}

RGB_led(red_val, green_val, blue_val);

}

Convertitore DC/DC con LM317

Siccome non avevo ancora un alimentatore variabile ma solo alcuni di recupero a tensione fissa, ho deciso di costruirne uno, così che, quando mi servono tensioni “strane” non devo assemblare nessun circuito di alimentazione sulla breadboard ma ce l’ho già pronto.
Come ho già scritto nel titolo ho usato il diffusissimo LM317 nella configurazione mostrata nel datasheet, che per comodità riporto il particolare:

lm317

In pratica questo integrato può ricevere in ingresso, senza problemi, tensioni fino a 39 V e attraverso la regolazione fatta sul piedino Adjust generare una tensione in uscita da  un minimo di 1,25 V ad un massimo di 37V.
Nel circuito che ho realizzato ho predisposto anche un’aletta di raffreddamento perchè in alcune occasioni si mette a scaldare, ovvero non tanto quando sta erogando il massimo della corrente, ma scalda  proporzionalmente alla differenza di tensione tra ingresso e uscita, tant’è che raggiunti i 40 V di differenza tra ingresso e uscita si brucia!

Ma veniamo al circuito in questione:

- Il datasheet consiglia di scegliere R1 = 240 Ohm per garantire un’ottima funzionalità  e posizionarla il più vicino possibile ai pin dell’integrato a cui va collegata per ridurre al minimo le cadute di tensione. Il valore commerciale più vicino è 220 Ohm.

-  R2 è a scelta, tra poco vedremo come sceglierla, il datasheet fa un’altra raccomandazione cioè di posizionare il terminale collegato a massa il più vicino possibile alla massa del carico.

- D1 e D2 sono due diodi che servono per proteggere l’integrato quando  si toglie l’alimentazione, perchè i condensatori scaricandosi farebbero circolare correnti nel verso opposto, col rischio di rovinarlo. Io avevo solo gli 1N4007 ed ho usato quelli, cambia solo che sono ultra sovradimensionati.

- C1 in realtà si potrebbe anche omettere se la tensione d’ingresso è ben stabilizzata, ma comunque è utile per disaccoppiare l’ impedenza dell0ingresso dal circuito di alimentazione.

- C2 tra i tre condensatori è quello più necessario, messo tra il pin ADJ e il GND serve per evitare che il ripple (in 2 parole è il residuo della tensione alternata convertita) della tensione in ingresso venga amplificato su quella in uscita.  Ovviamente se come alimentazione si usano delle batterie non c’è il fenomeno del ripple.

- C3 in realtà non sarebbe necessaria perchè l’integrato al suo interno si basa su circuiti a retroazione, quindi è in grado da solo di provvedere a mantenere l’uscita stabile. Il datasheet dice solo che certi valori farebbero oscillare il circuito mentre consiglia 1uF per condensatori al tantalio, altrimenti 25 uF per condensatori elettrolitici. Io ne avevo uno da 50 uF e ho messo quello e funziona comunque bene.

In questa foto potete vedere la realizzazione su breadboard (sulla breadboard c’è un altro convertitore fatto con un L7805, ci interessa quello con LM317, nel rettangolo rosso):

lm317_breadboard

La formula per conoscere la tensione d’uscita è:

VO = VREF (1 + R2/R1) + IADJ*R2

dove VREF = 1.25 V è una tensione fissa che è possibile misurare tra il piedino ADJ e OUT.

Tenendo presente che la corrente IADJ è molto piccola e al massimo può valere 100 uA, se ne deduce che l’effetto sulla tensione d’uscita sarà molto piccolo e molto approssimativamente trascurabile.

Bene, resta solo da scegliere R2, è immediato capire che più sarà elevata e più il massimo guadagno sarà alto, tenete però presente che l’ uscita al massimo potrà erogare Vin- 2V, quindi se la tensione d’ingresso non è molto alta è controproducente avere valori di guadagno molto alti, si traduce nell’avere a disposizione poca corsa del trimmer per regolare l’uscita.
Faccio un esempio che chiarisce tutto:

R1 = 220 Ohm
R2 = 5 kOhm
e applicando: VO = VREF (1 + R2/R1)
si ottiene VO = VREF * 22,7 = 28,4 V ( massimi ottenibili)

per ottenere quindi 28 Vin uscita avrò bisogno di almeno 30V su Vin.

Se per esempio alimentassi lo stesso circuito con Vin = 12 V,  il circuito funzionerebbe lo stesso però potendo erogare come tensione d’uscita al massimo 10 V utilizzerei circa 1/3 della corsa del trimmer per fare la regolazione (analogo a prima) e per gli altri 2/3 della corsa invece erogherei in ogni caso 10 V. Dovrei quindi scegliere un trimmer più piccolo per riuscire a regolare con meno fatica.

Il primo passo della realizzazione del circuito “fisso” su millefori:

dscf1862

E finalmente il convertitore saldato e pronto a funzionare nelle future sperimentazioni:
lm317_convertitore dscf1865

Usare un LM35 per misurare temperature negative con Arduino

Questo è il primo tutorial che scrivo e ho deciso di partire da un argomento semplice ma che reputo possa essere utile a chi è alle prime armi.

Ho allegato un PDF dove cerco di spiegare in modo abbastanza dettagliato come usare l’integrato LM35 per misurare delle temperature estese su tutta la scala centigrada.

LM35

Ho usato questo circuito per creare la configurazione che permette al sensore di misurare anche temperature negative ed amplificare il segnale in modo che Arduino possa leggerlo senza difficoltà.

In allegato troverete anche il codice di Arduino che misura le due tensioni attraverso due pin analogici, calcola la temperatura e la scrive sulla seriale.

PDF Tutorial LM35

Codice Arduino

Visto che è il primo articolo ringrazio tutti coloro che vorranno lasciare un commento.

Clickate col destro -> visualizza immagine, per vedere un’immagine a dimensioni originali

dsc02896dsc02898dsc02899

Primo articolo

Ciao a tutti,

questo è il primo articolo che scrivo  su questo nuovo blog,  prossimamente cercherò di pubblicare articoli riguardanti le esperienze più interessati che faccio con Arduino e l’elettronica in generale, per dare anch’io un piccolo contributo alla diffusione della cultura dei “makers” in Italia, che ha già da tempo preso piede anche da noi ma che, all’estero è molto più diffusa.

Chi c'é online

4 visitatori online
4 ospiti, 0 membri

Fornito da Visitor Maps