本文示例將通過(guò)程序控制模擬立體倉(cāng)儲(chǔ)系統(tǒng)的運(yùn)動(dòng)效果--模擬立體倉(cāng)儲(chǔ)系統(tǒng)進(jìn)行運(yùn)輸貨物時(shí)各個(gè)結(jié)構(gòu)的運(yùn)動(dòng)方式。立體倉(cāng)儲(chǔ)系統(tǒng)的運(yùn)動(dòng)有整體系統(tǒng)的水平移動(dòng)、載貨臺(tái)的縱向移動(dòng)、貨叉的平動(dòng),所有的運(yùn)動(dòng)表現(xiàn)形式都是旋轉(zhuǎn)運(yùn)動(dòng)轉(zhuǎn)化為平動(dòng)。

該立體倉(cāng)儲(chǔ)系統(tǒng)的水平移動(dòng)使用絲杠平移,絲杠平移可以承載較重的物體;載貨臺(tái)的縱向移動(dòng)使用絲杠平移,其穩(wěn)定性較強(qiáng),位移距離長(zhǎng);貨叉的平動(dòng)使用滑塊平移機(jī)構(gòu),平移距離較短。

本實(shí)驗(yàn)中采用了以下硬件:
電路連接說(shuō)明:在下圖所示的2個(gè)位置分別安裝一個(gè)觸碰傳感器作為限位(限位:限定機(jī)械設(shè)備的運(yùn)動(dòng)極限位置)。

① 2個(gè)觸碰傳感器分別連接在Bigfish擴(kuò)展板的A0、A4端口;
② 舵機(jī)連接在Bigfish擴(kuò)展板的D4端口;
③ 2個(gè)電機(jī)分別連在Bigfish擴(kuò)展板的D5,D6接口和D9,D10接口。
????? 實(shí)現(xiàn)模擬立體倉(cāng)儲(chǔ)系統(tǒng)運(yùn)輸一個(gè)物體的功能。
初始位置:整體立體倉(cāng)庫(kù)的運(yùn)輸機(jī)構(gòu)沿-X向移動(dòng)到極限位置(2號(hào)電機(jī)控制,傳感器限位);載貨臺(tái)沿-Z向移動(dòng)到極限位置(1號(hào)電機(jī)控制,傳感器限位);貨叉收回(3號(hào)舵機(jī)角度控制);
裝貨:貨叉伸出去,停頓(3號(hào)舵機(jī)角度控制,大概延遲0.3s);貨叉收回,停頓(3號(hào)舵機(jī)角度控制,大概延遲0.3s);
運(yùn)輸:載貨臺(tái)沿+X向移動(dòng)到中間位置(2號(hào)電機(jī)控制,運(yùn)動(dòng)所需延遲時(shí)間大概7s);載物臺(tái)沿+Z向移動(dòng)到中間位置(1號(hào)電機(jī)控制,運(yùn)動(dòng)所需延遲時(shí)間大概7s);
卸貨:貨叉伸出去,停頓(3號(hào)舵機(jī)角度控制,大概延遲0.3s);貨叉收回,停頓(3號(hào)舵機(jī)角度控制,大概延遲0.3s);
復(fù)位:整體立體倉(cāng)庫(kù)的運(yùn)輸機(jī)構(gòu)沿-X向移動(dòng)到極限位置(2號(hào)電機(jī)控制,傳感器限位);載貨臺(tái)沿-Z向移動(dòng)到極限位置(1號(hào)電機(jī)控制,傳感器限位);貨叉收回(3號(hào)舵機(jī)角度控制)。
?????? 編程環(huán)境:Arduino 1.8.19
下面提供一個(gè)參考例程(smartStoreHouse.ino),具體實(shí)驗(yàn)效果可參考演示視頻。
/*------------------------------------------------------------------------------------
版權(quán)說(shuō)明: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 機(jī)器譜 2023-06-15 https://www.robotway.com/
------------------------------*/
int sensor[4]= {A0,A2,A4,A3}; //定義數(shù)組~傳感器接口
/* 宏定義舵機(jī)角度,以及延時(shí)時(shí)間 */
#define SERVO_OUT 70
#define SERVO_IN 120
#define Delay_right 7000
#define Delay_up 7000
#include
Servo myservo;
void setup() {
// put your setup code here, to run once:
for(int i=0;i<4;i++) //傳感器接口設(shè)置為輸入
pinMode(sensor[i],INPUT_PULLUP);
/* 電機(jī)接口設(shè)置為輸出*/
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號(hào)舵機(jī)收回來(lái)
delay(300);
motorReset(); // 電機(jī)初始化,回到復(fù)位位置
}
void loop()
{
myservo.write(SERVO_OUT); // 3號(hào)舵機(jī)伸出去
delay(300);
myservo.write(SERVO_IN); // 3號(hào)舵機(jī)收回來(lái)
delay(300);
X_Motor_right(); // 2 號(hào)電機(jī)右移 Delay_right時(shí)間,然后停止
delay(Delay_right);
X_Motor_stop();
Y_Motor_up(); // 1號(hào)電機(jī)上移 Delay_up時(shí)間,然后停止
delay(Delay_up);
Y_Motor_stop();
myservo.write(SERVO_OUT); // 3號(hào)舵機(jī)伸出去
delay(300);
myservo.write(SERVO_IN); // 3號(hào)舵機(jī)收回來(lái)
delay(300);
motorReset(); // 電機(jī)初始化,回到復(fù)位位置
}
/***************************** 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傳感器不觸發(fā),2號(hào)電機(jī)左移
{
X_Motor_left();
Serial.print("A0: ");
Serial.println(digitalRead(A0));
}
X_Motor_stop(); //A0傳感器觸發(fā),2號(hào)電機(jī)停止
while(!SensorTrigger(2))//A4傳感器不觸發(fā),1號(hào)電機(jī)向下移動(dòng)
{
Y_Motor_down();
Serial.print("A4: ");
Serial.println(digitalRead(A4));
}
Y_Motor_up();//A0傳感器觸發(fā),2號(hào)電機(jī)向上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 );
}
程序源代碼及樣機(jī)3D文件詳見 智能立體倉(cāng)儲(chǔ)系統(tǒng)模型