Braç robòtic programable

El meArm és un petit braç robòtic de codi obert dissenyat originalment per Ben Gran. L'objectiu d'aquest projecte és veure com podem controlar els moviments del braç des d'Snap4Arduino. A la indústria, els robots es poden programar per tal que realitzin tasques repetitives. Veurem com, amb l'ús de llistes, podem establir processos o seqüències de moviments per després reproduir-les cíclicament.

A. Control bàsic

Aquest braç robòtic disposa de quatre servomotors. Els anomenarem:

  • Base: rotació de la plataforma on està suportat el braç. (servo_base)
  • Colze: moviments verticals de l'extrem del braç. (servo_alçada)
  • Espatlla: moviments d'extensió del braç. (servo_distancia)
  • Pinça: element prensor. (servo_pinça)




Connectant un servo

Un servomotor (també anomenat servo ) és un motor de corrent continu que té la capacitat de situar-se en qualsevol posició dins del seu rang d'operació i mantenir-se estable en aquesta posició. Està constituït per un motor, una caixa reductora i un circuit de control:



Muntatge

Controlant un servo

Per controlar els servos tenim el bloc

Disposa de dos espais: un per indicar el pin on està connectat el servo i l'altre per indicar el desplaçament o l'acció. En el cas d'una Arduino Uno podem connectar els servos a qualsevol pin digital (del 2 al 13) o analògic (A0 a A5 identificats del 14 al 19). Al segon espai podem posar un valor de la llista o un valor numèric per representar l'angle on volem posicionar el servo. Si es tria el valor "desconnectat" el servo s'allibera.

Els servos que s'utilitzen en aquest projecte són servos de 180 graus. Suposem que el de la base del braç l'hem connectat al pin 9. Si el volem situar en el seu punt mig el bloc haurà de ser:

Podeu provar amb diferents valors i veure com reacciona el servo.

Anem una mica més enllà…

Com podem controlar el moviment d'un servo amb el teclat?

  1. Primer de tot, crearem una variable per guardar la posició del servo. La podem anomenar "angle"
  2. Assignem un valor inicial a aquesta variable, per exemple 90
  3. Posicionem el servo (que hem connectat al pin 9 segons l'esquema anterior) a 90 graus
  4. Un cop creada i inicialitzada la variable i posicionat el servo ja podem començar a programar el control per teclat. Cal que en prémer una tecla el valor de la variable angle s'incrementi i en prémer una altra tecla disminueixi. Després es crida el bloc "posa el servo[ ] a[ ]" amb el nou valor de l'angle. Cal tenir en compte els límits dels angles (de 0 a 180 graus) abans de posicionar el servo.
  5. Ho posem dins d'un bloc "per sempre" i provem el funcionament fent clic amb el botó esquerre del ratolí sobre qualsevol bloc de l'script:


Creant blocs personalitzats

Una característica destacable d'Snap4Arduino és la possibilitat de crear blocs personalitzats. N'hi ha de tres tipus:

  • Comanda: executa una acció
  • Reportador: retorna un valor
  • Predicat: retorna un valor lògic


Anem a crear un bloc per moure un servo amb el teclat:

  1. Fem clic amb el botó dret del ratolí sobre l'àrea d'scripts.
  2. Seleccionem l'opció "crea un bloc…" del menú contextual que apareix.
  3. A la finestra que apareix (1) seleccionem la categoria "Arduino" amb un clic de ratolí, (2) escrivim el nom del nou bloc, per exemple "mou servo" i (3) fem clic al botó "D'acord". \\
  4. A la nova finestra, arrosseguem l'script que acabem d'escriure però sense el bloc "per sempre", només el que hi ha dins seu
  5. Fem clic al botó "D'acord" per acabar.

Observem la paleta de blocs de la categoria Arduino. Ja hi tenim el bloc que acabem de crear Ara podem refer el nostre programa aprofitant aquest nou bloc:

Us deixo a vosaltres la feina de crear uns blocs semblants per controlar el braç robòtic d'aquest projecte. Haureu de crear diverses variables per guardar el valor de cadascun dels servos. Quan treballeu amb el braç pareu atenció en les limitacions de moviment. Per exemple, la pinça es controla amb valors compresos entre 0 (oberta) i 35 (totalment tancada). Si posem valors superiors a 35 el servo no es podrà posicionar.



B. Control avançat

Programant els moviments del braç. Les llistes al rescat!

Si volem tenir un sistema flexible en relació a la connexió lògica dels servos podem fer servir variables. Fer-ho així també ens permet programar sense tenir connectada la placa:

És fonamental saber el posicionament de cadascun dels servos i per això utilitzem variables. Quan més endavant programem una seqüència de moviments del braç, primer guardarem la posició a la variable corresponent i després posicionarem el servo segons aquest valor:



Guardem una seqüència...

Amb els blocs anteriors podem moure el braç accionant unes determinades tecles. L'objectiu que ara ens plantegem és incorporar al nostre programa la capacitat d'establir una determinada seqüència de passos per després reproduir-los tot obtenint un moviment autònom complex. La seqüència és un conjunt ordenat de posicions del braç. Cada posició està determinada per quatre valors: l'angle de cadascun dels servos. La llista és una bona estructura per recollir aquesta informació:

Hi ha diverses solucions però, donat que ens permet crear llistes de llistes, una bona opció és utilitzar una llista dinàmica on cadascun dels elements sigui una altra llista ordenada amb els angles dels servos per a una determinada posició:

Com crear una variable de tipus llista?

Per poder accedir a la llista ens cal donar-li un nom. Es tracta de crear una variable i després assignar-li una llista. Podem veure el procés en el següent vídeo:


El projecte complet