1. 功能说明
2. 结构说明
该铣床的主轴旋转运动选择用电机直接驱动;立铣头的上下进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的左右进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的前后进给运动选择滑块平移机构,用于短距离的运输。
3. 电子硬件
本实验中采用了以下硬件:
主控板 | Basra主控板(兼容Arduino Uno) |
扩展板 | Bigfish2.1扩展板 |
传感器 | 触碰传感器 |
电池 | 7.4V锂电池 |
电路连接说明:在下图所示的2个位置分别安装一个触碰传感器作为限位(限位:限定机械设备的运动极限位置)。
① 2个触碰传感器分别连接在Bigfish扩展板的A0、A4端口;
② 舵机连接在Bigfish扩展板的D3端口;
③ 电机连接在Bigfish扩展板的D5,D6;D9,D10。
4. 功能实现
4.1 实现思路
实现铣床模拟加工的功能。
第一步(复位):
工作台运动到X正向极限位置(控制1号电机旋转,直到工作台碰到限位的触碰传感器停止);铣头运动到Y正向极限位置(控制2号电机旋转,直到洗头碰到限位的触碰传感器停止),工作台运动到Y正向极限位置(控制4号电机);
第二步:
工作台在一号电机所在的丝杠上向-X方向运动,其中心位置与铣头的中心位置在同一平面上(控制1号电机);工作台在一号电机所在的丝杠上向-Y方向运动,其中心位置与铣头的中心位置在同一直线上(控制1号电机);铣头开始旋转(控制3号电机)
第三步:
铣头-Z方向移动,移动到2号电机所在丝杠的中间位置停止(控制2号电机);工作台在+X与-X方向各匀速移动1S的时间(控制1号电机正转与反转延迟各1s);工作台在+Y与-Y方向各移动一段距离(控制4号舵机顺时针、逆时针各旋转一定的角度);
第四步:
铣头在-Z向移动1s(控制2号电机旋转1s),暂停0.3s;洗头在+Z向移动1s(控制2号电机反向旋转1s);工作台的运动重复第三步中工作台的运动;
第五步:
复位,回到第一步中的位置。
4.2 示例程序
编程环境:Arduino 1.8.19
下面提供一个参考例程(xichuang.ino),具体实验效果可参考演示视频。
/*------------------------------------------------------------------------------------
版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
Distributed under MIT license.See file LICENSE for detail or copy at
https://opensource.org/licenses/MIT
by 机器谱 2023-06-14 https://www.robotway.com/
------------------------------*/
#include <Servo.h>
int i,j,k,l; //定义几个变量
Servo servo1; //命名一个舵机
void setup() {
servo1.attach(3); //启动舵机3号口
pinMode( 14, INPUT); //定义引脚
pinMode( 18, INPUT);
pinMode( 5, OUTPUT);
pinMode( 6, OUTPUT);
pinMode( 9, OUTPUT);
pinMode( 10, OUTPUT);
pinMode( 4, OUTPUT);
}
void loop() {
i=digitalRead(14); //设置i为A0读取数据
j=digitalRead(18); //设置j为A4读取数据
//第一步
servo1.write( 130 ); //舵机置位
zero();
/****************************
第二步
*****************************/
if(i==0&&j==0) //如果X轴Y轴已归位
{
//delay(2000);
digitalWrite( 9 , LOW ); //X轴至中部
digitalWrite( 10 , HIGH );
delay(6000);
digitalWrite( 10 , LOW );
servo1.write( 87 ); //舵机伸出
digitalWrite( 4 , HIGH ); //电机旋转
delay(1000);
/****************************
第三步
*****************************/
digitalWrite( 5 , LOW ); //Z轴移至中间
digitalWrite( 6 , HIGH );
delay(5000);
digitalWrite( 6 , LOW );
digitalWrite( 9 , LOW ); //X轴左移一秒
digitalWrite( 10 , HIGH );
delay(1000);
digitalWrite( 10 , LOW ); //稍停
delay(300);
digitalWrite( 9 , HIGH ); //X轴右移一秒
digitalWrite( 10 , LOW );
delay(1000);
digitalWrite( 9 , LOW );
servo1.write( 130 ); //舵机伸缩移动
delay(300);
servo1.write( 87 );
delay(300);
/****************************
第四步
*****************************/
// digitalWrite( 5 , LOW ); //Z轴下移一秒
// digitalWrite( 6 , HIGH );
// delay(1000);
// digitalWrite( 6 , LOW );//稍停
// delay(300);
digitalWrite( 5 , HIGH ); //Z轴上移一秒
digitalWrite( 6 , LOW );
delay(1000);
digitalWrite( 5 , LOW );
/****************************
重复第三步
*****************************/
digitalWrite( 5 , LOW ); //Z轴移至中间
digitalWrite( 6 , HIGH );
delay(1000);
digitalWrite( 6 , LOW );
digitalWrite( 9 , LOW ); //X轴左右移一秒
digitalWrite( 10 , HIGH );
delay(1000);
digitalWrite( 10 , LOW );
delay(300);
digitalWrite( 9 , HIGH );
digitalWrite( 10 , LOW );
delay(1000);
digitalWrite( 9 , LOW );
servo1.write( 130 ); //舵机伸缩移动
delay(300);
servo1.write( 87 );
delay(300);
digitalWrite( 4 , LOW );
while(1)
{
i=digitalRead(14); //设置i为A0读取数据
j=digitalRead(18); //设置j为A4读取数据
zero();
}
}
//}
}
void zero()
{
if(i==0) //如果触发限位A0
{
digitalWrite( 9 , LOW ); //X轴停止运动
digitalWrite( 10 , LOW );
}
else
{
digitalWrite( 9 , HIGH ); //X轴电机置位
digitalWrite( 10 , LOW );
}
if(j==0)//如果触发限位A4
{
digitalWrite( 5 , LOW );//Z轴停止运动
digitalWrite( 6 , LOW );
}
else
{
digitalWrite( 5 , HIGH ); //Z轴电机置位
digitalWrite( 6 , LOW );
}
}
程序源代码及样机3D文件详见 立式铣床模型-概述