Sei sulla pagina 1di 27

Impariamo a conoscere e sviluppare i nostri progetti

Di Simone Manni

Primo capitolo per principianti


Dettagliato e semplice
Sommario

Arduino Cos’è Nozioni pag 3


La scheda Arduino Uno pag 4
Il pin-Out della scheda pag 5
L’IDE pag 6-7
Il nostro primo programma pag 8-9
Il nostro secondo programma pag 10
Accendiamo un led con un pulsante pag 11
Il ciclo FOR pag 12-13
Ingressi analogici Arduino pag 14-15
Leggiamo un fotoresistore pag 16
Comandiamo un servomotore pag 17-18
Librerie e esempi pag 19
Istruzioni pag da21 a27

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.

Si basa su un Microcontrollore della ATMEL, ATMega168/328.

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).

DIGITAL PIN OUT ~


Pin digitali di uscita PWM
Nei PIN digitali vediamo dalla foto che abbiamo un’onda sui pin 3, 5, 6, 10, 11, questi Pin servono
esclusivamente per mandare in uscita un segnale PWM ad onda quadra, con duty cycle variabile a livello
software, inoltre possiamo mandare in uscita su questi pin anche dei semplici segnali analogici (vedremo negli
esempi avanti come fare).

DIGITAL PIN OUT


Pin digitali di uscita.
Nei PIN digitali vediamo dalla foto che abbiamo dei pin dove non è presente quest’onda ~. Sono i classici PIN
digitali di uscita che Porteremo a livello logico Alto o Basso in base alle nostre esigenze

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

Ci troveremo di fronte a questa schermata una volta installato

6
L’IDE

Analizziamo quello che ci troveremo di fronte

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.

Adesso analizziamo il nostro primo programma, accendiamo il nostro primo led.

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.

L’istruzione pinMode(7, OUTPUT)


Semplicemente dice ad Arduino che il PIN 7 è abilitato per usarlo come uscita
Mentre nel loop infinito l’istruzione digitalWrite(7, HIGH)
Dice ad Arduino che deve mandare a livello logico alto (5 Volt) il pin 7 dove è collegato il led.
Ora vedrete il vostro led accendersi.

9
IL NOSTRO SECONDO PROGRAMMA

Ora mettiamo il caso che vogliamo far lampeggiare il led.


Una volta collegato il led con l’opportuna resistenza, andiamo ad aprire il nostro IDE, e scrivete questo codice.

Nel loop infinito questa volta troviamo l’istruzione digitalWrite(7, HIGH)


Dice ad Arduino che deve mandare a livello logico alto (5 Volt) il pin 7 dove è collegato il led.
Ma l’istruzione delay(1000); serve semplicemente a creare un ritardo prima di eseguire la prossima istruzione,
in questo caso il ritardo è espresso in millisecondi, quindi 1000 millisecondi equivalgono a 1 secondo prima di
procedere con l’istruzione successiva digitalWrite(7, LOW)
che semplicemente fa la stessa cosa della prima solo che al posto di HIGH inseriamo LOW ovvero livello logico
basso (massa).

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.

1. Accendere il led appena è premuto il pulsante


2.
3. int val = 0; // definisco una variabile intera VAL che all’inizio sarà 0
4.
5. void setup() {
6. pinMode(13, OUTPUT); // imposta il pin digitale come output
7. pinMode(7, INPUT); // imposta il pin digitale come input
8. }
9.
10. void loop() {
11. val = digitalRead(7); // legge il valore dell'input dal pin 7 e lo conserva in VAL
12.
13. if (val == HIGH) { // controlla che l'input sia HIGH (pulsante premuto) 5 Volt
14.
15. digitalWrite(LED, HIGH); //accende il led
16. }
17. else { // altrimenti (else)
18. digitalWrite(LED, LOW); //spegne il led
19. }
20. }

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 ( ; )

Ad esclusione delle istruzioni di controllo.


Del tipo IF, ELSE, o cicli come FOR, WHILE, non hanno bisgno 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

Analizziamo ora un 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:

for (<inizializzazione>; <condizione>; <espressione_iterativa>)


{
// istruzioni
}

12
CICLO FOR

Vediamo un esempio del 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.

Collega il potenziometro e il led come in figura.

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°;

delay(15); // attendi 15 millisecondi


}

for(pos = 180; pos>=1; pos-=1) // ciclo for al contrario


{

myservo.write(pos); delay(15);

18
LIBRERIE E ESEMPI

Le librerie e gli esempi.


In Arduino come detto in precedenza ci sono già delle librerie da poter includere e degli esempi da poter
prelevare e modificare a piacimento.
Vediamo come fare.

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.

Ci vediamo al prossimo capitolo.

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()

Zero, Due & MKR Family


analogReadResolution()
analogWriteResolution()

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()

Bits and Bytes


bit()
bitClear()
bitRead()
bitSet()
bitWrite()
highByte()
lowByte()

22
External Interrupts
attachInterrupt()
detachInterrupt()

Interrupts
interrupts()
noInterrupts()

Communication
Serial
stream

USB
Keyboard
Mouse

23
VARIABLES

Arduino data types and constants.

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

The elements of Arduino (C++) code.

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)

Pointer Access Operators


& (reference operator)
* (dereference operator)

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