ARDUINO UNO - WordPress.com · 2018-03-16 · bene anche gli altri pin PWM. Riportiamo quindi i...
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