ロボットアームまとめ


動画

素材

アクリルカット用データ

ファームウェア(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&&degrees(r2)>0) {
 tmp='4';
 r2-=PI/400;
 myPort.write(tmp);
 }
 else if (top_flag!=1&&degrees(r2)<=0) {
 top_flag=1;
 }
 if (top_flag==1&&degrees(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&&degrees(r2)>=90) {
 middle_flag=1;
 top_flag=0;
 tmp='1';
 r1-=PI/400;
 myPort.write(tmp);
 }
 if (middle_flag==1&&degrees(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&&degrees(r2)>=135){
 middle_flag=0;
 bottom_flag=1;
 }
 if(bottom_flag==1&&degrees(r1)<0){
 tmp='3';
 r1+=PI/400;
 myPort.write(tmp);
 }else if(bottom_flag==1&&degrees(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();
 }

Post navigation

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.