Manuel Rodriguez / Piccolo

You are viewing an older revision! See the latest version

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