Vai al contenuto

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


RyujiAndy

Messaggi raccomandati

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
Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...