Processing与arduino互动之4自由度桌面码垛机-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18216|回复: 32

Processing与arduino互动之4自由度桌面码垛机

[复制链接]
发表于 2015-10-5 19:28 | 显示全部楼层 |阅读模式

因为喜欢机器人,所以接触了arduino,因为喜欢arduino,所以接触了processing。某夜突发奇想,觉得可以用processing的key函数和mouse函数控制桌面码垛机的运动。嘿嘿,刚好利用国庆假期,用了5天实现自己的想法。

ps:网上关于processing与arduino互动的例子还真不多,有也基本是利用processing将arduino输出的数据可视化,

利用processing来控制arduino的基本没有哈。



QQ截图20151005190738.jpg

第一次编写界面,比较难看哈

第一次编写界面,比较难看哈
 楼主| 发表于 2015-10-5 19:32 | 显示全部楼层
processing端程序
/**
*processing control a 4-DOF mechanical arm
*by jorneryChen
*
*my emial address is 1274104408@qq.com
*/

import processing.serial.*;
Serial port;
boolean serial;
//输出参数
float x=150;
float y=0;
float pos1,pos2;
int pos=72;
int pos3=90;
int a=2;
float posa;
float A;
float B;
float C;
float D;
float pi=acos(-1.0);
//界面参数
PFont font;
void setup()
{
  size(500,500);
  frameRate(53);
  port=new Serial(this,"COM3",9600);
  font=loadFont("LilyUPCBold-48.vlw");
  smooth();
}
void draw()
{
  math_funtion();
  inter_face();
  picture();
  control();
}
void math_funtion()
{
  A=sqrt(x*x+y*y);//数学方程
  B=atan(y/x);
  C=acos(A/300);
  D=acos(1.0-A*A/45000);
  D=D/pi*180;
  posa=B+C;
  pos1=posa/pi*180;
  pos2=180-pos1-D;
}
void inter_face()
{
   background(255);
  textSize(40);
  fill(245,12,32);
  text("C",5,40);
  fill(38,245,12);
  text("L",35,40);
  fill(12,91,245);
  text("Y",55,40);
  fill(66,204,227);
  textSize(40);
  text("made by yao",120,40);
  textSize(30);
  fill(211,191,0);
  text("this interface shows data only",5,80);
  fill(0);
  textSize(20);
  text("X=",5,110);
  text(int(x),35,110);
  text("Y=",85,110);
  text(int(y),115,110);
  text("POS=",5,140);
  text(int(pos),60,140);
  text("POS1=",105,140);
  text(int(pos1),175,140);
  text("POS2=",225,140);
  text(int(pos2),295,140);
  text("POS3=",345,140);
  text(int(pos3),415,140);
    if((keyPressed==true)&&(key=='i'))
   {
     fill(0,211,58);
    text("opening",250,110);
   }
    else if((keyPressed==true)&&(key=='k'))
    {
      fill(0,211,58);
     text("closing",250,110);
    }
}
void picture()
{
  strokeWeight(4);
  fill(255);
  rect(5,160,490,320);
  ellipse(170,320,300,300);
  stroke(0);
  line(415,170,415,470);
  float n=map(pos3,0,180,300,40);
  float m=map(x,0,300,450,190);
  fill(0,0,150);
  ellipse(n,m,30,30);
  float l=map(y,-150,150,170,470);
  l=constrain(l,170,470);
  ellipse(415,l,30,30);
}
void control()
{
  if((keyPressed==true)&&(key=='a'))
  {
    x-=a;
    serial=true;
  }
  else if((keyPressed==true)&&(key=='d'))
  {
    x+=a;
    serial=true;
  }
  else if((keyPressed==true)&&(key=='w'))
  {
    y-=a;
    serial=true;
  }
  else if((keyPressed==true)&&(key=='s'))
  {
    y+=a;
    serial=true;
  }
   else if((keyPressed==true)&&(key=='i'))
   {
     pos+=a;
     pos=constrain(pos,72,160);
     serial=true;
   }
    else if((keyPressed==true)&&(key=='k'))
    {
      pos-=a;
      pos=constrain(pos,72,160);
      serial=true;
    }
     else if((keyPressed==true)&&(key=='j'))
     {
       pos3+=1;
       serial=true;
     }
      else if((keyPressed==true)&&(key=='l'))
      {
        pos3-=1;
        serial=true;
      }
      if(serial){
          send_data();
      }
}
void send_data()
{
  print("pos=");
  print(int(pos));
  print(',');
  print("pos1=");
  print(int(pos1));
  print(',');
  print("pos2=");
  print(int(pos2));
  print(',');
  print("pos3=");
  println(pos3);
  port.write('%');
  port.write(int(pos));
// port.write(';');
  port.write(int(pos1));
// port.write(';');
  port.write(int(pos2));
//  port.write(';');
  port.write(int(pos3));
  serial=false;
}
arduino端程序
/**
*processing control a 4-DOF mechanical arm
*by jorneryChen
*
*my emial address is 1274104408@qq.com
*/
#include<Servo.h>

#include<LiquidCrystal.h>

LiquidCrystal lcd(12,11,10,9,8,7);

Servo myservo;
Servo myservo1;
Servo myservo2;
Servo myservo3;

int servo =3; //定义舵机信号线接口
int servo1=4;//小臂
int servo2=5;//大臂
int servo3=6;

int pos;
int pos1;
int pos2;
int pos3;

void setup()
{
  lcd.begin(16,2);
  Serial.begin(9600);
  myservo.attach(servo);
  myservo1.attach(servo1);
  myservo2.attach(servo2);
  myservo3.attach(servo3);
  pos=72;
  pos1=60;
  pos2=60;
  pos3=90;
  updateServo();
}
void loop()
{
  recv_data();
  updateServo();
}
void recv_data()
{
  while(Serial.available()>=8)
  {
    char data=Serial.read();
    if(data=='%')
    {
      pos=Serial.read();
      pos1=Serial.read();
      pos2=Serial.read();
      pos3=Serial.read();
      show_data();
    }
  }
}
void show_data()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("pos=");
  lcd.print(pos);
  lcd.print(',');
  lcd.print("pos1=");
  lcd.print(pos1);
  lcd.setCursor(0,1);
  lcd.print("pos2=");
  lcd.print(pos2);
  lcd.print(',');
  lcd.print("pos3=");
  lcd.print(pos3);
}
void updateServo()
{
  myservo.write(pos);
  myservo1.write(pos1);
  myservo2.write(pos2);
  myservo3.write(pos3);
  delay(8);
}
 楼主| 发表于 2015-10-5 19:39 | 显示全部楼层
pps:楼主发现淘宝上有商家直接拿楼主设计的桌面码垛机在卖,本想着共享设计文件是为了大家学习交流用的,没想到居然有人拿来盈利。找店主理论,他居然说是很久前在gradcad上下载的。希望各位网友在浏览淘宝是看到和我一样设计的4自由度机械臂是千万别买呀。

点评

我知道是谁了,他还剽窃了我的小贱钟的图纸,也山寨了一个挺粗糙的在卖。  发表于 2015-11-26 00:07
国内环境就是这样的,但不要因为这些人,就放弃分享的乐趣。  详情 回复 发表于 2015-10-6 09:10
发表于 2015-10-6 09:10 | 显示全部楼层
夏夜繁星 发表于 2015-10-5 19:39
pps:楼主发现淘宝上有商家直接拿楼主设计的桌面码垛机在卖,本想着共享设计文件是为了大家学习交流用的, ...

国内环境就是这样的,但不要因为这些人,就放弃分享的乐趣。
 楼主| 发表于 2015-10-6 10:17 | 显示全部楼层
奈何col 发表于 2015-10-6 09:10
国内环境就是这样的,但不要因为这些人,就放弃分享的乐趣。

大神回复了,好感动。话说几天前在qq群询问processing的问题,都没几人回复呀。
个人比较反感那些拿了别人的东西还吹嘘是自己的人
发表于 2015-10-6 20:35 | 显示全部楼层
本帖最后由 z586 于 2015-10-6 20:43 编辑

谢谢夏夜繁星!谢谢你的辛苦钻研以及无私的分享精神!我在贴吧内看到了你的大作,费了很大周折从百度上下了下来!感到神一样的人啊!十分赞同奈何col,勿忘初心啊!谢谢!
 楼主| 发表于 2015-10-7 09:13 | 显示全部楼层
z586 发表于 2015-10-6 20:35
谢谢夏夜繁星!谢谢你的辛苦钻研以及无私的分享精神!我在贴吧内看到了你的大作,费了很大周折从百度上下了 ...

谢谢支持
23333333
发表于 2015-10-7 21:35 | 显示全部楼层
好贴!!
怒顶楼主
 楼主| 发表于 2015-10-7 21:51 | 显示全部楼层
zzdhhh 发表于 2015-10-7 21:35
好贴!!
怒顶楼主

谢谢
发表于 2015-11-12 21:32 | 显示全部楼层
支持楼主,刚开始学,新人一枚,还望楼主继续加油
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:32 , Processed in 0.190397 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表