Arduino Merry Christmas

Obiettivo: Riprodurre la melodia Merry Christmas utilizzando la piattaforma Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice:






Il Cestino Smart

Obiettivo: Realizzare un cestino intelligente che si apre quando ci si avvicina, evitando toccarlo.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Sensore Ultrasuoni (e.g., HC-SR04)
  • 1 Servomotore (e.g. SG90)
  • 1 Scatolone alto
  • Colla a caldo

Pre-requisiti:


Il Servomotore

Il Sensore a Ultrasuoni


TeoriaIl servomotore è un particolare tipo di motore che consente il controllo della posizione grazie alla componentistica elettronica che ha a bordo. Ad esempio è possibile attivare il servomotore e fermarlo ad un determinato angolo. Alcuni modelli, più avanzati di quello presente in questo esercizio, hanno la possibilità di controllare anche la velocità di rotazione. Il modello di questa esperienza non consente il controllo della velocità, e il suo asse fa una rotazione di 180 gradi.

Scheda tecnica del servomotore SG90

Il contenitore del cestino viene realizzato con una scatola, di quelle che contengono le risme di carta A4.

Il coperchio della scatola, pesa complessivamente 61 g ma sarà necessario eliminare i bordi in modo che sia più facile spostarlo con il motore.

Facendo qualche calcolo si ricava che la superficie complessiva del coperchio della scatola è 1440 cm2. La densità, quindi è di circa 0,042 g/cm2 e il peso della sola superficie superiore è

0.042 * 600 = 25 g (circa)

Se a questo aggiungiamo gli elementi che servono per sorreggere la struttura, possiamo pensare di arrivare ad un peso di 50 g.

Considerando che il peso della superficie superiore della scatola sia uniformemente distribuito, possiamo ipotizzarlo equivalente ad una forza di circa 0.500 N applicata al centro della superficie.

La coppia che il servomotore dovrà sollevare sarà (0.5 * 0.15)

M = 0,075 Nm (oppure 0,75 Kg-cm)

Dalla scheda tecnica del servomotore si ricava che esso è in grado di erogare una coppia di 2,5 Kg-cm, ben superiore a quella che ci serve.

Per rilevare la presenza della persona e quindi dare l’ordine alla scheda di aprire il cestino, si utilizzerà un sensore ad ultrasuoni HC-SR04

Il sensore di prossimità è un dispositivo che permette di rilevare la presenza di oggetti nelle immediate vicinanze, senza che vi sia un effettivo contatto.
Nel caso specifico, il sensore di prossimità ad ultrasuoni sfrutta il principio del Sonar. Degli impulsi sonori (ultrasonici) vengono emessi dal dispositivo il quale attraverso l’eventuale eco di ritorno permette di rilevare la presenza di un oggetto all’interno della portata nominale. Esempi pratici di sensori ad ultrasuoni sono i sensori di retromarcia e di parcheggio utilizzati nelle moderne automobili.
Nel dettaglio, le principali caratteristiche tecniche del sensore ad ultrasuoni HC-SR04 sono:

  • Alimentazione: +5V DC
  • Angolo di misura: < 30°
  • Distanza di rilevamento: da 2cm a 400cm
  • Risoluzione: 1cm
  • Frequenza: 40kHz

Costruzione del cestino: dal coperchio tagliare le alette e incollare su una delle superfici un bastoncino di legno (noi abbiamo usato una bacchetta da sushi). il bastoncino deve sporgere leggermente rispetto al piano, per permettere di fissarci il servomotore

Ricavare nella scatola, in uno dei lati corti, uno scanso, per permettere la rotazione del piano con il bastoncino.

Fissare il servomotore in corrispondenza del taglio, incollandolo sul fianco della scatola. Se serve, si può aggiungere uno spessore sul fianco del servomotore

Collegare il servomotore al coperchio superiore, fissando la bacchetta alla levetta del servo

Forare il fianco della scatola in modo da poterci alloggiare il sensore ad ultrasuoni. Il sensore può essere fissato anche ad incastro e senza l’uso di colla o nastro adesivo

Collegamento Circuitale:

Codice:

Il sensore ad ultrasuoni, rileva la distanza degli ostacoli che ha di fronte. Se il sensore viene posto sul lato del bidone e gli si avvicina una mano, il sensore rileva la presenza dell’arto e invia il segnale al microcontrollore, il quale, elabora il dato e trasmette il movimento di 90 gradi al servomotore al quale è collegato il coperchio del cestino



Tinkercad




PersonalizzazioniE’ possibile inserire un altro sensore interno al cestino per segnalare quando è pieno





Realizzazione di un Gioco a Quiz – La macchina a stati finiti

Obiettivo: Realizzare un gioco a Quiz mediante pulsanti e display LCD 16×2 (basato su un Driver Hitachi HD44780). L’attività prevede la realizzazione software di una macchina a stati.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display LCD (e.g., 1602A) compatibile con Driver Hitachi HD44780 
  • 1 Resistenza da 220 Ohm (per il display)
  • 1 Trimmer da 10 kOhm (per il display)
  • 2 Pulsanti
  • 2 Resistenze da 1kOhm (per i pulsanti)

Pre-requisiti:


Come Collegare un Display LCD ad Arduino



LED e Pulsante


TeoriaL’utilizzo di una progettazione basata sul concetto di macchina a stati finiti permette la facile realizzazione di apparati elettronici e sistemi capaci di fornire output desiderati a partire da specifici input ricevuti. Questo paradigma si basa sulla definizione degli stati di funzionamento del dispositivo da realizzare e sul codice associato allo stato stesso. A seguire sono riportati alcuni esempi pratici di stati di sistemi generici:

  • Semaforo: verde, giallo, rosso
  • Ascensore: primo piano, secondo piano, etc
  • Cancello: aperto, chiuso

Da un punto di vista pratico si potrebbe affermare che: “Attraverso una macchina a stati è possibile avere tanti loop quanti sono gli stati del dispositivo in questione “. Tuttavia è importante considerare che solamente uno di questi loop è attivo. (La macchina non può torvarsi in più stati contemporaneamente).
Nel caso specifico di un gioco a quiz gli stati sono rappresentati dalle:

  • Domande: la domanda deve essere visualizzata sul display
  • Risposte: l’utente deve premere il pulsante e il controllore deve verificare se la risposta è corretta.

Pertanto si avranno tanti stati quante sono il numero di domande moltiplicato per due.
E’ infine importante considerare che, nel caso della realizzazione di un quiz a risposta multipla, l’impiego di una macchina a stati permette di risolvere il problema annoso del delay. Questa funzione può infatti essere tranquillamente utilizzata negli stati associati alle domande (l’utente deve avere tempo di leggere la domanda) mentre non deve essere assolutamente impiegata negli stati relativi alle risposte.

La realizzazione di una macchina a stati mediante il controllore Arduino è relativamente semplice. Infatti, il concetto di stato viene implementato grazie all’utilizzo di una variabile globale (tipicamente denominata state) e attraverso una serie di if o mediante uno switch case si seleziona il codice da eseguire in quello specifico stato.

Collegamento Circuitale:

CodiceAttraverso la variabile “state” è possibile specificare il “loop” che Arduino dovrà eseguire. Nel dettaglio, valori pari della variabile “state” sono utilizzati per riprodurre la domanda sul display, mentre valori dispari sono impiegati per gestire la risposta. E ‘importante notare che non sono presenti delay nel loop di gestione della risposta (ad eccezione di quello utilizzato per visualizzare se la risposta data è corretta oppure errata).




PersonalizzazioniE’ possibile aggiungere un numero maggiore di domande ed un numero maggiore di pulsanti per gestire più risposte.





Real Time Clock per Arduino

Obiettivo: Scrivere e poi leggere l’ora e la data da una scheda RTC Real Time Clock.



Componenti elettronici:

  • Arduino UNO
  • 1 TinyRTC con chip DS1307 (link1link2)

TeoriaAlla base di questa esercitazione c’è il modulo TinyRTC con chip DS1307 ed EEPROM: 24C32 32K I2C con interfaccia I2C.

Caratteristiche Hardware

  • Chip RTC: DS1307
  • Memoria EEPROM: 24C32 32K I2C
  • Comunicazione: I2C (possibilità di collegare altri dispositivi I2C in cascata)
  • Batteria di backup supportata (NON inclusa): LIR2032
  • Ciclo di funzionamento del modulo (a piena carica): 1 anno
  • Dimensioni: 28 x 28 x 9mm
  • Peso: 4g

Se avete bisogno nei vostri progetti di un sistema per la
gestione di data e orario questa scheda è quello che fa per voi.

Per utilizzare tale scheda viene utilizzata la libreria RTClib.h

Tramite tale libreria è possibile settare nella funzione di setup la data e l’ora personalizzata (riga codice n.25), oppure quella di compilazione (riga codice n.22) , la prima volta che si carica il codice in Arduino, in modo tale che la scheda TinyRTC si configuri con un orario e data opportuni, poi si deve ricaricare lo stesso sketch commentando la riga di codice (n.22 o n.25).

Da questo momento in poi Arduino sarà in grado di utilizzare
un orologio real time in grado di gestire ore, minuti, secondi, anni, mesi e
giorni!

Collegamento Circuitale:

Collegamento Circuitale

Codice






Leggere informazioni dal GPS BN-880 o uBlox M8N

Obiettivo:

Leggere tutte le informazioni provenienti dal GPS BN-880 utilizzando la libreria TinyGPS++

Video:



Componenti elettronici:

Teoria:

Alla base di questa esercitazione c’è il modulo GPS Baitian BN-880, ma andrebbe benissimo anche un modulo uBlox NEO-7M o M8N o equivalenti.

Il modulo in oggetto oltre ad avere integrato il GPS,
oggetto dell’esercitazione, ha anche integrato una bussola (compass) HMC5883l comunicante
tramite il bus/protocollo I2C.

Ecco alcune caratteristiche:

  • Inexpensive,
    light, Dual Mode GPS and GPS/Compass using UBLOX M8N module
  • Receiving
    Format: GPS, GLONASS, Galileo, BeiDou, QZSS and SBAS
  • Frequency:
    GPS L1,GLONASS L1,BeiDou B1,SBAS L1,Galileo E1
  • Channels: 72
  • Data Protocol: NMEA-0183 or UBX, Default
    NMEA-0183
  • Single GNSS: 1Hz-18Hz
  • Concurrent GNSS: 1Hz-10Hz
  • Compass IC: HMC5883L

Il sistema GPS (Global Positioning System):

GPS sta per Global Positioning System cioè un Sistema di Posizionamento Globale, la cui funzione primaria è quella di determinare con precisione la posizione sul pianeta Terra di un ricevitore (come ad esempio uno smartphone o un apparecchio dedicato). Il ricevitore GPS riceve continuamente segnali da lontani satelliti in orbita attorno alla Terra. Attorno alla Terra, a circa 20.200 km di altitudine, orbitano 31 satelliti del sistema GPS. Ogni satellite ha al suo interno un precisissimo orologio atomico. Ogni satellite invia continuamente un segnale radio contenente la sua posizione, e l’orario di trasmissione del segnale. Il ricevitore GPS confronta questi segnali, e tramite alcune equazioni riesce a stabilire la sua posizione.

Il pallino rosso è il ricevitore GPS. Alle ore 12:00 tutti i
satelliti GPS inviano un segnale che dice “io mi trovo nella posizione XYZ, e
sono le 12:00”. Poiché i satelliti hanno distanze diverse dal ricevitore, il
segnale “io mi trovo nella posizione XYZ, e sono le 12:00” arriva al ricevitore
in momenti diversi: quello del satellite 4 arriva per primo; poi quello del
satellite 2; poi 3; e poi 1. Sapendo quanto ci ha messo il segnale ad arrivare,
e quindi la distanza fra il ricevitore e i vari satelliti, il ricevitore GPS,
con una relativamente semplice triangolazione, riesce a stimare la propria
posizione sul pianeta Terra.

Che cosa trasmette il modulo GPS:

Il modulo GPS trasmette tramite Seriale TTL (0-5 Volt) delle
“sentenze” tramite il protocollo NMEA0183.

NMEA 0183 (o più comunemente NMEA) è uno standard di comunicazione di dati utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L’ente che gestisce e sviluppa il protocollo è la National Marine Electronics Association. Questo protocollo si basa sul principio che la fonte, detta talker, può soltanto inviare i dati (sentences) e la ricevente, detta listener, può soltanto riceverli.

Ad esempio la seguente sentenza $GGA trasmette tantissime
informazioni oltre alla Latitudine e Longitudine:

Tramite
la libreria TinyGPS++ è possibile intercettare tutti i tipi di sentenze GPS e
inoltre nell’ultima versione anche di elaborare le sentenze particolari, ad
esempio prelevate da altre fonti NMEA0183.

Schema Elettronico (Fritzing):

Codice:






L’Impianto Elettrico dell’APE con Arduino

Obiettivo: Realizzare l’Impianto Elettrico di un APE Car utilizzando il microcontrollore Arduino



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 4 Resistenze da 1kOhm per i pulsanti
  • 3 Resistenze da 100 Ohm per i LED.
  • 1 Buzzer Passivo (per la realizzazione di una melodia)
  • 3 LED (Gialli per frecce, Bianchi per luci di posizione)
  • 4 Pulsanti

Pre-requisiti:


Pulsante come Interruttore



https://www.arduinofacile.it/2020/03/23/blinking-led-senza-delay-millis/


Buzzer Passivo


TeoriaAttraverso l’utilizzo di quattro semplici pulsanti utilizzati come interruttori (vedi pre-requisiti) l’utente può abilitare i vari attuatori tipici dell’impianto elettrico di un autoveicolo.(i.e., ape piaggio).
E’ importante considerare che per fare lampeggiare le frecce è stata utilizzata la funzione millis() a discapito della tradizionale delay. L’impiego della funzione millis() permette infatti una maggiore reazione dell’impianto elettrico. Le letture vengono fatte in tempo reale e pertanto appena si preme un pulsante l’attutore associato reagisce immediatamente.

Collegamento Circuitale:

Codice:




PersonalizzazioniE’ possibile modificare l’impianto elettrico inserendo melodie personalizzate per il clacson oppure introducendo i fari posteriori.





La Morra Cinese con Arduino

Obiettivo: Realizzare il classico gioco Morra Cinese (Sasso Carta e Forbici) utilizzando il microcontrollore Arduino



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 3 Resistenze da 1kOhm per i pulsanti
  • 3 Resistenze da 100 Ohm per i LED.
  • 1 Buzzer Passivo (per la realizzazione di una melodia)
  • 3 LED (Rosso, Giallo, Verde)
  • 3 Pulsanti

Pre-requisiti:


Pulsante come Interruttore



Buzzer Passivo


TeoriaAttraverso l’utilizzo di tre semplici pulsanti l’utente può selezionare il tipo di oggetto che desidera giocare (i.e., sasso carte e forbici).
La scelta/risposta del computer viene selezionata attraverso l’impiego di un numero random generato in modo casuale con la funzione random(1,4). Tale funzione permetta la generazione di un numero casuale compreso tra 1 e 3, dove il numero 1 corrisponde al sasso, il numero 2 corrisponde alla carte ed il numero 3 a forbici. Questo valore viene confrontato nel blocco loop con i vari pulsanti premuti attribuendo la vittoria al computer o al giocatore ed accendendo il corrispettivo LED
Attraverso l’utilizzo di un contatore di vittorie, si decide il vincitore finale al meglio delle 5 partite.

Algoritmo Morra Cinese

Collegamento Circuitale:

Collegamento Circuitale

Codice:




PersonalizzazioniE’ possibile modificare il gioco realizzando la versione più complessa: Sasso Carta Forbice Lizard Spock, proposta sulla serie TV “The Big Bang Theory”.


Algoritmo Morra Cinese – The Big Bang Theory Version



Arduino Pirati dei Caraibi

Obiettivo: Riprodurre la melodia del film “Pirati dei Caraibi” utilizzando la piattaforma Arduino.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice:






Arduino SuperMario

Obiettivo: Riprodurre la melodia del famoso videogioco utilizzando la piattaforma Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice:






Arduino Happy Birthday

Obiettivo: Realizzare un bigliettino di auguri di buon compleanno utilizzando la piattaforma Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer

Pre-requisiti:

TeoriaOgni melodia musicale è composta da note e pause. Se le pause possono essere riprodotte utilizzando la funzione delay() di Arduino (già vista negli esempi precedenti), le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone(). Nel dettaglio, l’impiego della funzione tone permette di selezionare la frequenza riprodotta dal buzzer e la relativa durata della nota.
Nel caso in questione, l’intera melodia (comprensiva di note, durata delle note e pause, viene salvata in due differenti array (vettori) e riprodotta sequenzialmente come un vero spartito musicale.

Collegamento Circuitale:

Collegamento Circuitale

Codice: