Manuel Rodriguez / Piccolo

Homepage

PICCOLO

El Piccolo en un robot tipo CNC de código abierto, el cual en nuestro caso lo programamos en el lenguaje C usando el nucleo STM32F411. El corte de nuestro Piccolo se realizó por medio de una cortadora laser, usando materiales como MDF de 3mm, acrílico de 3mm, acetato, papel pergamino y servomotores para su unión usamos tornillos y tuercas. El fin de nuestro Piccolo es realizar en una cuadricula de 50mmX50mm dibujos varios donde se pueda evidenciar círculos, cuadrados, líneas y puntos basándonos en coordenadas X, Y y Z. El ensamblaje lo seguimos a los pasos mostrados en la página http://www.piccolo.cc

Funcionamiento Inicialmente se tiene 3 ejes (X,Y,Z) donde el eje X controla el movimiento lateral del portaherramientas, el eje Y controla el movimiento vertical y nuestro eje Z controla el movimiento de entrada y salida de la herramienta en el papel. De acuerdo a un código generado en la plataforma MBED podemos realizar dibujos con una serie de funciones como círculos, cuadrados, líneas y puntos donde alterando las coordenadas de entrada de la programación podemos obtener variación de estas figuras. A continuación, mostraremos el código usado para realizar dichas figuras:

  1. include "mbed.h"
  2. include "math.h"
  3. define MAXPOS 50
  4. define SS_TIME 500
  5. define PI 3.1415926

PwmOut myServoX(PB_3); PwmOut myServoY(PB_4); PwmOut myServoZ(PB_10);

int coord2us(float coord) { if(0 <= coord <= MAXPOS) return int(750+coord*1900/50); u6 return 750; } void vertex2d(float x, float y) { int pulseX = coord2us(x); int pulseY = coord2us(y);

myServoX.pulsewidth_us(pulseX); myServoY.pulsewidth_us(pulseY); wait_ms(SS_TIME); }

void home() { vertex2d(0,0); }

void maxpos() { vertex2d(MAXPOS,MAXPOS); }

void cuadrado(int x, int y, int l) { float a=x; float b=y;

wait(2);vertex2d(a,b); printf("position x =%.2f\n",a); printf("position y =%.2f\n",b); a=a+l; wait(2);vertex2d(a,b); printf("position x =%.2f\n",a); printf("position y =%.2f\n",b); b=b+l; wait(2);vertex2d(a,b); printf("position x =%.2f\n",a); printf("position y =%.2f\n",b); a=a-l; wait(2);vertex2d(a,b); printf("position x =%.2f\n",a); printf("position y =%.2f\n",b); b=b-l; wait(2);vertex2d(a,b); printf("position x =%.2f\n",a); printf("position y =%.2f\n",b); }

/*void diag() { wait(2);vertex2d(0,0); wait(2);vertex2d(10,10); wait(2);vertex2d(20,20); wait(2);vertex2d(30,30); wait(2);vertex2d(40,40);*/

/*wait(1);vertex2d(0,0); wait(1);vertex2d(40,0); wait(1);vertex2d(40,40); wait(1);vertex2d(0,40); wait(1);vertex2d(0,0);

wait(1);vertex2d(10,0); wait(1);vertex2d(10,40); wait(1);vertex2d(20,40); wait(1);vertex2d(20,0); wait(1);vertex2d(30,0); wait(1);vertex2d(30,40); wait(1);vertex2d(40,40); wait(1);vertex2d(40,0); }

  • /

void Pendiente(int x0,int y0,int x1,int y1) {/* float x; float y; float m; for(x=x0; x<=x1; x=x+1) { m=(y1-y0)/(x1-x0); y=m*(x-x0)+y0; vertex2d(x,y); printf("position x =%.2f\n",x); printf("position y =%.2f\n",y); }

  • / vertex2d(x0,y0); wait(2); vertex2d(x1,y1); }

void circle(float cx, float cy, float radio) { float y; float x; wait(2); vertex2d(cx,cy);

for(double i=PI/2; i<=PI/2 ;i+=0.1) { x=radio*cos(i); y=radio*sin(i); vertex2d(x+cx,y+cy); printf("position x =%.2f\n",x); printf("position y =%.2f\n",y); } wait(1); for(double i=PI/2; i<=PI ;i=i+0.1) { x=radio*cos(i); y=radio*sin(i); vertex2d(cx-x,cy-y); printf("position x =%.2f\n",x); printf("position y =%.2f\n",y); } /*for(double i=PI; i<=3*PI/2 ;i=i+0.1) { x=radio*cos(i); y=radio*sin(i); vertex2d(cx-x,cy+y); printf("position x =%.2f\n",x); printf("position y =%.2f\n",y); } for(double i=3*PI/2; i<=2*PI ;i=i+0.1) { x=radio*cos(i); y=radio*sin(i); vertex2d(cx+x,cy-y); printf("position x =%.2f\n",x); printf("position y =%.2f\n",y); } */ }

void Pendiente(int x0,int y0,int x1,int y1);

int main() { configuracion de periodo myServoX.period_ms(20); myServoY.period_ms(20); myServoZ.period_ms(20);

while(1) { home(); wait(2); maxpos(); wait(2); Pendiente(0,0,30,30); wait(3); cuadrado(0,0,10); wait(2); circle(20,20,15); wait(3);

diag(); } }

Evidencia Fotografica

Especificaciones tecnicas Servomotor

Especificaciones técnicas Nucleo STM32F411


All wikipages