Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Di Simone Manni
2
ARDUINO COS’E’ ? NOZIONI
Arduino è una scheda di sviluppo low-cost programmabile, con cui è possibile creare circuiti di ogni tipo per
molte applicazioni, anche in ambito di robotica ed automazione.
Nasce a Ivrea, nel 2005, da un'idea di un professore universitario, un Ingegnere Elettronico, Massimo Banzi, che
decise di creare una piattaforma per i propri studenti, così da facilitarli nello studio dell'Interaction Design.
Fu un completo successo, a tal punto da spingere l'ingegnere a rendere questa piattaforma, Open Source.
Fu un gruppo di studenti della facoltà di Ingegneria Informatica a scrivergli la libreria, ovvero l'IDE (libreria
portabile su ogni sistema operativo) e le prime API; grazie a questi pre-ingegneri, Arduino tutt'oggi programma
in modo fluido, semplice e molto intuitivo.
In Internet, addirittura, si possono trovare librerie già scritte in base al nostro bisogno.
Per esempio se vogliamo fare qualche applicazione e ci serve qualche funzione in particolare o qualche libreria
per sensori possiamo ricorrere, appunto ad internet, e con una semplice ricerca possiamo trovare librerie che
fanno al caso nostro, così da inserirle nell’IDE e da li modificare le istruzioni a piacere in modo da adattarle al
nostro scopo.
In seguito vedremo come.
La scheda Arduino inoltre è in grado di interagire con l'ambiente in cui si trova ricevendo informazioni da una
grande varietà di sensori.
Ma non si parla solo di sensori, Arduino può comandare luci, LED, motori e altri attuatori. Il linguaggio di
programmazione è basato su Wiring (un ambiente di programmazione Open-Source pensato per una facile
applicazione per semplificare la programmazione in C e C++) e sull'interfaccia Processing.
C’è da dire che chi conosce il linguaggio di programmazione C per PIC o ad oggetti, passare ad Arduino sarà
molto ma molto semplice.
3
LA SCHEDA ARDUINO UNO
In questa guida analizzeremo più nel dettaglio la scheda Arduino Uno, le sue caratteristiche dei progetti, e le
shield (che spiegheremo più avanti).
Cominciamo a definire il Pin-Out del classico Arduino Uno
Arduino può essere alimentato semplicemente a 5 Volt, direttamente con l’USB del vostro PC.
Nella foto sopra vediamo che è composto da:
Analog In (Ingressi Digitali)
Ground (Massa)
4
Power In (Tensione 5V, 3.3V)
Digital I/O (Ingressi o uscite digitali)
PIN
Per comodità e per capire meglio il funzionamento di Arduino, spieghiamo cosa sono questi PIN e a cosa
servono.
ANALOG PIN IN
Pin analogici di ingresso
In questi PIN possiamo collegare qualsiasi cosa abbia un’uscita analogica da portare all’interno di Arduino ed
analizzare e tramite il software codificare il segnale. Per esempio (Trimmer, fotoresistenze, sensori analogici).
RICORDA:
Livello logico Alto (5 Volt)
Livello logico Basso ( Massa )
5
L’IDE
Per programmare Arduino sostanzialmente serve solo ed esclusivamente L’IDE, ovvero il software per poter
scrivere il vostro programma all’interno.
Vediamo come funziona e da dove scaricarlo.
L’IDE
Scaricabile da qui:
https://www.arduino.cc/download_handler.php?f=https://www.microsoft.com/store/apps/9nblggh4rsd8?ocid=ba
dge
6
L’IDE
L’istruzione.
Void Setup{
Semplicemente questa istruzione in Arduino deve essere sempre presente e all’interno si può dichiarare qualsiasi
cosa
Void Loop{
Questa istruzione è il semplice ciclo che Arduino una volta avviato ripete all’infinito.
7
IL NOSTRO PRIMO PROGRAMMA
Fermo restando che sappiate cosa siano resistenze, condensatori, transistor etc, e che quindi siate a conoscenza
delle semplici basi di elettronica, realizziamo quindi dopo aver spiegato cos’è e come funziona Arduino, il
nostro primo programma.
Facciamo Lampeggiare il nostro primo LED
Il circuito.
Ovviamente dobbiamo capire che per far accendere un led abbiamo bisogno di alimentarlo con la semplice
uscita digitale di Arduino.
Quindi il circuito sarà il seguente
8
IL NOSTRO PRIMO PROGRAMMA
Il software.
Una volta collegato il led con l’opportuna resistenza, andiamo ad aprire il nostro IDE.
Ricordate?
Ora andiamo a scrivere queste semplici istruzioni che commenteremo insieme.
9
IL NOSTRO SECONDO PROGRAMMA
10
Sintetizzando: Il pin 7 viene messo a livello logico alto, si aspetta 1 secondo, viene messo a livello logico basso,
si aspetta un secondo e così si ripete all’infinito.
PULSANTE E LED
Analizziamo oora la pressione di un pulsante per accendere un Led, cosi vedremo come gestire gli ingressi che
possono venire da pulsanti, sensori, etc.
RICORDA:
Le istruzioni del tipo, impostare a livello alto un pin, settare i pin input output, dichiarazioni variabili ecc hanno
bisogno tutti del punto e virgola finale ( ; )
Le istruzioni di controllo nell’esempio sopra IF ELSE, hanno bisogno della parentesi graffe iniziali e finali
if {
11
Tue istruzioni…
}
CICLO FOR
Il ciclo for è uno dei costrutti iterativi del linguaggio C per il controllo di flusso di un programma.
Mediante esso, è infatti possibile eseguire il mesedimo blocco di istruzioni per un certo numero di
ripetizioni. La sintassi generale è la seguente:
12
CICLO FOR
Dichiarando una variabile intera (in questo caso ciclo), vediamo che dopo è stato inserito il lampeggio del led in
ciclo for, che espressamente significa,
for(ciclo=0 ; ciclo<=100 ; ciclo++)
Fai un ciclo partendo da 0, fino a quando il conteggio non è arrivato a 100, incrementa la variabile ciclo di 1.
Una volta finito l’incremento esci dal ciclo.
13
INGRESSI ANALOGICI
Ora analizziamo nel dettagli una lettura di un potenziometro per variare il lampeggio di un led con gli ingressi
analogici citati in partenza.
Vediamo ora il codice. Come prima cosa definiamo una variabile. Una variabile è un valore che cambia nel
tempo, che può essere di vari tipi: intero, booleano, una stringa ecc, a cui viene associato un nome.
In questo caso usiamo una variabile intera che chiamiamo “valore_potenziometro” e a cui assegniamo il valore
“0” (zero):
int valore_potenziometro=0;
Scrivi ora il setup, all’interno del quale imposti il pin 13 come output e il pin analogico “A0” come input.
Il pin A0 “riceve” il dato dal potenziometro; Arduino “elabora e manda in uscita” il dato sul LED.
void setup(){
pinMode(13,OUTPUT);
pinMode(A0,INPUT);
}
14
INGRESSI ANALOGICI
Passiamo ora al loop; qui dici ad Arduino di cambiare il valore della variabile “valore_potenziometro” (che
inizialmente era zero) con la “lettura” del potenziometro, quindi il valore compreso tra 0 e 1023.
void loop(){
valore_potenziometro=analogRead(A0);
Poi scrivi il codice del programma visto nella precedente guida, sostituendo il tempo di ritardo con il valore
della variabile.
digitalWrite(13,HIGH);
delay(valore_potenziometro);
digitalWrite(13,LOW);
delay(valore_potenziometro);
}
In questo caso quando sposteremo il cursore del potenziometro, cambierà il tempo di lampeggio del led.
15
LEGGIAMO UN FOTORESISTORE
Analizziamo lo stesso principio con una fotoresistenza, in questo caso il codice sarà esattamente lo stesso.
int valore_potenziometro=0;
void setup(){
pinMode(13,OUTPUT);
pinMode(A0,INPUT);
}
void loop(){
valore_potenziometro=analogRead(A0);
digitalWrite(13,HIGH);
delay(valore_potenziometro);
digitalWrite(13,LOW);
delay(valore_potenziometro);
16
Il software sarà esattamente lo stesso, ma in questo caso la resistenza cambierà da sola al variare della luce.
COMANDIAMO UN SERVO
In Arduino possiamo comandare svariati componenti tra cui vediamo un esempio banale con un servo.
Ti ricordo che Arduino è di facile intuizione quindi nell’IDE troverai già delle librerie precompilate per pilotare
il tuo servo.
Il Circuito.
17
COMANDIAMO UN SERVO
Il Codice
#include <Servo.h> // include la Libreria Servo.h quella contenete la classe di cui ho parlato sopra;
Servo myservo; // crea l’oggetto di tipo Servo, myservo sarà l’oggetto su cui opererai;
int pos = 0; // inizializza una variabile di tipo intero pos il cui valore sarà la posizione da impartire al servo;
void setup()
{
myservo.attach(9); // attach(), questo metodo lega l’oggetto myservo al pin a cui abbiamo collegato il
nostro servo, in questo caso il pin 9;
void loop()
{
for(pos = 0; pos < 180; pos += 1) // ciclo for visto in precedenza
{
myservo.write(pos);
// con il metodo write() passi all’oggetto myservo la posizione che deve raggiungere, essendo il ciclo
impostato per crescere con valori compresi tra 0 e 180 il servo si sposterà gradualmente dalla sua
posizione 0° alla posizione 180°;
myservo.write(pos); delay(15);
18
LIBRERIE E ESEMPI
19
ARDUINO UNO
Nella foto precedente vediamo come è semplice raggiungere gli esempi nell’IDE e se clicchiamo su BLINK
l’interfaccia aprirà direttamente un sorgente con il codice che abbiamo discusso precedentemente che fa in
modo che un led lampeggi.
In conclusione lasciamo un riferimento alle istruzioni di Arduino, e un link dove poter consultare tutti gli
esempi per ogni singola istruzione.
Arduino è la tecnologia del futuro, permette di comandare, gestire qualsiasi tipo di sensore o dispositivo esterno
semplicemente scrivendo delle righe di codice o modificando quelle preimpostate.
Potete creare prototipi, applicazioni sul cellulare per comando bluetooth e addirittura centraline per la domotica
attraverso la rete internet.
In questo mini capitolo abbiamo dato, a differenza di altri eBook le basi per iniziare a prendere manualità con
Arduino, nei successivi capitoli vedremo gli shield (ovvero le schede da implementare ad Arduino), e svariati
sensori per creare delle vere e proprie applicazioni prototipali.
20
Lasciamo linkate alcune istruzioni da utilizzare nei nostri sorgenti, ogni istruzione ha un suo esempio per
implementarla, Tutto ciò proviene proprio dal sito Arduino. E il link per raggiungerle è:
https://www.arduino.cc/reference/en/
Digital I/O
digitalRead()
digitalWrite()
pinMode()
Analog I/O
analogRead()
analogReference()
analogWrite()
Advanced I/O
noTone()
pulseIn()
pulseInLong()
shiftIn()
shiftOut()
tone()
Time
delay()
delayMicroseconds()
micros()
millis()
Math
abs()
constrain()
21
map()
max()
min()
pow()
sq()
sqrt()
Trigonometry
cos()
sin()
tan()
Characters
isAlpha()
isAlphaNumeric()
isAscii()
isControl()
isDigit()
isGraph()
isHexadecimalDigit()
isLowerCase()
isPrintable()
isPunct()
isSpace()
isUpperCase()
isWhitespace()
Random Numbers
random()
randomSeed()
22
External Interrupts
attachInterrupt()
detachInterrupt()
Interrupts
interrupts()
noInterrupts()
Communication
Serial
stream
USB
Keyboard
Mouse
23
VARIABLES
Constants
Floating Point Constants
Integer Constants
HIGH | LOW
INPUT | OUTPUT | INPUT_PULLUP
LED_BUILTIN
true | false
Conversion
byte()
char()
float()
int()
long()
word()
Data Types
String
String()
array
bool
boolean
byte
char
double
float
int
long
short
unsigned char
unsigned int
unsigned long
void
word
24
Variable Scope & Qualifiers
const
scope
static
volatile
Utilities
PROGMEM
sizeof()
25
STRUCTURE
Sketch
loop()
setup()
Control Structure
break
continue
do...while
else
for
goto
if...else
return
switch...case
while
Further Syntax
#define (define)
#include (include)
/* */ (block comment)
// (single line comment)
; (semicolon)
{} (curly braces)
Arithmetic Operators
% (remainder)
* (multiplication)
+ (addition)
- (subtraction)
/ (division)
= (assignment operator)
Comparison Operators
!= (not equal to)
< (less than)
26
<= (less than or equal to)
== (equal to)
> (greater than)
>= (greater than or equal to)
Boolean Operators
! (logical not)
&& (logical and)
|| (logical or)
Bitwise Operators
& (bitwise and)
<< (bitshift left)
>> (bitshift right)
^ (bitwise xor)
| (bitwise or)
~ (bitwise not)
Compound Operators
&= (compound bitwise and)
*= (compound multiplication)
++ (increment)
+= (compound addition)
-- (decrement)
-= (compound subtraction)
27