動画
素材
- アクリル5mm厚
- P-PMSA-B42D3Lx2
- P-PMSA-B56D3
- 4AW5-F4LE
- ArduinoMEGA2560
- RAMPS1.4
アクリルカット用データ
ファームウェア(Arduino側)
// For RAMPS 1.4 #define X_STEP_PIN 54 #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 #define X_MIN_PIN 3 #define X_MAY_PIN 2 #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 #define Y_MIN_PIN 14 #define Y_MAPIN 15 #define Z_STEP_PIN 46 #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 #define Z_MIN_PIN 18 #define Z_MAX_PIN 19 #define FAN_PIN 9 int time=1000; int num=4 ; int text; void setup(){ Serial.begin(9600); pinMode(X_STEP_PIN,OUTPUT); pinMode(X_DIR_PIN,OUTPUT); pinMode(X_ENABLE_PIN,OUTPUT); digitalWrite(X_STEP_PIN,HIGH); digitalWrite(X_DIR_PIN,HIGH); pinMode(Y_STEP_PIN,OUTPUT); pinMode(Y_DIR_PIN,OUTPUT); pinMode(Y_ENABLE_PIN,OUTPUT); digitalWrite(Y_STEP_PIN,HIGH); digitalWrite(Y_DIR_PIN,HIGH); pinMode(Z_STEP_PIN,OUTPUT); pinMode(Z_DIR_PIN,OUTPUT); pinMode(Z_ENABLE_PIN,OUTPUT); digitalWrite(Z_STEP_PIN,HIGH); digitalWrite(Z_DIR_PIN,HIGH); pinMode(FAN_PIN,OUTPUT); digitalWrite(FAN_PIN,HIGH); } void loop(){ if (Serial.available() > 0) { text=Serial.read(); Serial.print(text); } if(text==49){ digitalWrite(X_DIR_PIN,LOW); step(125,num,X_STEP_PIN); } if(text==51){ digitalWrite(X_DIR_PIN,HIGH); step(125,num,X_STEP_PIN); } if(text==52){ digitalWrite(Y_DIR_PIN,LOW); step(125,num,Y_STEP_PIN); } if(text==54){ digitalWrite(Y_DIR_PIN,HIGH); step(125,num,Y_STEP_PIN); } if(text==55){ digitalWrite(Z_DIR_PIN,LOW); step(125,num,Z_STEP_PIN); } if(text==57){ digitalWrite(Z_DIR_PIN,HIGH); step(125,num,Z_STEP_PIN); } text=0; } void step(int time,int num,int pin){ for(int i=0;i<num;i++){ digitalWrite(pin,HIGH); delayMicroseconds(time); digitalWrite(pin,LOW); delayMicroseconds(time); } }
ソフトウェア(PC側)
import processing.serial.*; float x1=0, x2=0, y1=-200, y2=-200, r1=radians(0), r2=radians(135); int flag_r2=0; int top_flag=0; int middle_flag=0; int bottom_flag=0; // Serialクラスのインスタンス Serial myPort; // シリアルポートから取得したデータ(Byte) int tmp; int tmp2; void setup() { size(640, 640); // Macのシリアルのリストの最初のポートがFTDIアダプタのポート String portName = Serial.list()[0]; // ポートとスピードを設定して、Serialクラスを初期化、 myPort = new Serial(this, portName, 9600); } void draw() { background(255, 255, 255); arc(320, 240, 200, 200, -PI, 0); arc(320, 240, 200, 300, 0, PI); translate(320, 540); ellipse(0, 0, 10, 10); rotate(r1); line(0, 0, x1, y1); translate(x1, y1); ellipse(0, 0, 10, 10); rotate(r2); line(0, 0, x2, y2); if (top_flag!=1&°rees(r2)>0) { tmp='4'; r2-=PI/400; myPort.write(tmp); } else if (top_flag!=1&°rees(r2)<=0) { top_flag=1; } if (top_flag==1&°rees(r2)<90) { for (int i=0;i<5;i++) { tmp='6'; r2+=PI/400; myPort.write(tmp); } tmp='1'; r1-=PI/400; myPort.write(tmp); } else if (top_flag==1&°rees(r2)>=90) { middle_flag=1; top_flag=0; tmp='1'; r1-=PI/400; myPort.write(tmp); } if (middle_flag==1&°rees(r2)<135) { for (int i=0;i<3;i++) { tmp='6'; r2+=PI/400; myPort.write(tmp); } if(degrees(r1)>-30){ tmp='1'; r1-=PI/400; myPort.write(tmp); } }else if (middle_flag==1&°rees(r2)>=135){ middle_flag=0; bottom_flag=1; } if(bottom_flag==1&°rees(r1)<0){ tmp='3'; r1+=PI/400; myPort.write(tmp); }else if(bottom_flag==1&°rees(r1)>=0){ bottom_flag=0; for(int i=0;i<0;i++){ tmp='7'; myPort.write(tmp); } } delay(10); if ((keyPressed == true) && (key == '1')) { tmp='1'; r1-=PI/400; myPort.write(tmp); } if ((keyPressed == true) && (key == '3')) { tmp='3'; r1+=PI/400; myPort.write(tmp); } if ((keyPressed == true) && (key == '4')) { tmp='4'; r2-=PI/400; myPort.write(tmp); } if ((keyPressed == true) && (key == '6')) { tmp='6'; r2+=PI/400; myPort.write(tmp); } if ((keyPressed == true) && (key == '7')) { tmp='7'; myPort.write(tmp); } if ((keyPressed == true) && (key == '9')) { tmp='9'; myPort.write(tmp); } tmp=0; } void serialEvent(Serial p) { //変数xにシリアル通信で読み込んだ値を代入 tmp2=myPort.read(); }