Indice
Idee per il project work della 3B 2018/2019
Progetti candidati
- rover con metal detector (vedi futura elettronica settembre 2018)
- braccio manipolatore (vedi futura elettronica agosto 2018)
- self-balancing robot (vedi video su youtube)
Risorse braccio:
Componenti
Motori
Due possibilità:
- servo RC (servo continuo per veicoli)
- servo DC con encoder e scheda makeblock
- motori passo passo
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:
- tanta ferramenta con almeno 10 tipi di viti diverse (testa a croce, a brugola di due tipi diversi, viti M4 M3 M2 autofilettanti)
- tre servo TowerPro MG995 e due microservo TowerPro SG90-Analog (che sembrano continui - visto che non c'è un fine corsa - ma non lo sono)
- due prolunghe per i due microservo
- pezzi in acrilico da 5mm (base e spalle) e 3mm
- istruzioni su CDROM (un unico PDF e niente software)
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:
- lo spinotto di alluminio che collega i due servo sulle spalle era troppo lungo e ho dovuto limarlo
- c'è un pezzo in più del distanziale hub-servo
- per trovare le posizioni corrette dei microservo ho dovuto usare Arduino perché l'albero ruota liberamente e non si blocca agli estremi della corsa
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:
- firmware: zip con sketch che usa la libreria Octopus (quindi per scheda Octopus per il controllo dei servo)
- un link alle librerie fishino
- roboarm: zip con uno sketch che usa le librerie del prodotto Braccio di Tinkerkit
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:
- motore:
- scheda motore:
- https://store.makeblock.com/me-encoder-motor-driver (con link al download per la PID tuinig app)
- http://learn.makeblock.com/api-documentation-of-me-encoder-motor/ (404, vedere su archive.org o su github)
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:
- alimentazione 9V
- 550mA max (200mA a vuoto)
- 185 rpm (riduttore con rapporto 1:46)
- diametro 25mm albero 25mm
- flangia con 2 filettature 2-M3 (3mm) a 17mm di distanza
- connettore a 6 pin (2,54mm)
- econder da 8 impulsi per giro
Caratteristiche della scheda:
- contiene un microcontrollore (ATmega328) e un driver motore (TB6612); il microcontrollore contiene un firmware per controllare due motori con PID e comunica via i2c con altre schede
- alimentazione 6÷12V
- 1,2A max per motore
- protetto da sovracorrenti
- connettore RJ45 o header da 12 pin
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 |
---|---|---|
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:
la libreria wire gestisce la comunicazione i2c (con i resistori di pull-up interni)la libreria SoftwareSerial permette la comunicazione seriale utilizzando due pin diversi da D0 e D1 (che sfruttano l'UART del microcontrollore)- basta includere MeOrion per avere tutte le librerie necessarie (Orion è la scheda simile ad Arduino di Makeblock)
- l'API non è ben documentata e il sito a volte non risponde, si capisce qualcosa guardando il codice su github o usando la versione di archive.org
- gli angoli sono in gradi, la velocità in RPM
- non riesco a importare la libreria in Arduino su linux (v1.05) mentre su Windows non ho problemi1)
- lo sketch sul loro sito è sbagliato e non funziona: manca l'include per MeEncoderMotor, ci sono cose in più che non servono e la funzione è scritta male (RunSpeed invece che runSpeed)
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
- pagina nella sezione playground di Arduino.cc con link e informazioni utili
- pagina sull'MPU-6050 del produttore (Invensense)
- scketch per lo scan i2c per trovare l'indirizzo del sensore
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:
- blog, IMU con MPU6050 e filtro, molto utile per capire il problema, video compreso
- application note di Analog Devices sul inclination sensing, formule per ottenere gli angoli dai soli accelerometri
- Application Note di ST su tilt sensing, idem ma di ST
- Application Note di Nexperia/Freescale su tilt sensing, idem NExperia
- libreria digital motion process di sparkfun su github, altro sensore però
- blog, articolo su MPU6050, usa i2cdevlib
- articolo su IMU a nove assi, usa altro codice ancora
- blog, codice per pitch e roll con MPU6050, usa solo accelerometri