Strumenti Utente

Strumenti Sito


lab2go_arduino:fisica:esperienze_con_arduino:controllo_di_led

LAB2GO Scienza

Controllo LED con Arduino

Descrizione

In questa sezione saranno riportati esempi di circuiti comandati da Arduino per l'accensione di LED

Accensione LED

Tramite Arduino si può controllare l'accensione dei LEDs utilizzando un circuito semplice e un opportuno codice di programmazione. Il circuito consiste nel collegare la scheda Arduino, tramite cavi Dupont, a un LED posto in serie a una resistenza (opportunamente dimensionata) che serve a proteggere il LED da una corrente eccessiva che brucerebbe il LED. Lo schema di collegamento è riportato nella figura successiva, nella quali si nota che un polo del LED è collegato al pin ground (GND) della scheda Arduino e l'altro polo a un pin digitale (in questo esempio il pin 7).

Figure 1: Schema di collegamento.

Per iniziare il lato software, si dichiara il monitor seriale per dichiarare ad Arduino la frequenza di bit al secondo con cui esso comunica. Ad esempio si imposta genericamente ai 9600 bit per secondo utilizzando la seguente formattazione:

Serial.begin(9600);

Per poter accendere il LED è necessario programmare il pin digitale a cui il LED è collegato (in questo esempio 7) in modalità output:

pinMode(7, OUTPUT);

Nel quale '7' è il pin digitale che Arduino utilizza per mandare l'input dell'accensione al LED e 'OUTPUT' è appunto il legame che c'è tra la scheda Arduino ed il circuito sulla Breadboard. Infine, nella funzione loop si imposta lo stato del pin a cui è collegato il LED (HIGH affinché circoli corrente e quindi il LED sia acceso), come di seguito:

digitalWrite(7,HIGH);

Sketch

LED a intermittenza

Con un circuito analogo a quello dell'accensione semplice del LED e con un codice di programmazione adeguato, si può controllare l'accensione di un LED affinché esso funzioni ad intermittenza. Il circuito utilizzato è rappresentato nella seguente figura:

Figure 2: Schema di collegamento. La resistenza, opportunamente dimensionata è posta in serie al LED a protezione dello stesso da correnti elevate.

Le differenze si riscontrano nella funzione loop: a differenza del precedente, questo codice contiene il comando “delay” (misurato in millisecondi) che dichiara un intervallo di tempo tra uno stato e un altro del LED:

digitalWrite(7,HIGH);
Serial.println(digitalRead(7));
delay(100);
digitalWrite(7,LOW);
Serial.println(digitalRead(7));
delay(100);

Nel codice qui riportato, si utilizza un intervallo di tempo tra le funzioni HIGH e LOW per dare al LED un effetto ad intermittenza.

Sketch

Giochi di luce con più LED

L'esempio mostrato nella sezione LED a intermittenza mostra l'accensione e lo spegnimento di un unico LED. E' ovviamente possibile costruire circuiti costituiti da più LED (nell'esempio qui riportato sono stati utilizzati 3 LED, di colore verde-bianco e rosso, come la bandiera italiana, collegati ai pin 8-9-10) e comandare l'accensione e lo spegnimento di ogni LED con un opportuno sketch.

Figure 3: Schema di collegamento.

Ad esempio, è possibile scrivere delle funzioni con le quali comandare l'accensione e lo spegnimento di ogni singolo LED, creando dei giochi di luce.

void stile1(void) 
{
  for (j = 8; j <= 10;j++) 
  {
    digitalWrite(j, HIGH); 
    delay(200); 
  }
  for (j = 8; j >= 10; j--) 
  {
    digitalWrite(j, LOW);
    delay(200); 
  }
}

La funzione, con dei cicli for, accende

for (j = 8; j <= 10;j++) 
  {
    digitalWrite(j, HIGH); 
    delay(200); 
  }

e spegne

  
 for (j = 8; j >= 10; j--) 
  {
    digitalWrite(j, LOW);
    delay(200); 
  }
  

i LED in sequenza. Ovviamente, affinchè le funzioni definite vengano eseguite da Arduino, è necessario richiamarle nel loop.

void loop() {
 stile1();
 lampo();
}

Sketch

LED a colori RGB

Con l'utilizzo di Arduino si può controllare un LED RGB ad intermittenza utilizzando un opportuno codice di programmazione. A differenza del classico LED, il LED RGB, presenta quattro poli: 1 anodo da collegare al pin ground (GND) e 3 catodi (uno per il rosso, uno per il verde e uno per il blu) da collegare ai pulse pin di Arduino. Analogamente ai normali LED, ognuno dei 3 catodi, deve essere posto in serie a un resistore, opportunamente dimensionato, per proteggerlo da correnti elevate. Lo schema di collegamento è riportato nella figura successiva, in cui, il LED è stato collegato ai pin 9-10-11.

Figure 4: Schema di collegamento.

Il programma inizia con la dichiarazione delle variabili.

int portarossa = 11; 
int portaverde = 10; 
int portablu = 9; 

Successivamente è stata definita una funzione che verrà richiamata nel loop per “miscelare” i colori:

void colore (unsigned char rosso, unsigned char verde, unsigned char blu)
{
 analogWrite(portarossa, rosso); 
 analogWrite(portablu, blu); 
 analogWrite(portaverde, verde); 
}

Si impostano i pin in OUTPUT:

pinMode(portarossa, OUTPUT); 
pinMode(portaverde, OUTPUT); 
pinMode(portablu, OUTPUT);

La funzione colore precedentemente definita permette, sfruttando il duty cycle dei pulse pin, di ottenere qualsiasi colore impostando un valore tra 0 e 255 per ognuno dei tre colori di base (rosso, verde, blu). Tramite la funzione delay, infine, si imposta il tempo tra l'esecuzione e l'altra di un comando da parte di Arduino e quindi, in questo caso, la durata di un determinato colore:

colore(255,0,0); 
delay(del); 
colore(0,255,0); 
delay(del); 
colore(0,0,255);
delay(del);
colore(237,109,0); 
delay(del);
colore(255,215,0);
delay(del);
colore(0,46,90);
delay(del);
colore(128,0,128); 
delay(del);
colore(0,0,0);

Sketch

LEDs a ritmo di musica

Un effetto molto bello che si può ottenere per l'accensione dei LED è quello di far sembrare che si accedano a ritmo di musica. In realtà l'accensione non segue il ritmo, bensì l'intensità del suono; ciò significa che se vogliamo utilizzare, un certo numero n di LEDs possiamo possiamo decidere far accendere $m\leq n$ LEDs in base all'intensità del suono. Per far ciò abbiamo bisogno di un sensore di suono KY-038 da collegare a un ingresso analogico di Arduino (nello scketch riportato è stato utilizzato il pin A0).

int analogico = analogRead(A0);

L'utilizzo di questo sensore, prevede una calibratura della soglia. Per effettuare tale calibrazione, dobbiamo ruotare la manopola di regolazione sensibilità finchè il LED posto sopra l'uscita analogica del sensore stia quasi per accendersi ma non si accende. Dopo fatta questa operazione, collegando il sensore ad Arduino, dobbiamo leggere sul serial plotter il valore di ingresso che rappresenterà il valore di soglia (nello sketch di seguito chiamato base).

int base = 540;

Si fa notare che questo valore non è fisso, ma dipende da vari fattori quali condizioni ambientali, per cui deve essere letto tramite il serial plotter. Per poter accendere utilizziamo degli if

if (analogico >= base + 12)  digitalWrite(bianco,HIGH);
if (analogico >= base + 14)  digitalWrite(blu,HIGH);  
if (analogico >= base + 18)  digitalWrite(verde1,HIGH);
etc.

con i quali impostiamo il livello di suono con il quale vogliamo accendere ogni singolo LED. Di seguito lo schema

Figure 5: Schema di collegamento.

Si riporta, inoltre, un video di esempio del circuito che si ottiene.

Sketch

Sitografia

La sitografia relativa all'esperimento

Link Descrizione
BlinkSito arduino dove trovare molti esperimenti con led
lab2go_arduino/fisica/esperienze_con_arduino/controllo_di_led.txt · Ultima modifica: 2024/11/15 10:18 da 127.0.0.1