Braccio Tinkerkit Arduino

Obiettivo:

Pilotare il braccio robotico Tinkerkit tramite Arduino e 2 Joystick

Componenti elettronici:

Teoria:

Alla base di questa esercitazione c’è il braccio robotico TinkerKit.

Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot

Braccio TinkerKit
https://store.arduino.cc/products/tinkerkit-braccio-robot

Il TinkerKit Braccio è un braccio robotico completamente operativo, controllato tramite Arduino. Può essere assemblato in diversi modi per realizzare più attività come lo spostamento di oggetti, il movimento di pannelli, fotocamere o cellulari.

Braccio TinkerKit
Braccio TinkerKit

La scheda del braccio deve essere alimentare tramite la connessione jack con l’alimentatore da 5 VDC @ 4000 mA fornito nella confezione.

Nella confezione sono presenti:

  • Plastic Parts x 21
  • Screws x 63
  • Flat Washer x 16
  • Hexagon Nut x 7
  • Springs x 2
  • Servo Motors: 2 x SR 311, 4 x SR 431
  • Arduino compatible Shield x 1
  • Power Supply 5V, 4A x 1
  • Phillips Screwdriver x 1
  • Spiral Cable Protection Wrap x 1

Per pilotare la scheda dei driver del Braccio è necessario scaricare la libreria da questo link: https://github.com/bcmi-labs/arduino-library-braccio

Installazione Shield TinkerKit sopra Arduino

Braccio TinkerKit scheda pilotaggio servomotori
Braccio TinkerKit datasheet scheda pilotaggio servomotori

Schema connessione Joystick a shield servomotori:

Connessione Joystick

Alcune immagini rappresentative del funzionamento del Braccio:

Posizione iniziale di sicurezza
Posizione iniziale di sicurezza

Connessione dei Joystick
Connessione dei Joystick

Base a 0°
Base a 0°

Base a 180°
Base a 180°

Spalla 15° (Shoulder)
Spalla 15° (Shoulder)

Spalla 165° (Shoulder)
Spalla 165° (Shoulder)

Gomito 0° (Elbow)
Gomito 0° (Elbow)

Gomito 180° (Elbow)
Gomito 180° (Elbow)

Polso 0° (Wrist)
Polso 0° (Wrist)

Polso 180° (Wrist)
Polso 180° (Wrist)

Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)

Polso / Mano 180° (Wrist / Gripper)
Polso / Mano 180° (Wrist / Gripper)

Mano 73° (Gripper)
Mano 73° (Gripper)

Mano 10° (Gripper)
Mano 10° (Gripper)

Funzionamento:

Il Braccio è costituito da 6 Servo Motori di conseguenza 2 Joystick (2 assi + 1 bottone per joystick) non basterebbero per pilotare tutti gli assi.

 Si è optato quindi per il pilotaggio dei motori da 1 a 4 tramite gli assi (potenziometri collegati agli ingressi analogici di Arduino) del joystick mentre per la rotazione della mano nei due sensi sono utilizzati i pulsanti dei due joystick connessi ai pin 1 e 2 di Arduino (ingressi I/O in configurazione INPUT_PULLUP).

Rimane la chiusura e apertura della gripper (mano), per fare questo invece si è optato al cambio di stato apertura-chiusura e chiusura-apertura tramite la pressione contemporanea dei pulsanti dei joystick.

Ricordarsi di queste informazioni, limiti di rotazione dei servomotori, per non rovinare il Braccio:

  • M1=base (base) degrees. Allowed values from 0 to 180 degrees
  • M2=shoulder (spalla) degrees. Allowed values from 15 to 165 degrees
  • M3=elbow (gomito) degrees. Allowed values from 0 to 180 degrees
  • M4=wrist (polso) vertical degrees. Allowed values from 0 to 180 degrees
  • M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
  • M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the gripper (pinza) is open, 73: the gripper is closed.

Codice:






Arduino Last Christmas

Obiettivo: Riprodurre la melodia Last Christmas utilizzando la piattaforma Arduino. Un progetto realizzato dall’alunno della classe 4DSA del Liceo Enrico Medi di Senigallia: Gianmarco D’Emilio

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:






Antifurto con funzioni domotiche

Obiettivo: Realizzare un antifurto con funzioni domotiche, con annesso un secondo Arduino in collegamento seriale in grado di comandare un cancello scorrevole.
Progetto realizzato dallo studente Sanchini Simone, dell’Università Politecnica delle Marche

Componenti elettronici:

  • 2 Arduino UNO
  • 2 Breadboard
  • 4 Resistenze da 220 Ohm per i led
  • 4 LED
  • 6 Interruttori
  • 1 Resistenza (2.2kOhm) per Fotoresistenza
  • 1 Fotoresistenza
  • 2 Motori DC
  • 1 Piezo
  • 1 Sensore PIR
  • 1 Sensore IR
  • 1 Telecomando IR
  • 1 KeyPad 4×4

Pre-requisiti:

  1. Password di accesso con KeyPad 4×4 e Arduino – (Tinkercad)
  2. Crepuscolare (Smart Lamp)
  3. Controllo di un LED Mediante Telecomando ELEGOO
  4. Blinking Led Senza Delay: MILLIS()
  5. Collegamento Seriale Arduino (non trovato su Arduinofacile)
  6. Il Sensore di Presenza

Teoria

Come abbiamo detto, lo scopo dell’esercitazione è quello realizzare un antifurto con funzioni domotiche utilizzando poi un secondo Arduino in collegamento seriale in grado di comandare un cancello scorrevole.

ARDUINO 1:

 Attraverso il Keypad sarà possibile inserire tre tipi di codici diversi:

  1. 1234: permette di inserire l’allarme (Stato=1), al suo inserimento le finestre e la porta di casa devono essere chiuse, queste ultime vengono simulate da due interruttori. All’inserimento ci saranno 5 secondi di delay in modo di permettere all’utente di uscire e chiudere la porta, dopodiché le luci presenti (simulate dal led) vengono spente, le tapparelle abbassate e attraverso il collegamento seriale viene dato il comando al secondo Arduino di aprire il cancello. Lo stop delle tapparelle e del cancello avviene attraverso dei finecorsa (simulati da due interruttori).
  2. 1235: permette di togliere l’allarme (Stato=0), al momento del disinnesco, verranno aperte le tapparelle se giorno, oppure accese le luci se notte, utilizzando come riferimento il sensore crepuscolare.
  3. 1236: permette di inserire l’allarme notturno (Stato=2), con la differenza dal primo che in questo caso esso non tiene in considerazione dell’apertura delle finestre. Al momento dell’inserimento attraverso il collegamento seriale viene dato il comando al secondo Arduino di chiudere il cancello.

Indicazioni LED:

Rosso: allarme inserito;

Rosso-Verde: allarme notturno inserito;

Rosso-Giallo-Verde (lampeggio): codice errato;

Giallo: finestre/porta aperta;

Cosa succede in caso di apertura di finestre o porta quando il nostro allarme è inserito?

Il sistema passerà allo stato di intrusione (Stato=3), settando cosi un timer realizzato dalla funzione millis() di tempo t, nella quale è possibile inserire il codice di sblocco; In caso il codice di sblocco non è inserito entro il tempo limite la “sirena” inizia a suonare finché l’antifurto non verrà sbloccato.

La stessa cosa succede in caso di intrusione dalle finestre quando l’allarme notturno è inserito.

ARDUINO 2:

Il secondo Arduino permette di comandare un cancello attraverso o i comandi mandati dal primo, oppure attraverso un telecomando IR, con un solo pulsante (a causa di un problema di lettura di tinkercad).

Premendo il pulsante lo stato cambierà lo stato del cancello in base a quello precedente:

Stato=0 -> Cancello fermo;

Stato=1 -> Cancello in chiusura;

Stato=2 -> Cancello fermo;

Stato=3 -> Cancello in apertura;

Il cancello è fermato in apertura e chiusura da due finecorsa, simulati da due interruttori.

Se in fase di chiusura il sensore PIR rileva qualcosa il cancello torna allo stato di apertura.

Quando il cancello finisce l’apertura, premendo il finecorsa, parte un timer di tempo t, ed alla fine di esso il cancello torna in fase di chiusura automatica.

Collegamento Circuitale:

TINKERCAD:

https://www.tinkercad.com/things/3aMc1kLCsu0-definitivo-sanchini/editel?sharecode=_gcKkLKcUpJEY1lHHIETPlS8ldhHe4IcM9bkXZUF48k

Codice:






Le frecce dell’AUDI con Arduino

Obiettivo: Realizzare un sistema di controllo dei led che simula l’effetto delle frecce di un Audi. Le luci si accendono alla pressione di un pulsante.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 8 Resistenze da 220 Ohm per i led
  • 4 LED
  • 2 Resistenza da 10KOhm per i pulsanti
  • 2 Pulsanti

Pre-requisiti:


LED e Pulsante


TeoriaCome abbiamo detto, lo scopo dell’esercitazione è quello di attivare due barre LED tramite la pressione di due pulsanti. Le barre simulano l’effetto freccia presente nelle auto Audi. La pressione del pulsante dà il comando di avvio della sequenza e, se si tiene premuto il pulsante, la sequenza rimane attiva.

Sarà necessario sistemare il codice in base a come viene montato il pulsante (se in pull-up o in pull-down)

Collegamento Circuitale:

Codice:

Il codice è basato sulla lettura del segnale del pulsante (nel nostro caso in pull-down) che, se premuto, attiva la relativa sequenza



Esperienza realizzata dalla classe 3 BMC del Dipartimento di Meccanica dell’ITIS “E.Mattei” di Urbino nell’AS 2022-23. Codice e Thinkercad realizzato da Giacomo Brancorsini




Realizzare un Cronometro Digitale con Arduino

Obiettivo: Realizzare un cronometro digitale per misurare lo scorrere del tempo in millisecondi utilizzando il microcontrollore Arduino, un display LCD e due pulsanti
Un progetto realizzato dagli alunni della classe 3ATLC dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Benedetti Nicolas
– Puca Edoardo

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 100 Ohm per i pulsanti
  • 1 Display LCD
  • 2 Pulsanti

Pre-requisiti:


Blinking Led Senza Delay: MILLIS()


TeoriaRealizzare un cronometro digitale con il controllore Arduino, è relativamente semplice. Per implementare questo dispositivo, basta collegare arduino ad un display LCD ed utilizzare l’istruzione millis() nell’apposito sketch.
Nel dettaglio, la funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programma corrente. Questo numero si riazzera dopo circa 50 giorni.
A tale fine è importante ribadire che mediante la funzione millis è possibile effettuare più misurazioni nel corso del tempo e per calcolare il tempo trascorso tra una misurazione e l’altra basta fare al differenza:

tempo = misura2 – misura1 

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo della funzione millis è possibile realizzare un cronometro digitale con il controllore Arduino. Nel caso specifico due differenti misure vengono effettuate per determinare il tempo trascorso. La prima misura viene salvata nella variabile “tempoI” mentre la seconda nella variabile “tempoF“. Il tempo trascorso tra le due differenti misure viene memorizzato nella variabile”tempo” ottenuta come la differenza tra “tempoF” e “tempoI“.



Tinkercad






Realizzare un Voltmetro [0-5Volt] con Display a 7 Segmenti

Obiettivo: Realizzare un dispositivo per misurare tensioni nel range 0.5 V utilizzando il microcontrollore Arduino ed il display a sette segmenti.
Un progetto realizzato dagli alunni della classe 3AUT dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Amadori Federico
– Fucili Elia

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 14 Resistenze da 100 Ohm per I display a sette segmenti
  • 2 Display a 7 Segmenti

Pre-requisiti:


1..2..3.. Il Display a 7 Segmenti



Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead


TeoriaEffettuare la misura di una tensione compresa nel range 0-5 V, utilizzando il controllore Arduino, è relativamente semplice. Per effettuare questa misura, basta collegare l’elemento di cui vogliamo analizzare la tensione ad un ingresso analogico (A0-A5) e utilizzare l’istruzione analogRead nell’apposito sketch.
A tale fine è importante ribadire che l’ingresso analogico compreso nel range 0-5V viene mappato utilizzato la funzione analogRead(A0) nel range 0-1023, pertanto è indispensabile utilizzare una corrispettiva funzione di conversione basta sulla seguente proporzione:

ValoreAnalogRead : 1023 = ValoreTensione : 5 

In conclusione, il valore di tensione può essere semplicemente ottenuto dividendo per 1023 e moltiplicando per 5 il valore letto utilizzando la funzione analogRead(A0).

Tale valore può essere poi visualizzato su differenti tipi di display: monitor del computer, display LCD e display a 7 segmenti. Nell’esempio in questione vengono utilizzati due display a 7 segmenti (uno per la parte intera ed uno per la parte decimale) al fine di visualizzare la tensione misurata.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo di due display a sette segmenti è possibile visualizzare la tensione prodotta dalla “patata”. Nel caso specifico viene utilizzata una patata come generatore di tensione per verificare che il dispositivo fornisca una valutazione corretta della tensione misurata. Delle funzioni specifiche (e.g., zeroI, unoI, zeroD, unoD, etc) vengono utilizzate per visualizzare i vari numeri nei due differenti display.



Tinkercad




PersonalizzazioniE’ possibile utilizzare altre tipologie di display per visualizzare la tensione misurata.





Realizzare un Contapunti con Display LCD

Obiettivo: Realizzare un contapunti manuale utilizzando il microcontrollore Arduino ed il display LCD

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 1kOhm per i pulsanti
  • 1 Resistenza da 100 Ohm per il display LCD
  • 1 Trimmer (per regolare il contrasto del display LCD)
  • 2 Pulsanti

Pre-requisiti:


Come Collegare un Display LCD ad Arduino



Pulsante come Interruttore


TeoriaAttraverso l’utilizzo di due semplici pulsanti e di un display LCD è possibile realizzare un contapunti digitale per riprodurre il punteggio di una partita di biliardo, pallavolo, calcetto, etc. Ogni volta che uno dei due pulsanti è premuto viene incrementato il punteggio di una delle squadre.

Collegamento Circuitale:

Codice:

Attraverso l’utilizzo di due contatori cnt1 e cnt2 è possibile memorizzare il punteggio di ogni squadra. Tali valori sono riprodotti sul display LCD utilizzando l’istruzione LCD.print().
Per evitare delle letture multiple che potrebbero portare ad un comportamento errato del circuito si utilizza una variabile globale che memorizza lo stato precedente del pulsante (i.e., valButton1Old e valButton2Old).




PersonalizzazioniE’ possibile introdurre un ulteriore pulsante per resettare il punteggio senza necessariamente dovere riavviare il controllore Arduino. Inoltre si può aggiungere un dispositivo di segnalazione acustica per avvisare l’utilizzatore del cambio di punteggio.





Arduino Cyclone Arcade Game

Obiettivo: Realizzare un gioco Arcade, basato su LED e pulsanti, utilizzando il microcontrollore Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Resistenze da 1kOhm per i pulsanti
  • 8 Resistenze da 100 Ohm per i LED.
  • 1 Buzzer Passivo (per la realizzazione di una melodia)
  • 8 LED (7 LED Rossi ed 1 Led Verde)
  • 1 Pulsante

Pre-requisiti:


Pulsante come Interruttore



Blinking Led Senza Delay: MILLIS()



Buzzer Passivo


TeoriaLo scopo di questo progetto è quello di creare un semplice gioco per bambini interattivo e divertente, sfruttando il microcontrollore Arduino. Il progetto proposto prende spunto da un gioco realmente prodotto e commercializzato negli anni 80 denominato “Cyclon jr” (vedi figura).

Cyclone Jr

Il progetto è di facile realizzazione e si basa sull’utilizzo di un pulsante e di alcuni LED che si accenderanno in sequenza. L’obiettivo del gioco è premere il pulsante quando la luce del cyclone raggiunge l’unico LED verde presente nel tabellone di gioco. In caso di successo, il livello di difficoltà aumenterà ed i led si accenderanno più velocemente. Differente, in caso di sconfitta, il gioco ricomincerà da capo ed i led si accenderanno più lentamente.

L’utilizzo di un buzzer passivo permette di generare un segnale acustico in caso di vittoria o sconfitta. Analogamente una gioco di luci sarà avviato ogni volta che il giocatore preme il pulsante in modo corretto.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Sebbene le componenti hardware impiegate nel progetto in questione sono di comune utilizzo, il codice non è dei più immediati. Innanzitutto, è importante considerare che per fare lampeggiare i LED è stata utilizzata la funzione millis() a discapito della tradizionale delay. L’impiego della funzione millis() permette infatti una maggiore reazione nel rilevare la pressione di un pulsante. Inoltre l’impiego dell’operatore modulo % permette di gestire in modo facile la corretta accensione dei led in sequenza. La difficoltà è infine regolata dal parametro K che aumenta ad ogni vittoria.




PersonalizzazioniE’ possibile aggiungere un numero maggiore di led per rendere il gioco più completo.





L’Albero di Natale (Gioco Luci + Melodia)

Obiettivo: Riprodurre la melodia “Merry Christmas” e creare un gioco luci Natalizio utilizzando la piattaforma Arduino (senza utilizzare la funzione delay).



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer
  • 6 Resistenze (100 Ohm)
  • 6 Led (Possibilmente rossi)

Pre-requisiti:


Arduino Jingle Bells



Blinking Led Senza Delay: MILLIS()


TeoriaNelle lezioni precedenti è stato illustrato come ogni melodia musicale è composta da note e pause. Se le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone() le pause possono essere riprodotte utilizzando la funzione delay().
Tuttavia è importante considerare che sebbene la funzione delay risulti molto pratica e permetta una facile realizzazione di giochi luci o riproduzione di melodie, questa produce un blocco del controllore il quale può impedire il corretto funzionamento di altre operazioni.
Nel caso specifico, se utilizzassimo la funzione delay sia per gestire il gioco luci sia per riprodurre la melodia, la funzione delay utilizzata in entrambi i task andrebbe a danneggiare la corretta esecuzione di una delle due attività. Ad esempio, si avrebbero delle pause troppo lunghe nella melodia rendendola incomprensibile.

Per risolvere questo problema si è deciso di utilizzare la funzione millis sia per realizzare il gioco luci sia per implementare la melodia.

La funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programam corrente. Questo numero si riazzera dopo circa 50 giorni.

Collegamento Circuitale:

Circuito Elettrico

Codice:






Arduino Jingle Bells

Obiettivo: Riprodurre la melodia “Jingle Bells” 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: