Indice

Idee per il project work della 3B 2018/2019

Progetti candidati

Risorse braccio:

Componenti

Motori

Due possibilità:

Sensori

Accelerometro con giroscopio MPU6050 (breakout e integrato 3€).

Il kit Roboarm Futura Elettronica

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).

Motori e scheda makeblock

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.

Test con Arduino

Ho provato con l'alimentatore da 12V (era meglio da 9V che è la tensione del motore) facendo girare più piano. Collegamenti:

arduino scheda funzione
A5SCLi2c clock
A4 SDAi2c data
5V 5Valim. scheda
GNDGNDmassa
VinV-Malim. 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:

Accelerometro/giroscopio MPU6050

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.

Risorse

Test della scheda

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.

Convertire i dati in informazioni utili

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.

Pitch e roll

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.

Risorse:

1)
forse seguendo qui funziona