Il Semaforo

Obiettivo: Realizzazione di un semplice semaforo utilizzando Arduino.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 3 Led (verde giallo e rosso)
  • 3 Resistenze (100 Ohm)

TeoriaAl fine di realizzare una semaforo a LED (Light Emitting Diode), 3 diodi ad Emettitore di Luce (1 verde, 1 giallo ed 1 rosso) sono stati utilizzati e collegati a differenti PIN digitali di Arduino. Come nelle lezioni precedenti ad ogni LED è associata una resistenza al fine di limitare il passaggio di corrente.

Collegamento Circuitale:

Collegamento Circuitale

Codice:



PersonalizzazioniE’ possibile modificare il comportamento del circuito in questione intervenendo sul valore delle variabili greenTime,.yellowTime, redTime. Modificando i valori infatti cambia la velocità di funzionamento del semaforo.
E’ inoltre possibile aggiungere ulteriori LED per simulare un semaforo doppio o un incrocio.




Blinking led [Avanzato]

Obiettivo: Realizzazione, mediante breadboard, di un led che lampeggi ad una frequenza specifica (e.g., 1Hz) su un PIN differente dal 13.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • Led
  • Resistenza (100 Ohm)

TeoriaAl fine di garantire il corretto funzionamento del LED su un pin differente dal 13, è indispensabile l’utilizzo di una resistenza in serie al dispositivo. La resistenza permette di regolare fissare i corretti valori di tensione e corrente necessari ad alimentare il LED.
Ad esempio, considerando una tensione sul pin di Arduino pari a 5V ed i seguenti parametri caratteristici del LED:

  • ILed = 20 mA
  • VLed = 1,5 V

Data la legge di Ohm V=RI, la resistenza necessaria per garantire un corretto funzionamento del diodo emettitore di luce può essere così calcolata:

R = (5-2)/20*10^(-3)

Collegamento Circuitale:

Collegamento Circuitale

Codice:


[crayon-678780a518d7f771202494/]

Tinkercad:



https://www.tinkercad.com/embed/ckyY3Pamusd

PersonalizzazioniE’ possibile modificare il comportamento del circuito in questione intervenendo sul valore della variabile ledTime. Modificando il suo valore infatti cambia la frequenza di lampeggiamento del LED.
E’ inoltre possibile modificare il pin digitale utilizzato per pilotare il LED cambiando rispettivamente hardware e software.

Approfondimento Teorico:

Legge di Ohm: La legge di Ohm mette in relazione le tre grandezze elettriche fondamentali Tensione (Volt), Intensità di Corrente (Ampere) e Resistenza (Ohm) secondo la seguente relazione.

V = RI

L’utilizzo di una resistenza, in serie al LED, serve appunto per limitare la quantità di corrente presente sul diodo emettitore di luce.




Caricare il primo programma (Blinking Led)

Obiettivo: Utilizzare il Software Arduino per caricare il primo programma e fare lampeggiare un LED



Prerequisiti


Blinking led [Avanzato]



Come installare l’ambiente Software di Arduino


Teoria:

Attraverso il software di programmazione precedentemente scaricato è possibile caricare sulla piattaforma Arduino dei programmi ad hoc che abbiamo il compito di svolgere determinate operazioni utili per trasformare i propri input in output specifici.
A seguire vengono riportate le principali istruzioni utili per caricare un programma prestabilito (nel caso specifico blinking led avanzato)

  • Aprire il software Arduino
  • Collegare la scheda Arduino al PC mediante cavo USB
  • Impostare la porta di comunicazione corretta (IMPORTANTE: se la porta non viene impostata non è possibile caricare il programma)
Configurare Porta Seriale Arduino
  • r ePCompilare il codice: questa operazione serve per vedere se il codice scritto presenta degli errori. La compilazione si esegue premendo la spunta evidenziata in figura (in alto a sinistra).
Compilare il codice
  • Caricare il codice sulla piattaforma Arduino (questa operazione deve essere eseguita solo se il codice e’ stato opportunamente compilato).
    Il caricamento si esegue premendo la freccia a destra evidenziata in figura (in alto a sinistra).



Variabili Locali e Globali

Obiettivo: Comprendere cosa è una variabile e quali sono le differenze tra variabili locali e globali.



Teoria: Le variabili sono gli strumenti utilizzati in tutti i linguaggi di programmazione per la memorizzazione dei dati. Da un punto di vista pratico, le variabili possono essere considerate come contenitori di dati situati in una determinata area della memoria. Le variabili sono caratterizzate da tre differenti elementi: il tipo di dato, il nome, ed il valore contenuto.

  • Tipo di dato: A seconda del dato che una variabile deve memorizzare il programmatore deve scegliere il corretto tipo di riferimento. Nella seguente tabella vengono riportati i principali tipi di dati utilizzati in Arduino
Tipo di Dato Dimensione   Descrizione
char 1 Byte Contenitore per caratteri e valori alfanumerici (e.g., ‘a’, ‘b’, ‘1’, etc)
bool 1 Byte Contenitore per valori booleani (e.g., true, false)
int 2 Byte Contenitore per numeri interi nel range numerico, da -32768 a 32767.
unsigned int 2 Byte Contenitore per numeri interi senza segno nel range numerico, da 0 a 65535.
long 4 Byte Contenitore per numeri interi nel range numerico, da -2147483648 a 2147483647
unsigned long 4 Byte Contenitore per numeri interi nel range numerico, da 0 to 4,294,967,295 (2^32 – 1)
float 4 Byte Contenitore per numeri con la virgola nel range numerico da 3.4028235E+38 a -3.4028235E+38
double 4 Byte Contenitore per numeri con la virgola nel range numerico da 3.4028235E+38 a -3.4028235E+38
String Contenitore per testo (e.g., “Resistenza”)
  • Identificativo (Nome della variabile): La variabile è caratterizzata da un nome attraverso il quale si fa riferimento al contenitore stesso dei dati. E’ importante considerare che il nome della variabile non deve iniziare con un numero e soprattutto non può essere uguale ad una keyword del linguaggio di programmazione. Ad esempio il nome di una variabile non può essere loop.
  • Valore: Le variabili sono utilizzate per contenere dei dati pertanto ad ogni variabile è associato un valore (nel caso in cui l’utente non assegni nessun valore molto probabilmente è il compilatore che assegna un valore di default).

Prima di potere essere utilizzate all’interno del codice le variabili devono essere dichiarate e se possibile inizializzate con un valore specifico. La sintassi utilizzata per la dichiarazione di una variabile è la seguente.

int lato = 10;
float peso = 43.5;
bool condizione = true;
char lettera = ‘A’;
String nome = “Andrea”

Le variabili possono essere definite sia all’interno dei blocchi loop e setup sia al loro esterno. In base a dove vengono definite, queste prendono il nome di variabili globali o locali.

  • Variabili Globali: Sono variabili che hanno visibilità in tutto il programma. Le variabili globali sono definite fuori dal corpo (fuori dalle parentesi graffe) delle funzioni loop e setup.
  • Variabili Locali: Sono variabili che hanno visibilità solo all’interno di una funzione. Le variabili locali sono definite dentro il corpo (dentro le parentesi graffe) delle funzioni loop e setup.

Codice: Viene in seguito riportato l’esempio di un codice per la gestione di un un pulsate dove sono utilizzate sia variabili locali che variabili globali.






Le Funzioni Setup() e Loop()

Obiettivo: Conoscere le caratteristiche principali delle funzioni Setup() e Loop()

Teoria: Le funzioni Setup() e Loop() rappresentano il core principale di ogni programma sviluppato utilizzando il controllore Arduino. Ogni programma parte infatti dal codice definito all’interno di queste funzioni. Nello specifico le due funzioni sono così caratterizzate:

  • Setup(): In questa funzione è definita la configurazione iniziale di Arduino. Attraverso l’istruzione pinMode è possibile stabilire quali pin di Arduino sono utilizzati per gestire ingressi e quali per gestire uscite. Vengono inoltre inizializzati i vari oggetti impiegati nel loop (e.g., Serial.begin(9600)). E’ importante considerare che le istruzioni presenti nel setup vengono eseguite solamente una volta all’avvio del controllore Arduino.
  • Loop(): In questa funzione è definito il processing ovvero le operazioni che Arduino in modo ciclico. E’ importante considerare che, a differenza dalla funzione di setup, le istruzioni presenti nel loop vengono eseguite ciclicamente: terminata l’ultima istruzione si ricomincia con la prima (per sempre). Le principali istruzioni presenti all’interno del corpo della funzione sono quelle utilizzate per gestire gli ingressi e le uscite (e.g., digitalRead, digitalWrite, analogRead, analogRead).

E’ importante considerare che il corpo di una funzione è definito mediante le parentesi graffe. Nello specifico, la parentesi graffa aperta { rappresenta l’inizio della funzione, mentre la parentesi graffa chiusa } indica la sua fine.

Codice: Vengono in seguito riportati due esempi di codice. Il primo riguarda un progetto vuoto, mentre il secondo è relativo al codice di implementazione utilizzato per fare lampeggiare un led.







Come installare l’ambiente Software di Arduino

Obiettivo: Installare il Software Arduino



Teoria:

Qualunque dispositivo elettronico programmabile presente in commercio (ad esempio, una lampada intelligente, un cancello automatico, una robot esploratore) è costituito da un Hardware dedicato e da un Software specifico. Nel caso di Arduino (strumento attraverso il quale è possibile creare una moltitudine di dispositivi elettronici) la programmazione avviene attraverso l’impiego di un software scaricabile dal sito ufficiale. Mediante questo ambiente di sviluppo è possibile scrivere un programma specifico (istruzioni necessarie per comandare l’hardware) e caricarlo sul microcontrollore.

A seguire sono riportate le istruzioni per scaricare l’ambiente di sviluppo di Arduino:

  • Aprire il browser
  • Collegarsi al sito www.arduino.cc
  • Nella sezione software scaricare il software specifico per il proprio sistema operativo (software windows, software mac)
  • Selezionato il file da scaricare è possibile effettuare una donazione oppure semplicemente scaricare il software gratuitamente.

Una volta installato, il programma appare così all’utilizzatore:

Software Arduino



Caratteristiche Hardware – Arduino Mega

Obiettivo: Conoscere le principali caratteristiche Hardware di Arduino Mega

Principali Componenti Hardware di Arduino Mega

Teoria:

Arduino MEGA è una piattaforma HW dotata di Microcontrollore ATMega2560

  1. MCU Microcontrollore ATMega2560. È un microcontrollore a 8 bit, dotato di 3 differenti tipologie di memoria: FLASH 256 KB (che includono anche il bootloader e la memoria programma), SRAM 8 KB (usata per memorizzare le variabili e le costanti del software) ed EEPROM 4KB (utilizzata per memorizzare le configurazioni)
  2. Un totale di 54 pin di input/output digitali programmabili, di cui 15 utilizzabili per fornire in uscita segnali modulati PWM (0-14).
  3. Un totale di 16 pin di input analogici 
  4. Oscillatore a frequenza 16 MHz
  5. Jack per alimentazione esterna (5b: Regolatore di tensione)
  6. Connettore ICSP (In Circuit Serial Programmer) per effettuare la programmazione diretta del microcontrollore. 
  7. Pulsante di Reset
  8. Connettore USB utilizzabile sia per alimentare la scheda che per programmare il microcontrollore 
  9. Dispositivo per la comunicazione: si occupa della conversione dei dati provenienti dall’USB in dati seriali (e viceversa) adatti per il microcontrollore.


Modalità di alimentazione:


  • Alimentazione da pc con cavo usb (corrente max500mA): Se oltre al cavo usb alimentiamo Arduino anche tramite un connettore o dal pin Vin, verrà bypassata automaticamente l’alimentazione da usb e verrà utilizzata quella esterna.
  • Connettore di alimentazione(corrente max800mA): La tensione nel range tra 7 e 12 volte opportunamente viene stabilizzata.
  • Collegamento diretto al PIN Vin: Anche in questo caso la tensione è stabilizzata. Non è presente però il diodo di protezione non invertire la polarità.
  • Collegamento diretto al PIN 5V: Tensione non stabilizzata. PERICOLO!!!



Caratteristiche Hardware

Obiettivo: Conoscere le principali caratteristiche Hardware di Arduino

Principali Componenti Hardware

Teoria:

Arduino UNO è una piattaforma HW dotata di Microcontrollore ATMega328P

  1. MCU Microcontrollore ATmega328P. È un microcontrollore a 8 bit, in formato PDIP a 28 pin. L’MCU è dotata di 3 differenti tipologie di memoria: FLASH 32 KB (che includono anche il bootloader e la memoria programma), SRAM 2 KB (usata per memorizzare le variabili e le costanti del software) ed EEPROM 1KB (utilizzata per memorizzare le configurazioni)
  2. Un totale di 14 pin di input/output digitali programmabili, di cui 6 utilizzabili per fornire in uscita segnali modulati PWM. I pin PWM sono identificabili grazie al carattere tilde presente vicino al pin (3,5,6,9,10,11).
  3. Un totale di 6 pin di input analogici 
  4. Oscillatore a frequenza 16 MHz
  5. Jack per alimentazione esterna (5b: Regolatore di tensione)
  6. Connettore ICSP (In Circuit Serial Programmer) per effettuare la programmazione diretta del microcontrollore. 
  7. Pulsante di Reset
  8. Connettore USB utilizzabile sia per alimentare la scheda che per programmare il microcontrollore 
  9. Dispositivo per la comunicazione 16U2: si occupa della conversione dei dati provenienti dall’USB in dati seriali (e viceversa) adatti per il microcontrollore.


Modalità di alimentazione:


  • Alimentazione da pc con cavo usb (corrente max500mA): Se oltre al cavo usb alimentiamo Arduino anche tramite un connettore o dal pin Vin, verrà bypassata automaticamente l’alimentazione da usb e verrà utilizzata quella esterna.
  • Connettore di alimentazione(corrente max800mA): La tensione nel rangetra 7 e 12 volte viene stabilizzata dall’integrato NCP1117
  • Collegamento diretto al PIN Vin: Anche in questo caso la tensione è stabilizzata. Non è presente però il diodo di protezione non invertire la polarità.
  • Collegamento diretto al PIN 5V: Tensione non stabilizzata. PERICOLO!!!



Il Modello di Von Neumann

Teoria: Proposto dal matematico ungherese Von Neumann nel corso degli anni 40 il modello di Von Neumann rappresenta, ancora oggi, uno dei modelli principali dei calcolatori moderni.
L’idea alla base del modello di Von Neumann nasce nel corso di un progetto di ricerca gestito dal DARPA (Defense Advanced Research Projects Agency) con l’obiettivo di definire le tecnologie volte a fronteggiare l’emergente potenza russa nel secondo dopoguerra. Nel dettaglio, era necessario definire un sistema per calcolare le traiettorie dei missili balistici intercontinentali per il trasporto delle armi nucleari.
La macchina di Von Neumann è composta da 4 tipi di componenti funzionali:

  • Unità Centrale di Elaborazione (CPU – Central Processing Unit): Rappresenta il “cervello” del computer. Esegue le istruzioni per l’elaborazione dei dati e svolge le principali funzioni di controllo del sistema.

  • Memoria Centrale: Memorizza e fornisce i dati necessari per eseguire i programmi (RAM/ROM).

  • Unità di Input/Output: Componenti elettroniche per l’introduzione di dati nel calcolatore e per la relativa visualizzazione degli output. Esempi moderni di unità di input sono tastiera, mouse, microfono. Esempi moderni di unità di output sono schermo, altoparlanti, stampante.

  • Bus: Utilizzato per le funzioni di trasferimento dei dati e delle informazioni di controllo tra i vari elementi.

Nella seguente figura viene riportato lo schema grafico semplificato del modello di calcolatore proposto da Von Neumann.

Modello di Von Neumann (Semplificato)

Curiosità: Stanley Kubrick si ispirò al matematico Von Neumann per il personaggio del Dottor Stranamore (il protagonista di uno dei suoi capolavori cinematografici).




Dove Acquistare Arduino? (Amazon – 2019)

Obiettivo: Comperare un kit Arduino o similari (Ph. chasing_hygge)

Teoria:

Arduino è una piattaforma hardware e software particolarmente utilizzata per la realizzazione di progetti e prototipi di dispositivi elettronici. Acquistabile esclusivamente online, gli utilizzatori possono scegliere se comperare l’Arduino originale oppure affidarsi ai rispettivi cloni. Il progetto Arduino si basa infatti su schemi circuitali e software di tipo open source.
Differenti sono le piattaforme che permettono di acquistare online Arduino. La più famosa è sicuramente Amazon.
A seguire vengono confrontati i tre principali kit Arduino acquistabili sulla piattaforma Amazon.

  • Arduino Starter Kit per principianti K010007 : Kit Originale Arduino, corredato di una esauriente guida in Italiano (170 pagine e 15 progetti). Ottima qualità a partire dal packaging ma particolarmente caro, specialmente se confrontato con gli altri prodotti (Prezzo su Amazon: 75,80 Euro).
Starter Kit Arduino
  • Elegoo Advanced Starter Kit: Elegoo produce uno dei migliori Arduino starter kit clone in commercio. Elegoo ha il pregio di essere sensibilmente più economico rispetto alla versione originale garantendo inoltre un maggior numero di componenti elettronici presenti nel kit. Questo kit è corredato da una guida in italiano in formato PDF la quale risulta tradotta in modo non sempre corretto e alle volte non propriamente comprensibile. (Prezzo su Amazon: 35,99 Euro)
Elegoo Starter Kit
  • Kuman Starter Kit: Kuman produce un kit contenete la scheda UNO-R3 e 38 dispositivi elettronici (sensori, attuatori, display, etc) è inoltre presente una guida tutorial in italiano dei differenti dispositivi e delle varie modalità di collegamento ad Arduino. (Prezzo su Amazon: 27,99 Euro)
Kuman Starter Kit