小型云台机械手红外搬运功能的实现
创始人
2024-05-02 14:25:41
0

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

#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

  {

    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

  {

    ServoGo(which,start+a*i);

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

  }

}

 4. 资料下载

① 红外搬运-程序源代码

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

 

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...