摘要:本文介紹用ESP32的GPIO控制智能小車朝各個(gè)方向運(yùn)動(dòng)
在前面已經(jīng)實(shí)現(xiàn)了用ESP32開發(fā)板控制單個(gè)車輪正反向旋轉(zhuǎn)。接下來就是同時(shí)控制4個(gè)輪子轉(zhuǎn)動(dòng),讓整個(gè)智能小車動(dòng)起來了。
說干就干,第一步還是初始化8個(gè)GPIO引腳,將這8個(gè)引腳的初始狀態(tài)都設(shè)置為低電平。配置好了以后,如下圖所示:
在實(shí)現(xiàn)4輪同時(shí)運(yùn)動(dòng)之前,現(xiàn)根據(jù)我前面的接線表格,看一下各個(gè)引腳的狀態(tài)與車輪轉(zhuǎn)動(dòng)方向的關(guān)系,然后根據(jù)這個(gè)關(guān)系,就可以輕松的控制車輪的轉(zhuǎn)動(dòng)方向了。
車輪 |
GPIO狀態(tài)組合 |
車輪轉(zhuǎn)動(dòng)方向 |
|
左前輪 |
P26 |
P27 |
|
高 |
低 |
向前 |
|
低 |
高 |
向后 |
|
左后輪 |
P32 |
P33 |
|
高 |
低 |
向前 |
|
低 |
高 |
向后 |
|
右前輪 |
P25 |
P23 |
|
高 |
低 |
向后 |
|
低 |
高 |
向前 |
|
右后輪 |
P22 |
P21 |
|
高 |
低 |
向后 |
|
低 |
高 |
向前 |
如果你使用的GPIO引腳與我的不一致,或者接線方法不同,那么最好也按照我這個(gè)表格列一下你的各個(gè)輪子前后運(yùn)動(dòng)的控制狀態(tài)是怎樣的。有了這張表,將為你后邊的開發(fā)帶來極大的方便。
接下來是實(shí)現(xiàn)小車向前走3秒,然后再停下來的動(dòng)作。之前一個(gè)輪子轉(zhuǎn)動(dòng)的控制我們已經(jīng)學(xué)會(huì)了,控制4個(gè)輪子向前走,就是將這四個(gè)輪子向前走的GPIO引腳都設(shè)置成高電平,讓四個(gè)輪子同時(shí)轉(zhuǎn)起來就可以了。3秒之后,再將這幾個(gè)引腳恢復(fù)到低電平,小車就停下來了。通過上面的表格可以查詢出來,如果需要4個(gè)輪子向前運(yùn)動(dòng),那么需要將P26、P32、P23和P21這幾個(gè)GPIO設(shè)置為高電平,設(shè)置好后如下圖所示。
設(shè)置好之后,就可以編譯、上傳了,看看你的小車是不是可以向前走3秒、停3秒,再向前走3秒、停3秒……了吧。這一系列動(dòng)作所對(duì)應(yīng)的源代碼如下,相信不需要我的解釋,你也能看懂了。
void setup(){ ??pinMode(26, OUTPUT); ??pinMode(27, OUTPUT); ??pinMode(32, OUTPUT); ??pinMode(33, OUTPUT); ??pinMode(25, OUTPUT); ??pinMode(23, OUTPUT); ??pinMode(22, OUTPUT); ??pinMode(21, OUTPUT); ??digitalWrite(26,LOW); ??digitalWrite(27,LOW); ??digitalWrite(32,LOW); ??digitalWrite(33,LOW); ??digitalWrite(25,LOW); ??digitalWrite(23,LOW); ??digitalWrite(22,LOW); ??digitalWrite(21,LOW); } void loop(){ ??digitalWrite(26,HIGH); ??digitalWrite(32,HIGH); ??digitalWrite(23,HIGH); ??digitalWrite(21,HIGH); ??delay(3000); ??digitalWrite(26,LOW); ??digitalWrite(32,LOW); ??digitalWrite(23,LOW); ??digitalWrite(21,LOW); ??delay(3000); } |
在前面講解麥克納姆論的時(shí)候,已經(jīng)列舉了一些麥克納姆輪實(shí)現(xiàn)小車不同運(yùn)動(dòng)的方式。接下來我再給大家詳細(xì)的總結(jié)一下車輪轉(zhuǎn)動(dòng)方向與小車運(yùn)動(dòng)方向的關(guān)系,需要說明的是,要確保運(yùn)動(dòng)的車輪是等速的,才可能實(shí)現(xiàn)表中的運(yùn)動(dòng)模式。
左前輪 |
右前輪 |
左后輪 |
右后輪 |
小車運(yùn)動(dòng)方向 |
向前 |
向前 |
向前 |
向前 |
正前方 |
向后 |
向后 |
向后 |
向后 |
正后方 |
向后 |
向前 |
向前 |
向后 |
正左方 |
向前 |
向后 |
向后 |
向前 |
正右方 |
向前 |
向后 |
向前 |
向后 |
原地掉頭(右) |
向后 |
向前 |
向后 |
向前 |
原地掉頭(左) |
向前 |
停止 |
停止 |
向前 |
右前方 |
向后 |
停止 |
停止 |
向后 |
左后方 |
停止 |
向前 |
向前 |
停止 |
左前方 |
停止 |
向后 |
向后 |
停止 |
右后方 |
向前 |
停止 |
向前 |
停止 |
向前右轉(zhuǎn)1 |
停止 |
向前 |
停止 |
向前 |
向前左轉(zhuǎn)1 |
向后 |
停止 |
向后 |
停止 |
向右后轉(zhuǎn)1 |
停止 |
向后 |
停止 |
向后 |
向左后轉(zhuǎn)1 |
向前 |
向后 |
停止 |
停止 |
向前右轉(zhuǎn)2 |
向后 |
向前 |
停止 |
停止 |
向前左轉(zhuǎn)2 |
停止 |
停止 |
向后 |
向前 |
向右后轉(zhuǎn)2 |
停止 |
停止 |
向前 |
向后 |
向左后轉(zhuǎn)2 |
大家可以看到表中有兩個(gè)向前右轉(zhuǎn),這兩個(gè)的區(qū)別就是轉(zhuǎn)動(dòng)的圓心不同,一個(gè)圓心在右后車輪,一個(gè)圓心在后軸的中心位置。大家可以嘗試一些,看看能不能感受到這細(xì)微的差別。
好了,有了這張表,相信大家可以很快的實(shí)現(xiàn)麥克納姆輪小車的各種運(yùn)動(dòng)了。文章來源:http://www.zghlxwxcb.cn/news/detail-818016.html
估計(jì)大家在實(shí)驗(yàn)的過程中,已經(jīng)發(fā)現(xiàn),使用Mixly的圖形拖拽的模式進(jìn)行開發(fā)確實(shí)很簡單,很容易上手掌握。但在開發(fā)的時(shí)候,卻又是非常復(fù)雜的,一個(gè)簡單的動(dòng)作就需要拖拽好多次的控件來實(shí)現(xiàn),而且有很多類似的功能要設(shè)置很多次。這是有Mixly的開發(fā)方式?jīng)Q定的,這種圖形化的開發(fā)方式,就決定了,它不能實(shí)現(xiàn)特別復(fù)雜的業(yè)務(wù)邏輯,對(duì)函數(shù)、循環(huán)等基本功能的支持也非常的有限。因此,下一步我們會(huì)逐漸的轉(zhuǎn)向使用代碼進(jìn)行復(fù)雜功能的開發(fā),而Mixly可以用于實(shí)現(xiàn)簡單功能的驗(yàn)證,Mixly對(duì)單一簡單功能的使用,還是很方便的。所以,我們會(huì)穿插使用2種開發(fā)方法,逐步引導(dǎo)大家轉(zhuǎn)向面向代碼的開發(fā)。文章來源地址http://www.zghlxwxcb.cn/news/detail-818016.html
到了這里,關(guān)于一起玩兒物聯(lián)網(wǎng)人工智能小車(ESP32)——15. 用ESP32的GPIO控制智能小車運(yùn)動(dòng)起來(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!