极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1974|回复: 0

机器人制作开源方案 | 智能立体仓储系统模型

[复制链接]
发表于 2023-7-14 13:04:35 | 显示全部楼层 |阅读模式
本帖最后由 机器谱 于 2023-7-14 13:04 编辑

1. 功能说明
      本文示例将通过程序控制模拟立体仓储系统的运动效果--模拟立体仓储系统进行运输货物时各个结构的运动方式。立体仓储系统的运动有整体系统的水平移动、载货台的纵向移动、货叉的平动,所有的运动表现形式都是旋转运动转化为平动。


2. 结构说明
      该立体仓储系统的水平移动使用丝杠平移,丝杠平移可以承载较重的物体;载货台的纵向移动使用丝杠平移,其稳定性较强,位移距离长;货叉的平动使用滑块平移机构,平移距离较短。


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

主控板
Basra控制板(兼容Arduino Uno)
扩展板
Bigfish2.1扩展板
传感器
触碰传感器
电池
7.4v锂电池

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


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

4. 功能实现
4.1 实现思路

      实现模拟立体仓储系统运输一个物体的功能。

      初始位置:整体立体仓库的运输机构沿-X向移动到极限位置(2号电机控制,传感器限位);载货台沿-Z向移动到极限位置(1号电机控制,传感器限位);货叉收回(3号舵机角度控制);

      装货:货叉伸出去,停顿(3号舵机角度控制,大概延迟0.3s);货叉收回,停顿(3号舵机角度控制,大概延迟0.3s);

      运输:载货台沿+X向移动到中间位置(2号电机控制,运动所需延迟时间大概7s);载物台沿+Z向移动到中间位置(1号电机控制,运动所需延迟时间大概7s);

      卸货:货叉伸出去,停顿(3号舵机角度控制,大概延迟0.3s);货叉收回,停顿(3号舵机角度控制,大概延迟0.3s);
      复位:整体立体仓库的运输机构沿-X向移动到极限位置(2号电机控制,传感器限位);载货台沿-Z向移动到极限位置(1号电机控制,传感器限位);货叉收回(3号舵机角度控制)。

4.2 示例程序
       编程环境:
Arduino 1.8.19
      下面提供一个参考例程(smartStoreHouse.ino),具体实验效果可参考演示视频。
  1. /*------------------------------------------------------------------------------------

  2.    版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

  3.            Distributed under MIT license.See file LICENSE for detail or copy at

  4.            https://opensource.org/licenses/MIT

  5.            by 机器谱 2023-06-15 https://www.robotway.com/

  6.    ------------------------------*/

  7. int sensor[4]= {A0,A2,A4,A3}; //定义数组~传感器接口

  8. /* 宏定义舵机角度,以及延时时间 */

  9. #define SERVO_OUT 70

  10. #define SERVO_IN   120

  11. #define Delay_right 7000

  12. #define Delay_up 7000

  13. #include <Servo.h>

  14. Servo myservo;

  15. void setup() {

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

  17.    for(int i=0;i<4;i++) //传感器接口设置为输入

  18.     pinMode(sensor[i],INPUT_PULLUP);

  19. /* 电机接口设置为输出*/

  20.    pinMode(9, OUTPUT);

  21.    pinMode(10, OUTPUT);

  22.    pinMode(11, OUTPUT);

  23.    pinMode(12, OUTPUT);   

  24.    pinMode(5, OUTPUT);

  25.    pinMode(6, OUTPUT);   

  26.    Serial.begin(9600);   //串口初始化

  27.    myservo.attach(4);   

  28.    myservo.write(SERVO_IN);   // 3号舵机收回来

  29.    delay(300);

  30.    motorReset(); // 电机初始化,回到复位位置

  31.       

  32. }

  33. void loop()

  34. {

  35.    myservo.write(SERVO_OUT); // 3号舵机伸出去

  36.    delay(300);

  37.    myservo.write(SERVO_IN);   // 3号舵机收回来

  38.    delay(300);

  39.    X_Motor_right();          // 2 号电机右移 Delay_right时间,然后停止

  40.    delay(Delay_right);

  41.    X_Motor_stop();

  42.    Y_Motor_up();             // 1号电机上移 Delay_up时间,然后停止

  43.    delay(Delay_up);

  44.    Y_Motor_stop();

  45.    myservo.write(SERVO_OUT); // 3号舵机伸出去

  46.    delay(300);

  47.    myservo.write(SERVO_IN);   // 3号舵机收回来

  48.    delay(300);

  49.    motorReset(); // 电机初始化,回到复位位置

  50.    

  51. }

  52. /***************************** MOTOR **************************************/

  53. void X_Motor_left()

  54. {

  55.    digitalWrite(5,LOW);

  56.    digitalWrite(6,HIGH);

  57. }

  58. void X_Motor_right()

  59. {

  60.    digitalWrite(5,HIGH);

  61.    digitalWrite(6,LOW);

  62. }

  63. void X_Motor_stop()

  64. {

  65.    digitalWrite(5,LOW);

  66.    digitalWrite(6,LOW);

  67. }

  68. void Y_Motor_up()

  69. {

  70.    digitalWrite(9,HIGH);

  71.    digitalWrite(10,LOW);

  72. }

  73. void Y_Motor_down()

  74. {

  75.    digitalWrite(9,LOW);

  76.    digitalWrite(10,HIGH);

  77. }

  78. void Y_Motor_stop()

  79. {

  80.    digitalWrite(9,LOW);

  81.    digitalWrite(10,LOW);

  82. }

  83. void motorReset(){

  84.    while(!SensorTrigger(0))   //A0传感器不触发,2号电机左移

  85.    {

  86.       X_Motor_left();

  87.       Serial.print("A0:   ");

  88.       Serial.println(digitalRead(A0));

  89.    }

  90.    X_Motor_stop();        //A0传感器触发,2号电机停止

  91.    while(!SensorTrigger(2))//A4传感器不触发,1号电机向下移动

  92.    {

  93.       Y_Motor_down();

  94.       Serial.print("A4:   ");

  95.       Serial.println(digitalRead(A4));

  96.    }

  97.    Y_Motor_up();//A0传感器触发,2号电机向上300ms,然后停止

  98.    delay(300);

  99.    Y_Motor_stop();

  100. }

  101. /***********************************************************************************/

  102. boolean SensorTrigger( int which )

  103. {

  104.    boolean where = false;

  105.    if( !digitalRead( sensor[ which ] ) )

  106.    {

  107.     delay( 100 );

  108.     if( !digitalRead( sensor[ which ] ) ) where = true;

  109.    }   

  110.    return( where );

  111. }
复制代码

5. 资料下载
资料内容:
①程序源代码
②样机3D文件
资料下载地址:
智能立体仓储系统模型 https://www.robotway.com/sys-nd/12.html

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 03:40 , Processed in 0.041821 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表