ARDUINO UNO - WordPress.com · 2018-03-16 · bene anche gli altri pin PWM. Riportiamo quindi i...

12
IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 1 Materiale didattico ARDUINO UNO Raccolta esercitazioni guidate 1 – Led & Pulsati

Transcript of ARDUINO UNO - WordPress.com · 2018-03-16 · bene anche gli altri pin PWM. Riportiamo quindi i...

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 1 Materiale didattico

ARDUINO UNO Raccolta esercitazioni guidate

1 – Led & Pulsati

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 2 Materiale didattico

PRESENTAZIONE DELLA SCHEDA DIDATTICA

SCOPO Gestione dell’accensione e spegnimento di un LED. Tale semplice operazione potrà avvenire in vari modi:

con un tempo prefissato

utilizzo di tempi modificabili

con l’utilizzo di un interruttore

pressione pulsante per cambiare stato di accensione del LED

accensione del LED a tempo (timer)

programmazione di un semaforo a LED per incrocio

dissolvenza luce del LED (fading)

MATERIALE OCCORRENTE

Scheda Arduino UNO r3 (o equivalente)

Breadboard e cavetti

2 Led rossi

2 LED gialli

2 LED verdi

6 resistenze da 220 Ohm

2 resistenze da 10K Ohm

2 interruttori

COMPETENZE PROGETTAZIONE

Circuito del circuito

Realizzazione pratica del progetto

Test e funzionamento del progetto

COMPETENZE HARDWARE

Configurazione e utilizzo delle porte digitali di Arduino

Individuazione e funzionamento delle porte PWM

COMPETENZE SOFTWARE

Compilazione sketch, upload su Arduino

Gestione dei parametri di uno sketch tramite direttive #define

Apertura e gestione delle porte digitali di Arduino

Porte digitali in modalità PWM output

COMPETENZE ELETTRONICA DI BASE

Calcolo delle correnti di lavoro sulle porte di Arduino

Dimensionamento delle resistenze di pull-up per il LED

Resistenza pull-down per lo switch

Duty-cycle

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 3 Materiale didattico

SCHEMA DI COLLEGAMENTO 1 Led accesso e spento dal programma secondo tempi prefissati.

Si può notare che il LED sarà pilotato dalla porta 9 di Arduino. E’ anche presente una resistenza. Per capire la sua presenza è necessario approfondire molto in breve il funzionamento fisico dei LED.

Il programma (o sketch) Dopo aver realizzato il circuito si passa a scrivere il programma. Per fare questo apriremo l’IDE (o ambiente integrato di sviluppo) Arduino. Ecco la prima proposta: // -------------------------------------------------------------------- // SKETCH: BLINK1 // accende il led per un secondo e poi lo spegne per lo stesso tempo // ----------------------------------------------------------------------- #define PIN_LED 9 // l’anodo del led è collegato al pin 9 #define TIME_ON 1000 #define TIME_OFF 1000 // ----------------------------------------------------------------------- void setup() { pinMode(PIN_LED, OUTPUT); } // ----------------------------------------------------------------------- void loop() { digitalWrite(PIN_LED, HIGH); // accende il LED delay(TIME_ON); // attende per TIME_ON millisecondi digitalWrite(PIN_LED, LOW); // spegne il LED delay(TIME_OFF); // attende per TIME_OFF millisecondi }

Modifiche e varianti al programma: Provare a modificare i valori delle define di TIME_ON e TIME_OFF. Compilare e caricare su Arduino.

Cosa succede?

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 4 Materiale didattico

L’angolo dell’elettronica: cosa è un LED

In elettronica il LED (sigla inglese di Light Emitting Diode) o diodo a emissione di luce è un dispositivo optoelettronico che sfrutta la capacità di alcuni materiali semiconduttori di produrre fotoni attraverso un fenomeno di emissione spontanea. Questa si origina dalla ricombinazione di coppie elettrone-lacuna secondo il principio del diodo a giunzione, caratterizzato dalla presenza nel dispositivo di due zone drogate differentemente in modo da avere portatori di carica diversi. Il primo LED fu sviluppato nel 1962 da Nick Holonyak Jr.

DIMENSIONAMENTO CIRCUITO Lavorando con le porte digitali di Arduino si devono ricordare sempre alcune informazioni importanti:

la tensione di lavoro è 5 Volt

ciascuna porta non può erogare correnti superiori ai 40 mA Queste sono caratteristiche relative ad Arduino, ora per calcolare il valore della resistenza R è necessario fare una breve considerazione sui LED. La tensione applicata alla giunzione dei LED dipende dalla banda proibita del materiale che a sua volta determina il colore della luce emessa, come riportato nella seguente tabella:

Tipologia LED tensione di giunzione Vf (volt)

Colore rosso 1,8

Colore giallo 1,9

Colore verde 2,0

Colore arancione 2,0

Colore Blu 3,5

Come interpretare la tabella? Essa ci indica la tensione che si ritrova in modo fisso ai capi del LED. Tale tensione dipende solo dal colore del LED. Quindi supponendo di utilizzare un LED rosso, se alimentato correttamente, si ritroverà una tensione di 1,8V. Da un punto di vista di calcolo si considera nulla la resistenza del diodo correttamente polarizzato.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 5 Materiale didattico

Con questi dati, e con gli altri dati tecnici delle porte di Arduino possiamo dire che ai capi della resitenza R si troverà una tensione data dalla formula:

𝑽𝒓 = 𝑽𝟎 − 𝟏, 𝟖 = 𝟓 − 𝟏, 𝟖 = 𝟑, 𝟐 𝐕 Dove Vr indica la tensione ai capi della resistenza R e V0 è la tensione di uscita della porta Arduino che abbiamo detto è pari a 5V. Ora si applica la legge di Ohm per determinare il valore della resistenza R che limita la corrente al massimo che intendiamo prefissare. Per evitare di sovraccaricare la porta di Arduino si decide di considerare una corrente massima di 15 mA, ben inferiore alla corrente massima che il costruttore indica in 40 mA.

R = V / I 3,2 / 0,015 = 213,3 Ohm Il valore di resistenza commerciale più vicino al valore calcolato è quello di 220 Ohm Se invece si avesse avuto a disposizione un LED Blu con tensione di giunzione pari a 3,5 V, per avere un passaggio di corrente equivalente al caso precedente di 15 mA, il calcolo sarebbe stato:

Vr = V0 – 3,5 = 5 – 3,5 = 1,5 V Quindi:

R = V / I 1,5 / 0,015 = 100 Ohm

Immagini per ricordare

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 6 Materiale didattico

SCHEMA DI COLLEGAMENTO 2 Led accesso e spento da un pulsante

Come si può vedere dallo schema circuitale il pulsante S1 se rimane in posizione di riposo (aperto) porta il PIN 2 a GND. Se invece viene premuto allora il PIN 2 viene portato a 5 Volt.

Resistenza 10K Ohm Switch a 2 vie

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 7 Materiale didattico

Il programma (o sketch) Dopo aver realizzato il circuito si passa a scrivere il programma. Per fare questo apriremo l’IDE (o ambiente integrato di sviluppo) Arduino. Ecco la prima proposta: // -------------------------------------------------------------------- // SKETCH: ACCENDI1 // accende il led con la pressione del pulsante // ----------------------------------------------------------------------- #define PIN_LED 13 // l’anodo del led è collegato al pin 13 #define PIN_SW1 2 // ----------------------------------------------------------------------- void setup() { pinMode (PIN_LED, OUTPUT); pinMode (PIN_SW1, INPUT); } // ----------------------------------------------------------------------- void loop() { if (digitalRead (PIN_SW1) == HIGH) // se il pulsante è’ premuto digitalWrite (PIN_LED,HIGH); // accende LED else digitalWrite (PIN_LED, LOW); // spegne il LED }

Modifiche e varianti al programma:

Modificare il comportamento del programma in modo che quando il pulsante viene premuto il LED

cambia stato. Ciò significa che se prima era spento allora si accende, se invece prima era acceso si

spegne.

Provare ora a fare in modo che il LED sia spento e quando si preme il pulsante allora il LED si

accende per 1 secondo e poi si rispegne fino alla prossima pressione del pulsante

Come gestire il caso particolare in cui il pulsante viene premuto prima che il LED sia tornato

spento?

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 8 Materiale didattico

SCHEMA DI COLLEGAMENTO 3 Semaforo con 6 LED

Lo schema per realizzare la simulazione di un semaforo richiede le conoscenze acquisite negli esercizi precedenti. Da un punto di vista del dimensionamento delle resistenze si può semplificare utilizzando le resistenze da 220 Ohm per tutti i tre tipi di LED (rosso, giallo, verde).

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 9 Materiale didattico

// -------------------------------------------------------------------- // SKETCH: SEMAFORO // gestione di un semaforo // -------------------------------------------------------------------- #define PIN_ROSSO1 2 #define PIN_GIALLO1 3 #define PIN_VERDE1 4 #define PIN_ROSSO2 5 #define PIN_GIALLO2 6 #define PIN_VERDE2 7 #define T_VIA1 3000 #define T_GIALLO 2000 #define T_VIA2 4000 // -------------------------------------------------------------------- void setup() { pinMode(PIN_ROSSO1, OUTPUT); pinMode(PIN_GIALLO1, OUTPUT); pinMode(PIN_VERDE1, OUTPUT); pinMode(PIN_ROSSO2, OUTPUT); pinMode(PIN_GIALLO2, OUTPUT); pinMode(PIN_VERDE2, OUTPUT); digitalWrite (PIN_ROSSO1, LOW); // tutti spenti digitalWrite (PIN_GIALLO1, LOW); digitalWrite (PIN_VERDE1, LOW); digitalWrite (PIN_ROSSO2, LOW); digitalWrite (PIN_GIALLO2, LOW); digitalWrite (PIN_VERDE2, LOW); } // -------------------------------------------------------------------- void loop() { digitalWrite (PIN_ROSSO1, LOW); // parte la strada 1 digitalWrite (PIN_VERDE1, HIGH); digitalWrite (PIN_ROSSO2, HIGH); digitalWrite (PIN_GIALLO2, LOW); digitalWrite (PIN_VERDE2, LOW); delay (T_VIA1); digitalWrite (PIN_GIALLO1, HIGH); delay (T_GIALLO); digitalWrite (PIN_ROSSO1, HIGH); // parte la strada 2 digitalWrite (PIN_GIALLO1, LOW); digitalWrite (PIN_VERDE1, LOW); digitalWrite (PIN_ROSSO2, LOW); digitalWrite (PIN_VERDE2, HIGH); delay (T_VIA2); digitalWrite (PIN_GIALLO2, HIGH); delay (T_GIALLO); }

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 10 Materiale didattico

SCHEMA DI COLLEGAMENTO 2 bis Gestione della dissolvenza o fading

Vogliamo realizzare il progetto di accensione LED a tempo precedentemente proposta inserendo una nuova funzionalità. Si desidera che il passaggio da spento/accesso e viceversa avvenga in modo graduale, in pratica si vuole creare una sorta di dissolvenza del LED stesso.

E’ necessario approfondire il concetto di PWM: Pulse Width Modulation. Di seguito è presente una scheda di approfondimento sul tema, specificatamente di elettronica di base, chiamato Duty Cycle.

Si può notare che alcune porte digitali di Arduino sono contrassegnate con il simbolo ‘~’ (tilde).

Per la scheda Arduino UNO, questa notazione ci ricorda che le porte 3, 5, 6, 9, 10, 11 permettono la gestione del PWM. Riprendiamo lo stesso circuito provato al punto 2, rimane tutto invariato , solo il LED lo spostiamo dal pin 13 che non ha la possibilità del PWM, lo portiamo sul pin 9. Ma è chiaro che andrebbero bene anche gli altri pin PWM. Riportiamo quindi i circuiti modificati.

CARATTERISTICHE TECNICHE DEL PROGETTO: Tempo di fade in / fade out : 500 ms Tempo di accensione regolare: 2 secondi

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 11 Materiale didattico

Il programma

Per maggiore chiarezza si sono create 2 funzioni per la dissolvenza per accendere (fade_in) e per spegnere (fade_out) // -------------------------------------------------------------------- // SKETCH: FADE1 // accende il led con fading per la pressione del pulsante // ----------------------------------------------------------------------- #define PIN_LED 9 // l’anodo del led è collegato al pin PWM 9 #define PIN_SW1 2 #define TIME_FADE 500 #define TIME_ON 2000 // ----------------------------------------------------------------------- void setup() { pinMode (PIN_LED, OUTPUT); pinMode (PIN_SW1, INPUT); digitalWrite (PIN_LED, LOW); // spegne il LED } // ----------------------------------------------------------------------- void loop() { if (digitalRead (PIN_SW1) == HIGH) // se il pulsante è’ premuto fade_in (TIME_FADE); digitalWrite (PIN_LED,HIGH); // accende LED delay (TIME_ON); fade_out (TIME_FADE); else digitalWrite (PIN_LED, LOW); // spegne il LED } // --------------------------------------------------------------- void fade_in (int tempo) { // dissolvenza verso la luce massima int i; int pausa = tempo/256; int luce = 0; // parte da LED spento for (i=0;i<255;i++) analogWrite (PIN_LED, luce); delay (pausa); luce++; } // --------------------------------------------------------------- void fade_out (int tempo) { // dissolvenza verso LED spento int i; int pausa = tempo/256; int luce = 255; // parte da LED spento for (i=0;i<255;i++) analogWrite (PIN_LED, luce); delay (pausa); luce--; }

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 1 # 12 Materiale didattico

L’angolo dell’elettronica: il Duty cycle

Il duty cycle di un onda quadra/rettangolare e il rapporto tra la durata (in secondi) del segnale quando è “alto” ed il periodo totale del segnale. In altre parole è un numero che esprime quant’è la parte di periodo in cui il segnale è alto.

Facendo riferimento al disegno la formula che esprime il duty cycle è:

dove è il periodo e la parte di periodo in cui il segnale è alto.

Dalla formula potete subito notare che può variare da un valore minimo di 0 a un valore massimo pari a T, ciò implica che il valore del duty cycle varia da 0 a 1:

Caso 1: per livello basso per tutto il periodo

Caso 2: per livello alto per tutto il periodo In entrambi i casi siamo in presenza di segnali continui. Dalla formula possiamo comprendere quindi che il duty cycle è sempre un valore che varia tra 0 e 1. Il duty cycle è spesso rappresentato in percentuale, D% e per ottenere la percentuale è sufficiente

moltiplicare per 100 il rapporto , dire quindi che il D%=30% vuol dire che per il 30% del periodo totale il segnale si trova a livello alto, come conseguenza possiamo subito dire che il segnale sarà a livello basso per il restante 70% del periodo.

Dire quindi che il duty cycle è del 50% vuol dire che nel periodo T il segnale si mantiene alto per e per il

restante a livello basso in questo caso siamo quindi in presenza di un’onda quadra