Vai al contenuto

Articolo: Regolare l'intensità di un LED tramite un potenziometro

Inviato

Regolare l'intensità di un LED tramite un potenziometro

 

Abbiamo già visto in precedenza come gestire un segnale PWM per regolare l'intensità di un LED, ora vorrei introdurre i pin analogici per regolare manualmente questo segnale.

Costruendo il seguente circuito:

http://www.nonsologaming.com/vd/arduino_led_potv1.png

notiamo che ho collegato un potenziometro al pin A0, questo perchè arduino è in grado di misurare la differenza di potenziale tra 0V e 5V e restituisce come verdremo in seguito un valore compreso tra 0 e 1023.

Ora per comodità definiamo le variabili che tengono conto dei pin dove abbiamo collegato il LED ed il nostro potenziometro:

int pinpot = 0;
int pinled = 9;

Ora ci servono altre due variabili dove andremo a memorizzare lo stato del potenziometro ed il relativo valore del segnale PWM per regolare l'intensità del led:

int valpot = 0;
int valled = 0;

Come sempre dobbiamo inizializzare i pin tramite la funzione "void setup":

void setup() {
 pinMode(pinled, OUTPUT);
}

Il pin A0 non è necessario definire perchè è già un input analogico.

tramite a funzione "analogRead" possiamo leggere la differenza di potenziale presente tra il cursore e la massa.

simbolo_elettrico_trimmer-_potenziometro.jpg

Se guardiamo il simbolo elettrico del potenziometro è come se avessimo due resistenze che variano a seconda della posizione del cursore e quindi la differenza di potenziale di R2 cambia.

Dobbiamo tenere in considerazione una proporzione tra il valore del segnale PWM che è compreso tra 0 e 255 e il valore restituito dal pin analogico, compreso tra 0 e 1024, quest'ultimo è 4 volte superiore al primo e quindi possiamo scrivere il nostro loop:

void loop() {
 valpot = analogRead(pinpot);
 valled = valpot / 4;
 analogWrite(pinled, valled);
 delay(10);
}

Ora vorrei introdurre una nuova funzione: il rimappamento. Questa serve per scalare un valore tenendo conto di 2 margini differenti:

restituzione = map(valore, da minimo, da massimo, a minimo, a massimo);

ora applichiamolo al nostro programma:

int pinpot = 0;
int pinled = 9;
int valpot = 0;
int valled = 0;

void setup() {
 pinMode(pinled, OUTPUT);
}

void loop() {
 valpot = analogRead(pinpot);
 valled = map(valpot, 0, 1023, 0, 255);
 analogWrite(pinled, valled);
 delay(10);
}

Schema elettrico:

http://www.nonsologaming.com/vd/arduino_led_potv2.png

Modificato da RyujiAndy

Featured Replies

Inviato

Yes Grande Andy!

Ormai son costretto a prenderlo per poter provare tutti questi :D

Inviato

ryu potresti fare un articolo su come poter utilizzare per esempio un buzzer e lo schermo lcd ? fare tipo un timer che allo schadere del tempo suona il buzzer ed eventualmente un led?:D

Inviato
io ne so fare uno per una rele con keypad, cioè un relè che si eccita solo se è premuto un codice esatto ma non riesco a inserire un cicalino

Crea un account o accedi per lasciare un commento