示教机械臂

示教机械臂

​ 机器人组非常善于发现和解决生活中的问题,我们发现在教学过程中经常会遇到需要重复演示的内容,我们只制作了的示教机械臂很好的解决了这个问题 。

​ 下面让我们来了解一下他的制作流程吧。

1,机械臂部分制作

爪子部分先用CAD绘图,再经激光切割,最后进行组装。

在这里插入图片描述
在这里插入图片描述

​ 支架与舵机进行组装后机械臂就就成型了。

在这里插入图片描述

2,控制部分

​ 使用电位器和按钮进行控制。
在这里插入图片描述

3,程序编写和调试

#include <Servo.h>
#include "Timer.h"
//时间函数初始化
Timer t; 
//舵机控制初始化
Servo servo3;
Servo servo6;
Servo servo9;
Servo servo11;

unsigned short date0[200],date1[200],date2[200];  //储存数组
bool data3[200];  //储存数组
unsigned short R1,R2,R0; //输出变量
unsigned short du=0, xie=0, dus=0, xies=0, i=0, i2=0,zz=0,zzs=0;  //按键变量

void setup() {
  servo3.attach(3); servo6.attach(6);  servo9.attach(9); servo11.attach(11);
  //设置IO状态
  pinMode(12,INPUT); pinMode(A1,INPUT); pinMode(A3,INPUT); pinMode(13,INPUT);pinMode(11,OUTPUT);
  pinMode(A5,INPUT); pinMode(3,OUTPUT); pinMode(6,OUTPUT); pinMode(9,OUTPUT);pinMode(10,INPUT);
  //设置串口输出
  Serial.begin(115200);
  //设置定时函数100ms执行一次reading函数
  int tickEvent1=t.every(100, reading);
}

void loop() 
{
//启动定时函数
t.update();  
}

//读取函数                                                         
void reading()                                       
{
  //读取模拟值
  R0=analogRead(A1);  R1=analogRead(A3);  R2=analogRead(A5);   
  //转化为角度,采用比例法。
  R0=(850-R0)/3.8;  R1=(R1-400)/3.1;  R2=R2/2.8;  
  //爪子控制按键监测
  if (zzs==0)
    if (digitalRead(10)==1){
    zz=!zz;
    zzs=1;
    }
  if (digitalRead(10)==0) 
    zzs=0;
  //存储函数  
  save(); 
  //读取函数
  re_du();
  //串口输出数值
  Serial.print(R0);Serial.print('|'); Serial.print(R1);Serial.print('|'); Serial.println(R2);
  output();
 
}

void save(){
  //按键监测
  if (xies==0)
    if (digitalRead(12)==1){
    xie=!xie;
    xies=1;
    i=0;
    }
  if (digitalRead(12)==0) 
    xies=0;
  //写入数组  
  if (xie){
    date0[i]=(unsigned short)R0; date1[i]=(unsigned short)R1; date2[i]=(unsigned short)R2; data3[i]=zz;
    i++;
    Serial.println("xie");
  }
  if (i>=199){
    Serial.println("The end"); 
    i=199;
    xie=0;
  }
}
void re_du(){
  //按键监测
  if (dus==0)
    if (digitalRead(13)==1){
    dus=1;
    du=!du;
    i2=0;
    }
  if (digitalRead(13)==0) 
    dus=0;
  //读取 
  if (du){
    xie=0;  //停止写入防止出错
    Serial.print("Reading start");
    if (i2<=i){
      R0=date0[i2];  R1=date1[i2];  R2=date2[i2]; zz=data3[i2];
      i2++;
    }
    else {
      i2=0; 
      du=0;
    Serial.print("Read end");
    }
  }
}


void output()
{
  //输出到舵机
  servo3.write(R0);   servo6.write(R1); servo9.write(R2);   
  //机械爪控制
  if (zz==1) servo11.write(60); else servo11.write(90);  
}

把模拟值转化比例调整好就可以正式运行了。

4,成果展示

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值