示教机械臂
机器人组非常善于发现和解决生活中的问题,我们发现在教学过程中经常会遇到需要重复演示的内容,我们只制作了的示教机械臂很好的解决了这个问题 。
下面让我们来了解一下他的制作流程吧。
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);
}
把模拟值转化比例调整好就可以正式运行了。