机器谱 发表于 2023-7-3 11:09:24

机器人制作开源方案 | 立式铣床模型

本帖最后由 机器谱 于 2023-7-3 11:09 编辑

1. 功能说明
       铣床主要是指用铣刀在工件上加工多种表面的机床,本文示例将通过程序控制模拟铣床的运动效果--模拟铣床进行加工时各个结构的运动方式。铣床的运动主要包括:主轴的旋转运动、立铣头的上下进给运动、工作台的前后左右进给运动。

https://28846868.s21i.faiusr.com/2/ABUIABACGAAg8dTfpAYohPX3qgYwoB848C4!600x600.jpg.webp
2. 结构说明
       该铣床的主轴旋转运动选择用电机直接驱动;立铣头的上下进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的左右进给运动选择丝杠平移机构,运动稳定,且位移距离较长;工作台的前后进给运动选择滑块平移机构,用于短距离的运输。
https://28846868.s21i.faiusr.com/2/ABUIABACGAAgk9bfpAYok5L74wYw1SU4vis!600x600.jpg.webp
3. 电子硬件
本实验中采用了以下硬件:


主控板Basra主控板(兼容Arduino Uno)

扩展板Bigfish2.1扩展板

传感器触碰传感器
电池7.4V锂电池

电路连接说明:在下图所示的2个位置分别安装一个触碰传感器作为限位(限位:限定机械设备的运动极限位置)。

https://28846868.s21i.faiusr.com/4/ABUIABAEGAAgmtjfpAYo9-PppgUw-gQ4mQY!600x600.png.webp

① 2个触碰传感器分别连接在Bigfish扩展板的A0、A4端口;
② 舵机连接在Bigfish扩展板的D3端口;
③ 电机连接在Bigfish扩展板的D5,D6;D9,D10。

4. 功能实现
4.1 实现思路
       实现铣床模拟加工的功能。

https://28846868.s21i.faiusr.com/4/ABUIABAEGAAg-NvfpAYo5OScmQYw9wU47QQ!600x600.png.webp
第一步(复位):
      工作台运动到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 );

      }

}
5. 资料下载
资料内容:
①程序源代码
②样机3D文件
资料下载地址:立式铣床模型-概述 https://www.robotway.com/h-col-245.html

页: [1]
查看完整版本: 机器人制作开源方案 | 立式铣床模型