机器谱 发表于 2023-5-16 09:18:09

单轴丝杠平台实现搬运功能

本帖最后由 机器谱 于 2023-5-16 09:18 编辑

1. 功能说明
       本文示例将实现R279样机单轴丝杠平台搬运的功能。

https://28846868.s21i.faiusr.com/2/ABUIABACGAAg1NqCogYohJiYnQcwsB04mBY!600x600.jpg.webp
       该机构是由一个丝杠模组和一个 舵机关节模组【https://www.robotway.com/h-col-121.html】 组合而成,关节模组上安装了一个电磁铁。
https://28846868.s21i.faiusr.com/2/ABUIABACGAAgoteCogYo1P-pmgYwrx84xhU!600x600.jpg.webp
       注意限位开关【①触碰传感器、②近红外传感器】的安装位置:

https://28846868.s21i.faiusr.com/4/ABUIABAEGAAgn9yCogYowvDOwAQwmQc4kQU!600x600.png.webp
2. 丝杠传动机构原理
       丝杠传动机构是一个将转动转化为平动的机构,丝杠与移动的滑块之间通过螺纹传动;电机的旋转运动通过丝杆传递给滑块,由于滑块被支架限制不能进行旋转运动,所以滑块最终将旋转的运动转换为水平方向的移动。

https://28846868.s21i.faiusr.com/4/ABUIABAEGAAg7tyCogYohqz-jgUw5gU4jwE.png.webp
运动特性:通过上面的分析可以看出,这是一种螺旋机构,具有以下特点
       (1) 回转运动变换为直线运动,运动准确性高,且有很大的降速比;复式螺旋可以获得较大的位移,差动螺旋可以获得微小的位移;
       (2) 结构简单,制造方便;
       (3) 工作平稳,无噪声,可以传递很大的轴向力;
       (4) 传动效率低,有自锁作用,相对运动表面磨损较快;
       (5) 实现往复运动要靠主动件改变转动方向。
       丝杠机构的的稳定性很好,可以承受较大的力,所以如果要设计一些直线运输重物的机构时可以考虑利用丝杠来实现。

3. 电子硬件
       本实验中采用了以下硬件:


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

扩展板Bigfish2.1扩展板‍

传感器
触碰传感器
近红外传感器
电池7.4V锂电池

电路连接说明:
       ① 步进电机:黑D5,绿D6,红D9,蓝D10
       ② 近红外传感器:A2
       ③ 触碰传感器:A0
       ④ 电磁铁:D3

https://28846868.s21i.faiusr.com/4/ABUIABAEGAAg4t_CogYo0PqcjgcwnQk4wgY!600x600.png.webp
4. 功能实现
编程环境:Arduino 1.8.19
下面提供一个单轴丝杠平台搬运的参考例程(_1.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-04-19 https://www.robotway.com/

------------------------------*/

#include <Stepper.h>


const int stepsPerRevolution = 200;               //步进电机每圈转动的步数

Stepper myStepper_X(stepsPerRevolution,5,6,9,10); //定义步进电机的引脚

#define SENSOR_RESET A0   //宏定义步进电机复位传感器引脚 A0

#define SENSOR_UN A2      //定义物块检测传感器引脚 A2

#define STEP_X 2500         //定义抓取物块后行进的步数

#define electromagnet 3   //定义电磁铁引脚


#include <Servo.h>         

Servo myServo;            

#define SERVO_UP 30         //定义舵机上下转动的角度

#define SERVO_DOWN 1

#define TIME 2000


int delta = 10;


void setup() {

Serial.begin(9600);      //开启串口通信,波特率为9600

pinMode(SENSOR_RESET,INPUT);

pinMode(SENSOR_UN,INPUT);

pinMode(electromagnet,OUTPUT);

myServo.attach(4);

myServo.write(SERVO_UP);

myStepper_X.setSpeed(60);

resetStepper();

delay(1000);

}


void loop() {

while(digitalRead(SENSOR_UN)){

    delay(10);               //物块检测传感器循环检测,未触发为 1,进入while循环等待,触发为0,跳出循环,执行后面物块抓取函数

}

get();

put();

}


//步进电机复位函数

void resetStepper()

{

while(digitalRead(SENSOR_RESET))

{

    myStepper_X.step(-10);

}

myStepper_X.step(15);

}


//物块抓取函数

void get()

{

Serial.println("begin");

myStepper_X.step(1500);

ServoMove(SERVO_UP,SERVO_DOWN,TIME);

digitalWrite(electromagnet,HIGH);       //电磁铁引脚置高电平 吸取物块

ServoMove(SERVO_DOWN,SERVO_UP,TIME);

}


//物块释放函数

void put()

{

    myStepper_X.step(STEP_X);

    ServoMove(SERVO_UP,SERVO_DOWN,TIME);

    digitalWrite(electromagnet,LOW);      //电磁铁引脚置低电平 释放物块

    ServoMove(SERVO_DOWN,SERVO_UP,TIME);

    resetStepper();

}


//舵机转动函数,传三个参数,start为起始角度,finish为目标角度,t为时间

void ServoMove(int _start, int _finish, long t)

{

    static int direct;

    static int diff;

    static long deltaTime;

    if(_start <= _finish)

      direct = 1;

    else

      direct = -1;

    diff = abs(_finish - _start);

    deltaTime = (long) (t / diff);

   

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

   {

      myServo.write(_start + i * direct);

      delay(deltaTime);

   }

   delay(deltaTime);

}
5. 资料下载
资料内容:
​①搬运-例程源代码
​②搬运-样机3D文件
​资料下载地址:https://www.robotway.com/h-col-210.html

想了解更多机器人开源项目资料请关注 机器谱网站 https://www.robotway.com
页: [1]
查看完整版本: 单轴丝杠平台实现搬运功能