Ben ritrovati su 9minuti.it, oggi vedremo la shield multifunzione per Arduino.
Si tratta di una shield, ovvero una scheda che ha la stessa forma di Arduino e che è fatta apposta per essere attaccata sopra i pin femmina.
Questa shield multifunzione per Arduino dispone di diversi sensori e ha un costo molto contenuto, il ché la rende sicuramente un buon investimento per chi è alle prime armi e vuole qualcosa di compatto da portare sempre dietro e con cui sperimentare.
L’ho presa per curiosità e perché mostrando spesso Arduino a persone completamente a digiuno dell’argomento pensavo che questa scheda multifunzione potesse essere la soluzione per non portarsi sempre dietro scatolette piene di cavi e sensori.
Indice
Pinout e sensori
La shield multifunzione per Arduino dispone dei seguenti sensori / moduli integrati.
- Quattro led integrati sui pin 13, 12, 11 e 10
- Un buzzer sul pin numero 3
- Tre pulsanti fisici sui pin analogici A1, A2 e A3
- Un potenziometro sul pin analogico A0
- Quattro display a otto segmenti gestiti da due chip 74HC595. Il pinout del display è LATCH 4, CLK 7, DATA 8
PS. Quando l’ho comprata credevo fosse presente anche il sensore di temperatura lm35 mentre invece è solo previsto l’alloggiamento per esso (sai che roba).
Per il display useremo la libreria della shield multifunzione per Arduino che potete scaricare QUI.
Se non sapete installare una libreria vi consiglio di dare un occhio a QUESTO tutorial.
Led e buzzer
La shield multifunzione per Arduino ci mette a disposizione quattro led, vediamo come usarli.
Useremo anche il buzzer che si attiva esattamente come se fosse un led.
Attenzione perché sia i led che i buzzer verranno accesi in maniera invertita, ovvero saranno spenti con HIGH e accesi con LOW.
//Sketch scritto da Alessandro Oppo per 9minuti.it void setup() { pinMode(13, OUTPUT); //led1 pinMode(12, OUTPUT); //led2 pinMode(11, OUTPUT); //led3 pinMode(10, OUTPUT); //led4 pinMode(3, OUTPUT); //buzzer } void loop() { for (int i = 10; i < 14 ; i++) { digitalWrite(i, LOW); delay(1000); } for (int i = 10; i < 14 ; i++) { digitalWrite(i, HIGH); delay(1000); } digitalWrite(3, LOW); delay(1000); digitalWrite(3, HIGH); }
2 , 7 – Dichiariamo i nostri pin digitali
12 – Ciclo for in cui cicleremo da 10 a 13
13 – Accendiamo di volta in volta il pin corrispondente al valore di i
14 – Delay di un secondo
17, 19 – Spegnamo il led con un ciclo for
22, 24 Accendiamo e spegnamo dopo un secondo il pin 3, su cui è collegato il buzzer.
Bottone
In questo sketch vedremo come accendere uno dei tre bottoni collegato alla entrata analogica A1.
Solitamente il bottone non viene utilizzato in questa maniera, ma qui è collegato così e non ci possiamo fare più di tanto.
//Sketch scritto da Alessandro Oppo per 9minuti.it #define button A1 #define led 13 void setup(){ pinMode(led, OUTPUT); } void loop() { int buttonState = analogRead(button); if (buttonState > 1){ digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); } }
2, 3 – Define del led e del bottone
6 – Dichiariamo che il pin del led verrà utilizzato in upload
11 – Dichiarazione della variabile buttonState in cui assegneremo il valore della analog read sul pin analogico A1 (che è quello corrispondente al bottone)
13 – Se il valore è superiore a 1 il nostro bottone è premuto, quindi accendiamo il led.
16 – Altrimenti lo spegnamo.
Display
In questo sketch scritto per la shield multifunzione per Arduino vedremo come stampare sul display a quattro cifre i secondi utilizzando la libreria MFShield e la funzione millis().
//Sketch scritto da Alessandro Oppo per 9minuti.it #include <MFShield.h> MFShield mfs; unsigned long t = 0; int i = 0; void setup(){ } void loop() { mfs.loop(); mfs.display(i, false); if (millis() - t >= 100){ t = millis(); i++; } }
2 – Includiamo la libreria MFShield.h
4 – Creiamo un oggetto di nome mfs e di tipo MFShield
5 – Creiamo una variabile chiamata t di tipo unsigned long in cui salveremo i millisecondi da quando Arduino è stato acceso.
6 – La viariabile intera i appena creata ci servira come contatore da stampare sul display.
14 – Chiamiamo il metodo loop() dell’oggetto mfs
15 – Il metodo display ha due parametri, il primo è il numero che vogliamo stampare sul display, il secondo indica se vogliamo tenere tutti e quattro i display accesi nel caso di numero più piccoli di quattro cifre.
Ad esempio, com’è adesso, se i valesse 45 si accenderebbero solamente i due display più a destra.
17 – Se i millisecondi attuali, meno i millisecondi salvati nella variabile t sono maggiori o uguali a 1000 (ovvero ad un secondo) allora entra nell’if
18 – Salviamo in t i millisecondi attuali
19 – Aggiorniamo il nostro contatore di una unità.
Potenziometro
In questo sketch vedremo come usare il potenziometro colllegato all’entrata A0.
Il potenziomentro non è altro che una resistenza variabile ed è il parallelepipedo blu con una vitina di ottone sopra.
Girando la vitina cambiamo anche il valore della resistenza.
Quando la resistenza sarà superiore a 500 il nostro led posto sul pin 13 si accenderà.
//Sketch scritto da Alessandro Oppo per 9minuti.it #define potentiometer A0 #define led1 13 void setup() { pinMode(led1, OUTPUT); Serial.begin(9600); } void loop() { int readValue = analogRead(potentiometer); Serial.println(readValue); if (readValue > 500) { digitalWrite(led1, LOW); } else { digitalWrite(led1, HIGH); } delay(1000); }
2, 3 – Define del potenziometro e del led1
7 – Dichiariamo di voler utilizzare il pin corrispondente al led1 in OUTPUT.
8 – Inizializziamo la porta seriale con baud rate di 9600.
13 – Salviamo all’interno della variabile readValue il valore letto sull’entrata analogica corrispondente al potenziometro
16 – Se il valore è maggiore di 500 allora accendiamo il led.
19 – Altrimenti lo spegnamo.
23 – Attendiamo un secondo
Display e potenziometro
In questo sketch uniamo quello che abbiamo imparato nei precedenti.
Ovvero leggeremo il valore del potenziometro ma lo stamperemo sul display a quattro cifre della nostra shield multifunzione per Arduino.
//Sketch scritto da Alessandro Oppo per 9minuti.it #include <MFShield.h> #define potentiometer A0 MFShield mfs; unsigned long t = 0; int readValue; void setup() { } void loop() { mfs.loop(); mfs.display(readValue, false); if (millis() - t >= 500) { t = millis(); readValue = analogRead(potentiometer); } }
Commenterò solamente le linee con delle modifiche rispetto ai due sketch precedenti.
16 – Anziché stampare il valore del contatore stampiamo la variabile che contienere il valore del nostro potenziometro.
20 – L’aggiornamento del display verrà effettuato ogni 500 millisecondi, ovvero ogni mezzo secondo.
Spegnere il display
Mi è capitato, passando da uno sketch all’altro, che il display rimanesse acceso seppur non vi fosse nulla che lo utilizzasse.
Per risolvere questo inconveniente è sufficiente caricare al volo questo sketch che contiene il comando per spegnerlo.
//Sketch scritto da Alessandro Oppo per 9minuti.it #include <MFShield.h> MFShield mfs; void setup() { mfs.showDisplay(false); } void loop() { }
Ce l’abbiamo fatta!
Eccoci giunti finalmente alla conclusione di questo tutorial che spero vi sia stato d’aiuto.
Se avete bisogno di aiuto rimango come sempre a disposizione.
Nel caso vogliate contribuire a supportare il blog vi invito come sempre a condividere l’articolo sui vostri social o a comprare attraverso i banner presenti sulla pagina.
Grazie di nuovo e al prossimo articolo!
Alessandro
Ciao Alessandro,
ho acquistato anch’io oggi lo Shield un po’ per curiosità e un po’ per far vedere agli amici le potenzialità di Arduino (le stesse tue motivazioni, anche se l’hobby è in realtà parecchio più avanti).
Secondo me il motivo per cui non ci sono i sensori di temperatura (li uso e costano pochi centesimi), non è il costo, ma è per non impegnare dei Pin che si vorrebbero usare per altri motivi.
Grazie per i piccoli “sketch” “già fatti” utili per far giocare gli amici.
Roberto
Graz – Austria
(Fuggito da Torino)
Ciao Roberto, mi fa piacere ti sia stato utile l’articolo!
Riguardo al sensore hai certamente ragione e non avendone in casa non ho potuto provarli. Ora che mi hai ricordato di averla magari ne compro un paio dato che, finito l’articolo, non ho più utilizzato la shield!
Alessandro
Ciao Alessandro, ho una scheda multifunzione shield, ma per quante prove io faccia, non funzionano i display. Puoi darmi un aiuto, grazie
Ciao Lucio, immagino la shield sia la stessa dell’articolo. Se così fosse, e con il codice che ho postato non dovesse andare, mi viene il dubbio che abbia il display rotto. :/
grazie per la risposta, ne ho due , etutte presentano lo stesso problema, non vorrei che quando le ho messe su arduino abbiano fatto contatto l led sulla presa usb. se cosi fosse, non c’e modo che funzionino.
grazie
Uhm strano! Ti consiglio di chiedere sul gruppo Telegram dedicato ad Arduino, magari qualcuno ha avuto il tuo stesso problema. :/