Arduino Corso 2020
Arduino Corso 2020
[Link]
Surfa sulla onda di Arduino e impara le basi
dell'elettronica e della programmazione.
info@[Link]
Edizione febbraio 2020 – V6.2
Arduino a scuola
Questo corso è pubblicato per la comunità Arduino di [Link] tramite il suo sito [Link] Si tratta di
di una risorsa educativa libera1, open source, con licenza CC BY-NC-SA2L'utilizzo gratuito di questo corso
nell'ambito di una formazione a pagamento è tollerata. Un avviso all'autore è comunque gradito. Le scuole
pubblici, licei, palestre, università, le associazioni e i FabLab possono richiedere gratuitamente
una versione Word di questo documento, per adattarlo più facilmente alle loro esigenze o a quelle di studenti con disabilità.
Questo corso può anche servire da base per i genitori che desiderano scoprire il mondo di Arduino e
l'elettronica con i loro figli. Ma per pietà: non costringete i vostri figli a leggerlo! Quello è il vostro lavoro. Abbiate
un approccio ludico e per progetti.
Un ringraziamento particolare a Sophie Caré e Jean-Pierre Dulex per la revisione e i test effettuati con essi.
studenti così come al professor Jean-Daniel Nicoud.
Apprezzi questo corso e ti piacerebbe sostenere la sua creazione e i suoi aggiornamenti? Le tue donazioni sono benvenute.
Serviranno a finanziare l'hosting dei siti e all'acquisto di materiale Arduino. Infine, come questo corso
è una risorsa educativa libera, open source, contribuirai a mantenerne la gratuità.
Puoi fare una donazione tramite PayPal o con una carta di credito a questo indirizzo: [Link]
1[Link]
2 [Link]
3 [Link]
2
Arduino a scuola
Istruzioni di sicurezza
L'elettricità può essere mortale! Per evitare qualsiasi rischio, in particolare con gli studenti, è opportuno non lavorare
con bassa tensione molto bassa (TBT). La tensione di funzionamento dell'Arduino si aggira attorno a 5 Volt.
3
Arduino a scuola
CODICE15:APPRENDERE A CONTARE.............................................................................................................................79
PROJET 9: LES INPUTS ANALOGIQUES............................................................................................................................ 83
LA PHOTORESISTENZA
CIRCUIT11:DIVISORE DI TENSIONE..............................................................................................................................84
Elenco dei componenti............................................................................................................................................84
CODE16: VALORE DI SOGLIA.........................................................................................................................................85
CODE17:VARIAZIONE DELLA LUMINOSITÀ DI UN ELEMENTO IN FUNZIONE DELLA LUCE AMBIENTE.................................86
Analisi del codice.....................................................................................................................................................87
CODE18: MAPPAGE DE DONNÉES...............................................................................................................................87
PROGETTO 10: IL POTENZIOMETRO...................................................................................................................................... 89
CIRCUITO12: USARE IL POTENZIOMETRO PER VARIARE LA LUMINOSITÀ DI UN LED....................................90
Elenco dei componenti............................................................................................................................................91
CIRCUITO13: UTILIZZARE IL POTENTIOMETRO PER VARIARE LA LUMINOSITÀ DI UN LED....................................91
CODE19: VARIARE LA LUMINOSITÀ DEL LEDENPWMA CON L'AiUTO DI UN POTENZIOMETRO...........................................92
CIRCUIT14: ACCENDERE LE LED DI UN BARGRAPHE UTILIZZANDO UN POTENZIOMETRO................................................93
Elenco dei componenti............................................................................................................................................93
CODE20: VISUALIZZARE IL VALORE DI UN POTENZIOMETRO UTILIZZANDO UNISTOGRAMMA..................................................94
VARIANTE1:UTILIZZARE UN GRAFICO A BARRE 10 LEDS........................................................................................................96
VARIANTE2: UTILIZZARE UN AFFICHEUR LED 8 DIGIT...................................................................................................97
PROJET 11 : CONSTRUIRE UNE STATION MÉTÉO.......................................................................................................... 98
CODE21: ACQUISIRE I DATI DEL SENSORE E VISUALIZZARLI........................................................................100
Liste des composants :.......................................................................................................................................102
CODE22: VISUALIZZARE I DATI SULLO SCHERMO LCD............................................................................................103
PROGETTO 12 : UTILIZZARE UN SERVOMOTORE.....................................................................................................................105
CODICE23: FAR MUOVERE IL BRACCIO DI UN SERVOMOTORE IN ENTRAMBE LE DIREZIONI......................................................107
CODE24: SERVOMOTORE E GESTIONE DEI COMPITI................................................................................................108
CODE25:COMANDARE UN SERVOMOTORE CON UN POTENZIOMETRO...................................................................109
CODE26: COMANDARE DUE SERVOMOTORI CON UN JOYSTICK.................................................................110
CONCLUSIONE (PROVVISORIA)..............................................................................................................................................112
6
Arduino a scuola
Prefazione
Quando Massimo Banzi e i suoi colleghi dell'Interaction Design Institute di Ivrea, in Italia, hanno sviluppato
l'Arduino, l'obiettivo era quello di permettere agli studenti di avere a disposizione una piattaforma del valore di una
pizza per realizzare progetti interattivi4.
Così, l'Arduino è stato progettato fin dall'inizio con uno scopo educativo, per essere economico, dotato di una grande
quantità di ingressi e uscite, compatibile con Mac, Windows e Linux, programmabile con un linguaggio molto
semplice e open source. Ci sono solo vantaggi per il mondo scolastico, soprattutto perché l'Arduino
si situa all'incrocio tra informatica, elettronica e lavori manuali5.
La migliore prova che l'Arduino è perfettamente adatto agli studenti è che in poche lezioni, sono già
pronti a realizzare progetti concreti.
Questo corso è stato pensato per studenti (e insegnanti) che non hanno alcuna nozione di programmazione e in
elettronica. Rispetto al gigantesco potenziale dell'Arduino, è volutamente limitato, ma si sforza
essere progressivo e soprattutto incentrato sulla pratica. Questo corso non è fatto per essere seguito in modo lineare.
Serve infatti da quadro teorico. Dopo le basi acquisite, l'insegnante ha tutto l'interesse a lavorare in
progetto basato su questo corso.
Nota: fai attenzione alle copie cinesi di Arduino. Quelle più economiche possono presentare problemi.
d'utilizzo abbastanza importanti (driver necessari, cablature con contatti difettosi...).
Storia dell'Arduino:[Link]
4
5Riferimenti:[Link] e
[Link]
7
Arduino a scuola
Introduzione
Riferimenti
Questo documento è una compilation e un'adattamento di testi e esercizi, provenienti dalle seguenti fonti:
Fonti principali:
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Fonti annesse:
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Questo corso offre solo un'introduzione all'elettronica. Un corso molto più completo e ben fatto è
disponibile qui:
[Link]
Inoltre, è importante notare il seguente eccellente wiki, che propone un gran numero di esperimenti su Arduino.
Ideale per laboratori o per organizzare sfide agli studenti:
[Link]
8
Arduino a scuola
Bibliografia
Esistono molti libri su Arduino e sull'elettronica. Ecco una selezione di libri che abbiamo
valutati e selezionati.
Nota: vi incoraggiamo a ordinare questi libri presso il vostro libraio. Ma se desiderate farlo
ordinare su Amazon, vi saremmo grati di utilizzare i link sponsorizzati qui sotto. Essi
mi permettono di guadagnare abbastanza per ordinare uno o due libri Arduino all'anno.
Elettronica:
ISBN: 978-2212135077
ISBN:978-2212118629
9
Arduino a scuola
Arduino:
ISBN: 978-2212137019
Questo libro è senza dubbio uno dei migliori per iniziare con Arduino. Esso
offre una breve introduzione all'elettronica e soprattutto il codice è molto
ben spiegato, arricchito da schemi. Non si limita infine a
alcune nozioni di base, ma va abbastanza lontano.
Sfogliare su [Link]
Comandare su [Link]
ISBN: 978-2100701520
Massimo Banzi è uno dei principali creatori di Arduino. Tanto per dire
che conosce il suo argomento! L'accento di quest'opera è messo su un'iniziazione
alla programmazione dell'Arduino, più che sull'elettronica. A
consigliare a tutti i principianti.
ISBN: 978-2212143140
10
Arduino a scuola
ISBN: 978-2412023877
ISBN: 979-1027501441
11
Arduino a scuola
ISBN: 978-2412023891
ISBN: 978-2212675696
[Link]
[Link]
12
Arduino a scuola
Per realizzare gli schemi elettronici, utilizziamo i seguenti strumenti, disponibili gratuitamente su Mac
et PC:
Fritzing: [Link]
Risolvere Elec: [Link]
Fido Cadj: [Link]
QElectroTech[Link]
iCircuit[Link]
Esiste anche una soluzione molto elegante online6[Link] Questo sito consente di creare
schemi elettrici e realizzazione di circuiti elettronici.
6Sarà la soluzione utilizzata principalmente in questo corso. Per ulteriori informazioni: [Link]
13
Arduino a scuola
Materiale necessario
Ecco l'elenco minimo del materiale necessario per seguire questo corso:
(*opzionale)
14
Arduino a scuola
Arduino fa parte della famiglia delle schede di sviluppo. A differenza del Raspberry Pi7, non possiede
nessun OS basato su Linux. È quindi necessario un computer. Rimane però uno dei più accessibili e
dei più diffusi. Una scheda di sviluppo è in generale un circuito stampato dotato di un
microprocessore o di un microcontrollore. Poiché Arduino è open source, esiste un gran numero di
cloni e di schede compatibili, proprio come esistono molti modelli ufficiali di Arduino, con
funzioni particolari:
Per questo corso, ci baseremo sul più conosciuto: l'Arduino Uno. Ma un altro modello o un clone andrà bene.
anche l'affare.
7[Link]
15
Arduino a scuola
Il microcontrollore
È il cervello della nostra mappa. Contiene:
16
Arduino a scuola
Quando si osserva una scheda Arduino Uno ai raggi X, si nota che il grande chip contiene in realtà
una piccola scheda, come quella della versione SMD. Nota anche le piste che collegano i pin al
microcontrôleur:
Mathew Schwartz
17
Arduino a scuola
L'alimentazione
Per funzionare, una scheda Arduino ha bisogno di un'alimentazione. Il microcontrollore funziona a 5V, la
la scheda può essere alimentata direttamente a 5V tramite la porta USB o tramite un'alimentazione esterna che è
comprende tra 7V e 12V. Un regolatore si occupa poi di ridurre la tensione a 5V per il buon
funzionamento della carta.
Attenzione: le carte Arduino Due insieme ad altre schede recenti funzionano con un
tensione di 3.3V ai livelli delle uscite! La tensione di alimentazione è simile a quella dell'Arduino
Uno. In questo corso, partiamo dal presupposto che la tensione dei circuiti sia di 5 Volt.
La connettività
A parte una LED sul pin 13, la scheda Arduino non
non possiede alcun componente (resistenze, diodi,
motori...) che possono essere utilizzati per un programma. Esso
è necessario aggiungerli. Ma per questo, è necessario che li
collegare alla mappa. È qui che intervengono i
connettori, detti anche spine.
0 a 13 Entrées/sorties digitali
A0 a A5 Entrate/uscite analogiche
GND Terra o massa (0V)
5V Alimentazione +5V
3,3V Alimentazione +3,3V
Vino Alimentazione non stabilizzata (= lo stesso voltaggio di quello in ingresso alla scheda)
Le connessioni tra i componenti sono realizzate tramite dei jumper, una sorta di piccoli cavi.
18
Arduino a scuola
La breadboard
Una piastra di sperimentazione (chiamata breadboard) permette di realizzare prototipi di montaggi
elettronici senza saldatura e quindi poter riutilizzare i componenti.
Tutti i connettori in una fila di 5 sono collegati tra loro. Quindi se colleghiamo due elementi in un
gruppo di cinque connettori, saranno collegati tra loro. Lo stesso vale per gli allineamenti dei connettori
rossi (per l'alimentazione) e blu (per la terra). Così, i legami possono essere schematizzati così:
Le lunghe file sono utilizzate per connettere la massa (GND), in blu e il +5V, in rosso
Tutti i connettori di una linea esterna sono elettricamente collegati tra loro
Les composants doivent ainsi être placés à cheval sur des connecteurs qui n'ont pas de liens électriques entre
loro, come nello schema a fianco.
19
Arduino a scuola
20
Arduino a scuola
Le basi dell'elettronica
Piccolo promemoria sull'elettricità
Su una diga, più è grande la differenza tra l'altitudine del livello del serbatoio e quella della turbina,
più la pressione dell'acqua sarà importante. Per una diga si chiama questa differenza di altitudine altezza di
caduta. Ciò equivale, in un circuito elettrico, alla differenza di potenziale, che si misura in Volts (V) e si annota
U.
Il debito d'acqua (= la quantità d'acqua che scorre per unità di tempo) corrisponde all'intensità, chiamata anche
corrente, che è quindi il flusso di elettroni. Si misura in Ampère (A) e si nota I.
La potenza elettrica si nota Pet e si misura in Watt (W). Essa esprime la quantità di corrente (I),
trasformata in calore o in movimento. Su una diga, corrisponde all'energia prodotta dalla turbina.
!=#∙%
Affinché questi elettroni si muovano tutti nella stessa direzione, è necessario che ci sia una differenza nel numero.
di elettroni tra le due estremità del circuito elettrico.
Per mantenere questa differenza nel numero di elettroni, si utilizza un generatore (batteria, accumulatore,
alternatore...
La differenza di quantità di elettroni tra due parti di un circuito si chiama differenza di potenziale.
si misura in Volts (V).
Nota: il colore dei fili elettrici importa poco, così come la loro posizione sulla piastra di sperimentazione.
Circuito 1
1 LED
1 resistenza da 220 a 470Ω
2 cavi
Osservazioni
RESISTENZA
220 Quando si collega l'Arduino al computer tramite il cavo USB, esso
c'è il 50% di possibilità che il LED si accenda. Infatti, se non
non si accende, è necessario girare il LED nell'altro verso. Sua
la particolarità è che l'elettricità può attraversarla solo in
D1 un senso.
LED
22
Arduino a scuola
Il circuito elettrico
Per avere una corrente elettrica, abbiamo bisogno di una fonte, di un ricevitore e di un percorso.
La fonte fornisce la forza che muove gli elettroni: una batteria, un accumulatore, un generatore...
Il ricevitore utilizzerà la forza di spostamento degli elettroni: una lampadina, un motore…
Il conduttore permette agli elettroni di muoversi dalla sorgente al ricevitore: spesso si tratta di
fils de cuivre.
Insieme, formano un circuito elettrico. È quello che è stato realizzato durante l'esercizio: hai collegato una sorgente
di elettroni verso la terra. Questo ha creato una tensione e quindi una corrente elettrica: gli elettroni si sono mossi.
Il loro spostamento ha così permesso al LED di accendersi. L'Arduino serve solo per l'alimentazione elettrica, come
una pila.
Una batteria è costituita da un mezzo contenente numerosi elettroni in eccesso e da un secondo mezzo in deficit.
di elettroni. Quando si collegano i due poli della batteria (il + e il -) con un filo elettrico (il conduttore), i
gli elettroni si sposteranno quindi dal mezzo ricco di elettroni verso il mezzo povero. Se posizioniamo una lampada
elettrica tra i due, il passaggio degli elettroni genererà luce.
Circuito elettrico
Interruttore
S1
Ampolla L1 V1 Mazzo
5
Quando l'interruttore è attivato, si dice che il circuito è chiuso. Gli elettroni inizieranno quindi a muoversi e
l'énergie de ce déplacement pourra être exploitée pour allumer une lampe ou faire fonctionner un moteur, par
esempio.
Quando l'interruttore è attivato, si dice che il circuito è aperto. Il polo positivo non è più collegato al
polo negativo, gli elettroni non possono più muoversi.
23
Arduino a scuola
Les diodes
L'abbiamo visto: la corrente elettrica si muove in un senso; ha un senso di spostamento. È possibile di
sostituire la lampadina con un diodo a emissione luminosa, comunemente chiamato LED8Ha la particolarità di non
lascia passare la corrente elettrica solo in una direzione.
La corrente elettrica può attraversare il diodo solo nel senso dell'anodo verso il catodo.
Si riconosce l'anodo, poiché è il pin più lungo. Quando i due pin sono
di uguale lunghezza, si può distinguere l'anodo dal catodo, grazie a una superficie piana su un lato di
quest'ultima. Il simbolo del LED è il seguente:
Attenzione: la corrente prodotta dall'Arduino è troppo elevata per collegarvi direttamente un LED.
L'utilizzo di una resistenza è obbligatorio, per non bruciare il LED.
Utilizzando vari materiali semiconduttori, si fa variare il colore della luce emessa dal LED.
existe enfin une grande variété de formes de LEDs.
8[Link]
24
Arduino a scuola
Le resistenze
Si può allora confrontare, il flusso d'acqua con la corrente elettrica I (che è peraltro il flusso
d'elettroni), la differenza di pressione alla differenza di potenziale elettrico (che è la
tensione U) e, infine, il restringimento alla resistenza R.
Pertanto, per una tensione fissa, minore è la resistenza, maggiore è la corrente che la attraversa. Questa proporzione
è verificata dalla legge di Ohm:
& &
& = ' ∙ % )* +,-. ' = )* % =
% '
Una resistenza è un mezzo poco conduttore; gli elettroni faticano a muoversi in esso. La loro energia
si dissipa quindi generalmente sotto forma di calore. È questo il principio utilizzato per i bollitori
elettriche o le lampadine a filamento.
Il valore della resistenza si misura in Ohm (Ω). Il valore di una resistenza è determinato da
i suoi nastri colorati.
È anche possibile utilizzare una resistenza come riduttore di tensione. Infatti, basta recuperare una
fonte di corrente elettrica prima e dopo la resistenza.
25
Arduino a scuola
Oltre alla tabella qui sopra, possiamo aiutarci con il piccolo manuale che si trova qui:
[Link]
26
Arduino a scuola
Come primo programma, faremo lampeggiare un LED D1, connesso al pin 13. Ecco il
schema di cablaggio:
Circuito 2
U1
ARDUINO
AREF
GND
D13
D12
D11
RESET D10 R1 D1
3V D9 220 LED
5V D8
GND2
GND1 D7
VIN D6
D5
A0 D4
A1 D3
A2 D2
A3 D1
A4 D0
A5
1 Led
1 resistenza da 220 a 470Ω
2 cavi
27
Arduino a scuola
Menu
Finestra di programmazione
Finestra di controllo
Il menu
Pulsante 1: Questo pulsante consente di controllare il programma, attiva un modulo che cerca gli errori.
nel programma
Pulsante 2: Invio del programma su Arduino
Pulsante 3: Crea un nuovo file
Pulsante 4: Apri un file esistente
Pulsante 5: Salva un file
Una volta scritto (o incollato) il codice nella finestra di programmazione, è necessario inviarlo all'Arduino. Per fare ciò,
dopo aver collegato l'Arduino al computer, è necessario selezionare la porta (tty_usbmodemXXXXX) e il tipo di
carte (Arduino Uno, nel nostro caso). Queste due impostazioni si trovano nel menu Strumenti.
/*
Codice 1 - [Link], destinato all'Arduino
Obiettivo: far lampeggiare il LED montato sul pin 13
*/
{
pinMode(13, OUTPUT); // Inizializza il pin 13 come uscita
[Link](9600); // Apre la porta seriale a 9600 baud
} // fine della funzione setup()
{
digitalWrite(13, ALTO); // Imposta il pin 13 a livello alto = accende il LED
ritarda(500); // Pausa di 500 ms
digitalWrite(13, BASSO); // Imposta il pin 13 a livello basso = spegni il LED
ritarda(500); // Pausa 500ms
} // fin de la fonction loop()
Osservazioni
Questo codice consente di far lampeggiare il LED D1 situato sul pin 13. Un LED, saldato sull'Arduino e collegato
alla broche 13 lampeggia anche lei. La resistenza R1 di 220Ω serve ad abbassare la tensione e a evitare che il LED non
griglia.
Debuggare
[Link]
29
Arduino a scuola
Introduzione al codice
Vedremo passo dopo passo i vari elementi presenti nello schema. L'importante per il momento è di
sapere che un programma è suddiviso in tre parti: intestazione dichiarativa, funzione setup e funzione loop.
Il codice minimale
Con Arduino, dobbiamo utilizzare un codice minimale quando creiamo un programma. Questo codice permette di dividere
il programma in due parti.
void setup()
{
}
vuoto ciclo()
{
}
Abbiamo quindi davanti a noi il codice minimo che deve essere inserito nel nostro programma. Ma cosa può realmente
significare per qualcuno che non ha mai programmato?
30
Arduino a scuola
La fonction
Nel codice 1, si trovano due funzioni. Le funzioni sono in realtà porzioni di codice.
Prima funzione:
void setup()
{
}
Questa funzione setup() viene chiamata una sola volta quando inizia il programma. È per questo che si trova in
questa funzione che scriveremo il codice che deve essere eseguito solo una volta. La chiamiamo questa
fonction : "fonction d'initialisation". On y retrouvera la mise en place des différentes sorties et quelques autres
impostazioni.
Una volta che si è inizializzato il programma, è necessario poi creare il suo 'cuore', in altre parole il programma stesso.
stesso.
Seconda funzione:
void loop()
{
}
È quindi nella funzione loop() che scriveremo il contenuto del programma. È importante sapere che questa
la funzione viene chiamata continuamente, cioè viene eseguita una volta, poi quando la sua esecuzione è
terminata, la rieseguiamo, ancora e ancora. Parliamo di ciclo infinito.
Le istruzioni
Ora che abbiamo visto la struttura delle funzioni, diamo un'occhiata a ciò che possono contenere.
Le istruzioni sono delle righe di codice che dicono al programma: "fai questo, fai quello..." Quindi sono le
ordini che saranno eseguiti dall'Arduino. È molto importante rispettare esattamente la sintassi; in caso contrario
cosa, il codice non potrà essere eseguito.
I punti e virgola ;
I punti e virgola terminano le istruzioni. Se per esempio diciamo nel nostro programma: "chiama il
funzione mangiareIlGatto", dobbiamo mettere un punto e virgola dopo la chiamata a questa funzione.
Quando il codice non funziona, spesso è perché manca un punto e virgola. È quindi necessario essere molto
attento a non dimenticarli!
Le parentesi graffe { }
Le parentesi graffe sono i "contenitori" del codice del programma. Sono specifiche per le funzioni, le condizioni
e ai cicli. Le istruzioni del programma sono scritte all'interno di queste parentesi graffe.
Per aprire una graffa su Mac, premere alt-8 e alt-9 per chiuderla.
I commenti
I commenti sono righe di codice che verranno ignorate dal programma. Non servono a nulla.
Durante l'esecuzione del programma. Permettono di annotare e commentare il programma.
31
Arduino a scuola
Gli accenti
La ligne pinMode(13, OUTPUT); inizializza il pin 13 del microcontrollore come uscita, cioè che
Dati saranno inviati dal microcontrollore verso questo pin (invieremo elettricità).
La ligne [Link](9600); inizializza la porta seriale che consente all'Arduino di inviare e ricevere
informazioni al computer. È consigliato, ma funziona anche senza.
Con l'istruzione digitalWrite(13, HIGH);, il microcontrollore collega il pin D13 a +5V che ha come
effetto di accendere il LED (l'elettricità esce dal pin D13).
Con l'istruzione digitalWrite(13, LOW);, il microcontrollore collega il pin D13 alla massa (Gnd) questo
che ha l'effetto di spegnere il LED (si interrompe l'alimentazione elettrica).
L'istruzione delay(500); indica al microcontrollore di non fare nulla per 500 ms cioè ½
secondi.
Il risultato è quindi che il LED si accende per ½ secondo, poi si spegne per un secondo poi
si accende per mezzo secondo... quindi lampeggia.
32
Arduino a scuola
Approfittiamo ora per vedere cosa significa il termine Output. Si tratta di specificare se il pin è un ingresso
o un'uscita. Infatti, il microcontrollore ha la capacità di utilizzare alcune delle sue porte in ingresso (INPUT)
o in output. È sufficiente semplicemente scambiare una riga di codice per dire che è necessario utilizzare una
broche in ingresso (recupero dei dati) o in uscita (invio dei dati).
Questa riga di codice deve trovarsi nella funzione setup(). La funzione è pinMode(), come nell'esempio
qui sotto:
void setup()
{
pinMode(13, OUTPUT);
[Link](9600);
}
Modifichiamo il codice
Facciamo variare i valori dell'istruzione delay e modifichiamo il codice secondo gli esempi qui sotto.
Prova 1:
digitalWrite(13, ALTO);
ritardo(50);
digitalWrite(13, BASSO);
ritarda(50);
Essai 2:
digitalWrite(13, ALTO);
ritarda(500);
digitalWrite(13, BASSO);
ritardo(2000);
Essai 3:
digitalWrite(13, ALTO);
ritardo(50);
digitalWrite(13, BASSO);
ritardo(50);
digitalWrite(13, ALTO);
ritarda(1000);
digitalWrite(13, BASSO);
ritardo(1000);
33
Arduino a scuola
Suggerimento:
Poiché c'è già una resistenza e un LED saldati all'Arduino e collegati al pin 13, è
possibile installare direttamente un LED tra il pin e la terra (GND).
[Link]
34
Arduino a scuola
{
digitalWrite(13, ALTO); // Metti la broche 13 al livello alto = accendi il LED
ritardo(200); // Pausa di 200ms
digitalWrite(13, BASSO); // Imposta il pin 13 a livello basso = spegne il LED
ritardo(200); // Pausa 200ms
Circuito 3
U1
ARDUINO
D1
R1 LED
AREF 220
GND
D13
D12 D2
D11 R2 LED
RESET D10 220
3V D9
5V D8
GND2 D3
GND1 D7 R3 LED
VIN D6 220
D5
A0 D4
A1 D3 D4
A2 D2 R4 LED
A3 D1 220
A4 D0
A5
4 LED
4 resistenze da 220 a 470Ω
6 cavi
36
Arduino a scuola
/*
Codice 2 - [Link], destinato all'Arduino
Objectif: faire clignoter les 4 LEDs montées sur les broches 10 à 13
*/
37
Arduino a scuola
/*
Codice 3 - [Link], destinato ad Arduino
Obiettivo: fare un chenillard a 4 LED montati sui pin da 10 a 13
*/
{
pinMode(10, OUTPUT); // Inizializza il pin 10 come uscita
pinMode(11, USCITA); // Inizializza il pin 11 come uscita
pinMode(12, OUTPUT); // Inizializza il pin 12 come uscita
pinMode(13, OUTPUT); // Inizializza il pin 13 come uscita
{
digitalWrite(10, HIGH); // Imposta il pin 10 a livello alto = accende il LED
digitalWrite(11, BASSO); // Imposta il pin 11 a livello basso = spegne il LED
digitalWrite(12, BASSO); // Metti il pin 12 su livello basso = spegni il LED
digitalWrite(13, BASSO); // Imposta il pin 13 a livello basso = spegne il LED
38
Arduino a scuola
Il numero memorizzato ha la particolarità di cambiare valore. Infatti, la variabile non è che un contenitore. Sua
Il contenuto potrà quindi essere modificato. E questo contenitore verrà memorizzato in una posizione della memoria. Se noi
materializza questa spiegazione con uno schema, questo darebbe:
nombre➞variable➞mémoire
Immaginiamo di immagazzinare il numero in un contenitore (la variabile). Ogni contenitore è a sua volta depositato
in uno spazio ben preciso, per poterlo ritrovare. Ogni contenitore (variabile) è anche identificato da un nome
unico.
Il nome della variabile accetta solo l'alfabeto alfanumerico ([a-z], [A-Z], [0-9]) e _ (underscore). È unico;
Quindi non possono esserci due variabili con lo stesso nome.
Immaginiamo di voler memorizzare il numero 4 in una variabile. Entrerebbe in una piccola scatola. Ma noi
potrebbe essere conservato in un grande contenitore. Sì... ma no! Un microcontrollore non è un computer
Processore multicore da 3GHz, 8GB di RAM! Qui si tratta di un sistema che funziona con una CPU a 16MHz (cioè 0,016
GHz) e 2 Ko di SRAM per la memoria volatile. Ci sono quindi almeno due motivi per scegliere le sue variabili di
maniera giudiziosa
1. La RAM non è espandibile, quando non c'è più, non c'è più! In un certo volume, si possono memorizzare
Molto più piccoli cartoni che grandi container. Bisogna quindi ottimizzare lo spazio.
39
Arduino a scuola
2. Il processore è di tipo 8 bit (su un Arduino UNO), quindi è ottimizzato per effettuare elaborazioni su
Delle variabili di dimensione 8 bit, un trattamento su una variabile di 32 bit richiederà quindi (molto) più tempo.
Se le variabili della dimensione di un container sono su 32 bit, tanto vale prendere una scatola che occupa solo 8 bit.
quando la variabile ci sta dentro!
Tipo di Tipo di numero Valori massimi del numero memorizzato Numero su X bit Numero di byte
variabile immagazzinato
Prendiamo ora una variabile che chiameremo «x». Ad esempio, se la nostra variabile "x" non prende
per valori decimali, useremo i tipi int, long o char. Se ora la variabile "x" non supera
non il valore 64 o 87, quindi utilizzeremo il tipochar.
char x = 0;
Se invece x = 260, allora utilizzeremo il tipo superiore (che accetta una quantità maggiore di numeri)
a char, in altre parole intoulong.
int x = 0;
Si à présent notre variable "x" ne prend jamais une valeur négative (-20, -78, ...), alors on utilisera un type
non firmato. Vale a dire, nel nostro caso, unchar il cui valore non è più da -128 a +127, ma da 0 a 255.
Di seguito è riportata la tabella dei tipi non firmati, riconosciamo questi tipi dalla parola unsigned (dall'inglese: non firmato) che
le precede:
Tipo di variabile Tipo di numero Valori massimi del numero memorizzato Numero su X bit Numero di byte
immagazzinato
40
Arduino a scuola
Per prima cosa, definiamo il pin utilizzato del microcontrollore come variabile.
Il termine const significa che si definisce la variabile come costante. Di conseguenza, si cambia la natura
dalla variabile che diventa allora costante.
Il termine corrisponde a un tipo di variabile. In una variabile di questo tipo, è possibile memorizzare un numero che va
da -2147483648 a +2147483647, il che sarà sufficiente! Quindi, il pin 13 si chiamerà led1.
Siamo quindi di fronte a una variabile, chiamata led1, che è in realtà una costante, che può assumere
un valore compreso tra -2147483648 e +2147483647. Nel nostro caso, questa costante è assegnata al numero
13.
Concretamente, cosa significa questo? Osserviamo la differenza tra i due codici.
Si può pensare che definire le pin allunghi il codice. Ma quando avremo molte pin
in base a ciò, ci permetterà di identificarli più facilmente. Quindi, se abbiamo più LED, noi
Possiamo chiamarli Led1, Led2, Led3,... e se utilizziamo LED di vari colori, potremo
le chiamerò rosso, verde, blu,...
Infine (e soprattutto!), se vogliamo cambiare la piastra utilizzata, basta correggere la variabile all'inizio, senza dover
correggi tutto il codice.
Come per le variabili, possiamo dare qualsiasi nome ai pin.
41
Arduino a scuola
Progetto 5: I semafori
Per mettere in pratica l'uso delle variabili, ecco un piccolo esercizio. Possiamo basarci sul codice 3 per
iniziare.
L'obiettivo di questo esercizio è creare due semafori e farli funzionare in modo sincronizzato.
Fuoco 1
phases 1 2 3 4
Feu 2
6 sec 2 sec 6 sec 2 sec
Circuito 4
42
Arduino a scuola
UNO R3
U1
ARDUINOR3
ARDUINO
R1 R2 R3 R4 R5 R6
220 220 220 220 220 220
D1 D2 D3 D4 D5 D6
R1 J1 V1 R2 J2 V2
2 LED rossi
2 LED gialli o arancioni
2 LED verdi
6 résistances de 220 à 470Ω
Afin de faciliter l'identification de chaque LED, nous allons renommer les broches comme suit:
Fuoco 1:
Feu 2:
Infine, utilizzeremo due variabili timer1 e timer2 per definire i tempi di accensione. Prima di guardare
il codice alla pagina successiva, prova a fare l'esercizio da solo.
Codice 4: il semaforo
/*
Code 4 - [Link], destiné à l'Arduino
43
Arduino a scuola
void setup() {
//Inizializziamo le uscite
pinMode(R1, OUTPUT);
pinMode(J1, OUTPUT);
pinMode(V1, OUTPUT);
pinMode(R2, USCITA);
pinMode(J2, OUTPUT);
pinMode(V2, OUTPUT);
}
void loop() {
44
Arduino a scuola
Varianti
Variante 1
C'è spesso un ritardo tra il passaggio di un semaforo rosso e il passaggio al verde dell'altro semaforo. È in
particolare il caso per i cantieri. Ciò consente alle auto ancora impegnate nella zona di cantiere
di lasciarla, prima di dare spazio alle auto in arrivo.
Variante 2
Integrare un terzo semaforo, che passa dal rosso al verde in alternanza con gli altri due semafori.
Variante 3
45
Arduino a scuola
Progetto 6: L'incremento
È possibile applicare ai valori delle variabili diverse operazioni matematiche. Iniziamo tutto
di seguito un piccolo esempio: l’incremento. Si tratta semplicemente di sommare 1 alla variabile. Ogni volta
che ripetiamo il codice, prendiamo il valore della variabile e aggiungiamo 1.
Questo avviene grazie a questo codice (variando una variabile a scelta): var++;
Circuito 5
U1
ARDUINO
D1
R1 LED
AREF 220
GND
D13
D12 D2
D11 R2 LED
RESET D10 220
3V D9
5V D8
GND2 D3
GND1 D7 R3 LED
VIN D6 220
D5
A0 D4
A1 D3 D4
A2 D2 R4 LED
A3 D1 220
A4 D0
A5
46
Arduino a scuola
/*
Code 5 - [Link], destiné à l'Arduino
Obiettivo: far lampeggiare 10 volte il LED montato sulla porta 13
*/
void setup()
{
pinMode(led1, OUTPUT); // Inizializza il pin 13 come uscita
Esegui il programma tra le parentesi graffe partendo da zero e incrementando ogni volta.
//valore di +1: 0+1/2+1/3+1... fino a quando la variabile “contatore“ non è uguale a 9 (più //
// piccolo che 10).
vuoto ciclo() {
} // video, programma auto già eseguito in setup
La ligne byte compteur; permette di creare una variabile chiamata compteur. Byte indica il tipo della variabile,
cioè il tipo di dati che potremo memorizzare in questa variabile. Come abbiamo già visto, il
Il tipo byte permette di memorizzare valori compresi tra 0 e 255.
La riga const int led1 = 13; permette di creare una costante (una variabile) chiamata led1 nella quale si
memorizza il valore 13.
La riga for(compteur=0 ; compteur<10 ; compteur++) serve a far variare la variabile compteur da 0 a 9 (in
l'aumenta ogni volta di 1: è ciò che fa l'istruzione contatore++
9[Link]
47
Arduino a scuola
La suite, a sapere contatore=0; contatore<10; contatore++ deve essere compresa come segue: «il valore della
la variabile computazionale è compresa tra 0 e 9 (<10 significa "minore di 10") e aggiunge uno al valore di
contatore(c’è il contatore++).
«All'inizio, la variabile contatore è uguale a zero. Eseguiremo il codice in loop. Ogni volta,
si aggiunge +1 alla tua variabile contatore, finché non si arriva a 9. A quel punto, ci fermiamo.
Il codice che viene eseguito ogni volta è quello compreso fino a parentesi graffa } . Nel nostro caso, è e
codice seguente che viene eseguito 10 volte:
digitalWrite(Led1, ALTO);
ritarda(500);
digitalWrite(Led1, BASSO);
ritarda(500);
per(intcompteur=0;compteur<10;compteur++)
L'inizializzazione viene eseguita per prima e una sola volta. Ad ogni passaggio del ciclo, la condizione è
testata. Se è "vera", il contenuto del ciclo forestale verrà eseguito (ad esempio far lampeggiare un LED), e
l'incremento della variabile è eseguito. Poi, la condizione viene testata di nuovo. Non appena il risultato del test di
la condizione è "falsa", il ciclo si ferma
/*
Codice 6 - [Link], destinato all'Arduino
Obiettivo: fare un chenillard a 4 LED montati sui porti 10 a 13
*/
void setup() {
48
Arduino a scuola
vuoto ciclo() {
// ciclo da pin 10 a pin 13:
per (int questoPin = 10; questoPin < 14; questoPin++) { //Incremento che fa passare la variabile
questo Pin da 10 a 13
digitalWrite(thisPin, HIGH); Accendere il LED
ritarda(timer); //Durée
digitalWrite(thisPin, LOW); Spegnere il LED
}
Analyse du code
La sua prima particolarità è il modo di definire i pin. Invece di accumulare il pinMode (xxx,
OUTPUT);, si crea una variabile di tipo int che chiamiamo thisPin10e quindi il valore iniziale è di 10. Unfor
con un incremento (++) consente di incrementare il valore della variabile da 10 a 14. Basta quindi
sostituire nel pinModele numero della prossima con la variabile thisPin. Così, i pin 10, 11, 12, 13 e
14 sono definite in output. Naturalmente, ciò funziona solo se i pin utilizzati si susseguono (per
esempio: 10, 11, 12, 13. Non funzionerà per i pin 3, 5, 7, 8, 10).
Come per la definizione dei pin in OUTPUT, si usa la funzione for per incrementare la variabile
accende le LED collegate ai pin 10 a 13 una dopo l'altra.
Infine, nella terza parte del codice, accenderemo i LED dal pin 13 al pin 10 con una
fonctionforet una decremento. Per fare ciò, si sostituisce il++con un--.
In altre parole, significa che faremo lampeggiare molto velocemente i LED; così velocemente che l'occhio non percepirà.
quella luce continua. Ma più aumenterà la durata dei periodi in cui il LED è spento, meno ci sarà
di luce emessa; e quindi meno la LED sembrerà brillante.
Le pin capaci di supportare il PWM sono identificate da un "~". Si tratta dei pin 3, 5, 6, 9, 10, 11.
Per distinzione, invece di utilizzare l'instructionDigitalWrite, per utilizzare il PWM, si utilizza AnalogWrite.
Il valore del PWM si estende su 256 livelli, da 0 (=0%) a 255 (=100%). Si può così definire il valore PWM
desiderata con la seguente formula:
#/0)12 !34 =56789:;<=> : ?67@=A<é∙ 255 #/0)12 )-% = H=I:78 5JK∙ 100
CDD LMM
50
Arduino a scuola
vuota setup() {
pinMode(ledPin, OUTPUT);
vuoto ciclo() {
// LED al 0%.
analogWrite(ledPin, 0);
ritardo(timer);
// LED à 19.6%.
analogWrite(ledPin, 50);
delay(timer);
// LED al 39,2%.
analogWrite(ledPin, 100);
ritarda(timer);
// LED al 58.8%.
analogWrite(ledPin, 150);
ritarda(timer);
// LED al 78.4%.
analogWrite(ledPin, 200);
ritardo(timer);
// LED al 100%.
analogWrite(ledPin, 255);
ritarda(timer);
}
Nessuna sorpresa per questo codice, se non per l'uso di analogWrite al posto di digitalWrite. La luminosità
la LED progresse per scaglioni di 50. Se si vuole livellare la progressione della luminosità, è necessario aumentare il
numero di livelli, il che appesantirà notevolmente il codice. È per questo motivo che è preferibile
di utilizzare una funzione for, come vedremo nel codice seguente.
51
Arduino a scuola
void setup() {
void loop() {
Si crea quindi una variabile fadeValue di tipo int, che memorizza il numero 0. Il test della condizione più piccolo o
uguale a 255(fadeValue <= 255) consente un'uscita dalla funzione non appena raggiungiamo il numero 256. Infine; e questo è
La novità è che non facciamo un'incremento (++), ma sommiamo 5 a fadeValue con la formula +=5.
Il comando analogWrite(ledPin, fadeValue); consente quindi di inviare il valore di fadeValue al LED ledPin.
CommefadeValue aumenta ogni volta di +5, la luminosità del LED aumenta poco a poco. Infine, il
delay consente di configurare la velocità di aumento della luminosità. Ogni livello di 5 richiede 30
millisecondes. Il faut 51 paliers de 5 pour passer de 0 à 255. Ainsi, il faudra 51∙ 30= 1530millisecondi per
passare dal LED spento al LED alla sua massima luminosità, ovvero circa un secondo e mezzo.
Ensuite, une fois la LED à sa luminosité maximum, il s'agit de baisser sa luminosité jusqu'à l'éteindre, grace
au code for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5). Le+=5 è sostituito da un-=5, affinché
sottrarre 5 alla variabile fadeValue ogni volta.
52
Arduino à l'école
/*
Codice 9 - [Link], destinato ad Arduino
Obiettivo: variare la luminosità di un LED sul pin 10
*/
void setup()
{
}
vuoto ciclo()
{
53
Arduino a scuola
Proteggere l'Arduino
Fino ad ora, ci siamo sempre accontentati di far circolare corrente dal microcontrollore a
la massa.
Invece di utilizzare i pin del microcontrollore solo come uscita (OUTPUT), utilizzeremo anche
utilizzarli sotto forma di input; vale a dire che invece di essere collegato a terra, il pin lo sarà.
au +5V. Tutto andrà bene, se a livello di programma, il pin è configurato come input. Ma se essa
doveva essere configurato in output per errore, è quasi certo che il microcontrollore finirà immediatamente
nel paradiso dei chip elettronici bruciati.
Così, per evitare di condannare il nostro microcontrollore alla sedia elettrica, dovremo proteggerlo.
Questo può essere fatto collegando una resistenza di 100 sulla pin del microcontrollore utilizzato come input.
a 200Ω.
R1
100
D4
ATTENZIONE!
Quando colleghi l'Arduino al computer, l'ultimo programma ricevuto viene eseguito. Prima di cominciare
un nuovo montaggio, è più che consigliato inviare un programma di inizializzazione, simile a questo:
void setup() {
}
vuota ciclo() {
}
Ora che questo punto è risolto, vediamo come utilizzare il pulsante con il microcontrollore.
54
Arduino a scuola
Questo montaggio contiene una resistenza di 10 kΩ (ossia 10'000Ω), chiamata pull-down (letteralmente tirare-giù)
bas). Questa resistenza permette di tirare il potenziale verso il basso (pull-down). In francese, si chiama anche questo
un richiamo almeno.
In effetti, a differenza del caso teorico, chiudere o aprire un circuito (tramite un interruttore o un pulsante)
non genera necessariamente un segnale chiaro:
Il circuito non connesso alla sorgente può agire come un'antenna in un ambiente inquinato da onde.
elettromagnetici (vicini a un telefono cellulare, ad esempio). Questo genererà nel circuito un
corrente che può essere interpretata come un segnale. Si chiama questo fenomeno induzione. È così, per
ad esempio, che alcuni smartphone possono essere ricaricati senza fili.
•Dal punto di vista meccanico, quando si preme un pulsante, il contatto non è mai istantaneo
è perfetto. Ci sono rimbalzi. Lo stesso vale quando viene rilasciato. Questi fenomeni sono parassiti
qui possono indurre in errore l'Arduino.
Il scopo di una resistenza di pull-down è quindi quello di eliminare le correnti vagabonde e di fornire un
segnale chiaro.
Se si preme il pulsante, una corrente elettrica chiara viene quindi applicata all'ingresso. La corrente prenderà il
il percorso più semplice, sia attraverso la resistenza di 220Ω e finisce per arrivare su D4, che è connesso a terra. Se si
rilascia il pulsante, la resistenza pull-down riporta l'ingresso a terra. Poiché D4 è anche collegato allo stesso
terra, c'è quindi una differenza di potenziale (una tensione) di 0 Volt, e quindi nessun segnale indesiderato all'ingresso
di D4.
A nostro livello, l'unica cosa che cambierà tra una resistenza pull-down e una resistenza pull-up è la
lettura dell'informazione:
Con una resistenza pull-up, per impostazione predefinita, l'ingresso sul pin è uguale a 1.
55
Arduino a scuola
Circuito 6
U1
ARDUINOR3
SW1
A5SCL
D0 A4SDA
D1 A3
R2 R3 D2 A2
10k 220 D3 A1
D4 A0
D5
D6 VIN
D7 GND1
GND2
D8 5V
D9 3V
D1 R1 D10 RESET
LED 220 D11 IOREF
D12 RISERVATO
D13
GND
AREF
SDA
SCL
56
Arduino a scuola
Quando si preme il pulsante, il LED deve accendersi. E naturalmente, quando si rilascia il pulsante
premere, il LED si spegne. Questa azione non è meccanica, ma logica. Non è la chiusura di un circuito
elettrico che accende il LED, ma l'informazione trasmessa all'Arduino, tramite un INPUT che gli ordina
d'allumer la LED.
/*
Codice 10 - [Link], destinato all'Arduino
Accensione LED in base allo stato del pulsante
*/
// Dichiariamo le variabili
void setup()
{
pinMode(bouton, INPUT); // Inizializza il pin 4 come ingresso
pinMode(led, OUTPUT); // Inizializza il pin 12 come uscita
[Link](9600); // Apre la porta seriale a 9600 baud
}
void loop()
// Pulsante premuto...
//...accendiamo il LED
{
digitalWrite(led, ALTO); accendi il LED
}
// Altrimenti...
altro
//verifica se il pulsante ha un valore di 0
//...si spegne il LED
{
digitalWrite(led, BASSO); // spegne il LED
}
}
57
Arduino a scuola
Analizziamo il codice:
Utilizziamo una nuova istruzione: se ... altrimenti (se ... sinon). Quindi è una condizione.
L'istruzione verifica se due espressioni sono uguali. Se lo sono, allora il risultato sarà vero (true), altrimenti
il risultato sarà falso.
Così:
Si rinominano i pin 4 e 12 rispettivamente button e led. Questo faciliterà la lettura del codice.
void setup() {
// Inizializza il pin 4 come ingresso
pinMode(bouton, INPUT);
Ecco, ora il nostro microcontrollore sa che c'è qualcosa di connesso al suo pin 4 e che è
configurata in ingresso (INPUT). Allo stesso modo, il pin 12 è configurato in uscita (OUTPUT).
Ora che il pulsante è impostato, cercheremo di capire qual è il suo stato (premuto o rilasciato).
Se il microcontrollore rileva una corrente elettrica al suo pin 4, allora memorizzerà un valore di 1.
In caso contrario (differenza di potenziale di 0V), memorizzerà un valore di 0.
se (digitalRead(bouton) == 1 )
digitalWrite(led, ALTO); accendi il LED
e le linee:
altrimenti {
58
Arduino a scuola
Il codice precedente è semplice, ma manca un po' di finezza; un po' come un barbaro con un'ascia.
a due mani in una ricezione di Monsieur l'Ambasciatore. Ecco quindi un'altra soluzione, vestita in
smoking:
/*
Codice 11 - [Link], destinato all'Arduino
Accensione LED in base allo stato del pulsante
*/
void setup()
{
pinMode(bouton, INPUT); // Inizializza il pulsante come input
pinMode(led, OUTPUT); // Inizializza il led come uscita
etatbouton = LOW; // Inizializza lo stato del pulsante come rilasciato
[Link](9600); // Apre la porta seriale a 9600 baud
}
vuoto ciclo()
{
etatbouton = digitalRead(bouton); //On mémorise l’état du bouton
Per cominciare, creeremo una variabile che sceglieremo di chiamare etatbouton. Essa servirà a
memorizzare lo stato del pulsante (logico, no?):
int etatbouton;
Si iscrive lo stato del pulsante nella variabile in questo modo, con la funzione digitalRead:
etatbouton = digitalRead(bouton);
Non ci resta che chiamare lo stato del pulsante, memorizzato nella variabile stato pulsante, e fargli passare un
piccolo test con if... else (se... altrimenti):
Se lo stato del pulsante è BASSO (cioè = 0), allora il LED è BASSO (spento). Altrimenti, il LED è
ALTO (in effetti, se lo stato del pulsante non è BASSO, può essere solo ALTO, ovvero acceso...)
Scarica la risposta
[Link]
Scarica la risposta
[Link]
60
Arduino a scuola
Il bargraphe
Un bargraphe è un indicatore che mostra una quantità, proveniente da un'informazione qualsiasi (livello dell'acqua,
puissance sonore, etc.), sous une forme lumineuse. Le plus souvent, on utilise des LEDs alignées en guise
di visualizzazione.
L’objectif de cet exercice est de réaliser un bargraphe de 4 LEDs, avec deux boutons poussoirs. L’un d’eux
servirà a incrementare il valore sul bargraph (vale a dire aumentare il numero di LED accesi), mentre
l'altro servirà a decrementarlo.
Circuito 7
SW1 SW2
61
Arduino a scuola
4 LED a scelta
6 resistori da 220Ω
2 resistenze da 1 a 10kΩ
2 pulsanti a pressione
Come si può osservare, le resistenze R7 e R8 sono montate in pull-down (richiamo almeno). Questo circuito
pourrait tout à fait être monté avec des résistances pull-up.
Normalmente, a questo punto, dovremmo essere in grado di eseguire il montaggio utilizzando lo schema elettrico!
In caso contrario, ecco il montaggio da realizzare:
Circuito 8
62
Arduino a scuola
/*
Codice 12 - [Link], destinato all'Arduino
Il bargraphe
L'obiettivo è realizzare un grafico a barre, con 4 LED e due pulsanti: uno per
incrementare il numero di LED accesi, l'altro per decrementarlo.
*/
/*
Dichiarazione delle costanti per i nomi dei pin
*/
/*
Dichiarazione delle variabili utilizzate per il conteggio e il deconto
*/
/*
Inizializzazione dei pin in ingresso/uscita: ingressi per i pulsanti, uscite per i LED
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
}
/*
E si parte con il programma!
*/
void loop()
{
//lettura dello stato del pulsante di incremento (si legge lo stato di btn_plus e si registra)
nella variabile stato_bottone)
etat_bouton = digitalRead(btn_plus);
Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se((etat_bouton != memoire_plus) && (etat_bouton == ALTO))
{
nombre_led++; //incrementiamo la variabile che indica quante LED devono accendersi
}
Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se((etat_bouton != memoire_minus) && (etat_bouton == ALTO))
{
nombre_led--; //decremente il valore di nombre_led
}
memoire_minus = etat_bouton; //on enregistre l'état du bouton pour le tour suivant
//applichiamo dei limiti al numero per non superare 4 o 0 (dato che abbiamo 4 LED)
se(nombre_led > 4)
{
nombre_led = 4;
}
se(nombre_led < 0)
{
nombre_led = 0;
}
affiche(numero_led);
}
Video
64
Arduino a scuola
Facendo riferimento allo schema di montaggio, dichiariamo le costanti per ogni pin: i pulsanti.
sono collegati ai pin 3 e 4, mentre le LED sono collegate ai pin 8 a 11.
/*
Dichiarazione delle costanti per i nomi dei pin
*/
/*
Dichiarazione delle variabili utilizzate per il conteggio e il decounting
*/
Si inizializzano poi i pin, a seconda che si tratti di ingressi (i pulsanti) o uscite (le LED).
/*
Inizializzazione dei pin in ingresso/uscita: ingressi per i pulsanti, uscite per i LED
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
}
Utilizza digitalRead per leggere lo stato del pulsante (btn_plus) e registrare questo stato nella variabile stato_bouton.
vuoto ciclo()
{
//lettura dello stato del pulsante di incremento (si legge lo stato di btn_plus e lo si iscrive
nella variabile stato_bottone)
etat_bouton = digitalRead(btn_plus);
//Se il pulsante ha uno stato diverso da quello registrato E quel stato è "premuto"
65
Arduino a scuola
{
nombre_led++; //in aumentiamo la variabile che indica quante LED dovranno accendersi
}
//Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se((etat_bouton != memoire_minus) && (etat_bouton == HIGH))
{
nombre_led--; //decrementa il valore di nombre_led
}
memoire_minus = etat_bouton; //si registra lo stato del pulsante per il turno successivo
Ora limiteremo il numero di LED da collegare. Infatti, nel nostro caso, abbiamo 4 LED.
Quindi se premiamo 10 volte il pulsante 2, si accenderanno solo 4 LED.
//applichiamo dei limiti al numero per non superare 4 o 0 (dato che abbiamo 4 LED)
se(nombre_led > 4)
{
nombre_led = 4;
}
se(nombre_led < 0)
{
nombre_led = 0;
}
Ora dobbiamo gestire l'accensione dei LED. Per semplificare il codice, creeremo una funzione che
servirà a gestire la visualizzazione. Chiameremo questa funzione affiche, con un parametro int valore_recue.
il parametro rappresenta il numero da visualizzare.
mostra(numero_led);
}
66
Arduino à l'école
{
//spegniamo tutti i led
digitalWrite(led_0, BASSO);
digitalWrite(led_1, BASSO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
Se la funzione riceve il numero 1, accende il LED 1. Se riceve il numero 2, accende il LED 1 e 2. Se
riceve 3, accende il LED 1, 2 e 3. Infine, se riceve 4, allora accende tutti i LED:
Il simbolo >= significa: ... è maggiore o uguale a .... Si tratta di testare la superiorità o l'uguaglianza di una variabile.
rispetto a un valore. Pertanto, in:
se(valeur_recue >= 4)
{
digitalWrite(led_3, ALTO); accendiamo il LED 3
}
C'è modo di disinfettare il pulsante e di assorbire questi rimbalzi montando in parallelo al pulsante
poussoir un condensatore di bassa capacità (10nF).
67
Arduino a scuola
Circuito 9
LED1 a LED4: a scelta
SW1 C2 SW2 C1
10nF 10nF
68
Arduino a scuola
Come si può vedere nel circuito sopra, sono stati aggiunti due condensatori di bassa capacità.
parallelo ai pulsanti. Se la barriera non è assoluta, ciò consente di aumentare considerevolmente
La precisione dei pulsanti.
L'installazione dei condensatori non ha alcuna influenza a livello di codice. Non è quindi necessario farlo.
modificatore.
Esistono dei grafici a barre con 10 LED. Possiamo usarli al posto delle 4 LED precedenti.
montaggio.
Da un lato ci sono i catodi, dall'altro gli anodi. Nel nostro caso, gli anodi sono dal lato in cui si
trovano le iscrizioni.
Il codice, invece, deve essere adattato di conseguenza per 10 LED. Un esempio si trova qui:
/*
Codice 13 - [Link], destinato all'Arduino
Il diagramma a barre
L'obiettivo è realizzare un grafico a barre, con due pulsanti.
pulsanti: uno per incrementare il numero di LED accesi,
l'altro per decrementarlo.
La barra grafica è composta da 10 LED.
*/
/*
Dichiarazione delle costanti per i nomi dei pin
*/
/*
Dichiarazione delle variabili utilizzate per il conteggio e il decontaggio
*/
/*
Initialisation des broches en entrée/sortie: entrées pour les boutons, sorties pour les LEDs
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INGRESSO);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(led_5, OUTPUT);
pinMode(led_6, OUTPUT);
pinMode(led_7, OUTPUT);
pinMode(led_8, OUTPUT);
pinMode(led_9, OUTPUT);
vuoto ciclo()
{
//lettura dello stato del pulsante di incremento (si legge lo stato di btn_plus e lo si registra
//nella variabile stato_bottone)
etat_bouton = digitalRead(btn_plus);
//Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se ((etat_bouton != memoire_plus) && (etat_bouton == ALTO))
{
nombre_led++; //incremetiamo la variabile che indica quante LED devono accendersi
}
//Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se ((etat_bouton != memoire_minus) && (etat_bouton == ALTO))
{
nombre_led--; //decrementa il valore di nombre_led
}
memoria_meno = stato_bottone; //si registra lo stato del pulsante per il turno successivo
//applichiamo dei limiti al numero per non superare 4 o 0 (dal momento che abbiamo 4 LED)
se (nombre_led > 10)
{
nombre_led = 10;
}
se (nombre_led < 0)
{
70
Arduino a scuola
numero_led = 0;
}
mostra(numero_led);
}
71
Arduino a scuola
l'afficheur digitale
10 kOhm
100 Ohm
D3
100 Ohm
D4
D6
D7
D8
D9
220 Ohm g f A a b
10 9 8 7 6
1 2 3 4 5
220 Ohm e d A c punto
D10
D11
D12
D13
Nel caso di un'anodo comune, quest'ultimo è collegato a +5V. I catodi sono collegati a
le spille.
A livello di codice, ciò implica che i LED sono accesi in posizione LOW e spenti in posizione HIGH.
Con un componente a catodo comune, è il contrario.
Nel nostro esempio, inizieremo accendendo tutti i diodi, poi uno dopo l'altro, per i
identificatore. Si possono poi scrivere dei numeri.
Il codice seguente consente di identificare la posizione delle LED accendendo l'una dopo l'altra:
/*
Codice 14 - [Link], destinato all'Arduino
L'afficheur a 7 o 8 segmenti
L'obiettivo è visualizzare numeri su un display a 7 segmenti (7 cifre).
Questo codice ha lo scopo di accendere tutte le LED e poi una dopo l'altra
per identificare la loro posizione.
*/
void setup()
{
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(led_5, OUTPUT);
pinMode(led_6, OUTPUT);
pinMode(led_7, OUTPUT);
pinMode(led_8, USCITA);
}
vuoto ciclo()
{
digitalWrite(led_1, BASSO);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, BASSO);
ritardo(1500);
digitalWrite(led_1, ALTO);
digitalWrite(led_2, ALTO);
digitalWrite(led_3, ALTO);
digitalWrite(led_4, ALTO);
digitalWrite(led_5, ALTO);
digitalWrite(led_6, ALTO);
digitalWrite(led_7, ALTO);
digitalWrite(led_8, ALTO);
ritardo(500);
digitalWrite(led_1, BASSO);
ritardo(1500);
digitalWrite(led_1, ALTO);
digitalWrite(led_2, BASSO);
ritardo(1500);
73
Arduino a scuola
digitalWrite(led_2, ALTO);
digitalWrite(led_3, BASSO);
ritardo(1500);
digitalWrite(led_3, ALTO);
digitalWrite(led_4, BASSO);
ritarda(1500);
digitalWrite(led_4, ALTO);
digitalWrite(led_5, LOW);
ritardo(1500);
digitalWrite(led_5, ALTO);
digitalWrite(led_6, BASSO);
ritarda(1500);
digitalWrite(led_6, ALTO);
digitalWrite(led_7, BASSO);
ritardo(1500);
digitalWrite(led_7, ALTO);
digitalWrite(led_8, BASSO);
ritardo(1500);
}
1 X X
2 X X X X X
3 X X X X X
4 X X X X
5 X X X X X
6 X X X X X X
7 X X X
8 X X X X X X X
9 X X X X X
0 X X X X X X
A tuo turno:
75
Arduino a scuola
Esempio:
Ovviamente, rimane artigianale; ma può dare risultati accettabili, come si può vedere qui:
Obiettivo
Quest'ultima lezione sintetizzerà tutto ciò che abbiamo visto fino ad ora. L'obiettivo è realizzare un
montaggio, con due pulsanti e un display a 7 segmenti. Uno dei pulsanti servirà ad incrementare
i numeri sul display, e l'altro a decrementare. Così, premendo il pulsante 6 volte, i
i numeri da 1 a 6 verranno visualizzati successivamente.
Nel diagramma che segue, il display a 7 segmenti è a anodo comune. Come al solito, ogni pulsante-
Il pulsante è dotato di una resistenza pull-down da 1kΩ o 10kΩ e di una resistenza di protezione dell'input.
100Ω. L'ordine di collegamento del display è irrilevante, poiché useremo il codice 14 per identificare l'ordine.
d'attivazione dei pin.
10 kOhm
100 Ohm
D3
100 Ohm
D4
D6
D7
D8
D9
220 Ohm g f A a b
10 9 8 7 6
1 2 3 4 5
220 Ohm e d A c punto
D10
D11
D12
D13
77
Arduino a scuola
Circuito 10
R1
220
R2
220
R3
220 a
f b
R4 g LED1
U1 220
ARDUINO
e c
d
R9 dp
220
AREF
GND R10
D13 220
D12
D11
RISETA D10 R11
3V D9 220
5V D8
GND2
GND1 D7 R12
VIN D6 220
D5
A0 D4
A1 D3
A2 D2
A3 D1
R5 R7
A4 D0 220 10k
A5
R6 R8
220 10k
SW1 C2 SW2 C1
10nF 10nF
78
Arduino a scuola
/*
Codice 15 - [Link], destinato all'Arduino
Imparare a contare
L'obiettivo è visualizzare numeri su un display a 7 segmenti. Un pulsante permette
uno per incrementare il numero, l'altro per decremetarlo.
Si conta così da 0 a 9 o da 1 a 0.
*/
/*
Dichiarazione delle costanti per i nomi dei pin.
Il nostro display è a 8 segmenti, con quindi un punto. Anche se non lo utilizziamo, noi
l'abbiamo comunque cablato.
*/
/*
Dichiarazione delle variabili utilizzate per il conteggio e il deconto
*/
/*
Inutilizzo dei pin di input/output: ingressi per i pulsanti, uscite per i LED
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_1, USO);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, USCITA);
pinMode(led_5, OUTPUT);
pinMode(led_6, OUTPUT);
pinMode(led_7, OUTPUT);
pinMode(led_8, OUTPUT);
}
79
Arduino a scuola
/*
E si parte con il programma!
*/
void ciclo()
{
//lettura dello stato del pulsante di incremento (si legge lo stato del btn_plus e lo si iscrive
//nella variabile stato_bottone)
etat_bouton = digitalRead(btn_plus);
//Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se((etat_bouton != memoire_plus) && (etat_bouton == ALTO))
{
nombre_led++; //incrementeamo la variabile che indica quante LED devono accendersi
}
//Se il pulsante ha uno stato diverso da quello registrato E che questo stato è "premuto"
se((etat_bouton != memoire_minus) && (etat_bouton == HIGH))
{
nombre_led--; //decrementa il valore di nombre_led
}
memoire_minus = stato_bottone; // registriamo lo stato del pulsante per il turno successivo
//applichiamo dei limiti al numero per non superare 4 o 0 (poiché abbiamo 4 LED)
se(nombre_led > 10)
{
nombre_led = 10;
}
se(nombre_led < 0)
{
nombre_led = 0;
}
affiche(numero_led);
}
digitalWrite(led_1, BASSO);
digitalWrite(led_2, ALTO);
ottanta
Arduino a scuola
digitalWrite(led_3, ALTO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, ALTO);
digitalWrite(led_6, ALTO);
digitalWrite(led_7, ALTO);
digitalWrite(led_8, ALTO);
digitalWrite(led_1, LOW);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, ALTO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, ALTO);
digitalWrite(led_8, ALTO);
}
se(valeur_recue == 3) se il valore ricevuto è uguale... beh... lo sai tu
//suite...
{
digitalWrite(led_1, ALTO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, ALTO);
digitalWrite(led_5, LOW);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, HIGH);
}
se(valeur_recue == 4)
{
digitalWrite(led_1, ALTO);
digitalWrite(led_2, ALTO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, ALTO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, HIGH);
if(valeur_recue == 5)
{
digitalWrite(led_1, ALTO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, ALTO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, ALTO);
}
se(valeur_recue == 6)
{
digitalWrite(led_1, BASSO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
81
Arduino a scuola
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, ALTO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, ALTO);
se(valeur_recue == 7)
{
digitalWrite(led_1, ALTO);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, ALTO);
digitalWrite(led_4, ALTO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, ALTO);
se(valeur_recue == 8)
{
digitalWrite(led_1, BASSO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, BASSO);
se(valeur_recue == 9)
{
digitalWrite(led_1, ALTO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, BASSO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, BASSO);
se(valeur_recue == 10)
{
digitalWrite(led_1, BASSO);
digitalWrite(led_2, BASSO);
digitalWrite(led_3, ALTO);
digitalWrite(led_4, BASSO);
digitalWrite(led_5, BASSO);
digitalWrite(led_6, BASSO);
digitalWrite(led_7, BASSO);
digitalWrite(led_8, BASSO);
}
}
Un segnale analogico13variano in modo continuo nel tempo. Il suo valore è quindi un numero reale. Si
trova segnali analogici costantemente, come la temperatura, la velocità...
Segnale digitale
Segnale analogico
L'Arduino Uno possiede 6 ingressi analogici, numerati da A0 a A5. In realtà, il microcontrollore non è
capace di comprendere un segnale analogico. È quindi necessario prima convertirlo in segnale digitale tramite un
circuito speciale chiamato convertitore analogico/digitale. Questo convertitore campionerà il segnale ricevuto
sotto forma di una variazione di tensione e trasformarla in valori compresi tra 0 e 1023. Attenzione a
non far entrare una tensione superiore a 5V, poiché ciò distruggerebbe l'Arduino.
La fotoresistenza
Una fotoresistenza è un componente elettronico
la cui resistenza (in OhmΩ) varia in funzione di
l'intensità luminosa. Più alta è la luminosità,
più la resistenza è bassa. Possiamo quindi usarla
come sensore di luce per:
Il vantaggio delle fotocellule è che sono molto economiche. D'altra parte, la loro reazione alla luce è
diverso per ogni fotoresistenza, anche quando sono state prodotte nello stesso lotto. Si può così
segnare una differenza di resistenza di oltre il 50% tra due fotoresistenze dello stesso modello per la
stessa luminosità. Non si può quindi utilizzare per una misurazione precisa della luce. D'altra parte, sono
ideali per misurare cambiamenti semplici della luminosità.
Per il circuito 11, avremo bisogno di una fotoresistenza che collegheremo al pin A0.
Il montaggio resistenza fissa - fotoresistenza costituisce quello che si chiama un divisore di tensione. 5V sono
introdotti nel circuito dall'Arduino. Colleghiamo il punto tra le due resistenze a un pin analogico
dell'Arduino e misuriamo la tensione tramite la funzione analogRead (pin). Qualsiasi cambiamento della tensione
la misura è dovuta alla fotoresistenza poiché è l'unica che cambia in questo circuito, in base alla
luce.
1 LED
1 resistenza di 220Ω
1 resistenza da 10kΩ
1 fotoresistenza
Circuito 11
84
Arduino a scuola
U1
ARDUINO
AREF
GND
D13
D12
D11
AZZERARE D10
3V D9
5V D8
GND2
LDR1 GND1 D7
Fotorresistenza VIN D6 R1
D5 220
A0 D4
A1 D3
A2 D2
A3 D1
A4 D0 D1
R2 A5 LED
10k
L'obiettivo di questo codice è definire una soglia di luminosità oltre la quale spegniamo un LED. Andremo per
questo utilizza una nuova istruzione: se ... altrimenti (se ... altrimenti). Quindi si tratta di una condizione.
Sila luminosité dépasse le seuil (if (analogRead (lightPin)> seuil)), éteindre la LED (digitalWrite (ledPin,
BASSO)); sinon (altro), accendere il LED (digitalWrite(ledPin, HIGH)).
L'istruzione==verifica se due espressioni sono uguali. Se lo sono, allora il risultato sarà vero (true) altrimenti
il risultato sarà falso.
In questo caso, la soglia è fissata a 900 (su 1023). Variando il valore della soglia, si modifica la sensibilità di
rilevazione della luminosità.
/*
Codice 16 - [Link], destinato all'Arduino
Obiettivo: Spegnere un LED non appena la luminosità è sufficiente
*/
void setup()
{
pinMode(ledPin, OUTPUT);
[Link](9600);
}
85
Arduino a scuola
vuoto ciclo()
{
int soglia = 900; //Si definisce una soglia di luminosità (su 1023) a
//dal quale la LED si spegne
se (analogRead (lightPin) > seuil) Se la luminosità è superiore alla soglia...
{
digitalWrite (ledPin, BASSO); //... allora spegniamo il LED.
}
altro //Sinon...
{
digitalWrite (ledPin, HIGH); //...accendiamo il LED
}
}
Codice 17: variazione della luminosità di un LED in funzione della luce ambientale
Immaginiamo ora di voler variare la luminosità di un LED in base alla luminosità della stanza
nella quale si trova: più è giorno, meno la LED è luminosa.
Teoricamente, non c'è nulla di complicato; basta combinare il segnale della fotresistenza con il valore
PWM del LED. Praticamente, ci ritroviamo con un segnale in ingresso (la fotoresistenza) suddiviso in 1024
paliers, mentre quelli del segnale PWM contano 256 paliers. Solo, 1024, è 256 x 4. Dividendo la
valore della variabile lightReading per 4, la rendiamo compatibile con i 256 livelli di variazione della luminosità
dalla LED.
/*
Codice 17 - [Link], destinato all'Arduino
Obiettivo: Variare la luminosità del LED in base alla luminosità della stanza
[Link]
*/
int lightPin = 0;
int lightReading;
int ledPin = 9;
int luminositàLed;
void setup() {
[Link](9600);
}
vuoto ciclo() {
lightReading = analogRead(lightPin);
ledBrightness = lightReading / 4;
analogWrite(ledPin, ledBrightness);
ritardo(100);
}
86
Arduino a scuola
Innanzitutto, definiamo le nostre costanti e le nostre variabili. Così, il pin A0, su cui la
photorésistance (couplée à la résistance pulldown) est connectée est renomméelightPin. On créé ensuite une
variabile namedelightReadingper memorizzare il valore analogico (compreso tra 0 e 1023) del valore di
la fotoresistenza con il divisore di tensione. Naturalmente, il pin 9, a cui è collegato il LED
è chiamata ledPin. Si noti che il pin 9 è compatibile con PWM. Infine, creiamo una variabile ledBrightness
per memorizzare il valore di luminosità del LED (compreso tra 0 e 255).
int lightPin = 0;
int lightReading;
int ledPin = 9;
int luminositàLed
Successivamente, memorizziamo il valore della fotoresistenza con un analogRead nella variabile lightReading.
lightReading = analogRead(lightPin);
Piccola parentesi: si può controllare il buon funzionamento della fotoresistenza inviando alla console di Arduino
IDE le valori misurati grazie a [Link], che si trova in Menu Strumenti -> Monitoraggio seriale. Questo codice
è quindi facoltativo.
//Alla fine bisogna mappare i valori letti da 0-1023 a 0-255 che sono i valori
utilizzate da analogWrite.
//Per questo, si converte il valore della variabile "lightReading" dividendolo per 4.
ledBrightness = lightReading / 4;
analogWrite(ledPin, ledBrightness); // Accende finalmente il LED con la luminosità memorizzata
nella variabile "ledBrightness".
ritardo(100);
}
La variazione di luminosità è spesso invertita. Così, una sveglia è molto luminosa quando è giorno e poco
luminoso durante la notte. Per simulare ciò, basta rimuovere la seguente riga:
Se riprendiamo l'esercizio precedente, una piccola modifica permette di fare il mapping dei dati.
/*
Codice 18 - [Link], destinato all'Arduino
Obiettivo: Variare la luminosità del LED in base alla luminosità della stanza con
mappatura dei dati
14[Link]
87
Arduino a scuola
Fonte: [Link]
*/
[Link](9600);
}
void loop() {
lightReading = analogRead(lightPin);
//Infine, è necessario abbinare con la funzione "map" i valori letti da 0-1023 a 0-255
//qui sont les valeurs utilisées par analogWrite.
ritarda(100);
}
88
Arduino a scuola
Il potenziometro è una resistenza variabile. A differenza, è il pulsante di regolazione del volume su una
radio. La maggior parte dei potenziometri sono rotativi o lineari.
I potenziometri sono molto comuni negli apparecchi elettronici, ad esempio nelle console di missaggio.
Come tutte le resistenze, il potenziometro modifica la tensione di un circuito. Lo utilizzeremo quindi principalmente
come ingresso (input) in una broche analogica (A0 a A5) dell'Arduino.
15 [Link]
89
Arduino a scuola
Scopa
Piste resistiva
+5V
Circuito 12
90
Arduino a scuola
U1
ARDUINO
AREF
GND
D13
D12
D11
RESETTARE D10
3V D9
5V D8
GND2
GND1 D7
VIN D6
D5
R2 A0 D4
10k A1 D3
A2 D2
A3 D1
A4 D0
D1 A5
LED
Abbiamo appena visto: variare la tensione all'ingresso di un LED non è la soluzione migliore per far variare
la sua luminosità… anche se il LED non si brucia, oltre il suo voltaggio di funzionamento, la sua durata sarà
fortemente ridotta. Ma che importa, visto che abbiamo la funzione PWM17Quindi andremo a collegare il
potenziometro, in ingresso analogico su A0, con un LED in PWM sul pin 9.
1 LED
1 resistenza di 220Ω
1 potenziometro da 10kΩ o 20kΩ
Circuito 13
91
Arduino a scuola
U1
ARDUINO
AREF
GND
D13
D12
D11
RESET D10
3V D9
5V D8
GND2
GND1 D7
VIN D6 R1
D5 220
R2 A0 D4
10k A1 D3
A2 D2
A3 D1
A4 D0 D1
A5 LED
Il codice è molto semplice. Come per il codice 17, recuperiamo il valore compreso tra 0 e 1023 su A0, prima di
dividerla per 4, in modo da renderla compatibile con l'ampiezza del PWM, compresa tra 0 e 255. Come per
il codice 18, si potrebbe anche immaginare una mappatura invece della divisione.
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
val = analogRead(analogPin); //lettura del valore analogo (potenziometro)
analogWrite(ledPin, val / 4); // valore analogico letto (0 a 1023) diviso per 4 (0 a 255)
}
92
Arduino a scuola
8 LED
8 resistenze di 220Ω
1 potenziometro da 10kΩ o 20kΩ
Circuito 14
PR1
Potentiometro
UNO R3
U1
ARDUINOR3
ARDUINO
R1 R2 R3 R4 R5 R6 R7 R8
220 220 220 220 220 220 220 220
93
Arduino a scuola
Il caso di questo codice è molto interessante. Ora sappiamo che abbiamo 1024 livelli sull'ingresso.
analogico dell'Arduino. Quando l'Arduino riceve il valore di 1024, 8 LED devono essere accesi. Così,
Quando riceverà il valore di 512, 4 LED dovranno essere accesi (512 essendo naturalmente la metà di 1024).
Quindi divideremo i nostri 1024 livelli per 8, per ottenere l'intervallo che accenderà i LED uno dopo l'altro.
altri. Attenzione; si inizia a contare da 0, non da 1. È per questo che i nostri 1024 livelli si
terminano a 1023.
LED1: de 0 à 127 LED2: da 128 a 255 LED3: da 256 a 383 LED4: da 384 a 511
LED5: da 512 a 639 LED6: da 640 a 767 LED7: da 768 a 895 LED6: de 769 à 1023
Da lì, basta andare a cercare il valore ricevuto, che saranno memorizzato nella variabile readValue, poi di
fare passare in 8 test a partire da if... else consecutivi.
/*
Codice 20 - [Link], destinato all'Arduino
Obiettivo: Visualizzare il valore di un potenziometro utilizzando un grafico a barre
*/
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int led6 = 10;
int led7 = 11;
int led8 = 12;
void setup() {
[Link](9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
}
void loop() {
18Vedi codice 17
94
Arduino a scuola
readValue = analogRead(potPin);
[Link]("\Val=");
[Link](readValue);
ritardo(200);
// Da 0 a 127, led1
se (readValue < 128) {
led 1
digitalWrite(led1, ALTO);
digitalWrite(led2, ALTO);
digitalWrite(led3, ALTO);
digitalWrite(led4, ALTO);
digitalWrite(led5, ALTO);
digitalWrite(led6, ALTO);
digitalWrite(led7, ALTO);
digitalWrite(led8, ALTO);
}
95
Arduino a scuola
digitalWrite(led5, ALTO);
digitalWrite(led6, BASSO);
digitalWrite(led7, BASSO);
digitalWrite(led8, BASSO);
}
led 8
digitalWrite(led1, HIGH);
digitalWrite(led2, ALTO);
digitalWrite(led3, ALTO);
digitalWrite(led4, ALTO);
digitalWrite(led5, ALTO);
digitalWrite(led6, ALTO);
digitalWrite(led7, ALTO);
digitalWrite(led8, HIGH);
}
}
A questo punto, si può utilizzare un potenziometro e visualizzarne il valore tramite un grafico a barre con 10 LED. Basta
per questo non dividere più 1024 per 8, ma per 10 (arrotondando).
96
Arduino a scuola
Ecco una variante un po' più sofisticata. Si tratta di visualizzare nuovamente il valore di un potenziometro. Ma
cette fois avec un afficheur LED 8 digits. On affiche la valeur de 0 (min) à 9 (max).
97
Arduino a scuola
Questo progetto è la sintesi degli input analogici, con come bonus l'utilizzo di uno schermo per l'affissione
dati.
Conoscere la temperatura e l'umidità è un'informazione utile per vivere comodamente, per immagazzinare
alimenti o materiali, per previsioni meteorologiche... Con questo progetto impareremo come misurare questi
due dati e mostrarli su un display LCD.
Con i progetti precedenti, abbiamo imparato a misurare valori (intensità luminosa e temperatura)
con sensori analogici grazie alle entrate analogiche della scheda Arduino che sono dotate di un
componente che trasforma i valori analogici misurati in valori numerici. Ma ci sono anche
numerosi sensori che trasformano da soli i valori analogici misurati in valori digitali
sfruttabili tramite mezzi informatici. È il caso di un sensore di temperatura e umidità molto
diffuso e economico, il DHT11 che utilizzeremo per questo progetto.
In basso a destra, di colore blu, il sensore DHT11, sopra il display LCD a due righe di 16 caratteri che
indica la temperatura e l'umidità attuali. Si nota anche un potenziometro (resistenza variabile) sulla parte
il lato destro della breadboard il cui ruolo è regolare la luminosità dello schermo.
98
Arduino a scuola
Il sensore DHT11 è fornito con molti kit per Arduino, altrimenti si può acquistare per pochi
franchi. Il DHT11 misura solo temperature positive, tra 0°C e 50°C con una precisione di ± 2°C
e tassi di umidità relativa dal 20 all'80% con una precisione di ± 5%. Per esigenze più specifiche o se
s’agit de mesurer aussi des températures négatives, il faut se munir de son grand frère, le DHT22, deux fois
più costoso, ma la sua gamma di misura va da -50°C a +125°C, con una precisione di 0,5°C e di 0
a 100% (precisione ± 2%) per la misura dell'umidità relativa.
Attenzione: ci sono versioni dei sensori DHTxx che non sono preassemblati su un piccolo circuito come il modello di
sinistra sopra utilizzata in questo progetto. Se è così, è necessario aggiungere una resistenza di pull-up da 5 a 10 kOhm e un
condensatore da 100 nF tra i pin 1 (alimentazione 5 V) e 4 (GND). Uno schema del cablaggio è disponibile tramite
qui :[Link]
Circuito 15
Quando si tiene il sensore con la griglia di fronte a noi, il perno centrale è l'alimentazione, deve essere
collegata al 5V dell'Arduino. La pin più a destra sarà collegata al – (GND). Quanto alla pin più a
A sinistra, c'è la scheda dati, sarà collegata all'ingresso digitale utilizzato per leggere i dati.
Una volta che questi dati sono conosciuti, il montaggio è un gioco da ragazzi e uno schema qui è inutile, noi sceglieremo
il Pin7 per i dati :
99
Arduino a scuola
L'obiettivo di questo codice è acquisire tramite uno dei pin digitali dell'Arduino i dati di temperatura.
e di umidità trasmessi dal sensore DHT11, per poi mostrarli sullo schermo del computer. Per
per comunicare con il sensore, è necessario prima scaricare e installare la libreria specifica
a questo sensore (o piuttosto una delle librerie per questo sensore, poiché ce ne sono diverse versioni). Le
Le librerie sono insiemi di funzioni che si aggiungono alle funzioni di base del software [Link].
Alcune librerie sono preinstallate, ad esempio quella intitolata LiquidCrystal di cui avremo bisogno
più tardi per la visualizzazione sullo schermo LCD, altre devono essere installate dall'utente man mano che
i suoi bisogni. La libreria DHTLib che utilizzeremo per questo progetto fa parte di quest'ultima
categoria e deve quindi essere installata "a mano".
Dalla versione 1.6.0 dell'IDE Arduino, un gestore di librerie ha permesso di semplificare notevolmente
l'installazione e l'aggiornamento delle librerie. Il gestore è accessibile tramite il menu Schizzo->Includi
Gestire le biblioteche. Si apre una finestra di gestione delle biblioteche.
la quale è possibile cercare una nuova biblioteca digitando il suo nome nel campo di ricerca
in alto a sinistra o di fare aggiornamenti delle librerie esistenti.
Sopra, digitando dht nella barra di ricerca otteniamo in seconda posizione la libreria DHTLib che noi
andiamo a usare. Non resta che installarlo facendo clic sul pulsante che appare a destra quando lo selezioniamo.
Una soluzione alternativa per installare una libreria consiste nel scaricare il file .zip della libreria
desiderato, quindi installarlo tramite il menu Disegno->Includere una libreria->Aggiungi una [Link].
Nota: sugli account degli studenti, le biblioteche aggiuntive sono installate nella cartella personale dell'utente
e saranno quindi accessibili solo per questo singolo utente, è necessario avere accesso da amministratore per installare una
biblioteca per tutti gli utenti di un computer.
Attenzione, affinché la biblioteca appena installata sia utilizzabile, è necessario uscire e poi riavviare Arduino
/*
Codice 21 - [Link], destinato all'Arduino
Obiettivo: Visualizzare la temperatura e l'umidità su uno schermo
*/
100
Arduino a scuola
#define DHT11_PIN 7 //si definisce il Pin che verrà utilizzato per ricevere i dati
Per visualizzare i dati trasmessi dal sensore, è necessario aprire una finestra del monitor seriale su
il tuo computer: Menu Strumenti -> Monitor seriale.
Finché il monitor seriale è aperto, la temperatura e l'umidità misurate vengono visualizzate una volta al secondo
101
Arduino a scuola
Circuito 16
Mostrare il risultato delle misurazioni sul monitor seriale è molto carino, ma se si vuole fare una
installazione di misurazione permanente e autonoma, questa soluzione non è adatta, poiché è necessario che il computer
sia sempre acceso e collegato alla scheda. La visualizzazione su un piccolo schermo LCD è una soluzione ben
più elegante e pratico. Uno dei display LCD più diffusi al mondo Arduino e che è spesso
fornito con i kit di base è il modello detto 16x2 LCD (è in grado di visualizzare due righe di 16 caratteri
All'acquisto, un tale schermo costa tra 7 e 15€.
Nota: lo scopo finale è visualizzare la temperatura e l'umidità trasmesse dal sensore DHT11, è
consigliato lasciare il circuito 9 in posto (su un lato o un'estremità della breadboard, altrimenti il)
dovrà essere ricablato più tardi. Le immagini qui sotto non includono volutamente il DHT11,
sempre collegato al Pin7 per migliorarne la leggibilità.
Esiste una grande varietà di modelli di schermi LCD, alcuni molto pratici che hanno già dei pin che
superano la faccia inferiore e si incastrano direttamente nella breadboard, altri richiedendo
l'uso di connettori maschio-maschio per poter collegarsi alla breadboard o direttamente alla scheda
Arduino tramite cavi di collegamento.
102
Arduino a scuola
Tutti i modelli di schermo LCD sono dotati di 16 pin di cui il cablaggio è il seguente:
I primi due pin a sinistra servono per l'alimentazione dello schermo. Polo negativo o GND per il
premier et pôle positivo (5V) per il 2ème.
Il 3° pin è collegato a un potenziometro e serve a regolare il contrasto dello schermo LCD.
Il 4° pin, contrassegnato come RS per Register Select, è collegato al pin 12 dell'Arduino. Serve a selezionare la zona
memoria dello schermo LCD nella quale scriveremo.
Il 5° deve essere collegato a terra (GND).
Le 6ème, noté E pour Enable, est connecté au pin 11 de l'Arduino. Il permet de lancer ou non l'écriture
nelle zone di memoria.
I quattro seguenti (7, 8, 9 e 10)ème) sono collegati a terra (GND).
Le quattro che seguono (11 a 14ème, notati 5, 4, 3, 2 nello schema sopra, poiché si collegano ai
Perni 5, 4, 3, 2 dell'Arduino. Servono per la trasmissione dei dati da visualizzare.
I due perni tutto a destra (15 e 16)ème) servono per alimentare la LED del retroilluminazione dello schermo LCD.
Attenzione, il penultimo (polo positivo 5V) deve essere assolutamente protetto da una resistenza di circa
220Ω. L'ultimo è collegato al polo negativo (GND).
Una volta effettuato il montaggio e collegato l'Arduino alla porta USB del computer, puoi ruotare il
potenziometro e vedrete il contrasto dello schermo modificarsi.
Attenzione, affinché la libreria appena installata sia utilizzabile, è necessario chiudere e riavviare Arduino.
IDE.
/*
Codice 22 - [Link], destinato all'Arduino
Obiettivo: Visualizzare la temperatura e l'umidità su un display LCD
*/
#define DHT11_PIN 7 //si definisce il Pin utilizzato per i dati del DHT11
vuoto setup(){}
[Link](16, 2); //inizializziamo la comunicazione con lo schermo LCD
}
void loop()
{
int chk = DHT.read11(DHT11_PIN); //si leggono i dati dal sensore DHT
[Link](0,0); //posizioniamo il cursore dello schermo LCD all'inizio della 1eralinea
[Link]("Temp: "); //scriviamo la parola "Temp: " nella posizione del cursore
[Link]([Link],1);//scriviamo la temperatura letta dal sensore, con 1 cifra
dietro la virgola
[Link]((char)223); //si aggiunge il simbolo ° dopo il valore della temperatura
[Link]("C"); //aggiungiamo la lettera C per grado Celsius
[Link](0,1); //spostiamo il cursore dello schermo LCD all'inizio della 2ª riga
[Link]("Umidità: "); //si scrive la parola "Hum. rel: " nella posizione del cursore
[Link]([Link]à,1); //scriviamo l'umidità relativa letta dal sensore, con 1
cifra dietro la virgola
[Link]("%"); //on ajoute le symbole "%" après la valeur de l'humidité
ritarda(1000); //aspettiamo un secondo prima di procedere alla lettura successiva
}
104
Arduino a scuola
In questo capitolo, impareremo a utilizzare il servomotore più comune nel modellismo e nella
piccola elettronica, si tratta dei modelli detti 9g, per 9 grammi. Esternamente, si presenta sotto forma di
di un piccolo rettangolo, con due piccoli bordi sui lati per fissarlo saldamente e un asse decentrato su
le quale si possono fissare braccia intercambiabili per garantire il collegamento meccanico con il pezzo che deve muoversi.
Anche se ci sono servomotori a rotazione continua, la stragrande maggioranza dei modelli è in grado di
muovere il braccio solo di 180°.
105
Arduino a scuola
Per comandare un servomotore, è necessario inviargli un treno di impulsi di cui il periodo (intervallo di tempo
tra ogni impulso) è sempre di 20 ms (millisecondi). Ciò che varierà e che alla fine determinerà la
la posizione del braccio non è il periodo, ma bensì la durata dell'impulso:
Questo schema ricorda il PWM che abbiamo utilizzato per variare l'intensità di un LED, ad esempio, il principio è
effettivamente molto simile, con un treno di onde rettangolari poiché i dati trasmessi sono digitali (ALTO
o LOW) senza valori intermedi.
La connessione di un servomotore non presenta difficoltà. Il filo rosso si collega all'alimentazione (5V), il filo
il nero si connette al ground (GND) e il filo giallo (attenzione a volte bianco o arancione o… a seconda del materiale)
non collegare il produttore cinese ?) a qualsiasi uscita digitale dell'Arduino (pin 0 a 13)
106
Arduino a scuola
Circuito 17
L'obiettivo dei tre codici qui sotto è quello di familiarizzarsi con l'uso dei servomotori.
Per i 3 codici, avremo bisogno della libreria Servo che fa parte di default del software Arduino, ma
qui non è installata per impostazione predefinita.
Attenzione, affinché la libreria appena installata sia utilizzabile, è necessario chiudere e riavviare Arduino.
/*
Codice 23 - [Link], destinato all'Arduino
Obiettivo: Far muovere il braccio di un servomotore in una direzione e poi nell'altra, indefinitamente
*/
//*****TESTA DICHIARATIVA*****
void setup()
{
[Link](9); //si definisce il Pin utilizzato dal servomotore
}
void loop()
{
per (int posizione = 0; posizione <=180; posizione ++){ //creiamo una variabile posizione che
prendere valori tra 0 e 180 gradi
[Link](posizione); //il braccio del servomotore assume la posizione della variabile
posizione
107
Arduino a scuola
Una volta che il vostro codice è funzionante, non esitate a testare diversi tempi di attesa, di chiedere dei
percorso di 90° solo o altri valori, di variare il passo degli incrementi utilizzati, ad esempio di 5° in
5°, ecc.. E osserva ogni volta il nuovo risultato.
Abbiamo detto parlando dei servomotori che una volta raggiunta una posizione, il motore, grazie ai
informazioni, mantiene il braccio nella posizione richiesta fino a quando non riceve un nuovo ordine.
la funzione di mantenimento è fondamentale sia nella modellistica che nella robotica. Se un braccio robotico afferra
qualcosa ad esempio, non deve cadere semplicemente sotto l’effetto del peso del pezzo afferrato e del suo
braccia. Pertanto, il servomotore deve quindi continuare continuamente ad adattare la posizione da mantenere. Il piccolo
La variazione del codice di seguito ci dimostrerà da un lato che la posizione richiesta è mantenuta anche quando
on demande à l’Arduino d’effectuer une autre tâche (ici, allumer la diode 13) et vous pouvez aussi essayer de
gira il servo a mano (senza forzare!) per sentire la resistenza alla rotazione che esercita il servo che cerca di
mantenere la propria posizione.
//*****TESTA DICHIARATIVA*****
void setup()
{
[Link](9); //si definisce il Pin utilizzato dal servomotore
pinMode(13,OUTPUT); //il Pin13 è impostato in modalità OUTPUT
}
void loop()
{
[Link](0); // si dice all'oggetto di mettere il servo a 0°
diode13(); // chiamata alla funzione diode13 che è definita più in basso
[Link](180); // si dice all'oggetto di mettere il servo a 180°
diode13(); // appel de la fonction diode13
}
void diode13() //fare lampeggiare il diodo 13 15 volte
{
per (int t=0;t<15;t++) {
digitalWrite(13,HIGH);
ritarda(100);
digitalWrite(13,BASSO);
ritarda(100);
} }
A voi di variare anche gli angoli richiesti, il numero di lampeggiamenti del LED 13, il tempo
d'attesa…
108
Arduino a scuola
E per concludere con il controllo dei servomotori, ecco un codice che non manca di provocare il suo
piccolo effetto. Aggiungerai un potenziometro al tuo circuito ed è la posizione del potenziometro che
tournerez che servirà a posizionare il braccio del servomotore.
Circuito 18
/*
Codice 25 - [Link], destinato all'Arduino
Obiettivo: controllare un servomotore con un potenziometro
*/
//*****INTESTAZIONE DICHIARATIVA*****
void setup()
{
[Link](pinmonServo); //associamo l'oggetto monServo al pin di comando
}
void loop()
{
int valeurPotar=analogRead(pinPotar); // on lit la valeur du potentiomètre
int angolo=map(valeurPotar, 0,1023,0,180); //si trasforma il valore analogico letto in valore
//l'angolo tra 0 e 180°
[Link](angle); //si posiziona il braccio del servomotore all'angolo
}
109
Arduino a scuola
Applicando quanto abbiamo appreso con il codice 25, diventa possibile controllare due servomotori con
un joystick.
Per il cablaggio, un joystick ha un pin +5V (a volte annotato VCC) per l'alimentazione elettrica, un
brocheGND(terra), due brocheVRx e VRy, rispettivamente per la posizione dell'asse X e Y e infine un
brocheSW (a volte chiamata SEL). Quest'ultima corrisponde al pulsante, quando si preme su
joystick.
Circuito 19
110
Arduino a scuola
Il codice 26 non è altro che un adattamento del codice 25: si tratta di aggiungere un secondo servo.
/*
Codice 26 - [Link], destinato all'Arduino
Obiettivo: controllare due servomotori con un joystick
*/
//*****INTESTAZIONE DICHIARATIVA*****
void setup()
{
[Link](pinmonServo1); //colle l'oggetto monServo1 al pin pinmonServo1
[Link](pinmonServo2); //si associa l'oggetto monServo2 al pin pinmonServo2
}
void loop()
{
int valeurAxeX=analogRead(AxeX); // si legge il valore dell'asse X
int angleX=map(valeurAxeX, 0,1023,0,180); //si trasforma il valore analogico letto in valore
d'angolo tra 0 e 180°
[Link](angleX); //si porta il braccio del servomotore 1 alla posizione angolo
int valeurAxeY=analogRead(AxeY); // leggiamo il valore dell'asse Y
int angleY=map(valeurAxeY, 0,1023,0,180); //si trasforma il valore analogico letto in valore
d'angolo tra 0 e 180°
[Link](angleY); //mettiamo il braccio del servomotore 2 alla posizione angle
}
Vediamo ora un altro modo per ottenere lo stesso risultato. Qui, memorizziamo i valori inviati dal
joystick rispettivamente nelle variabili X e Y. Si utilizza quindi un calcolo per convertire il valore dei due
variabili in gradi, ossia 1024 passi in 180 gradi: 180/1024, che dà un valore di 0.1756° per passo.
/*
Codice 27 - [Link], destinato all'Arduino
Obiettivo: controllare due servomotori con un joystick
Ispirato da [Link]
*/
Servo monservo1;
Servo monservo2;
int AxeY = 1; // Dichiarazione dei pin analogici utilizzati per collegare l'asse X e Y
int AxeX = 0;
void setup() {
[Link](9600);
pinMode(AxeX, INPUT); //Dichiarazione delle modalità dei pin in INPUT e la posizione dei servomotori
[Link](8);
pinMode(AxeY, INPUT);
[Link](9);
}
void loop() {
int X=analogRead(AxeX); //Si legge prima il valore analogico dal pin del X (0v-
5v)=>(0-1023)
X=X*0.1756; //si fa una calibrazione in base ai limiti del servo (0-1023)=>(0-180)
X=180-X;//Utilizziamo questo per cambiare il senso di orientamento del supporto
[Link](X); //Scriviamo il valore finale calibrato e orientato
111
Arduino a scuola
Diventa quindi possibile comandare un braccio robotico di 4 servo con semplicemente due joystick. In
In questo caso, è necessario prevedere un'alimentazione esterna per i servomotori e non dimenticare di realizzare una messa a terra.
comune tra l'alimentazione, l'Arduino, i servomotori e i joystick.
Conclusione (provvisoria)
Conclusione provvisoria, poiché le possibilità di Arduino e dell'elettronica sono infinite. Man mano che
des desideri dei miei alunni, delle nostre scoperte e sperimentazioni, ma anche dei contributi dei lettori,
questo corso è costantemente aggiornato.
Questo corso è stato redatto da Frédéric Genevey, insegnante nelle Scuole Primarie e Secondarie di Ecublens.
Suisse,[Link]
112