Strumenti Utente

Strumenti Sito


riservata:idee_project_work

Idee per il project work della 3B 2018/2019

Progetti candidati

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:

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
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:

  • 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

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
Questo sito Web utilizza i cookie. Utilizzando il sito Web, l'utente accetta la memorizzazione dei cookie sul proprio computer. Inoltre riconosci di aver letto e compreso la nostra Informativa sulla privacy. Se non sei d'accordo, lascia il sito.Maggiori informazioni sui cookie
riservata/idee_project_work.txt · Ultima modifica: 2021/01/07 14:52 da admin