近日心血來(lái)潮用Makeblock的零件搭了個(gè)自動(dòng)爬樓梯的小車(chē)
下面給大家介紹一下如何搭建這個(gè)案例。由于是自動(dòng)爬行,那么自然有各種傳感器。什么巡線(當(dāng)接觸開(kāi)關(guān)用),超聲波,限位開(kāi)關(guān),陀螺儀~~
首先先簡(jiǎn)單介紹一下實(shí)現(xiàn)原理
額。。理想狀態(tài)下一共有8個(gè)階段,其中1號(hào)輪子和4號(hào)輪子都是帶電機(jī)的主動(dòng)輪,其他都是從動(dòng)輪,而且升降裝置裝在2號(hào)和4號(hào)輪子上
階段1
前進(jìn)
階段2
超聲波檢測(cè)到前方有障礙(這里指的是樓梯)
車(chē)體上升,1號(hào)和2號(hào)升降裝置把1號(hào)和3號(hào)輪子升起來(lái)直到超聲波傳感器檢測(cè)不到樓梯
階段3
1號(hào)和4號(hào)輪子推動(dòng)小車(chē)前進(jìn)
階段4
2號(hào)輪子的巡線傳感器檢測(cè)碰到樓梯了,1號(hào)升降裝置把2號(hào)輪子收回去
階段5
1號(hào)和4號(hào)輪子推動(dòng)小車(chē)前進(jìn)
階段6
4號(hào)輪子上的限位開(kāi)關(guān)檢測(cè)到4號(hào)輪子已經(jīng)碰到樓梯,主動(dòng)輪停止轉(zhuǎn)動(dòng),2號(hào)升降裝置把4號(hào)輪子收回去
階段7
1號(hào)輪子推動(dòng)小車(chē)前進(jìn) 也就是階段1
階段8
也就是階段2,小車(chē)?yán)^續(xù)前進(jìn)直到超聲波檢測(cè)到樓梯然后開(kāi)始循環(huán)
額。。攀爬原理差不多就是這樣了,接下來(lái)給大家介紹一下搭建方法以及調(diào)試過(guò)程中碰到的一些問(wèn)題
這個(gè)案例在機(jī)械結(jié)構(gòu)方面的一個(gè)特色就是這個(gè)升降的裝置,既要可靠,又要比較迅速地升降。所以我選擇了齒條齒輪的配合方式,并且使用單孔梁作為滑軌,用3*3的同步帶固定片配合雙孔梁做了個(gè)簡(jiǎn)易滑塊。
下面是搭建使用的材料和方法。
升降裝置1
雙孔梁032*4
雙孔梁160*2
M4*22螺絲*8
M4螺母*8
然后使用下面的材料把上面搭好的結(jié)構(gòu)連接起來(lái)
3*3同步帶固定片*4
M4*8螺絲*16
額。。這樣滑塊就搭好了
拿兩根0808*312的單孔梁剛好能穿過(guò)滑塊
接下來(lái)我們來(lái)搭齒條
由于我們這個(gè)自動(dòng)爬樓梯小車(chē)比較智能,能夠適應(yīng)不同高度的樓梯,所以我們的滑軌和齒條都要準(zhǔn)備的長(zhǎng)一點(diǎn),既然滑軌都有312mm那么長(zhǎng)了,齒條肯定不能短
所以我使用了4段齒條拼接起來(lái),至于為什么上面的材料圖片中有一根312的單孔梁呢,這是有原因的。光靠齒條拼接的話在升降過(guò)程中齒條與齒條之間的連接處會(huì)彎,這一彎齒輪和齒條的嚙合就出問(wèn)題了,噠噠噠滑齒了。至于為什么我會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題呢,這個(gè)就不解釋了,說(shuō)多了都是淚。所以我們要把齒條固定在這根單孔梁上。如下
接下來(lái)把導(dǎo)軌和齒條固定在一起
材料如下
144雙孔梁*1
M4*22螺絲*3
M4螺母*2
176雙孔梁*2
M4*22螺絲*6
M4螺母*6
裝上2號(hào)輪子(從動(dòng)輪)
使用以下材料
輪胎*2
90T同步帶輪*2
螺絲軸*2
法蘭軸承*4
M4螺母*2
M3*5無(wú)頭螺絲*2
4*2塑料墊片*4
把輪子固定在雙控梁的端面
2號(hào)輪子和1號(hào)升降裝置搭建完畢
接下來(lái)搭建4號(hào)輪子和2號(hào)升降裝置
2號(hào)升降裝置結(jié)構(gòu)和1號(hào)一樣
所需材料也一樣
只不過(guò)把032雙孔梁固定在下圖的位置
導(dǎo)軌和齒條的搭建與1號(hào)升降裝置一樣
上端的連接使用080雙孔梁替代144雙孔梁
128雙孔梁*1
M4*22螺絲*6
M4螺母*6
裝上L形支架,用
M4*14螺絲*2
M4螺母*2
固定在梁上
完成2號(hào)升降裝置的搭建后就可以開(kāi)始搭建4號(hào)輪子(主動(dòng)輪)
所需材料如下
25mm電機(jī)*1
90T同步帶輪
25mm電機(jī)支架
傳動(dòng)固定盤(pán)
M3*5螺絲
M4*14螺絲
套上輪胎,用
M4*14螺絲*2
螺母*2
固定在L形支架上
完成1、2號(hào)升降裝置和2、4號(hào)輪子搭建,整車(chē)結(jié)構(gòu)就完成一半了
接下來(lái)開(kāi)始搭建主車(chē)架、1號(hào)和3號(hào)輪子
首先,把1號(hào)輪子(主動(dòng)輪)搭建好
輪胎*2
90T同步帶輪*2
傳動(dòng)固定盤(pán)*2
M4*14螺絲*8
M4螺母*4
M3*5螺絲*4
M3*5無(wú)頭螺絲*2
25mm電機(jī)*2
25mm電機(jī)支架*2
064雙孔梁*2
搭建前防撞杠
160雙孔梁*1
L形支架*2
M4*14螺絲*4
M4螺母*4
搭建主車(chē)架
192雙孔梁*2
防撞杠*1
前輪*2
M4*30螺絲*6
M4螺母*6
搭建3號(hào)輪子(從動(dòng)輪)
輪胎*2
90T同步帶輪*2
088單孔梁*2
法蘭軸承*4
螺紋軸*2
4*2塑料墊片*4
螺母*2
M3*5無(wú)頭螺絲*2
使用
M4*22螺絲*4
M4螺母*4
把3號(hào)輪子固定在車(chē)架上
裝上2號(hào)升降裝置
使用M4*14螺絲*8
裝上1號(hào)升降裝置
使用M4*14螺絲*6
由于樓梯寬度有限,輪子又比較大所以只能把輪子錯(cuò)開(kāi)安裝,為了節(jié)約搭建時(shí)間和材料,4號(hào)輪組之用了一個(gè)電機(jī)和一個(gè)輪子
再安裝升級(jí)裝置的電機(jī)
37電機(jī)(裝好電機(jī)支架)*2
18T齒輪*2
M3*5無(wú)頭螺絲*2
M4*8螺絲*4
調(diào)整好齒輪和齒條的距離分別固定在1號(hào)、2號(hào)升降裝置雙孔梁的螺紋槽上
完成機(jī)械搭建
接下來(lái)開(kāi)始安裝傳感器
限位開(kāi)關(guān)*1
裝在2號(hào)升降裝置側(cè)面
限位開(kāi)關(guān)*2
分別裝在1號(hào)2號(hào)升降裝置的梁上。(作用:限制抬升高度)
安裝電機(jī)驅(qū)動(dòng)
安裝巡線傳感器
M4*22螺絲
4*10塑料圓柱
4*2塑料墊片*4
巡線傳感器*1
安裝陀螺儀
安裝超聲波傳感器
由于超聲波模塊沒(méi)辦法檢測(cè)0-30mm的距離,所以放里面去了 讓防撞桿去撞樓梯,小車(chē)撞上障礙后剛好是30mm多點(diǎn),順利檢測(cè)到(這都是調(diào)試后才發(fā)現(xiàn)的~_~!!)
安裝主控板
安裝適配器(限位開(kāi)關(guān)用)
額。。基本上傳感器安裝好了,現(xiàn)在介紹一下各個(gè)整車(chē)結(jié)構(gòu)和傳感器
整車(chē)從左到右可以按輪子分成4個(gè)部分,其中1號(hào)輪子和4號(hào)輪子是主動(dòng)輪(驅(qū)動(dòng)輪),2號(hào)和3號(hào)輪子是從動(dòng)輪
其中1號(hào)和2號(hào)升降裝置控制2號(hào)和4號(hào)輪子的位置
這里加裝陀螺儀是因?yàn)槲覀兩笛b置用的是直流電機(jī),沒(méi)辦法保證車(chē)體平衡,所以加入陀螺儀調(diào)整電機(jī)抬升速度
整車(chē)圖
接線圖
代碼如下:#include “MeOrion.h”
#include
MeGyro gyro;
MeDCMotor lifer1(PORT_1); //升降1
MeDCMotor lifer2(PORT_2); //升降2
MeDCMotor rw(M2); //1號(hào)驅(qū)動(dòng)輪
MeDCMotor fw(M1); //4號(hào)驅(qū)動(dòng)輪
MeLineFollower lineFinder1(PORT_7); // 巡線
MeLimitSwitch upWard1(PORT_3, SLOT2); // 1號(hào)升降限位開(kāi)關(guān)
MeLimitSwitch forWard2(PORT_4, SLOT1); // 4號(hào)輪子限位開(kāi)關(guān)
MeLimitSwitch upWard2(PORT_4, SLOT2); // 2號(hào)升降限位開(kāi)關(guān)
MeUltrasonicSensor ultraSensor(PORT_8); // 1號(hào)輪子超聲波
void setup() // 初始化,前后升降裝置回收
{
Serial.begin(9600);
gyro.begin();
lifer1.run(-250);
while (!upWard1.touched());
lifer1.stop();
lifer2.run(-250);
while (!upWard2.touched());
lifer2.stop();
}
void Step2()
{
float p = 15;
float i = 0.01;
float angle = 0;
float targetAngle = 0;
float integration = 0;
float err = 0;
while (NotStop())
{
gyro.update();
float angle = gyro.getAngleX();
err = angle - targetAngle;
integration += err;
int speed1 = 200;
int speed2 = 200;
speed2 = speed1 + err * p;// + integration * i;
lifer1.run(speed1);
lifer2.run(speed2);
//delay(10);
}
lifer1.stop();
lifer2.stop();
}
int startTiming = 0;
unsigned long startTime = 0;
int NotStop()
{
int16_t distance;
distance = ultraSensor.distanceCm();
delay(10);
if (0 == startTiming)
{
if ((distance 《 10) && (distance 》 1))
{
return 1;
}
else
{
startTiming = 1;
startTime = millis();
return 1;
}
}
else
{
unsigned long currentTime = millis();
if (currentTime - startTime 《 2500) //超聲波檢測(cè)不到樓梯后延時(shí)2.5秒
{
return 1;
}
else
{
return 0;
}
}
}
void loop()
{
startTiming = 0;
startTime = 0;
//階段1 小車(chē)前進(jìn)
fw.run(60);
rw.run(60); //1號(hào) 4號(hào)輪子推動(dòng)小車(chē)前進(jìn)
int16_t distance;
do
{
distance = ultraSensor.distanceCm();
delay(10);
}
//階段2 碰到樓梯 主動(dòng)輪停止 整體車(chē)架上升
while (!((distance 《 4) && (distance 》 1))); //如果碰到樓梯
fw.stop();
rw.stop();
Step2();
//階段3 1號(hào) 4號(hào)輪子推動(dòng)小車(chē)前進(jìn)
fw.run(60);
rw.run(60);
//階段4 2號(hào)輪子巡線傳感器檢測(cè)到樓梯 主動(dòng)輪停止 升降裝置1把2號(hào)輪子收回去
while (!(lineFinder1.readSensors() != S1_IN_S2_IN));
lifer1.run(-250);
fw.stop();
rw.stop();
while (!upWard1.touched()); //1號(hào)升降限位開(kāi)關(guān)檢測(cè)升降結(jié)束
lifer1.stop();
Adjust();
//階段5 1號(hào) 4號(hào)輪子推動(dòng)小車(chē)前進(jìn)
fw.run(60);
rw.run(60);
//階段6 4號(hào)輪子限位開(kāi)關(guān)檢測(cè)到4號(hào)輪子碰到樓梯 主動(dòng)輪停止 2號(hào)升降裝置回收4號(hào)輪子
while (!forWard2.touched());
lifer2.run(-250);
fw.stop();
rw.stop();
while (!upWard2.touched()); //1號(hào)升降限位開(kāi)關(guān)檢測(cè)升降結(jié)束
lifer2.stop();
//階段7 循環(huán)階段1
//階段8 循環(huán)階段2
}
void Adjust() //陀螺儀控制1、2號(hào)升降電機(jī)控制平衡
{
int p = 40;
//float i = 0.05;
float angle = 0;
float targetAngle = 4;
//float integration = 0;
//float err = 0;
do
{
gyro.update();
angle = gyro.getAngleX();
//err = (angle - targetAngle);
//integration += err;
lifer2.run((angle - targetAngle) * p);// + i * integration);
//delay(10);
}
while(fabs(angle - targetAngle) 》 1);
lifer2.stop();
}
-
傳感器
+關(guān)注
關(guān)注
2565文章
52930瀏覽量
766778 -
Makeblock
+關(guān)注
關(guān)注
1文章
4瀏覽量
3960
發(fā)布評(píng)論請(qǐng)先 登錄
工程師制作故事: 牛人自制WIFI雙菱天線全過(guò)程

菜鳥(niǎo)制作51避障小車(chē)全過(guò)程記錄
自制單片機(jī)開(kāi)發(fā)板全過(guò)程pdf文件下載
CPU制造全過(guò)程
圖解組裝筆記本全過(guò)程(DIY很簡(jiǎn)單)
自制單片機(jī)開(kāi)發(fā)板全過(guò)程(傻瓜式教程)
DIY安裝導(dǎo)航+可視倒車(chē)+行車(chē)記錄+GPS跟蹤全過(guò)程
【小知識(shí)】自制AT89S51單片機(jī)開(kāi)發(fā)板全過(guò)程(傻瓜式教程)

評(píng)論