小型云台机械手红外搬运功能的实现

news2024/11/25 14:17:30

1. 功能说明

       在小型云台机械手前方安装近红外传感器,如果近红外触发(检测到有货物),机械手开始抓取货物,并将货物从一个区域搬运到另一个指定区域;否则,机械臂不动作。

2. 使用样机

本实验使用的样机是用探索者兼容零件制作的。

3. 功能实现

3.1 电子硬件   

在这个示例中,采用了以下硬件,请大家参考:

将夹爪、腕关节、底座关节的舵机分别接在扩展板的D4、D7以及D11舵机接口上,近红外传感器接在A0口上。

 

3.2 编写程序

编写并烧录以下程序(Robotic_arm_three.ino),该程序将实现演示视频中的动作。

编程环境:Arduino 1.8.19

/*******************************************************************************************

版权说明:Copyright 2022 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 机器谱 2022-12-21 https://www.robotway.com/

---------------------------------------------------------------------------------------

实验需求:

         实现机器人搬运货物。

实现思路:

         程序的整体思路为:在机械臂前方安装近红外传感器,如果近红外触发(检测到有货物),机械臂

         开始抓取货物,并将货物从一个区域搬运到另一个指定区域;否则,机械臂不动作。

实验接线:

         最上端的机械爪舵机接D4;

         中间的机械身躯舵机接D7;

         最下端的机械底座舵机接D11;

         近红外传感器接A0。

********************************************************************************************/

#include<ServoTimer2.h>

#define NearInfraredSensor A0   //定义的近红外感器引脚的引脚

#define Upward_servo_close 66   //机械爪闭合的角度值

#define Upward_servo_open 115   //机械爪张开的角度值

#define Middle_servo_init 85    //机械臂的初始角

#define Middle_servo_left 10    //机械臂向左偏的角度

#define Middle_servo_left1 50   //机械臂向左偏的角度

#define Down_servo_middle 75   //机械底座初始角度值

#define Down_servo_left 5      //机械底座向左偏的角度值

ServoTimer2 myservo[3];       //声明舵机数组;

int myservo_pin[3] = { 4, 7, 11 }; //定义三个舵机引脚号;

int myservo_angle_init[3] = { Upward_servo_open, Middle_servo_left, Down_servo_middle };

//定义三个舵机的初始角度值;

int servo_num = sizeof(myservo_pin) / sizeof(myservo_pin[0]); //得出舵机总数

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  pinMode(NearInfraredSensor,INPUT); //传感器设置为输入模式;

  ResetServo();       //初始化舵机角度

  delay(2000);

}

void loop() {

  // put your main code here, to run repeatedly:

  int   Data_of_Sensor = !digitalRead( NearInfraredSensor );

  int   Data = 0;

  if( Data_of_Sensor == 1 ) {   //第1次判断近红外是否触发(是否有货物)

    delay(300);

    if( !digitalRead( NearInfraredSensor ) ) //第2次判断近红外是否触发(是否有货物)

      {

           Grab_And_Release();        //如果检测到有货物,机械臂开始抓取货物;

      }

  }

  else {

    delay(2);    //否则,程序等待;

  }

}

void Grab_And_Release() //如果检测到有货物,机械臂开始抓取货物;

{

  ServoMove(1,Middle_servo_left,Middle_servo_init,1500);     //机械臂向下降(准备抓取货物)  

  ServoMove(0,Upward_servo_open,Upward_servo_close,1500);    //机械爪闭合(抓取货物)

  ServoMove(1,Middle_servo_init,Middle_servo_left1,1500);    //机械臂向上抬

  ServoMove(2,Down_servo_middle,Down_servo_left,1500);       //机械底座转到物料放置区

  ServoMove(1,Middle_servo_left1,Middle_servo_init,1500);    //机械臂向下降(准备释放货物)

  ServoMove(0,Upward_servo_close,Upward_servo_open,1500);    //机械爪张开(释放货物)

  ServoMove(1,Middle_servo_init,Middle_servo_left,1500);     //机械臂回复到初始角度

  ServoMove(2,Down_servo_left,Down_servo_middle,1500);       //机械底座回复到初始角度

}

void ResetServo()     //初始化舵机角度

{

  for(int i=0;i<servo_num;i++)

  {

    myservo[i].attach(myservo_pin[i]);

    myservo[i].write( MapAngle(myservo_angle_init[i]) );

  }

}

int MapAngle(int which)   //映射函数(将0到180映射到500到2500)

{

  return ( map(which,0,180,500,2500) );

}

void ServoGo(int which,int where)   //开始驱动舵机(使舵机转动);

{

   myservo[which].write(MapAngle(where));

}

void ServoMove(int which,int start,int finish,int t) //舵机转动(舵机从start角度值转到finish角度值需要的时间为t ms)

{

   int a=0;

   if( ( start - finish ) > 0 ) a = -1;

   else a = 1;

   for(int i=0;i<abs(start-finish);i++)

  {

    ServoGo(which,start+a*i);

    delay(t/(abs(start-finish)));

  }

}

 4. 资料下载

① 红外搬运-程序源代码

② 红外搬运-样机3D文件

 

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

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

相关文章

【LeetCode】从前序与中序遍历序列构造二叉树 [M](二叉树重构)

105. 从前序与中序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1&…

ASEMI整流桥MB10S,DB207S和ABS210有什么区别

编辑-Z ASEMI整流桥MB10S&#xff0c;DB207S和ABS210有什么区别&#xff1f;这几个型号从外观看都是很相似的&#xff0c;那么他们参数有什么不一样呢&#xff1f; MB10S参数&#xff1a; 型号&#xff1a;MB10S 封装&#xff1a;MBS-4 最大重复峰值反向电压&#xff08;VR…

缓冲区Buffer类的设计(参考Muduo实现)

Buffer的功能需求&#xff1a; Buffer类的设计目的是再创造一层应用层缓冲区。 其对外表现为一块连续的内存(char* p, int len)&#xff0c;以方便客户代码的编写。 size() 可以自动增长&#xf…

Java如何自定义一个变长数组?

文章目录思路分析实现代码测试结果首先需要声明的是&#xff0c; Java本身是提供了变长数组的&#xff0c;即 ArrayList。那么自定义一个变长数组有啥用&#xff1f;其实没啥用或者说用处不大&#xff0c;主要就是为了了解下变长数组的设计理念而已。实际工作中直接使用 ArrayL…

文华财经期货背离信号准确率高指标公式,单边趋势行情增仓上行多空共振策略

由“短线震荡波段王”和“三柱共振-高把握”指标合成 功能 : 1.红绿小波段黄蓝中波段粉青大波段 2.红绿中小波段 3.顶背底背提示 4.金叉死叉提示 5.多和空提示-金叉死叉改写 优点:宽幅震荡和窄幅震荡 弊端:单边行情(可结合多空趋势主图规避) 功能: 1.红绿波段 2.大中量仓-单…

MySQL索引详解

目录 1、为什么要有索引&#xff1f; 2、预备知识 3、为何IO交互要是 Page&#xff1f; 4、如何理解Page以及索引理解 5、索引操作 <1> 创建主键索引 <2> 创建唯一索引 <3> 普通索引的创建 <4> 全文索引的创建 <5> 查询索引 <5>…

Python图像识别实战(五):卷积神经网络CNN模型图像二分类预测结果评价(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用&#xff0c;分为分类问题&#xff08;预测值是离散型&#xff09;和回归问题&#xff08;预测值是连续型&#xff09;&#xff08;具体见之前的文章&#xff09;。 从本期开始&#xff0c;我将做一个关于图像识别的…

BOOT进程控制模式与故障排错

1. BOOT reboot and shutdown—使用systemctl 命令。 systemctl poweroff–关机 systemctl reboot --重启 systemctl halt 禁用CPU 在7版本中使用systemctl 工具。 选择systemd target graphical.target 桌面图形模式 multi-user.target 多用户模式–命令行 rescue.target 救援…

Linux驱动开发基础__总线设备驱动模型

目录 1 驱动编写的三种方法 1.1 传统写法 1.2 总线设备驱动模型 1.3 设备树 2 在 Linux 中实现“分离”&#xff1a;Bus/Dev/Drv 模型 3 匹配原则 4 函数调用关系 1 驱动编写的三种方法 1.1 传统写法 1.2 总线设备驱动模型 引入platform_device、platform_driver&…

二叉数题型2

目录 二叉搜索树的众数 二叉树的最近公共祖先 修剪二叉树 二叉搜索树的众数 问题描述&#xff1a; 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#…

PROJ 9.1.1源码下载编译(Win10+VS2022)

目录PROJ什么是PROJPROJ下载方式资源结构编译PROJ打包编译成功的库PROJ 什么是PROJ Proj是一个免费的GIS工具。 它专注于地图投影的表达&#xff0c;以及转换。采用一种非常简单明了的投影表达PROJ&#xff0c;比其它的投影定义简单&#xff0c;但很明显。很容易就能看到各种…

无人机倾斜摄影测量技术的优势有哪些?

传统的地理信息获取工作一般是通过人工测量的方式进行&#xff0c;但这样的测量方式具有工作强度大、成本高等问题。随着现代科技的不断发展&#xff0c;测绘行业对地理信息数据的准确性、时效性要求也越来越高&#xff0c;人工成本和时间成本也为行业带来了巨大的压力。因此&a…

GIT回退到指定版本的两种方法(reset/revert)

实现多人合作程序开发的过程中&#xff0c;我们有时会出现错误提交的情况&#xff0c;此时我们希望能撤销提交操作&#xff0c;让程序回到提交前的样子&#xff0c;本文总结了两种解决方法&#xff1a;reset、revert。 命令特点reset该命令会强行覆盖当前版本和要回退的版本之…

ArcGIS基础实验操作100例--实验15设置字段属性域

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验15 设置字段属性域 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&a…

如何用Sonic云真机打王者

使用Sonic进行跨网段部署&#xff0c;助力海外业务的公司进行专项检测。提供定时任务充分利用无人值守时间回归UI测试&#xff0c;省时省力。自研随机事件测试与UI遍历测试&#xff0c;支持打通Jenkins的DevOps流程&#xff0c;Sonic提供图像识别&#xff0c;后续还会添加poco控…

ECS-弹性容器服务 - Part 2

68-ECS-弹性容器服务 - Part 2 Hello大家好&#xff0c;我们今天继续ECS的内容。 Service load balancing 之前的课时讨论过&#xff0c;在ECS集群上创建的ECS服务支持AWS负载均衡器&#xff0c;而应用程序负载均衡器和ECS服务通常是一个很好的搭配&#xff0c;因为应用程序负…

Docker 基础概念介绍

一 什么是 docker &#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;…

【nowcoder】笔试强训Day13

目录 一、选择题 二、编程题 2.1参数解析 2.2跳石板 一、选择题 1.一个关系数据库文件中的各条记录 &#xff08;&#xff09; 。 A. 前后顺序不能任意颠倒&#xff0c;一定要按照输入的顺序排列 B. 前后顺序可以任意颠倒&#xff0c;不影响库中的数据关系 C. 前后顺序…

前端面试题之计算机网络篇--HTTP协议

HTTP协议 1. GET和POST的请求的区别 GET和POST方法 GET和POST方法都是HTTP中的方法 什么是 HTTP&#xff1f; 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;缩写 HTTP&#xff09;旨在启用客户端和服务器之间的通信。 HTTP 充当客户端和服务器之间的…

Android进阶——Javac编译解析

Javac编译器 1.Javac的源码与调试 Javac的源码下载地址&#xff1a;Javac的源码下载地址&#xff0c;在Myeclipse中新建项目Compiler_javac&#xff0c;把源码复制到项目中。 Javac的源码目录&#xff1a; 从Sun Javac的代码来看&#xff0c;编译过程大致可以分为3个过程&…