Lo scopo del progetto è mostrare come sia possibile controllare una pinza e la sua rotazione attraverso un segnale di alcuni sensori come un sensore inerziale e un sensore per l’elettromiografia. La struttura è molto semplice ed è progettata nel pieno della filosofia Maker cercando di sfruttare oggetti di recupero con il solo scopo di mostrare l’idea che c’è dietro.
La pinza è realizzata in tre modi diversi, ma lo stesso progetto può essere realizzato acquistando direttamente una pinza per robot. Una possibilità è quella di realizzarla con due ingranaggi, connettendone uno al servomotore e collegare le due braccia della pinza direttamente agli ingranaggi.
L’architettura complessiva del progetto prevede diversi livelli. Si parte da un Arduino Nano che deve leggere i sensori, IMU ed elettromiografia, e fa una prima elaborazione del segnale ottenendo alcuni parametri sintetici che invia, attraverso una comunicazione radio a 2,4 GHz ad un Arduino Uno a cui sono collegati i due servo che muovo la pinza.
L’Arduino Uno provvede anche a comunicare via Bluetooth sia con dispositivi mobile che con il computer.
Inoltre, c’è un modulo, un ESP 8266 che permette di raccogliere i dati ed inviarli su un server sotto un dominio di proprietà attraverso il quale è possibile salvare i dati e visualizzarli da remoto.
Si utilizza un sensore inerziale per leggere l’inclinazione del polso e controllare la rotazione della pinza, tale sensore include anche un sensore di temperatura che si sfrutta con l’idea di raccogliere la temperatura dell’utente. Inoltre, si utilizza anche un sensore per l’elettromiografia per misurare l’attività muscolare in modo da regolare la chiusura o l’apertura della pinza.
Leggi di più: https://github.com/mastroalex/progelettronica

Il progetto

Corso di Elettronica II
La struttura è molto semplice ed è stata progettata nel pieno della filosofia Maker cercando di sfruttare oggetti di recupero con il solo scopo di mostrare l’idea che c’è dietro. Un esempio in Fig. 1.

La pinza è stata realizzata in tre modi diversi, ma lo stesso progetto può essere realizzato acquistando direttamente una pinza per robot. Una possibilità è quella di realizzarla con due ingranaggi, connettendone uno al servomotore e collegare le due braccia della pinza di- rettamente agli ingranaggi. Come mostrato in Fig. 2.
L’architettura complessiva del progetto prevede diversi livelli. Si parte da un Arduino Nano che deve leggere i sensori e fa una prima elaborazione del segnale ottenendo alcuni para- metri sintetici che invia, attraverso una comunicazione radio a 2,4 GHz ad un Arduino Uno a cui sono collegati i due servo che muovo la pinza.

L’Arduino Uno provvede anche a comunicare via Bluetooth sia con dispositivi mobile che con il computer.
Inoltre, è stato aggiunto un modulo, un ESP 8266 che permette di raccogliere i dati ed inviarli su un server sotto un dominio di proprietà attraverso il quale è possibile salvare i dati e visualizzarli da remoto.
Sono stati utilizzati un sensore inerziale per leggere l’inclinazione del polso e controllare la rotazione della pinza, tale sensore include anche un sensore di temperatura che è stato sfruttato con l’idea di raccogliere la temperatura dell’utente. Inoltre, è stato utilizzato anche un sensore per l’elettromiografia per misurare l’attività muscolare in modo da regolare la chiusura o l’apertura della pinza.
Proponiamo di seguito le altre due modalità di costruzione della pinza. Una possibile realizzazione della pinza può essere effettuata utilizzando il compensato Fig. 3. Per la progetta- zione si parte dal disegno dei vari componenti sul compensato, si procede poi con il taglio e infine l’assemblamento. Sopra la base che sup- porta la pinza è stato montato l’Arduino Uno con il ricetrasmettitore, il modulo bluetooth e i due servo che controllano la rotazione e l’apertura-chiusura della pinza.


Anche in questo caso uno degli ingranaggi è stato collegato con un servo mentre la base che contiene la pinza e ne permette la rotazione è stata collegata all’altro servo.
Dispositivi utilizzati
GY-521
Il GY-521 è un modulo che permette di includere un sensore MPU-6050 e un sensore di temperatura. MPU-6050 è un chip prodotto da Invesense [1], è un’unità di misura inerziale (IMU) basata sulla tencologia MEMS che contiene un accelerometro a tre assi e un giroscopio a tre assi all’interno di un un singolo chip. Questo sitema a 6 gradi di libertà (6 DOF) fornisce quindi 6 valori in uscita.

L’accelerometro è in grado di rilevare l’accelerazione di un corpo lungo il proprio asse, men- tre il giroscopio è in grado di rilevare la velocità angolare di un corpo su di un proprio asse. Il modulo GY-521 ha piccole dimensioni ma è molto preciso, contiene un chip con un convertitore analogico-digitale a 16 bit integrato per ogni canale e questo permette di catturare i canali X, Y e Z contemporaneamente. Il range di misura dell’accelerometro è +2, +4, +8, +16g, mentre il range di misura del giroscopio è ±250, 500, 1000 e 2000 °/s. Necessita inoltre, di una alimentazione da 3V a 5V.
Questo sensore utilizza il protocollo di comu- nicazione standard I2C, in particolare per la comunicazione è necessario importare due librerie una per l’I2C e una per la comunicazione con l’MPU-5060.
#include <MPU6050_tockn.h>
MPU6050 mpu6050(Wire);
#include <Wire.h>
Servo
Un Servomotore è un attuatore rotativo o lineare che consente un controllo preciso della posizione angolare o lineare, della velocità e dell’accelerazione.
È costituito da un opportuno motore accoppiato ad un sensore per il feedback di posizione. Richiede anche un controller relativamente sofisticato che spesso consiste in un modulo dedicato, progettato specificatamente per l’uso con i servomotori.
In questo progetto è stato usato il Microservo SG90. Può ruotare approssimativamente di 180° (90° per entrambe le direzioni) e funziona esattamente come i servomotori standard ha solo delle dimensioni ridotte.

La posizione “0” (impulso di 1,5 ms) è al centro, “90” (impulso di 2 ms) è tutto a destra, “-90” (impulso di
1 ms) è tutto a sinistra.
Per gestire facilmente il controllo PWM viene utilizzata la libreria Servo.
#include <Servo.h>
Servo servo-object-name;
Invece, per controllare il servo è stato utilizzato il seguente comando:
servo-object-name.write(degrees);

Sensore per l’elettromiografia
Il sensore per l’EMG, dove EMG sta per Elettromiografia [2], è un sensore in grado di misurare l’attività muscolare monitorando il potenziale elettrico generato dalle cellule muscolari. L’elettromiografia nasce per la ricerca medica e per la diagnosi dei disturbi neuromuscolari. Tuttavia, i sensori per l’elettromiografia oggi vengono utilizzati nella robotica e in altri sistemi di controllo.
L’elettromiografia valuta lo stato di salute dei muscoli e delle cellule (i motoneuroni) che li controllano. Queste cellule trasmettono segnali elettrici che provocano la contrazione e il rilassamento muscolare. Un sensore per l’elettromiografia traduce questi segnali in grafici o dati e aiuta i medici ad eseguire una diagnosi.
Questo sensore amplifica ed elabora l’attività elettrica di un muscolo e lo converte in un segnale analogico che può essere letto da qualsiasi microcontrollore con un ADC, come Arduino. Quando il muscolo sottoposto a misurazione si contrae, la tensione di uscita del sensore aumenta

Collegato al sensore, tramite un connettore jack da 3,5 mm, c’è un cavo che da un lato è collegato ad Arduino, mentre dall’altro lato termina con tre connettori a clip che si attaccano a tre elettrodi.
In questo progetto è stato usato il Muscle Sensor V3 [4]. Questo sensore necessita di una tensione di riferimento positiva ed una negativa, quindi sono richieste due batterie da 9V.

Collegato al sensore, tramite un connettore jack da 3,5 mm, c’è un cavo che da un lato è collegato ad Arduino, mentre dall’altro lato termina con tre connettori a clip che si attaccano a tre elettrodi.
In questo progetto è stato usato il Muscle Sensor V3 [4]. Questo sensore necessita di una tensione di riferimento positiva ed una negativa, quindi sono richieste due batterie da 9V.
L’Output Signal richiede un pin analogico, in particolare è stato utilizzato il pin A0.
L’elettromiografia di superficie può essere registrato da una coppia di elettrodi o da una matrice più complessa di elettrodi. È necessario più di un elettrodo perché le registrazioni dell’elettromiografia mostrano la differenza di potenziale tra due elettrodi separati.
Come si può leggere nel datasheet o nello schema elettrico, il segnale dei due elettrodi entra in un amplificatore per strumentazione:

Successivamente il segnale viene rettificato:

Alla fine, il segnale viene ripulito attenuando rumori generati da artefatti ambientali, elettrici, elettronici, fisiologici ecc.

In sintesi, si ottiene un segnale proporzionale alla contrazione muscolare che verrà inviato all’ADC di Arduino.

Il Muscle Sensor V3 è fuori produzione, quindi per il progetto è stata acquistata una copia del sensore. Questa copia risulta più economica tuttavia presenta alcuni difetti. Il sensore, infatti emette un segnale senza livellamento e pieno di disturbi.

Elettrodi
L’attività elettrica di un muscolo viene rilevata con l’ausilio degli elettrodi per l’elettromiografia. Ci sono differenti tipi di elettrodi, in questo progetto sono stati utilizzati gli elettrodi di superficie, in particolare quelli in gel [5, 6]. Questo tipo di elettrodi contiene un gel elettrolitico come interfaccia tra gli elettrodi e la pelle.
Gli elettrodi gelificati forniscono una tecnica non invasiva per la misurazione e il rilevamento del segnale dell’elettromiografia, ma sono generalmente utilizzati per i muscoli di superficie poiché vengono applicati sulla pelle.
Gli elettrodi devono essere applicati in modo appropriato, in particolare, due elettrodi devono essere posizionati tra l’unità motoria e l’inserzione tendinea del muscolo, lungo la linea longitudinale del muscolo. La distanza tra il centro dei due elettrodi dovrebbe essere di 1-2 cm.
Il connettore a clip rosso va posizionato sull’elettrodo al centro del corpo muscolare, quello verde ad un’estremità del corpo muscolare e infine, il terzo connettore (giallo) deve essere posizionato su una sezione inattiva del corpo.

È importante fare alcune considerazioni sui segnali dell’elettromiografia.

La fonte elettrica è il potenziale di membrana muscolare di circa -90 mV. La frequenza di ripetizione tipica dell’impulso dell’unità muscolo-motoria è di circa 7-20 Hz, a seconda della dimensione del muscolo i potenziali misurati variano tra meno di 50 µV fino a 30 mV. Questo significa che il segnale deve essere amplificato come è stato mostrato nel paragrafo precedente.
A causa della bassa qualità del circuito per l’elettromiografia, il segnale analogico acquisito è risultato pieno di rumore. La tensione è stata solo rettificata ma non molto livellata, quindi è stato utilizzato un semplice algoritmo di livellamento riportato in Appendice A.
Quanto riportato in Arduino’s reference smoothing script [7] è lo script di smoothing di riferimento di Arduino che è stato utilizzato apportando piccole modifiche dopo un lungo periodo di test. In Fig. 15 si può osservare il segnale nel Plotter seriale di Arduino, in cui sono stati riportati il segnale grezzo, un valore soglia e il segnale ripulito.
Questa media livellata consente di personalizzare il codice riportato in Appendice B per controllare il servo che permette l’apertura e la chiusura della pinza.
Pulse Sensor
Il principio di questo sensore è quello di puntare una luce tra le dita, la quale viene assorbita o riflessa e una parte passerà attraverso i tessuti più sottili. Quando il sangue viene pompato attraverso il corpo, viene schiacciato nei tessuti capillari e il volume di quei tessuti aumenta leggermente, quindi tra i battiti del cuore il volume diminuisce. La variazione del volume influisce sulla quantità di luce che verrà trasmessa. Questa fluttuazione è molto piccola ma può essere percepita con l’elettronica.
Si inizia con una sorgente e un rilevatore di luce. Si utilizzano un LED a infrarossi e un fotodiodo. La luce infrarossa viene assorbita dal sangue e riflessa dai tessuti circostanti, tale assorbimento è dovuto alla presenza dell’emoglobina nel sangue [8]. È importante che i due dispositivi siano accoppiati correttamente, così che la lunghezza d’onda della luce emessa dal LED venga rilevata dal fotodiodo. Il fotodiodo consiste di una giunzione che genera una piccola corrente quando viene bombardato con i fotoni.
A questo punto è necessario amplificare il segnale che esce dal fotodiodo e questo è possibile grazie ad un circuito che è il Convertitore corrente tensione. In Fig. 16 è riportato lo schema circuitale completo del sensore.
![Schema circuitale del Pulse Sensor [9].](https://github.com/mastroalex/progelettronica/raw/main/images/heartmonitorschm.png)
Il fotodiodo deve essere schermato dalla luce ambientale che genera molto rumore nel segnale. Infatti, come si può vedere in Fig. 18 il segnale del sensore è distorto anche da piccoli movimenti. Inoltre, qualsiasi disallineamento o movimento del LED a infrarossi confonderà il segnale.

Pulsesensor.com produce un sensore [10] che è abbastanza piccolo da poter essere indossato comodamente in diverse configurazioni ed è immune al rumore. È costituito da un circuito integrato di dimensioni ridotte che ha combinati al suo interno un fotodiodo e un circuito op-amp. Le dimensioni ridotte hanno come risvolto il fatto che è possibile mantenere un contatto stretto e costante con la pelle. Questo di fatto protegge il sensore dai cambiamenti della luce ambientale e riduce al minimo i rumori dovuti al movimento.
Il segnale grezzo è quello in Fig. 18.

Per le prime prove con il sensore su Arduino è stata utilizzata la libreria PulseSensor Playground, tuttavia questa non è risultata completamente compatibile con le altre funzionalità che sono state implementate successivamente. Quindi è stata eliminata la libreria ed è stato scritto un codice apposito.
La lettura è richiamata dalla funzione battiti() descritta nella libreria funzioniBPM.h.
Sono state messe insieme idee prese da Instructables [11] e da Pulsesensor [10] per ottenere un codice che si occupi di leggere il valore analogico e identificare il battito al di sopra di una certa soglia. Il codice è relativamente complesso. Oltre ad una parte deputata a stampare i simboli o una frase affermativa quando un battito viene rilevato, il Timer 2 viene utilizzato per impostare un interrupt ogni 2 ms. Una parte di codice più complessa si occupa di misurare il tempo trascorso dall’ultimo battito e di fare campioni appropriati per evitare il rumore. In particolare, si cerca di evitare il rumore dicrotico e di rilevare i picchi. Quando viene rilevato un battito (un picco conforme alle condizioni imposte) il valore del tempo viene aggiornato e vengono calcolati i BPM e il numero di battiti che possono verificarsi in 1 minuto (60000 ms).
Le funzioni primarie sono svolte da ISR(TIMER2_COMPA_vect) e battiti() e serialOutputWhenBeatHappens() che si occupa di restituire il valore del battito.
Test dei sensori
Nella Fig. 19 è riportato il circuito che mostra la configurazione del test per lo sviluppo del codice iniziale.
Questa configurazione in Fig. 19, con due batterie da 9 V consente di avere +9 e -9 V sui terminali Vs del sensore per l’elettromiografia. È anche possibile utilizzare un alimentatore da 18 V DC e dividerlo in +9 e -9.
Questa configurazione è stata utilizzata per eseguire tutti i test dei dispositivi e del codice. È stato, in seguito, rielaborato parte del codice suddividendolo nei vari moduli in modo da avere un sistema più modulare che permettesse di aggiungere e rimuovere i dispositivi a seconda delle necessità. Da questa configurazione di partenza, sono stati suddivisi i diversi dispositivi in una struttura determinata per il monitoraggio e una struttura con gli attuatori.
Alla fine, i sensori che devono venire a contatto con il braccio e il polso sono stati uniti in un unico cavo dotato di connettore per collegarlo alla struttura di monitoraggio.
Tutto è stato quindi riorganizzato in modo più compatto.

Divisione dei dispositivi
Come riportato nel paragrafo precedente dopo una serie di prove con i diversi sensori i dispositivi utilizzati sono stati separati e i codici sono stati riorganizzati. In particolare, è stato sfruttato un Arduino Nano per la lettura dei sensori e un Arduino Uno per controllare i servomotori.
[Vedi il report completo]
GUI
Nel progetto è stata sviluppata anche un’interfaccia grafica che consente di visualizzare i dati trasmessi e di prendere il controllo della pinza, sia dal computer che dallo smartphone.
Processing and computer app
[Vedi il report completo]
App per smartphone
[Vedi il report completo]
Registrazione e archiviazione dei dati
[Vedi il report completo]
Come rendere tutto più compatto
Per rendere tutto più compatto ed evitare problemi dovuti alla mancanza di stabilità della breadboard è stato deciso di saldare il tutto su più schede millefori. Tuttavia, per consentire i test e la sostituzione dei componenti sono stati utilizzati anche connettori multi-pin.
[Vedi il report completo]
Conclusioni e sviluppi futuri
Il sensore di temperatura non riferisce perfettamente la temperatura del soggetto e potrebbe essere sostituito con un sensore a contatto con la pelle ed eventualmente studiato un algoritmo per riportare la temperatura periferica a quella centrale.
L’utilizzo di un sensore per l’elettromiografia più avanzato come il MyoWare [21] permette di ridurre i disturbi e avere una struttura più compatta.
Per sviluppare un’applicazione per iOS è necessario sostituire il modulo bluetooth con uno con Bluetooth Low Energy come il modulo SH-HC-08. Una prima bozza è stata discussa nella repository online di questo progetto.
Per aumentare la sicurezza dei dati in ottica di avere un rispetto della privacy e delle normative GDPR per il trattamento dei dati personali online, è sicuramente necessario provvedere ad un algoritmo di sicurezza molto più serio del semplice nascondere il contenuto della pagina con lo script php. Inoltre, potrebbe essere opportuno provvedere a una criptazione dei dati anche prima di inviarli al server e attivare il protocollo HTTPS nella pagina web.
Per la temperatura e umidità ambientali può essere opportuno sostituire il DHT11 con un DHT22 ottenendo così una sensibilità di 0,5°C e 2% RH.
Per l’alimentazione, invece di tre alimentatori si potrebbe utilizzare un unico alimentatore da 18V con un voltage divider per ottenere ±9V.
Infine, la stazione di lettura potrebbe essere riprogettata su PCB in modo da avere un unico piano più compatto.
Contenuti aggiuntivi
Per il video dimostrativo: youtu.be/k1hNBbgfAyE
A seguire un’appendice in cui sono riportate le parti più interessanti di codice.
È possibile trovare un resoconto fatto passo passo con ulteriori dettagli, i codici completi e gli schemi di collegamento fritzing sulla repository: github.com/mastroalex/progelettronica
Autori
- Mastrofini Alessandro
- Volpato Rebecca
Scarica il documento completo
The idea of the project is to show a concept and how practically to control gripper and rotation via sensor signals. The project includes different devices such as Arduino, ESP, sensors and accessories and different languages such as Python, C/C++, php, Processing. This allowed us to deepen the skills acquired with the ‘Electronica II’ course. The structure is very simple and made in full of maker and DIY philosophy, only with recycled objects.