机器人制作开源方案 | 卧式车床模型概述

news2024/11/18 19:18:30

1. 功能说明

      本文示例将通过程序控制模拟车床的运动效果--模拟车床进行加工时各个结构的运动方式。车床的主要运动包括夹持工件主轴的旋转运动、刀具进给运动、刀具的换刀旋转运动、溜板的平动、尾座上顶针的进给运动。

2. 结构说明

      该车床主轴旋转运动选择带传动的传动方式;刀具的进给使用滑块平移机构,用于短距离的移动;刀具的换刀装置使用电机直接驱动;溜板的平移选择丝杠传动,丝杠平移的距离较长且运动稳定;尾座的顶针进给运动使用滑块平移机构,用于短距离的平移。

 3. 电子硬件

本实验中采用了以下硬件:

主控板

Basra主控板(兼容Arduino Uno)‍

扩展板

Bigfish2.1扩展板‍

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

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

① 触碰传感器连接在Bigfish扩展板的A0端口;

② 3号舵机连接在Bigfish扩展板的D7端口;4号舵机连接在Bigfish扩展板的D4端口;5号舵机连接在Bigfish扩展板的D3端口。

③ 1号电机连接在Bigfish扩展板的D5,D6;2号电机连接在Bigfish扩展板的D9,D10。

4. 功能实现

4.1 实现思路

实现车床模拟加工的功能。

 复位:

         溜板箱回到+X向极限位置(由1号电机控制),顶针伸出-X向(5号舵机控制),刀具箱回到+Y极限位置(3号舵机控制),刀具1指向-X向(4号舵机控制),主轴开始旋转(2号电机控制)。

第一步(粗加工):

         上刀,刀具1指向Y轴正方向(由4号舵机控制);溜板箱沿-X向移动进入工作区,以刀具1的顶点与顶针顶点在同一直线为止(1号电机开始工作,延迟大概4s);刀具箱+Y向伸出去(3号舵机控制);刀具1沿-X向移动1s后停止(1号电机开始工作,延迟1s)。

第二步(换刀,准备精加工):

         刀具箱沿-Y向移动到极限位置(3号舵机角度控制收回来);溜板箱沿+X向移动到+X向极限位置(1号电机控制,传感器限位);换刀,刀具2到刀具1的位置(4号舵机角度控制)。

第三步(精加工):

         溜板箱沿-X向移动进入工作区,以刀具1的顶点与顶针顶点在同一直线为止(1号电机开始工作,延迟大概4s);刀具箱+Y向伸出去(3号舵机控制);刀具1沿-X向移动1s后停止(1号电机开始工作,延迟1s)。

第四步(加工完成):

         刀具箱收回(3号舵机角度控制);溜板箱沿+X向移动到+X向极限位置(1号电机控制,传感器限位);主轴停止转动(2号电机stop);刀具1回到初始位置(4号舵机角度控制);顶针收回,沿+X向移动到极限位置(5号舵机角度控制)。

4.2 示例程序

      编程环境:Arduino 1.8.19

下面提供一个参考例程(lathe.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>


Servo servo_pin_4;

Servo servo_pin_3;

Servo servo_pin_8;

Servo servo_pin_11;

Servo servo_pin_7;

int _ABVAR_1_i = 0 ;


void setup()

{

  pinMode( 14, INPUT);

  servo_pin_4.attach(4);

  servo_pin_3.attach(3);

  servo_pin_8.attach(8);

  servo_pin_11.attach(11);

  servo_pin_7.attach(7);

  pinMode( 9 , OUTPUT);

  pinMode( 10 , OUTPUT);

  pinMode( 5 , OUTPUT);

  pinMode( 6 , OUTPUT);

  servo_pin_4.write( 140 );


  servo_pin_3.write( 170 );


  servo_pin_8.write( 50 );


  servo_pin_11.write( 74 );


  servo_pin_7.write( 94 );


  delay( 1000 );


}


void loop()

{

  if (digitalRead(14))

  {

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 80 ); _ABVAR_1_i++ )

    {

      servo_pin_4.write( ( 140 - _ABVAR_1_i ) );

      delay( 10 );

    }

    delay( 1000 );

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 80 ); _ABVAR_1_i++ )

    {

      servo_pin_4.write( ( 60 + _ABVAR_1_i ) );

      delay( 10 );

    }

    digitalWrite( 9 , HIGH );

    digitalWrite( 10 , LOW );

    delay( 2000 );

    digitalWrite( 9 , LOW );

    digitalWrite( 10 , LOW );

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 100 ); _ABVAR_1_i++ )

    {

      servo_pin_3.write( ( 170 - _ABVAR_1_i ) );

      delay( 20 );

    }

    digitalWrite( 5 , HIGH );

    digitalWrite( 6 , LOW );

    delay( 1000 );

    digitalWrite( 5 , LOW );

    digitalWrite( 6 , LOW );

    delay( 1000 );

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 69 ); _ABVAR_1_i++ )

    {

      servo_pin_3.write( ( 70 - _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 41 ); _ABVAR_1_i++ )

    {

      servo_pin_8.write( ( 50 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 73 ); _ABVAR_1_i++ )

    {

      servo_pin_11.write( ( 74 - _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 85 ); _ABVAR_1_i++ )

    {

      servo_pin_7.write( ( 94 - _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 64 ); _ABVAR_1_i++ )

    {

      servo_pin_11.write( ( 1 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 70 ); _ABVAR_1_i++ )

    {

      servo_pin_8.write( ( 91 - _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 64 ); _ABVAR_1_i++ )

    {

      servo_pin_11.write( ( 65 - _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 169 ); _ABVAR_1_i++ )

    {

      servo_pin_3.write( ( 1 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 170 ); _ABVAR_1_i++ )

    {

      servo_pin_7.write( ( 9 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 39 ); _ABVAR_1_i++ )

    {

      servo_pin_11.write( ( 1 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 40 ); _ABVAR_1_i++ )

    {

      servo_pin_8.write( ( 20 + _ABVAR_1_i ) );

      delay( 20 );

    }

    for (_ABVAR_1_i= 1; _ABVAR_1_i<= ( 85 ); _ABVAR_1_i++ )

    {

      servo_pin_7.write( ( 179 - _ABVAR_1_i ) );

      delay( 20 );

    }

  }

  else

  {

    servo_pin_4.write( 140 );

    servo_pin_3.write( 170 );

    servo_pin_8.write( 50 );

    servo_pin_11.write( 74 );

    servo_pin_7.write( 94 );

    delay( 1000 );

  }

}

 程序源代码及样机3D文件详见 卧式车床模型-概述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch实战(二十四)---ES数据建模一对多模型Nested结构

Elasticsearch实战—ES数据建模一对多模型Nested结构 文章目录 Elasticsearch实战---ES数据建模一对多模型Nested结构1.ES 一对多模型Nested 结构模型实战2.ES字段查询2.1 非Nested 错误结构及错误查询2.2 Nested结构&#xff0c;正确查询 3.Nested结构原理 我们如何把Mysql的模…

vue 中使用 vxe-table 制作可编辑表格

项目上有一个表格需要实现在线编辑&#xff0c;开始用了 element 的el-table 实现&#xff0c;单元格内基础情况就是监听了单击单元格切换一个span标签与input标签&#xff0c;复杂点的单元格使用了大量的条件判断来实现对应的编辑操作&#xff0c;比如下拉选&#xff0c;popov…

github Couldn‘t connect to server

Couldnt connect to server 问题描述解决git clone 出错直接访问github没啥问题ping github.com手动指定域名映射关系再次测试git命令 总结参考 问题描述 前一天还是好好的&#xff0c;能git pull和git push&#xff0c;昨天回来之后怎么操作都是Couldnt connect to server。百…

【数据结构】堆的实现(向下调整和向上调整法)和堆排序的实现

目录 一、堆的概念引入 二、小堆的实现 首先&#xff0c;我们会跟线性表一样建立一个动态数组来存堆的数据 ①、堆的初始化--HeapInit ②、小堆的向下调整法的实现 ③、堆排序的实现 ④、堆的插入和向上调整法 ⑤、删除堆顶数据 ⑥、获取堆顶 三、时间复杂度总结&#…

C# PaddleInference OCR识别 学习研究Demo

说明 基于开源项目 https://github.com/sdcb/PaddleSharp VS2022.net4.8 OpenCvSharp4Sdcb.PaddleInference 效果 项目 代码 using Sdcb.PaddleInference.Native; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using OpenCvSharp.Extensi…

15年前的手机并没有jvm虚拟机,为何可以运行Java游戏

2000年代初期&#xff0c;随着移动通信技术的发展&#xff0c;手机逐渐普及。那个时代的手机功能相对比较单一&#xff0c;主要用于打电话和发送短信。但是&#xff0c;随着技术的进步&#xff0c;人们开始在手机上玩游戏&#xff0c;而其中最受欢迎的游戏就是Java游戏。在那个…

ChatLaw,开源了!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 最近这段时间&#xff0c;AI 的整体热度有所下降&#xff0c;但是 AI 技术在各行各业的探索脚步&#xff0c;却一直没有停止。 在 ChatGPT 刚发布时&#xff0c;有不少业内人士认为&#x…

【浏览器篇】记录下浏览器保存PDF文件不同方式的小区别

【浏览器篇】记录下浏览器保存PDF文件不同方式的小区别 以前不太注意这些&#xff0c;最近搞文档比较多才发现为何保存的一部分PDF文件里面字体可以复制可以搜索&#xff0c;一部分保存的PDF里面的字体却无法复制、无法搜索等&#xff0c;发现是不同保存方式得到的文档权限不一…

SQL注入攻击原理 实战

我来进行实战了&#xff0c;总在看教程。 文章目录 前言一&#xff0c;网站是否存在sql漏洞二、判断一下字段3. 判断显点4.查找相关信息1.查询数据库2.版本3.数据库表名4.字段名5,查询 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前言&#xff…

华为OD机试真题 Python 实现【学校的位置】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、Python算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 为了解决新学期学生暴涨的问题&#xff0c;小乐村要建所新学校。考虑到学生上学安全问题&#xff0c;需要所有学生家到学校距离最短。假设学校和所有的学生家&am…

unity+pico neo3入门教程1-基础传送

tips&#xff1a;之前入门教程如果没有左手柄&#xff0c;查看一下自己的手柄设置&#xff0c;左右手柄&#xff0c; Helloworld型 1.基础传送&#xff0c;调式地面传送功能&#xff0c;通过手柄默认的“握手键”&#xff0c;瞬移&#xff0c; VR头显&#xff0c;添加Teleport…

Go语言远程调试

Go语言远程调试 1、安装dlv # 安装dlv $ go install github.com/go-delve/delve/cmd/dlvlatest$ dlv version Delve Debugger Version: 1.20.1 Build: $Id: 96e65b6c615845d42e0e31d903f6475b0e4ece6e $2、命令行远程调试 我们远程(Linux服务器)有如下代码&#xff1a; [ro…

(四)Kafka 消费者

文章目录 1. Kafka 消费者相关概念消费者和消费者组&#xff08;1&#xff09;横向伸缩消费者&#xff08;2&#xff09;横向伸缩消费者组 分区再平衡再均衡的类型&#xff08;1&#xff09;主动再均衡&#xff08;2&#xff09;协作再均衡&#xff08;增量再均衡&#xff09; …

MyBatisAnnotationSqlInjection.ql学习

源码位置 java\ql\src\experimental\Security\CWE\CWE-089 源代码 /*** name SQL injection in MyBatis annotation* description Constructing a dynamic SQL statement with input that comes from an* untrusted source could allow an attacker to modify …

【UE5 Cesium】14-Cesium for Unreal 加载服务器上的倾斜摄影

目录 前言 步骤 一、下载安装tomcat 10 二、下载安装JDK 三、启动Tomcat 四、Tomcat加载倾斜摄影 五、UE中加载Tomcat上的倾斜摄影 前言 上一篇文章&#xff08;【UE5 Cesium】13-Cesium for Unreal 加载本地倾斜摄影&#xff09;介绍了如何在UE中加载本地倾斜摄影&am…

链表专题1—24. 两两交换链表中的节点 234.回文链表 143.重排链表 141.环形链表 142.环形链表II 160.链表相交 C++实现

文章目录 24. 两两交换链表中的节点234.回文链表链表转数组统计长度反转后半部分链表 快慢指针 143. 重排链表数组 双指针 超时双队列反转和插入链表 141. 环形链表142.环形链表II160.链表相交 24. 两两交换链表中的节点 迭代法&#xff0c;时间复杂度&#xff1a; O ( n ) O(n…

App store里简单好用的便签app有哪些?

作为一个打工人&#xff0c;我经常需要一个简单而又好用的便签应用来记录我的各种事务和备忘。我曾在App Store里尝试了许多便签应用&#xff0c;但有一款应用真正让我留下了深刻的印象——敬业签。 敬业签的简单和易用性让我爱不释手。无论是添加新的便签&#xff0c;设置提醒…

基础大模型能像人类一样标注数据吗?

自从 ChatGPT 出现以来&#xff0c;我们见证了大语言模型 (LLM) 领域前所未有的发展&#xff0c;尤其是对话类模型&#xff0c;经过微调以后可以根据给出的提示语 (prompt) 来完成相关要求和命令。然而&#xff0c;直到如今我们也无法对比这些大模型的性能&#xff0c;因为缺乏…

为什么程序员更容易抑郁?是因为...

【1】 前段时间&#xff0c;有一位朋友&#xff0c;在后台留言&#xff1a; 《谢谢你听我吐槽&#xff0c;说出来感觉好了很多》 这位程序员朋友在深圳大厂&#xff0c;35岁&#xff0c;10年研发经验&#xff0c;倍感抑郁&#xff0c;吐露了自己的近况&#xff1a; &#xff08…

IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d

文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里&#xff1f;mingW为啥可以兼容window下的动态库 概…