机器谱

【R235】智能立体仓储系统模型

概述

发表时间:2023-06-28 10:54作者:机器谱

R235】智能立体仓储系统模型

作者:机器谱






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),具体实验效果可参考演示视频。

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

   版权说明: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-15 https://www.robotway.com/

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

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

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

#define SERVO_OUT 70

#define SERVO_IN   120

#define Delay_right 7000

#define Delay_up 7000

#include <Servo.h>

Servo myservo;

void setup() {

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

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

    pinMode(sensor[i],INPUT_PULLUP);

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

   pinMode(9, OUTPUT);

   pinMode(10, OUTPUT);

   pinMode(11, OUTPUT);

   pinMode(12, OUTPUT);   

   pinMode(5, OUTPUT);

   pinMode(6, OUTPUT);   

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

   myservo.attach(4);   

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

   delay(300);

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

       

}

void loop()

{

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

   delay(300);

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

   delay(300);

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

   delay(Delay_right);

   X_Motor_stop();

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

   delay(Delay_up);

   Y_Motor_stop();

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

   delay(300);

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

   delay(300);

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

   

}

/***************************** MOTOR **************************************/

void X_Motor_left()

{

   digitalWrite(5,LOW);

   digitalWrite(6,HIGH);

}

void X_Motor_right()

{

   digitalWrite(5,HIGH);

   digitalWrite(6,LOW);

}

void X_Motor_stop()

{

   digitalWrite(5,LOW);

   digitalWrite(6,LOW);

}

void Y_Motor_up()

{

   digitalWrite(9,HIGH);

   digitalWrite(10,LOW);

}

void Y_Motor_down()

{

   digitalWrite(9,LOW);

   digitalWrite(10,HIGH);

}

void Y_Motor_stop()

{

   digitalWrite(9,LOW);

   digitalWrite(10,LOW);

}

void motorReset(){

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

   {

      X_Motor_left();

      Serial.print("A0:   ");

      Serial.println(digitalRead(A0));

   }

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

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

   {

      Y_Motor_down();

      Serial.print("A4:   ");

      Serial.println(digitalRead(A4));

   }

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

   delay(300);

   Y_Motor_stop();

}

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

boolean SensorTrigger( int which )

{

   boolean where = false;

   if( !digitalRead( sensor[ which ] ) )

   {

    delay( 100 );

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

   }   

   return( where );

}


5. 资料下载

资料清单

序号内容
1R235-程序源代码
2R235-样机3D文件
点击打包下载










© 2022 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用