Risorse braccio:
Due possibilità:
Accelerometro con giroscopio MPU6050 (breakout e integrato 3€).
Kit acquistato a giugno e assemblato l'ultimo giorno di scuola (finito a casa). Nel kit è presente la sola parte meccanica con:
Sembra un clone del kickstarter uarm del 2014 ma è leggermente diverso. Le istruzioni contengono immagini da cui eventualmente ricavare i disegni per la laser cutter ma non sono scaricabili dal sito e sono fornite solo su CDROM (qui una copia).
L'assemblaggio non è banale per l'elevato numero di pezzi e la varietà della ferramenta. Inoltre:
La struttura sembra solida e ben fatta. Il test col software non l'ho fatto perché il kit prevede una scheda aggiuntiva per pilotare i servo (octopus o shield arduino) che non ho comprato perché si può usare anche senza (bastano 4 uscite PWM). Il la scheda servo contiene solo un alimentatore a 5V separato per i servo e due uscite a transistor per l'attuatore pneumatico opzionale. Si può tranquillamente farne a meno a patto di alimentare i servo correttamente; nel dubbio usare un alimentatore esterno da 5V (max 6V per i servo) e massa condivisa con Arduino.
Il software - inutile - che si scarica dalla pagina prodotto contiene:
Molto più utili gli esempi sul sito di Mauro Alfieri.
NB: con questo prodotto non è possibile “insegnare” un movimento al braccio registrandolo mentre lo si muove “a mano” per poi replicarlo. Per farlo ci vuole un servo con feedback (tipo questo).
Riferimenti:
Il motore va collegato con un ribbon a 6 conduttori per M+, M-, Vcc, GND, A e B. Gli ultimi 4 sono per l'encoder ottico in quadratura montato sul motore.
Caratteristiche del motore:
Caratteristiche della scheda:
Schematico scheda:
Collegamento con Arduino (jumper invece che RJ45):
L'immagine è poco leggibile ma dal pinout riportato nella pagina web si capisce cosa fare.
Ho provato con l'alimentatore da 12V (era meglio da 9V che è la tensione del motore) facendo girare più piano. Collegamenti:
arduino | scheda | funzione |
---|---|---|
A5 | SCL | i2c clock |
A4 | SDA | i2c data |
5V | 5V | alim. scheda |
GND | GND | massa |
Vin | V-M | alim. motore da Vin |
Per la parte software serve la libreria Makeblock-Library-master scaricabile su github o sul loro sito. Nel sito spiega come importarla e includerla. C'è un API con molte funzioni utili per comandare il motore e ottenere informazioni su velocità e posizione.
Codice:
// include tutte le librerie che servono #include <MeOrion.h> // indica quale dei due motori pilotare MeEncoderMotor motor1(SLOT1); void setup() { Serial.begin(9600); motor1.begin(); Serial.println(motor1.getCurrentPosition()); delay(2000); } void loop() { motor1.runTurns(2,100); delay(4000); Serial.println(motor1.getCurrentPosition()); motor1.runTurns(-2,100); delay(4000); Serial.println(motor1.getCurrentPosition()); motor1.move(180,100); delay(4000); Serial.println(motor1.getCurrentPosition()); motor1.moveTo(0,100); delay(4000); Serial.println(motor1.getCurrentPosition()); }
Osservazioni:
Ho preso la scheda breakout GY-521 con l'integrato MPU-6050. E' una delle più diffuse e costa 3€. A bordo c'è un regolatore LDO quindi si alimenta a 5V. Comunica con Arduino via i2c.
Con lo scanner i2c si trova l'indirizzo della scheda:
I2C Scanner Scanning... I2C device found at address 0x68 ! done
La scheda ha un indirizzo 0x68
, probabilmente lo stesso per tutti gli integrati MPU-6050. A questo punto si può caricare lo sketch di prova e leggere i valori di accelerazione (accelerometro), temperatura (c'è un sensore integrato!) e velocità di rotazione (giroscopio) sul monitor seriale:
AcX = -76 | AcY = 436 | AcZ = 12568 | Tmp = 23.68 | GyX = 71 | GyY = 8 | GyZ = -73 AcX = -60 | AcY = 552 | AcZ = 12484 | Tmp = 23.68 | GyX = 38 | GyY = 25 | GyZ = -34
Sono riportate le accelerazioni secondo i tre assi x-y-z e la velocità in gradi/s.
Si possono usare algoritmi su Arduino (o altro) ma l'integrato ha una sua unità DMP a bordo che può occuparsene. Il problema è come utilizzarla perché il produttore non ha documentato questa funzionalità. Ci sono più librerie che permettono di sfruttare il DMP ma il funzionamento non è perfetto - è frutto di reverse engineering - ed è complicato sfruttarle.
Utilizzando solo i dati dell'accelerometro a tre assi - niente giroscopi e niente librerie - è possibile risalire ai due angoli di pitch e roll (beccheggio e rollio), cioè all'inclinazione della scheda con MPU6050 rispetto al piano. Se non serve il terzo angolo (yaw o imbardata, cioè la rotazione sull'asse z) il calcolo è piuttosto semplice e i dati relativamente stabili. Per testarlo ho usato il codice nel penultimo link tra le risorse indicate sotto.