Lezione 2 – Corso di Elettronica Creativa con Arduino Sensor Kit

Come ormai tutti sappiamo un LED si presenta come un piccolo componente elettronico che emette luce quando attraversato da corrente elettrica. I LED sono molto usati nella vita di tutti i giorni in vari dispositivi come lampadine, schermi di telefoni e computer, telecomandi, e molto altro.

Immaginate il LED come una lampadina molto piccola, ma molto più efficiente ed ecologica. A differenza delle lampadine tradizionali, che producono luce riscaldando un filamento metallico, i LED producono luce attraverso un processo chiamato “elettroluminescenza”. Questo processo avviene quando la corrente elettrica passa attraverso un semiconduttore (il materiale di cui è costituito il LED) e lo stimola a emettere luce.

Un po’ di storia

Nel corso del primo Novecento, l’ingegnere inglese Henry Joseph Round fece una scoperta rivoluzionaria: l’elettroluminescenza, ovvero la proprietà di certi materiali di emettere luce quando attraversati da corrente elettrica. Da questa scoperta, nascono i LED acronimo di Light Emitting Diode (Diodo a Emissione di Luce), diodi specializzati nell’utilizzare tale fenomeno. Il primo LED, operante nell’infrarosso, venne introdotto nel 1961 e ancora oggi è ampiamente utilizzato in dispositivi come telecomandi e fotocellule.

L’anno successivo alla creazione del primo LED infrarosso, nel 1962, Nick Holonyak Jr. fece un ulteriore passo avanti sviluppando il primo LED rosso, capace di emettere luce visibile direttamente all’occhio umano. Gli studi su questi nuovi diodi proseguirono, focalizzandosi sulle varie applicazioni pratiche, come nell’ambito dei laser, e sull’esplorazione dei materiali necessari per produrre diverse tonalità di luce, combinando più fonti luminose per ottenere una vasta gamma di colori.

Durante gli anni cruciali della ricerca sui LED, un importante contributo venne dall’ingegnere americano M. George Craford, ex studente di Holonyak all’Università dell’Illinois. Nel 1972, Craford realizzò un significativo avanzamento creando i primi LED gialli che furono commercializzati dalla Monsanto, l’azienda per cui lavorava. Dedicate interamente al settore dei LED, le ricerche di Craford furono fondamentali per la loro prima larga diffusione, come dimostra il loro impiego in applicazioni quali semafori e segnalazioni luminose stradali.

Vantaggi nell’uso dei diodi LED

  • Consumano meno energia: sono molto più efficienti delle lampadine tradizionali, il che significa che usano meno elettricità per produrre la stessa quantità di luce.
  • Durano più a lungo: possono funzionare per migliaia di ore prima di dover essere sostituiti.
  • Sono robusti: non contengono filamenti o parti fragili che si possono rompere facilmente.
  • Offrono diverse colorazioni: i LED possono emettere luce di vari colori senza l’uso di filtri colorati.

Un esempio pratico molto semplice che potete realizzare a scuola è collegare un LED a una batteria con un piccolo resistore (di seguito sono fornite le indicazioni per il calcolo del valore del resistore) per limitare la corrente e proteggere il LED: noterete come si illumina, dimostrando in modo semplice ed efficace come funziona.

Struttura Fisica del LED

Un LED è composto principalmente da un chip di materiale semiconduttore in cui sono presenti impurità per creare una giunzione P-N. La giunzione è dove avviene l’elettroluminescenza (emissione di luce). Il chip è incapsulato in un guscio di plastica o vetro, che può essere modellato per focalizzare o diffondere la luce. I LED hanno due terminali: un anodo (+) e un catodo (-). La corrente elettrica fluisce dall’anodo al catodo, e questo flusso di corrente permette al LED di emettere luce.

Modalità di Polarizzazione

Per funzionare correttamente, un LED deve essere polarizzato in modo diretto, il che significa che l’anodo deve essere collegato al polo positivo della fonte di alimentazione e il catodo al polo negativo. Se il LED è collegato al contrario (polarizzazione inversa), non si accenderà perché la corrente non può fluire attraverso di esso nel modo giusto.

Calcolo della Resistenza Serie

Per proteggere il LED da correnti eccessive, si usa una resistore connesso in serie. Il calcolo di questa della resistenza (R) dipende dalla tensione di alimentazione (VS), dalla tensione del LED (VI​) e dalla corrente desiderata attraverso il LED (ILED​):

Dove:

  • VS​ è la tensione di alimentazione
  • VLED​ è la tensione di funzionamento del LED, tipicamente tra 1.8V e 3.3V a seconda del colore
  • ILED​ è la corrente di funzionamento desiderata per il LED, solitamente intorno a 20mA per la maggior parte dei LED, ma può variare.

Corrente di Funzionamento e Colore

La corrente di funzionamento del LED influisce sulla luminosità, ma anche il colore del LED ha un ruolo nella determinazione della tensione di funzionamento. Ecco alcune tensioni di funzionamento approssimative in base al colore:

  • Rosso: 1.8V – 2.2V
  • Verde: 2.0V – 3.0V
  • Blu, Bianco, UV: 3.0V – 3.5V

Questi valori possono variare a seconda del tipo specifico di LED. Per un funzionamento sicuro, è essenziale controllare le specifiche del produttore del LED che si sta utilizzando.

Ricordate, utilizzare un resistore di valore adeguato è cruciale per prevenire il danneggiamento del LED a causa di una corrente troppo elevata. Il calcolo della resistenza in serie aiuta a garantire che il LED riceva la corrente corretta per il suo ottimale funzionamento e durata.

Di seguito un esempio di collegamenti per controllare l’accensione di un diodo LED rosso:

Materiali Necessari

  • 1 LED rosso
  • 1 resistenza (calcoleremo il valore)
  • 1 batteria (per esempio, una batteria da 9V)
  •  Cavi di collegamento

Calcolo della Resistenza

Prima di collegare il circuito, dobbiamo calcolare il valore della resistenza necessaria per proteggere il LED. Supponendo che il LED rosso abbia una tensione di funzionamento di circa 2V e che la corrente ideale per il LED sia di 20mA (0,02A), usiamo una batteria da 9V come alimentazione. Il calcolo della resistenza (R) si basa sulla formula precedentemente indicata dove:

  • Vs, tensione di alimentazione vale 9V
  • VLED​, tensione di funzionamento del LED vale 2V per un LED rosso
  • ILED, corrente di funzionamento desiderata per il LED, vale 0,02A (2 mA)

Sostituendo i valori nella formula otteniamo:

Il valore 350 Ohm è quello calcolato, bisognerà quindi ora scegliere il valore commerciale prossimo al valore calcolato, si potrà scegliere quindi tra 330 Ohm o 360 Ohm.

Collegamento del Circuito

  1. Collega un’estremità della resistenza a uno dei terminali della batteria (il polo positivo, se state usando un portabatterie con i cavi già attaccati).
  2. Collega l’altra estremità della resistenza al terminale più lungo (anodo) del LED. L’anodo è il lato positivo del LED.
  3. Collega il terminale più corto (catodo) del LED al polo negativo della batteria. Puoi fare questo direttamente o usando un cavo.
  4. Una volta completato il collegamento, il LED dovrebbe accendersi. Se non si accende, verifica i collegamenti e assicurati che la batteria sia carica.

Ricordate come detto sopra, è importante non invertire la polarità del LED, perché non si illuminerà se collegato al contrario.

Nel modulo Grove LED incluso nell’Arduino Sensor Kit, la resistenza di limitazione della corrente è già integrata sul PCB (circuito stampato), quindi, non c’è bisogno di preoccuparsi di aggiungere manualmente una resistenza esterna quando lo usate; questa parte del lavoro è già stata fatta per voi. Questo tipo di collegamento verrà approfondito in un corso successivo.

Ricordate, state partecipando a un corso introduttivo il cui scopo è guidarvi, passo dopo passo, nel mondo della programmazione e nella realizzazione di sistemi elettronici. Questo approccio semplificato vi permette di concentrarvi sull’apprendimento delle basi, evitando inizialmente di soffermarvi troppo sui dettagli tecnici.

Utilizzare l’Arduino Sensor Kit

Le funzioni che verranno usate nei programmi che seguono saranno le seguenti:

pinMode()
La funzione pinMode() in Arduino è essenziale per impostare la modalità di funzionamento di uno specifico pin della scheda Arduino. Questa funzione permette di definire se un pin deve comportarsi come un ingresso (input) ovvero riceve un segnale in ingresso o come un’uscita (output) ovvero fornisce un segnale in uscita.

digitalWrite()
La funzione digitalWrite() in Arduino è utilizzata per scrivere un valore HIGH (1 logico corrispondente a 5V) o LOW (0 logico, corrispondente a 0V) su un pin configurato come OUTPUT. Questo permette di controllare dispositivi elettronici come LED, motori e altri componenti elettronici.

delay()
La funzione delay() in Arduino è utilizzata per introdurre un ritardo nel programma per un determinato numero di millisecondi. Durante questo ritardo, il programma si ferma e non esegue altre istruzioni. Questo può essere utile per controllare il timing di varie operazioni, come il lampeggio di un LED, il ritardo tra due azioni. Vedremo in lezioni successive come utilizzare un’altra tecnica per la gestione dei ritardi che permette di non bloccare l’intera esecuzione del programma.

Sketch 1

// Prof. Maffucci Michele
// Blink del LED connesso al pin digitale 6

// #define permette di assegnare un none ad un valore costante prima che
// il programma venga compilato.
// Le costanti così definite non occupano spazio nella memoria del mirocontrollore

#define LED 6

void setup() {
// inserire quì il codice che deve essere eseguito una sola volta
// dal momento che colleghi all'alimentazione Arduino
pinMode(LED, OUTPUT); // con pinMode indichiamo come verrà usato il pin, in questo caso come output
}

void loop() {
// Inseriamo nel loop il codice che vogliamo
// venga ripetuto continuamente

digitalWrite(LED, HIGH); // Imposta ad HIGH (5V) la tensione sull'anodo del LED
delay(1000); // Attesa di 1000 millisecondi
digitalWrite(LED, LOW); // Imposta ad LOW (0V) la tensione sull'anodo del LED
delay(1000); // Attesa di 1000 millisecondi
}

Sketch 2

Nello sketch che segue utilizzeremo al posto di #define il qualificatore const che sta per costante. Il qualificatore di tipo const è utilizzato per dichiarare un oggetto come immutabile, il che significa che una volta assegnato un valore, non potrà essere modificato rendendo la variabile di “sola lettura”. Questo significa che la variabile può essere utilizzata come qualsiasi altra variabile del suo tipo, ma il suo valore non può essere cambiato. Riceverete un errore dal compilatore se provate ad assegnare un valore a una variabile const. Nella programmazione è preferibile utilizzare const al posto di #define.

// Prof. Maffucci Michele
// Blink del LED connesso al pin digitale 6

// Inizializza il pin su cui è collegato il Led
const int pinLed = 6;

// Inizializza la variabile per il ritardo nel blink
int ritardo = 1000;

void setup() {
// dichiara il pinLed 12 come pin di output
pinMode(pinLed, OUTPUT);
}
void loop() {
// porta ad HIGH il pinLed (accensione)
digitalWrite(pinLed, HIGH);

// ferma esecuzione programma per un valore pari a ritardo
delay(ritardo);

// porta ad HIGH il pinLed (spegnimento)
digitalWrite(pinLed, LOW);

// ferma esecuzione programma per un valore pari a ritardo
delay(ritardo);
}

Provate a fare assumere alla variabile “ritardo” i seguenti valori: 500, 250, 100, noterete che la velocità del lampeggio aumenta in altro modo diciamo che aumenta la frequenza del lampeggio.

Sketch 3

Realizziamo ora uno sketch Arduino in cui i tempi di accensione e spegnimento hanno valori diversi. Definiamo due variabili: tempoAccensione e tempoSpegnimento che imposteranno il tempo in cui il LED rimarrà accesso ed il tempo in cui il LED rimarrà spento:

// Prof. Maffucci Michele
// Blink del LED connesso al pin digitale 6

// Inizializza il pin su cui è collegato il Led
const int pinLed = 6;

// Inizializza la variabile per il ritardo nel blink
int tempoAccensione = 1000;
int tempoSpegnimento = 250;

void setup() {
// dichiara il pinLed 12 come pin di output
pinMode(pinLed, OUTPUT);
}
void loop() {
// porta ad HIGH il pinLed (accensione)
digitalWrite(pinLed, HIGH);

// ferma esecuzione programma per un valore pari a tempoAccensione
delay(tempoAccensione);

// porta ad HIGH il pinLed (spegnimento)
digitalWrite(pinLed, LOW);

// ferma esecuzione programma per un valore pari a tempoSpegnimento
delay(tempoSpegnimento);
}

Sketch 4

Realizziamo ora un programma che esegue una sola volta un ciclo di 5 accensioni e spegnimenti del LED dopo di che il LED rimarrà spento fino a quando non si avvia nuovamente Arduino.

Per fare ciò sfrutteremo la proprietà della funzione setup() che esegue le istruzioni in essa contenute una sola volta dopo di che il controllo viene dato alla funzione loop().

All’interno del setup() utilizzeremo l’istruzione for.

L’istruzione “for” in Arduino, così come in molti altri linguaggi di programmazione come C/C++, è un tipo di ciclo di controllo che permette di ripetere delle istruzioni un numero specificato di volte. Questo rende “for” molto utile per eseguire ripetizioni controllate di codice, come eseguire un’azione un certo numero di volte.

Struttura dell’istruzione for

La sintassi di base del ciclo for è:

for (inizializzazione; condizione; incremento) {
// Istruzioni da eseguire
}
  • inizializzazione: qui si stabilisce il punto di partenza del ciclo. Questa espressione viene eseguita una sola volta all’inizio del ciclo.
  • condizione: questa è una condizione booleana (che restituisce `true` o `false`) che viene valutata prima di ogni iterazione del ciclo. Se la condizione è `true`, il ciclo continua; se è `false`, il ciclo termina.
  • incremento: questa espressione viene eseguita alla fine di ogni iterazione del ciclo, prima della prossima valutazione della condizione. Di solito, è usata per incrementare o decrementare il contatore.

/*
Prof. Maffucci Michele
Oggetto: Realizzare una sequenza di 5 accensione e spegnimento
del LED sul pin 6 che dovrà essere eseguita una sola volta.
*/

// Inizializza il pin su cui è collegato il Led
const int pinLed = 6;

void setup()
{
// pin 6 dichiarato come output
pinMode(pinLed, OUTPUT);

//inizializza la variabile contatore e ripete l'azione 5 volte
for (int contatore = 0; contatore < 5; contatore = contatore + 1) {

digitalWrite(pinLed, HIGH); // pin 6 viene portato ad HIGH
delay(1000); // pausa del programma di 1 secondo
digitalWrite(pinLed, LOW); // pin 6 viene portato ad LOW
delay(1000); // pausa del programma di 1 secondo
}
}

void loop() {}

Come si nota l’incremento del contatore avviene sommando 1 al valore precedente: contatore = contatore + 1. Un modo diverso e più conciso di indicare l’incremento di una unità ad una variabile è quella che fa uso del ‘++’ pertanto l’incremento di una unità può essere indicato in questo modo ++contatore ed il programma si trasforma in:

/*
Prof. Maffucci Michele
Oggetto: Realizzare una sequenza di 5 accensione e spegnimento
del LED sul pin 6 che dovrà essere eseguita una sola volta.
*/

// Inizializza il pin su cui è collegato il Led
const int pinLed = 6;

void setup()
{
// pin 6 dichiarato come output
pinMode(pinLed, OUTPUT);

//inizializza la variabile contatore e ripete l'azione 5 volte
for (int contatore = 0; contatore < 5; ++contatore) {

digitalWrite(pinLed, HIGH); // pin 12 viene portato ad HIGH
delay(1000); // pausa del programma di 1 secondo
digitalWrite(pinLed, LOW); // pin 12 viene portato ad LOW
delay(1000); // pausa del programma di 1 secondo
}
}

void loop() {}

Il ‘++’ viene usato come prefisso in questo caso la variabile viene incrementata prima che il valore venga usato in un’espressione. E’ possibile usare il ‘++’ come suffisso pertanto l’incremento può anche essere indicato come contatore++ in questo caso la variabile viene incrementata dopo che il suo valore attuale è stato utilizzato nell’espressione.

Vedremo in una successiva lezione la differenza nell’utilizzo come prefisso o suffisso, per ora preoccupiamoci di comprendere il funzionamento dell’istruzione for.

Buon Coding a tutti 🙂

Un pensiero su “Lezione 2 – Corso di Elettronica Creativa con Arduino Sensor Kit

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.