开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4757|回复: 17
打印 上一主题 下一主题
收起左侧

[2021开源大赛(第六届)] 当时玩Arduino 六轴机械手臂写的,有兴趣的可以拿去完善

[复制链接]
结帖率:100% (1/1)
跳转到指定楼层
楼主
发表于 2021-11-3 16:24:38 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   河南省南阳市
当时玩Arduino 六轴机械手臂写的,现在毫无保留开源,有兴趣的可以拿去完善;

数值型(a,b,e)
子程序·手臂运行(X [数值型], Y [数值型], Z [数值型])
执行点数据("P0")
延时(1000)
执行点数据("P1")
延时(1000)
执行点数据("P2")
延时(1000)
执行点数据("P3")






Robot.zip (1.1 MB, 下载次数: 59)

更新下位机交互Arduino代码:

[JavaScript] 纯文本查看 复制代码
//定义数字接口7 连接伺服舵机信号线
const int servopin=7,servopin1=8,servopin2=9,servopin3=10,servopin4=11,servopin5=12;
//定义角度变量
int myangle,myangle1,myangle2,myangle3,myangle4,myangle5;
//定义脉宽变量
int pulsewidth,pulsewidth1,pulsewidth2,pulsewidth3,pulsewidth4,pulsewidth5;
//定义收到的舵机角度
int val,val1,val2,val3,val4,val5,val6;
int Speed=10;
//定义一个comdata字符串变量,赋初值为空值
String comdata ="";
int mark = 0;

void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);//将舵机接口电平至低
delay(20-pulsewidth/1000);
}
void servopulse1(int servopin1,int myangle1)//定义一个脉冲函数
{
pulsewidth1=(myangle1*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin1,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth1);//延时脉宽值的微秒数
digitalWrite(servopin1,LOW);//将舵机接口电平至低
delay(20-pulsewidth1/1000);
}
void servopulse2(int servopin2,int myangle2)//定义一个脉冲函数
{
pulsewidth2=(myangle2*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin2,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth2);//延时脉宽值的微秒数
digitalWrite(servopin2,LOW);//将舵机接口电平至低
delay(20-pulsewidth2/1000);
}
void servopulse3(int servopin3,int myangle3)//定义一个脉冲函数
{
pulsewidth3=(myangle3*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin3,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth3);//延时脉宽值的微秒数
digitalWrite(servopin3,LOW);//将舵机接口电平至低
delay(20-pulsewidth3/1000);
}
void servopulse4(int servopin4,int myangle4)//定义一个脉冲函数
{
pulsewidth4=(myangle4*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin4,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth4);//延时脉宽值的微秒数
digitalWrite(servopin4,LOW);//将舵机接口电平至低
delay(20-pulsewidth4/1000);
}
void servopulse5(int servopin5,int myangle5)//定义一个脉冲函数
{
pulsewidth5=(myangle5*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin5,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth5);//延时脉宽值的微秒数
digitalWrite(servopin5,LOW);//将舵机接口电平至低
delay(20-pulsewidth5/1000);
}
void setup()

{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口7
pinMode(servopin1,OUTPUT);//设定舵机接口为输出接口8
pinMode(servopin2,OUTPUT);//设定舵机接口为输出接口9
pinMode(servopin3,OUTPUT);//设定舵机接口为输出接口10
pinMode(servopin4,OUTPUT);//设定舵机接口为输出接口11
pinMode(servopin5,OUTPUT);//设定舵机接口为输出接口12
Serial.begin(9600);//连接到串行端口,波特率为obot
Serial.println("Robot Ready" ) ;
}

void loop()//将7 到12 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
{
int j = 0;
int numdata[8] = {0};
while (Serial.available() > 0)
{ 
    //读入之后将字符串,串接到comdata上面。
    comdata += char(Serial.read());
    //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
    delay(2);
    //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
    mark = 1;
}

if(mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
{
      for(int i = 0; i <  comdata.length() ; i++)
      {
            if( comdata[ i] == ',')
            {
              j++;
            }
            else
            {
              numdata[j] = numdata[j] * 10 + (comdata[ i] - '0');
            }
      }
     if(comdata=="Motor On"||comdata=="Motor Off"||comdata=="Power Off"||comdata=="Power On")
     {
          Serial.print(comdata);
          Serial.println();
      }

      //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
      comdata = String("");
      //输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
      mark = 0; 
      mark ==0;
      val1=numdata[2];
      val2=numdata[3];
      val3=numdata[4];
      val4=numdata[5];
      val5=numdata[6];
      val6=numdata[7];
      if(numdata[1]>10&&numdata[1]<=16)
      {
//            val1=val1*(180/9);//将数字转化为角度
            Serial.print(val1);
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              if(numdata[1]==11)
              {
                  servopulse(servopin,val1);//引用脉冲函数
              }
              if(numdata[1]==12)
              {
                  servopulse1(servopin1,val1);//引用脉冲函数
              }
              if(numdata[1]==13)
              {
                  servopulse2(servopin2,val1);//引用脉冲函数
              }
              if(numdata[1]==14)
              {
                  servopulse3(servopin3,val1);//引用脉冲函数
              }
              if(numdata[1]==15)
              {
                  servopulse4(servopin4,val1);//引用脉冲函数
              }
              if(numdata[1]==16)
              {
                  servopulse5(servopin5,val1);//引用脉冲函数
              }
//                   Serial.print(val1);
//                   Serial.println();
            }
      }
      if(numdata[1]==0)
      {
            Speed=numdata[2]; 
      }
      if(numdata[1]==1)
      {
////            val1=val1-'0';//将特征量转化为数值变量
//            val1=val1*(180/9);//将数字转化为角度
////            val2=val2-'0';//将特征量转化为数值变量
//            val2=val2*(180/9);//将数字转化为角度
////            val3=val3-'0';//将特征量转化为数值变量
//            val3=val3*(180/9);//将数字转化为角度
////            val4=val4-'0';//将特征量转化为数值变量
//            val4=val4*(180/9);//将数字转化为角度
////            val5=val5-'0';//将特征量转化为数值变量
//            val5=val5*(180/9);//将数字转化为角度
////            val6=val6-'0';//将特征量转化为数值变量
//            val6=val6*(180/9);//将数字转化为角度

            if(Speed<0 && Speed>60)
            {
               Speed=50;
            }  
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse(servopin,val1);//引用脉冲函数
            }
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse1(servopin1,val2);//引用脉冲函数
            }
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse2(servopin2,val3);//引用脉冲函数
            }
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse3(servopin3,val4);//引用脉冲函数
            }
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse4(servopin4,val5);//引用脉冲函数
            }
            for(int i=0;i<=Speed;i++) //给予舵机足够的时间让它转到指定角度
            {
              servopulse5(servopin5,val6);//引用脉冲函数
            }
            Serial.print("Moving Servo to:");
            Serial.print(val1,DEC);
            Serial.print(",");
            Serial.print(val2,DEC);
            Serial.print(",");
            Serial.print(val3,DEC);
            Serial.print(",");
            Serial.print(val4,DEC);
            Serial.print(",");
            Serial.print(val5,DEC);
            Serial.print(",");
            Serial.print(val6,DEC);
            Serial.print(",");
            Serial.print(Speed,DEC);
            Serial.println();
      }





}


}


需要玩下位机的可以联系本人,有问必答,知无不言。

QQ截图20211103161642.png (25.69 KB, 下载次数: 3)

QQ截图20211103161642.png

评分

参与人数 2好评 +1 精币 +6 收起 理由
ghost12 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 5 支持开源~!感谢分享

查看全部评分

18
发表于 2023-2-16 17:20:09 | 只看该作者   湖南省长沙市
支持一下,虽然没玩没下载应该不错
回复 支持 反对

使用道具 举报

结帖率:79% (27/34)

签到天数: 11 天

17
发表于 2022-5-22 05:00:31 | 只看该作者   上海市上海市
感谢你的支持,精易有你更精彩
回复 支持 反对

使用道具 举报

16
发表于 2022-3-29 20:35:43 | 只看该作者   山东省临沂市
66666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

15
发表于 2022-1-6 08:20:02 | 只看该作者   江苏省苏州市
谢谢!!
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
14
 楼主| 发表于 2021-11-30 22:21:38 | 只看该作者   河南省南阳市
双易 发表于 2021-11-30 15:49
很好很想要 但是不知道怎么玩

加QQ1012789582私聊
回复 支持 反对

使用道具 举报

结帖率:90% (101/112)
13
发表于 2021-11-30 15:49:39 | 只看该作者   福建省福州市
很好很想要 但是不知道怎么玩
回复 支持 反对

使用道具 举报

结帖率:83% (5/6)

签到天数: 2 天

12
发表于 2021-11-4 16:43:02 | 只看该作者   江苏省苏州市
正想玩这个不知道从哪入手
回复 支持 反对

使用道具 举报

签到天数: 9 天

11
发表于 2021-11-4 10:06:43 | 只看该作者   广东省肇庆市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 10 天

10
发表于 2021-11-4 10:04:42 | 只看该作者   江西省赣州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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