Avvertenze

Relativamente agli aspetti di sicurezza, poiché i progetti sono basati su alimentazione elettrica in bassissima tensione erogata dalla porta usb del pc o da batterie di supporto o alimentatori con al massimo 9V in uscita, non ci sono particolari rischi di natura elettrica. È comunque doveroso precisare che eventuali cortocircuiti causati in fase di esercitazione potrebbero produrre danni al pc, agli arredi ed in casi estremi anche a ustioni, per tale ragione ogni qual volta si assembla un circuito, o si fanno modifiche su di esso, occorrerà farlo in assenza di alimentazione e al termine dell’esercitazione occorrerà provvedere alla disalimentazione del circuito rimuovendo sia il cavo usb di collegamento al pc che eventuali batterie dai preposti vani o connettori di alimentazione esterna. Inoltre, sempre per ragioni di sicurezza, è fortemente consigliato eseguire i progetti su tappeti isolanti e resistenti al calore acquistabili in un qualsiasi negozio di elettronica o anche sui siti web specializzati.

Al termine delle esercitazioni è opportuno lavarsi le mani, in quanto i componenti elettronici potrebbero avere residui di lavorazione che potrebbero arrecare danno se ingeriti o se a contatto con occhi, bocca, pelle, etc. Sebbene i singoli progetti siano stati testati e sicuri, chi decide di seguire quanto riportato nel presente documento, si assume la piena responsabilità di quanto potrebbe accadere nell’esecuzione delle esercitazioni previste nello stesso. Per i ragazzi più giovani e/o alle prime esperienze nel campo dell’Elettronica, si consiglia di eseguire le esercitazioni con l’aiuto ed in presenza di un adulto.

Roberto Francavilla

GLI ULTRASUONI

Nella Lezione precedente abbiamo visto cos’è il suono e come esso viene generato, un corpo che vibra produce delle onde sonore, la vibrazione, ovvero l’oscillazione nel tempo del corpo, stabilisce quella che è chiamata frequenza. Per cui la Frequenza può essere definita come il numero delle oscillazioni complete del corpo nell’unità di tempo (che è il secondo e si indica con “s”). L’unità di misura della frequenza è l’Hertz (Hz).

Suoni che hanno frequenze superiori ai 20.000 Hz, cioè 20 kHz, sono chiamati “ultrasuoni” e questi suoni sono utilizzati in campo elettronico in tantissime applicazioni, ad esempio nel rilevare la distanza di un corpo dalla sorgente sonora.

Per comprendere al meglio il principio utilizzato nella rilevazione della distanza mediante un segnale ad ultrasuoni, occorre imparare un po’ di Fisica.

Curiosità: che cos’è la Velocità?

La velocità di un oggetto è la distanza percorsa da quello stesso oggetto nell’unità di tempo. Per cui la velocità di un’onda sonora è la distanza (che si misura in metri) percorsa dalla stessa onda sonora, nell’unità di tempo (espressa in secondi, “s”). Ovviamente ci sono anche i multipli e i sottomultipli del metro e del secondo.

Sapevate che una lepre corre mediamente ad una velocità di circa 60 chilometri all’ora (km/h), cioè, in un’ora la lepre copre una distanza di 60 km.

Un Onda Sonora viaggia nell’aria ad una velocità di  343 m al secondo (m/s), cioè a 0,0343 cm al microsecondo (cm/ms).

Modulo ad Ultrasuoni HC-SR04. Rilevamento Distanza degli Ostacoli

Il modulo ad ultrasuoni che utilizzeremo nei nostri progetti è l’HC-SR04. L’HC-SR04 è un sensore di rilevamento della distanza molto  conveniente  che  viene  utilizzato  principalmente  per  evitare oggetti  in  vari progetti di robotica. 

Nelle prime auto con sensori di parcheggio è stato anche utilizzato nel rilevamento di ostacoli in fase di parcheggio e persino per rilevare il livello dell’acqua. Il sensore a ultrasuoni HC-SR04 utilizza un generatore di ultrasuoni per determinare la distanza di un oggetto come fanno i pipistrelli. E’ un modulo che offre un eccellente rilevamento senza contatto con elevata precisione e le letture sono stabili. Il funzionamento non è influenzato dalla luce solare o da oggetti di colore nero come avviene per i rilevatori laser.

Esso si presenta composto da una basetta (che può essere di colore blu, ma ne ho viste anche di colore giallo, rosso o arancio), due cilindri, che sembrano due occhi, un oscillatore che sembra dare ai due occhi un mono-ciglia e quattro PIN che sembrano baffetti… infatti questo modulo viene utilizzato spesso in una posizione che sembra essere una testa…. Ad esempio nelle robot car…

I due cilindri servono per: l’emissione del segnale ad ultrasuoni (cilindro indicato con «T») ed al ricevimento del segnale (cilindro indicato con «R»). Per i 4 piedini: ad uno si collega l’alimentazione a 5V (Vcc) direttamente da Arduino, poi c’è il piedino della massa (GND) e poi i due piedini “Trig” ed “Echo” che vanno collegati a due piedini analogici o anche digitali di Arduino. Un piedino serve per l’invio dell’impulso sonoro e l’altro per rilevare il tempo di ricezione del segnale.

Per spiegarvi come funziona il modulo devo riprendere la lezione di fisica precedente, ma è utile anche per la scuola….per cui leggetela…

Il principio di funzionamento del Modulo ad Ultrasuoni è semplice: il modulo emette un segnale ad ultrasuoni e calcola il tempo di percorrenza (in microsecondi) fra l’istante di emissione e l’istante di ricezione dopo che lo stesso segnale rimbalza sull’ostacolo. Una volta misurato il tempo, la distanza percorsa dal segnale si calcola di conseguenza. Infatti, ad esempio, se il tempo di percorrenza dell’onda sonora nell’andare verso l’ostacolo e poi di ritorno una volta che è rimbalzata sull’ostacolo stesso, è stato di 300 microsecondi, facendo le dovute equivalenze, abbiamo che la distanza percorsa dal segnale di andata e di ritorno è:

distanza (in centimetri) = 0,0343 x tempo (in microsecondi)

ovvero 0,0343 x 300 = 10 cm

Poiché il tempo è quello di «andata» e di «ritorno», ovviamente la distanza dell’ostacolo è la metà, per cui è 5 cm.

Vediamo con una rappresentazione grafica quanto spiegato:

L’emettitore Tx invia l’impulso ad ultrasuoni, il ricevitore Rx riceve l’impulso rimbalzato sull’ostacolo. Il modulo calcola il tempo trascorso tra l’andata e il ritorno, per cui la distanza percorsa del segnale è due volte la distanza che c’è fra il modulo e l’ostacolo, ecco perché nel calcolo per determinare il valore della distanza dell’ostacolo deve essere diviso per due.

Per cui l’ “algoritmo” da utilizzare per stabilire la distanza è:

Distanza ostacolo (in centimetri) = [0,0343 x t (in microsecondi)]: 2

Dopo la parte teorica, passiamo quindi al nostro progetto.

Progetto 19 – Rilevare la distanza di un ostacolo.

Per questo progetto ci occorre:

Lo schema elettrico da realizzare è il seguente:

Lo schema di montaggio da realizzare è il seguente:

Il Trig e l’Echo vengono collegati rispettivamente ai PIN digitali 10 e 9. Anche se questi PIN hanno la tilde, cioè possono essere utilizzati per invio di segnali PWM, noi li utilizzeremo quali normali PIN digitali.

Clicchiamo sull’icona di Arduino e dopo aver aperto un file nuovo ricopiamo lo sketch sotto riportato:

Una volta caricato lo sketch ed attivato il plotter seriale, verranno rilevate le distanze degli oggetti che si trovano davanti al sensore

Video-Progetto 19 – Rilevare la distanza di un ostacolo.

Analisi dello sketch del Progetto 19 – Rilevare la distanza di un ostacolo.

Nello sketch della misura della distanza troviamo due funzioni nuove.

La prima:

delayMicroseconds ( 10 );

questa istruzione introduce un ritardo che questa volta è espresso in microsecondi (il delay classico, ricordatevi, introduce ritardi di millisecondi nello sketch).

La seconda:

long durata = pulseIn (PortaEcho, HIGH );

dice ad Arduino di caricare nella variabile di nome “durata” definita come variabile di tipo “long”, cioè una variabile che ha tante cifre decimali, il valore tempo calcolato dal momento in cui l’impulso parte dal Tx al momento in cui il segnale è ricevuto dall’Rx portando lo stato del PIN in uno stato alto (HIGH).

CURIOSITA’: Cosa sono i Gradi di Libertà (DOF) e gli Azionamenti Elettrici

Spostamenti, movimenti degli arti, rotazione busto…. sono i movimenti che consentono ad un robot di effettuare quelle attività che noi desideriamo che faccia per svolgere il compito affidato (programmato).

Facciamo un esempio per capire meglio il concetto del movimento analizzando uno dei robot più utilizzati nei processi industriali per le produzioni di serie : il Robot Puma.

Questo robot, che non è altro che un braccio meccanico, è molto utilizzato nel settore automobilistico per saldare, verniciare, spostare componenti pesanti, posizionare componenti in punti ben precisi nei montaggi e nell’immagazzinamento, etc.

Da questo si comprende come la prima domanda che ci dobbiamo porre nel progettare un Robot è: cosa deve fare il nostro Robot ?

La complessità nella progettazione di un Robot è data dal numero di movimenti da dare e di conseguenza dal numero di «giunti di movimento» da inserire; nel caso particolare della figura, ve ne sono sei.

Ma come facciamo a stabilire quanti giunti inserire?

La risposta è nello stabilire se il nostro punto di lavoro si deve poter muovere nello spazio, oppure su un piano, oppure una retta.

Supponiamo che un corpo rigido possa solo traslare lungo il proprio asse (retta), tale possibilità di movimento è detto in Meccanica «grado di libertà», ovviamente gli altri movimenti che non è possibile effettuare si dice che sono vincolati.

In questo caso quindi il movimento è caratterizzato da un solo grado di libertà.

Nel caso rappresentato dalla figura a destra, invece, abbiamo che il corpo può traslare lungo le ascisse e lungo le ordinate, ovvero si può muovere su un piano, per cui il corpo è caratterizzato dall’avere due gradi di libertà.

In questo altro caso (vedere figura a sinistra) il corpo si può muovere rigidamente nello spazio, lungo tre assi, per cui esso è caratterizzato dall’avere tre gradi di libertà.

In Fisica, ma anche ed in particolare in Meccanica, la posizione nello spazio di un corpo rigido (solido) è identificabile mediante sei variabili (tre di traslazione e tre di rotazione) essi rappresentano i possibili movimenti chiamati gradi di libertà.

Ovviamente riprodurre mediante un’unica apparecchiatura la posizione nello spazio di un punto è impossibile (…almeno con le conoscenze tecnologiche attuali), perché vi sono dei «vincoli» imposti dalle apparecchiature che generano il movimento, che normalmente sono degli azionamenti elettrici.

Ovviamente riprodurre mediante un’unica apparecchiatura la posizione nello spazio di un corpo è impossibile (…almeno con le conoscenze tecnologiche attuali), perché vi sono dei «vincoli» imposti dalle apparecchiature che generano il movimento, che normalmente sono degli azionamenti elettrici.

Ecco perché il Robot Puma ha sei giunti di rotazione (sei azionamenti elettrici), perché il movimento che consente ogni giunto di rotazione, così come indicato in figura, consente a sua volta al punto di lavoro che si trova all’estremità del braccio, di raggiungere «qualsiasi» punto dello spazio e la sua posizione relativa è sempre nota

Si definisce azionamento elettrico (o anche chiamato Power Drive System: PDS) un sistema che converte l’energia elettrica in energia meccanica con l’ausilio di apparecchiature elettroniche di potenza e di controllo.

I motori utilizzati per gli azionamenti elettrici sono rappresentati nello schema sotto, ovviamente non desidero tenere un corso di Macchine Elettriche, ma desidero solo mostrarvi il numero significativo di motori elettrici che abbiamo a disposizione per poter dare il movimento meccanico che noi vogliamo.

Dopo questa prima parte teorica impegnativa, ma necessaria per capire quali e quanti motori necessitiamo per realizzare particolari movimenti, passiamo a questioni più pratiche.

Per i nostri scopi e le nostre applicazioni con Arduino utilizzeremo due tipologie di motori: I motori passo-passo ed i servo motori.

Il Servo Motore – Dare movimento alle cose.

Con il Servo Motore è possibile dare movimento agli oggetti, ad esempio ad un braccio robotico, ad una leva, etc. Anche in questo caso, per il suo uso, basta seguire con attenzione la lezione che segue. Il servomotore è composto da una parte elettro-meccanica ed una elettronica, quella elettro-meccanica crea il movimento, la parte elettronica lo controlla. Comunque esteriormente il servo motore si presenta con un guscio in plastica, un ingranaggio che fa ruotare un perno e un cavo a tre poli.

Il servomotore che utilizzeremo nel prossimo progetto è l’SG-90, alimentabile direttamente da Arduino ed è utilizzato per spostamenti di oggetti leggeri. Come mostrato nella figura sotto il cavo colorato ha tre poli: ad un polo viene collegata la tensione Vcc a 5V di Arduino, ad un altro la massa (GND) e il terzo polo va collegato ad un PIN digitale di Arduino e serve per il controllo.

Per applicazioni più “pesanti” possiamo utilizzare i servomotori con sigla commerciale MG996R oppure i TD-8120MG, ma in questo caso, specialmente se sono più di un servomotore, l’alimentazione deve essere data da un alimentatore esterno.

Progetto 20 – Controllare un Servo Motore SG-90

Per questo progetto abbiamo bisogno di:

Per prima cosa prendiamo il nostro Arduino, il servomotore e i cavetti e li colleghiamo come da figura sotto. Lo schema elettrico è:

Per il montaggio seguire lo schema sotto:

Il Servo Motore ha tre cavetti in genere colorati: arancio (cavo di controllo), rosso (5 V) e marrone (GND), in altri casi, dipende dal produttore, il cavo di controllo è bianco.

Clicchiamo sull’icona di Arduino e dopo aver aperto l’IDE creiamo un file nuovo e ricopiamo lo sketch sotto riportato:

Dopo aver controllato lo sketch, carichiamolo su Arduino nel modo consueto e apriamo il monitor seriale, vedremo ruotare la parte mobile del motore (chiamato rotore) da 10° a 160° e poi ritornare indietro e sul monitor viene indicata la rotazione in gradi.

Progetto 20 – Controllare un Servo Motore SG-90

Analisi dello Sketch: Progetto 20 - Controllare un Servo Motore.

Analizzando lo sketch sopra possiamo osservare la seguente istruzione:

#include <Servo.h>

Cioè richiama la libreria per pilotare il servo motore.

Questa libreria dovrebbe essere già istallata nell’IDE di Arduino, nel caso non dovesse essere così, potete usare la procedura descritta nelle attività propedeutiche al Corso.

Tra le istruzioni che mette a disposizione la libreria <Servo.h>  abbiamo quelle di uso più comune:

[nomeoggetto].attach(PIN) : consente di specificare su quale pin è connesso il nostro servo e legarlo all’oggetto ServoMotore;

[nomeoggetto].detach(PIN) : rimuove il collegamento tra l’oggetto ServoMotore e il pin a cui era legato;

[nomeoggetto].read(x) : legge la posizione angolare del nostro servo, restituisce l’ultimo valore passato con write();

[nomeoggetto].write(x) : indica al servo l’angolo a cui posizionarsi;

Continuando con l’analisi dello sketch… vediamo le singole istruzioni dell’area SETUP:

Servo ServoMotore;       // …..è utilizzata per creare un oggetto di nome ServoMotore

ServoMotore.attach(9);  // …precisiamo all’IDE che il ServoMotore è collegato al PIN 9

Passando alla parte LOOP:

ServoMotore.write(i); // ….la variabile “i” è quella incrementata di uno dal ciclo for, per cui in questo modo il rotore girerà di un grado per volta.

Si può osservare dai cicli “for” che il primo si incrementa da 10 a 160 ed il secondo si decrementa da 160 a 10.

Il resto sono istruzioni già viste nei progetti precedenti.

Progetto 21 – Sistema Radar ad Ultrasuoni

Per questo progetto ci occorre:

Poiché per questo progetto utilizzeremo sia il modulo ad ultrasuoni HC-SR04 che il servomotore SG-90, prima di procedere è opportuno fissare il modulo ad ultrasuoni al servomotore. Per fare questo possono essere utilizzati metodi “artigianali” di qualsiasi tipo, oppure è possibile acquistare le opportune staffe di fissaggio che si possono trovare sui maggiori market place tipo Ebay, Amazon, Aliexpress, o altri..

Nel caso di soluzione artigianale, fate attenzione a non creare un supporto in metallo che possa mettere in corto circuito le piste presenti sul modulo ad ultrasuoni. Personalmente vi suggerisco di acquistare le apposite staffe per pochi euro incluso spese di spedizione.

Per prima cosa prendiamo la staffa e fissiamo, con le viti, il sensore HC-SR04 su di essa e poi il tutto lo fissiamo, con altre viti, al servomotore su cui abbiamo montato il supporto previsto.

Prendiamo del nastro biadesivo e facciamo in modo che il servo motore stia in piedi con su montata la staffa (ed il sensore). Vedere foto sotto per l’assemblaggio:

Lo schema elettrico è il seguente:

Effettuiamo i collegamenti come mostrato nello schema di montaggio:

Adesso passiamo allo sketch, clicchiamo sull’icona di Arduino e dopo aver aperto l’IDE creiamo un file nuovo e ricopiamo lo sketch sotto riportato:

Per quanto riguarda l’analisi dello sketch, come è osservabile dal listato sopra, esso non è altro che una combinazione degli sketch fatti per il controllo del sensore e del Servo Motore.

A questo punto non resta che caricare lo sketch ed attivare il Monitor Seriale e provare ad interporre degli ostacoli davanti al radar per vederne la rilevazione.

Video-Progetto 21 – Sistema Radar ad Ultrasuoni

Progetto 22 – Sistema Radar ad Ultrasuoni con Processing

Per i più temerari, senza modificare, in termini di hardware, quanto già realizzato per il progetto precedente, c’è anche una versione dello stesso progetto con una grafica più accattivante. Per questa versione ho dovuto modificare un progetto già trovato in rete che utilizza, oltre l’IDE di Arduino, un altro software Open Source che si chiama Processing.

Senza entrare nei dettagli tecnici di Processing perché ci sarà un Corso dedicato a questo altro ambiente di programmazione, se volete, potete cimentarvi anche voi a realizzare questo progetto (è un tantino più complicato rispetto ai soliti progetti, ma ne vale la pena!).

Andate sul sito :

https://processing.org/

Vi appare la pagina:

Clicca su Download Processing e si accede alla pagina:

Scegliete la versione in base al vostro sistema operativo (nel mio caso è Windows a 64 bit):

Viene scaricato Processing nella sua ultima versione (in questo caso, la 3).

Processing è un programma Open Source ed è quindi libero, ma se si desidera è possibile fare una donazione, che consiglio, per tenerlo sempre aggiornato con nuove funzionalità.

La versione che ho scaricato è processing-3.5.3-windows64.zip, scompattatelo e lanciate il programma di istallazione.

Cliccate due volte consecutivamente sul file “processing” e si avvia l’istallazione:

Compare un messaggio dopo l’istallazione che dice che i file creati con processing versione 2 potrebbero non funzionare, continuate e cliccate su Get Start. A questo punto si apre la finestra di Processing. Potete chiuderlo.

Scaricate i files (basta cliccare sul nome):

La prima cosa da fare è verificare che le impostazioni previste sul file Radar_Processing_ino siano corrette, per cui collegate Arduino al PC ed aprite lo sketch per Arduino di nome Radar_con_Processing , verificate a quale porta è collegato Arduino (guardare in basso a destra), nel mio caso Arduino è collegato alla COM3 (vedi sotto) .

A questo punto cliccate due volte sul file: Radar_Processing_ino , ovviamente dopo averlo scompattato.

Si apre la seguente finestra:

Andate sulla riga n. 21 e verificate che il numero di porta sia corretto, nel caso cambiate il numero della porta (SOLO IL NUMERO!).

Poi andate sul vostro desktop e con il tasto destro selezionate risoluzione dello schermo. Nel mio caso è settato 1280 x 720 (vedere figura sotto):

A questo punto ritornate su Processing e verificate che la risoluzione riportata al rigo 19 sia corretta, nel caso modificatela, comunque non mettete risoluzioni inferiori a 1280 x 720. In caso la vostra risoluzione fosse più bassa adeguatela a quella riportata su Processing

Ora caricate lo sketch sul vostro Arduino e dopo qualche secondo lanciate processing, cliccando sul tasto del “play”:

Vi apparirà un vero  e proprio RADAR!!!

Poiché credo di avervi stressato già abbastanza, la pianto qui! E ci vediamo alla prossima lezione.

Se hai trovato la lezione interessante fai una donazione mi aiuterai a realizzarne tante altre.