1 of 54

ELETTRONICA CON ARDUINO

version: 2319

workshop Arduino - FabLab Messina

2 of 54

Parte 1

  • Basi di elettronica: tensione, corrente, resistenza, potenziometri, diodi, diodi LED;
  • Segnali digitali, segnali analogici, ADC, PWM;
  • Arduino e le sue applicazioni;
  • Arduino uno: pinout e componenti della scheda;
  • Sensori e attuatori: fotoresistenze, sensore di temperatura e umidità, servomotori.

workshop Arduino - FabLab Messina

3 of 54

TENSIONE E CORRENTE

Basi di elettronica

Resistenza (Ω)

Tensione (V)

Corrente (A)

workshop Arduino - FabLab Messina

4 of 54

TENSIONE (V)

  • La differenza di potenziale elettrico, o tensione, è definita come la differenza tra il potenziale elettrico di due punti dello spazio. (Wikipedia)

workshop Arduino - FabLab Messina

5 of 54

CORRENTE (A)

  • La corrente elettrica è un moto ordinato di cariche elettriche, ossia la quantità di carica elettrica che attraversa una determinata superficie nell'unità di tempo. (Wikipedia)

workshop Arduino - FabLab Messina

6 of 54

RESISTENZA (Ω)

  • La resistenza elettrica è una grandezza fisica che misura la tendenza di un corpo ad opporsi al passaggio di una corrente elettrica, quando sottoposto ad una tensione elettrica. Questa opposizione dipende dal materiale con cui è realizzato, dalle sue dimensioni e dalla sua temperatura. (Wikipedia)

workshop Arduino - FabLab Messina

7 of 54

  • Il generatore alimenta il circuito imponendo una tensione;
  • La quantità di corrente che scorre all'interno del circuito dipende dalla resistenza che il generatore incontra;
  • Tensione, corrente e resistenza sono legate fra loro secondo la legge di Ohm:

V = I × R

CIRCUITO ELETTRICO

workshop Arduino - FabLab Messina

8 of 54

Esempi di componenti elettronici

RESISTORE

=

workshop Arduino - FabLab Messina

9 of 54

Esempi di componenti elettronici

RESISTORE

R1

R2

=

Rtot

Collegamento in serie

Collegamento in parallelo

Rtot = R1 + R2

R1

R2

=

Rtot

R1 × R2

R1 + R2

Rtot =

workshop Arduino - FabLab Messina

10 of 54

PARTITORE DI TENSIONE

È un circuito composto da 2 o più resistenze connesse in serie.

Una tensione applicata ai capi della serie si ripartirà su ogni componente in base al proprio valore.

>

I

Vin

I =

R1+ R2

Vout = I × R2

Vout = Vin ×

R2

R1+ R2

workshop Arduino - FabLab Messina

11 of 54

POTENZIOMETRO

  • Può essere visto come due resistenze connesse in serie: RAC e RBC
  • Ruotando l'albero del potenziometro è possibile variare i valori delle resistenze RAC e RBC
  • La resistenza RABè fissa ed uguale alla somma RAC+RBC
  • Il valore della resistenza RABè il parametro di riferimento con cui viene scelto un potenziometro.

Un comune esempio di utilizzo di un partitore di tensione è il potenziometro.

A

B

C

workshop Arduino - FabLab Messina

12 of 54

DIODO

  • Il diodo permette il passaggio di corrente solo se la tensione ai suoi capi supera un certo valore di soglia minimo (tipicamente 0.6/0.7v).
  • La tensione in uscita dal diodo sarà ridotta del valore di soglia.
  • Questo valore di soglia viene chiamato voltage drop (caduta di tensione).

Il diodo è un componente elettronico a due terminali che permette il passaggio della corrente in un solo verso (dall'anodo verso il catodo) e di bloccarla in quello opposto.

Anodo

Catodo

workshop Arduino - FabLab Messina

13 of 54

LED

  • Il materiale con cui viene realizzato determina il colore della luce emessa;
  • Il voltage drop di un diodo LED è maggiore che in un normale diodo e dipende dal colore della luce emessa.
  • Mediamente l'assorbimento è di pochi mA, ma può arrivare fino 20-25mA nel caso di LED ad alta luminosità.
  • Una corrente troppo elevata comporta la distruzione immediata del LED.

Light Emitting Diode, è un particolare diodo che, se polarizzato direttamente, è in grado di emettere luce.

workshop Arduino - FabLab Messina

14 of 54

LED

  • PROBLEMA: dobbiamo alimentare un LED verde avendo a disposizione una tensione di 5v (output pin arduino). Dobbiamo dimensionare la resistenza in maniera tale da far scorrere 15 mA attraverso il LED.
  • DATI:
    • VIN = 5v
    • VLED = 2.2v
    • ILED = 15mA
    • R = ?

⚠️ Una corrente troppo elevata comporta la distruzione immediata del LED ⚠️

R

LED

5v

I�>

workshop Arduino - FabLab Messina

15 of 54

LED

SVOLGIMENTO: la tensione in eccesso rispetto a VLED è:

VR = VPIN - VLED = 5v - 2.2v = 2.8v

Dobbiamo fare in modo che sulla resistenza "cada" una tensione di 2.8v, ricordandoci che la corrente che l’attraversa deve essere 15mA.

La legge di Ohm ci ricorda che:� V = R × I R =

V

I

La nostra resistenza quindi dovrà essere da:

R =

2.8v

0.015A

= 186.7Ω ≈ 180Ω

VPIN - VLED

ILED

=

⚠️ Una corrente troppo elevata comporta la distruzione immediata del LED ⚠️

R

LED

5v

I�>

workshop Arduino - FabLab Messina

16 of 54

SEGNALI ELETTRICI

DIGITALI

ANALOGICI

PWM

workshop Arduino - FabLab Messina

17 of 54

In logica binaria un segnale elettrico può assumere solo due valori: 0 e 1;

Non esistono valori intermedi, minori di 0 e maggiori di 1;

  • 0 è generalmente associato al valore 0v;
  • 1 è generalmente associato ad una tensione diversa da 0v (5v, 3.3v, ecc);

Un segnale digitale può assumere solo determinati valori, ad esempio uno alto e uno basso

t

V

esempio:

0 = BASSO = FALSO = 0v

1 = ALTO = VERO = 5v

SEGNALI DIGITALI

0v

5v

workshop Arduino - FabLab Messina

18 of 54

Un segnale si dice analogico se può assumere infiniti valori di tensione.

  • Esempio: 0v, 0.5v, 2.2v, 3.3654v, 4.09v sono tutti valori validi.
  • Grazie all'ADC (Analog Digital Converter), Arduino è in grado di leggere tensioni analogiche e di convertirle in un dato digitale.
  • L'ADC di Arduino UNO ha una risoluzione di 10 bit. La tensione analogica, all'interno del microcontrollore, viene rappresentata con un numero a 10 bit.

t

V

5v

SEGNALI ANALOGICI

workshop Arduino - FabLab Messina

19 of 54

SEGNALI ANALOGICI

ADC - Analog Digital Converter

  • Un numero rappresentato con 10 bit può assumere 210 distinti valori, ossia 1024 distinti valori che vanno da 0 a 1023;
  • 1023 equivale a 5V
  • 0 equivale a 0V

t

n

1023

0

424

768

workshop Arduino - FabLab Messina

20 of 54

MODULAZIONE PWM

È una particolare tecnica attraverso la quale è possibile modulare nel tempo una tensione.

  • Arduino UNO non è dotato di DAC (Digital to Analog Converter) quindi non può generare tensioni analogiche;

  • Per certe applicazioni in cui servirebbe una tensione analogica (come regolare la velocità di un motore o l’intensità luminosa di un LED), possiamo sfruttare un segnale PWM.�
  • PWM: Pulse Width Modulation (Modulazione di larghezza d'impulso)
  • Il segnale digitale viene “alternato” tra i suoi due stati (0v e 5v) nel tempo, a frequenza prestabilita.
  • Il rapporto fra la durata dello stato alto (tON) e la durata totale del segnale (tON + tOFF) viene chiamato DUTY CYCLE

tON

tON + tOFF

D% = x 100

workshop Arduino - FabLab Messina

21 of 54

MODULAZIONE PWM

È una particolare tecnica attraverso la quale è possibile modulare nel tempo una tensione.

  • Il generatore PWM di Arduino UNO ha una risoluzione di 8 bit;
  • Un numero rappresentato con 8 bit può assumere 28 distinti valori ovvero 256 distinti valori che vanno da 0 a 255;
  • 0 equivale a duty cycle 0%
  • 255 equivale a duty cycle 100%

workshop Arduino - FabLab Messina

22 of 54

ARDUINO: cos'è?

  • Arduino è una piattaforma hardware composta da una serie di schede elettroniche dotate di un microcontrollore.
  • È un progetto open source nato all'interno dell'Interaction Design Institute di Ivrea come strumento per la prototipazione rapida e per scopi hobbistici, didattici e professionali.
  • Il suo linguaggio di programmazione si basa su una versione semplificata del C/C++.

workshop Arduino - FabLab Messina

23 of 54

ARDUINO: applicazioni

Arduino nel corso degli anni è stato utilizzato in centinaia di migliaia di progetti all'interno di diversi settori come l'arte, la moda, la musica, giocattoli, modellismo ma anche in applicazioni tecnologiche come macchine CNC, mezzi di trasporto o applicazioni industriali.

DART

Ultimaker

Farmbot

workshop Arduino - FabLab Messina

24 of 54

ARDUINO al plurale

workshop Arduino - FabLab Messina

25 of 54

ARDUINO shield

workshop Arduino - FabLab Messina

26 of 54

Arduino UNO: specifiche tecniche

workshop Arduino - FabLab Messina

27 of 54

workshop Arduino - FabLab Messina

28 of 54

SENSORI E ATTUATORI

  • Un sensore è un dispositivo in grado di convertire una grandezza fisica in ingresso in un segnale elettrico.
  • Un attuatore, è un dispositivo in grado di convertire un segnale elettrico in movimento.

workshop Arduino - FabLab Messina

29 of 54

FOTORESISTENZA

Sensori e attuatori

  • Si comporta come un resistore in cui la sua resistenza diminuisce all'aumentare della luce che lo colpisce.
  • Spesso viene utilizzata in dispositivi come i crepuscolari, permettendo l'accensione di una luce al calar del sole.
  • Con un semplice circuito è possibile collegarlo ad un ingresso analogico di Arduino.

5v

Fotoresistenza

R

Arduino

Analog IN

workshop Arduino - FabLab Messina

30 of 54

TEMPERATURA E UMIDITÀ

Sensori e attuatori

  • Il DHT11 è un particolare sensore digitale che permette la misurazione di temperatura e umidità.

  • Range di funzionamento:
    • temperatura: 0°C - 50°C (±2°C)
    • umidità: 20% - 90% (±5%)
  • Essendo un sensore digitale non può essere trattato come una fotoresistenza, infatti non restituisce un segnale analogico ma una sequenza di bit contenente dei dati.

workshop Arduino - FabLab Messina

31 of 54

SERVO

Sensori e attuatori

  • È un attuatore che attraverso un controllo analogico permette la rotazione della ghiera di angoli esatti.
  • È in grado di mantenere l'angolazione, sopportando notevoli sforzi.

workshop Arduino - FabLab Messina

32 of 54

Parte 2

  • Arduino IDE: introduzione, installazione e interfaccia;
  • Cosa sono gli sketch: commenti, funzioni, variabili, istruzioni, strutture di controllo, librerie.
  • Componenti del kit;
  • Realizzazione primo esempio: blink;
  • Esercitazioni.

workshop Arduino - FabLab Messina

33 of 54

ARDUINO IDE

  • L'Arduino IDE (Integrated Development Environment) è un'applicazione multipiattaforma che consente la stesura del codice sorgente (sketch).
  • Include un editor di testo dotato di syntax highlighting, controllo delle parentesi e indentazione automatica.
  • Con un singolo click è in grado di compilare e caricare il programma su qualsiasi scheda Arduino.

processo durante il quale uno sketch viene convertito in linguaggio macchina, comprensibile dal microcontrollore.

compile

upload

workshop Arduino - FabLab Messina

34 of 54

INTERFACCIA

Arduino IDE

Nome sketch

Barra strumenti

Barra menu

Campo codice sorgente

Barra di stato

workshop Arduino - FabLab Messina

35 of 54

Funzione: blocco di codice, racchiuso da una coppia di parentesi graffe, richiamabile attraverso uno specifico nome.

  • Lo sketch base contiene le due funzioni principali di Arduino:
    • setup(): le istruzioni contenute in questa funzione vengono eseguite una sola volta all'accensione di Arduino.
    • loop(): le istruzioni contenute in questa funzione vengono eseguite ciclicamente fino allo spegnimento di Arduino.

Sketch è il nome con il quale viene indicato il codice sorgente per Arduino.

I file contenenti gli sketch hanno estensione .ino.

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

36 of 54

Funzione: blocco di codice, racchiuso da una coppia di parentesi graffe, richiamabile attraverso uno specifico nome.

  • Lo sketch base contiene le due funzioni principali di Arduino:
    • setup(): le istruzioni contenute in questa funzione vengono eseguite una sola volta all'accensione di Arduino.
    • loop(): le istruzioni contenute in questa funzione vengono eseguite ciclicamente fino allo spegnimento di Arduino.

Variabili globali

setup()

loop()

Sketch è il nome con il quale viene indicato il codice sorgente per Arduino.

I file contenenti gli sketch hanno estensione .ino.

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

37 of 54

  • Un commento è una parte di testo che non verrà compilata;
    • Su più linee:

    • Su una linea:

/* questo è

un commento */

//questo è un commento

“Commentare” il codice:

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

38 of 54

Variabile: porzione di memoria, identificata da un'etichetta, contenente un dato; deve essere dichiarata prima di essere usata;

Può contenere diversi tipi di dato che vanno indicati con:

    • boolean: può contenere due valori, true o false;
    • char: può contenere un carattere, es. 'A';
    • int: può contenere un valore numerico intero compreso tra -32'768 e 32'767;
    • long: può contenere un valore numerico intero compreso tra -2'147'483'648 e 2'147'483'647;
    • float: può contenere numeri in virgola mobile;
    • String: può contenere stringhe.

tipo

nome

contenuto

ATTENZIONE: esistono delle parole riservate che non possono essere utilizzate come nomi per variabili e funzioni. Grazie al syntax highlighting è possibile riconoscere queste parole dal diverso colore con la quale vengono scritte (es. delay, HIGH, ecc).

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

39 of 54

Istruzione:

  • Una riga di codice che può contenere una dichiarazione, un'assegnazione o la chiamata a una funzione;
  • Ogni istruzione deve terminare necessariamente con “;”.

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

40 of 54

Strutture di controllo:

  • Le strutture di controllo sono costrutti che servono a specificare se, quando, e quante volte devono essere eseguite le istruzioni che compongono il codice sorgente.

costrutto

if - else

costrutto

for

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

41 of 54

Libreria:

  • È uno o più file contenente altro codice sorgente, che può essere incluso all'interno del nostro sketch attraverso un collegamento;
  • L'inclusione all'interno dello sketch avviene attraverso la direttiva #include.

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

42 of 54

Oggetti:

  • Un oggetto di un certo tipo viene dichiarato nello stesso modo in cui si dichiara una variabile;
  • Utile per incapsulare funzionalità e tenere il codice ordinato;
  • Un’istanza di un oggetto permette di invocare determinati metodi ad esso relativi.

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

43 of 54

Principali funzioni (reference):

  • pinMode(pin, ); imposta un pin come input o come output.
  • digitalRead(pin); legge lo stato digitale del pin.
  • digitalWrite(pin, ); scrive lo stato digitale di un pin.
  • analogRead(pin); legge il valore di un ingresso analogico.
  • analogWrite(pin, val); scrive un valore analogico su un pin.
  • delay(x); inserisce una pausa di x millisecondi.
  • Serial.begin(x); inizializza la seriale alla velocità di x baud.
  • Serial.print("text"); stampa la parola text sulla seriale.

INPUT

oppure

OUTPUT

HIGH

oppure

LOW

COSA SONO GLI SKETCH

workshop Arduino - FabLab Messina

44 of 54

Componenti:

  • 1 x Breadboard;
  • 1 x Servo;
  • 1 x DHT11;
  • 1 x Potenziometro;
  • 1 x Fotoresistenza;
  • 2 x Bottone;
  • 2 x LED rosso;
  • 2 X LED verde;
  • 2 x LED giallo;
  • 1 x LED RGB;
  • 3 x Resistenza 10K Ohm;
  • 3 x Resistenza 220 Ohm;
  • 10 x jumper M-M.

COMPONENTI DEL KIT

workshop Arduino - FabLab Messina

45 of 54

BREADBOARD

Componenti del KIT

workshop Arduino - FabLab Messina

46 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 1 x resistenza 220Ω;
  • 1 x LED;

BLINK

Sketch:

int led = 13;

void setup() {

pinMode(led, OUTPUT);

}

void loop() {

digitalWrite(led, HIGH);

delay(1000);

digitalWrite(led, LOW);

delay(1000);

}

workshop Arduino - FabLab Messina

47 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 1 x resistenza 220Ω;
  • 1 x LED.

CONTROLLO LED DA SERIALE

Sketch:

int led = 13;

char carattere;

void setup() {

Serial.begin(9600);

pinMode(led, OUTPUT);

}

void loop() {

if (Serial.available() > 0) {

carattere = Serial.read();

if (carattere == 'H') {

digitalWrite(led, HIGH);

}

else if (carattere == 'L') {

digitalWrite(led, LOW);

}

}

}

workshop Arduino - FabLab Messina

48 of 54

BUTTON

Componenti:

  • 1 x Breadboard;
  • 1 x Arduino;
  • 1 x resistenza 220 Ω;
  • 1 x LED;
  • 1 x bottone;
  • 1 x resistenza 10 KΩ.

Sketch:

int pinBottone = 2;

int pinLed = 13;

int statoBottone = 0;

void setup() {

pinMode(pinLed, OUTPUT);

pinMode(pinBottone, INPUT);

}

void loop() {

statoBottone = digitalRead(pinBottone);

if (statoBottone == HIGH) {

digitalWrite(pinLed, HIGH);

}

else

{

digitalWrite(pinLed, LOW);

}

}

workshop Arduino - FabLab Messina

49 of 54

ANALOG INPUT - ANALOG OUTPUT

Componenti:

  • 1 x Breadboard;
  • 1 x Arduino;
  • 1 x resistenza 220 Ω;
  • 1 x LED;
  • 1 x potenziometro.

Sketch:

int pinPot = A0;

int pinLed = 9;

int valoreSensore = 0;

void setup() {

pinMode(pinLed, OUTPUT);

}

void loop() {

valoreSensore = analogRead(pinPot);

valoreSensore = map(valoreSensore, 0, 1023, 0, 255);

analogWrite(pinLed, valoreSensore);

}

workshop Arduino - FabLab Messina

50 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 3 x resistenza 220Ω;
  • 1 x LED RGB.

SEMAFORO LED RGB

Sketch:

int ledR = 10;

int ledG = 9;

int ledB = 11;

void semaforo(int colore);

void setup() {

pinMode(ledR, OUTPUT);

pinMode(ledG, OUTPUT);

pinMode(ledB, OUTPUT);

}

void loop() {

semaforo(ledR);

delay(3000);

semaforo(ledG);

delay(3000);

semaforo(ledB);

delay(3000);

}

void semaforo(int colore) {

digitalWrite(ledR, LOW);

digitalWrite(ledG, LOW);

digitalWrite(ledB, LOW);

digitalWrite(colore, HIGH);

}

workshop Arduino - FabLab Messina

51 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 3 x resistenza 220Ω;
  • 1 x LED RGB.

CONTROLLO LED RGB DA SERIALE

Sketch:

int ledR = 10;

int ledG = 9;

int ledB = 11;

char carattere;

void setup() {

Serial.begin(9600);

pinMode(ledR, OUTPUT);

pinMode(ledG, OUTPUT);

pinMode(ledB, OUTPUT);

}

void loop() {

if (Serial.available() > 0) {

carattere = Serial.read();

if (carattere == 'R') {

digitalWrite(ledR, HIGH);

}

else if (carattere == 'r') {

digitalWrite(ledR, LOW);

}

else if (carattere == 'G') {

digitalWrite(ledG, HIGH);

}

else if (carattere == 'g') {

digitalWrite(ledG, LOW);

}

else if (carattere == 'B') {

digitalWrite(ledB, HIGH);

}

else if (carattere == 'b') {

digitalWrite(ledB, LOW);

}

}

}

workshop Arduino - FabLab Messina

52 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 1 x fotoresistenza;
  • 1 x resistenza 10 KΩ.

FOTORESISTENZA

Sketch:

int pinFoto = A0;

int valore = 0;

void setup() {

Serial.begin(9600);

}

void loop() {

valore = analogRead(pinFoto);

Serial.print("Valore letto = ");

Serial.println(valore);

}

workshop Arduino - FabLab Messina

53 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 1 x sensore DHT11;
  • 1 x resistenza 4.7 KΩ.

SENSORE DHT11

Sketch:

#include "DHT.h" //includiamo la libreria

int pinDHT = 3;

DHT dht(pinDHT, DHT11);

void setup() {

Serial.begin(9600);

Serial.println("Test temperatura e umidità!");

Serial.println("T(C) \tH(%)");

dht.begin();

}

void loop() {

float h = dht.readHumidity();

float t = dht.readTemperature();

if (isnan(h) || isnan(t)) {

Serial.println("Lettura fallita!");

}

else

{

Serial.print(t, 2); //2 cifre decimali

Serial.print("\t");

Serial.println(h, 2); //2 cifre decimali

delay(2000);

}

}

workshop Arduino - FabLab Messina

54 of 54

Componenti:

  • 1 x Breadboard
  • 1 x Arduino;
  • 1 x Servo;
  • 1 x potenziometro;

SERVO

Sketch:

#include <Servo.h> //includiamo la libreria

int pinPot = A3;

int pinServo = 9;

int val;

Servo myservo;

void setup() {

myservo.attach(pinServo);

}

void loop() {

val = analogRead(pinPot);

val = map(val, 0, 1023, 0, 180);

myservo.write(val);

delay(15);

}

workshop Arduino - FabLab Messina