智慧小車實踐(持續更新)
前言
先前做了一個外包app關於google的blockly二次開發,文見ofollow,noindex">Android 基於Android blockly和藍芽通訊的機器人程式設計APP ,於是乎對於硬體方面也產生了一些興趣,自己實現了軟體,但是硬體還不太懂,於是乎開始學習研究一下硬體方面的知識,也打算自己做一個智慧小車。
如果你也是個軟體開發者,也希望自己多少能懂一點硬體知識,軟硬兼修的話,可以跟著我一起也來製作一個智慧小車。期間會遇到很多硬體相關的術語或者專有名詞,優秀的你,肯定會不懂就查不懂就學的,這是最重要的過程。
先上圖

有點醜 線太多了 有條件的可以綁起來

底面

斜面

側面
需要實現的功能
1、藍芽控制小車的行進
2、小車的速度可調
3、超聲波避障
4、循跡
準備硬體材料
我這裡花了點時間把之前的採購清單整理了一下,我當時找了很多家店,那家的比較便宜,分享給大家,不是打廣告,只是為了讓大家省點錢。(當時前後購買了好幾次,運費給了不少,這裡大家可以一次性買清)
1、紅外循跡感測器 4個 [https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=43751274135&_u=aldqfnla542 ]
2、BLE藍芽hc-08(帶引腳)[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=36426439097&_u=aldqfnl3d00 ]
3、arduino uno [https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=525462013769&_u=aldqfnl5f3a ]
4、智慧小車底盤及其輪子 [https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=43735291557&_u=aldqfnl41dc ]
5、L298n電機驅動模組[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521709080904&_u=aldqfnl6aaa ]
6、超聲波測距模組[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=555002408091&_u=aldqfnlb0d6 ]
7、杜邦線 10cm 20cm 30cm 和 母對母 母對公 公對公 每樣一排40根 [https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=546979596255&_u=aldqfnla016 ]
8、18950電池盒[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521746780501&_u=aldqfnl8b94 ]
9、銅柱 各類長短 帶頭的 不帶頭的 都來個10根吧[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=558741728111&_u=aldqfnl0dc7 ]
10、螺絲 螺帽 若干 多數是3mm的 其他的也可以買點 15根+吧[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521771839187&_u=aldqfnl2beb ]
11、螺絲刀[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521703689593&_u=aldqfnlead1 ]
12、mini麵包板[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521761502825&_u=aldqfnl6f02 ]
13、黑色電工膠帶[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521702965521&_u=aldqfnle13c ]
14、sg90舵機[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=43792233123&_u=aldqfnl3bf5 ]
15、hr-sr04超聲波模組支架[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521750109177&_u=aldqfnlf46b ]
16、小電鑽(可選)[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5b4e2e8dE025fh&id=521708346105&_u=aldqfnlac59 ]
17、充電電池18650 3.7v 2只(我這裡是神火,較貴,可買其他的 注意:3.7v的 普通超市是沒有的,不是一般的7號或者5號電池 )[https://item.jd.com/5171888.html ]
18、充電器[https://item.jd.com/4284307.html ]
組裝小車
成型圖:(多圖預警!!!)


介紹圖
1、首先按照小車的說明書把小車的馬達和輪子都依次裝上去,如圖

2、然後把買來的杜邦線,可以直接拔掉接頭,露出線

使用杜邦線 如圖和馬達連線
3、然後接線,左邊兩排的馬達會有連線,右邊兩排的馬達會有連線。注意,這裡我們先按照如圖所示的方法接線。

馬達上面的介面線和另一個馬達下面的介面線 接在一起

如圖
4、第一層底盤底部裝上3個循跡用的紅外感測器,依次排列,9根線

現在裝,是因為,如果後面蓋上了上層底盤,就不太好裝了
裝上之後,第一層底盤的東西就裝的差不多了
如圖

5、第二層底盤上部,裝上電池盒

現在裝,是因為,如果後面蓋上了上層底盤,就不太好裝了
6、第二層底盤上部,裝上舵機。這裡使用到了,舵機支架和舵機,有點不太好裝,耐心一點

現在裝,是因為,如果後面蓋上了上層底盤,就不太好裝了
7、把兩層底盤合併起來,OK,大功告成!!!!鼓掌:clap:
最終如圖

這下小車就算拼裝好了
ps: 這樣一次性裝好,可以避免多次的拆裝底盤(我就是拆了好多次,好費神)
小車啟動
小車裝好了,激動了一會兒,但是還不能動,現在就要讓它能跑起來
跑起來的話,我們需要使用:電機驅動、電池、arduino的板子
先簡單介紹一下電機驅動:

電機驅動
- 電機1介面 out1 out2 和 電機2介面out3 out4用於和馬達的互動,原理就是,給馬達的高低電平的不同,使得馬達往前轉動還是往後轉動
- 供電正極:可接受5-12v的電壓,和電池盒接在一起,兩個3.7v的電池7.4伏,夠用
- 地線:和電池盒的地線、arduino的地線連在一起
- 5v:連線arduino的電源線
-
ENA、ENB:調速用的,預設情況下,有個蓋子,蓋起來的,相當於直接連線,滿壓5v就代表全速。後面會接arduino的pwm介面,來調速
-In1~4: 接在arduino上
接入如圖:

1、把馬達對應的 4個線接入到電機的out1 out2 out3 out4口,
注意對照一下前面接線的顏色,順序暫時可是弄成跟我的一樣(因為後面arduino的程式碼裡面要一致)
2、連線電池盒與電機(一般我們認為 紅色是電源、黑色為地線),連線arduino與電機
3、連線電機的in1-4口和arduino的19、18、17、16(有人問是哪裡,A0~A5其實分別對應的是14-19)

示意圖:
連線好,裝上電池,接下來解釋,寫arduino的程式了
1、去官網下載編譯器

長這樣,我是mac的,不過操作方法都差不多
2、通過電源介面連線到電腦

選擇這個uno
連線成功之後就有自己板子的資訊了,如果沒有的話,去網上查一下,下載對應作業系統的arduino的驅動就好

3、程式碼
這裡我們就簡單的讓小車 迴圈前後左右動。
#include <Servo.h> //定義五中運動狀態 #define STOP0 #define FORWARD1 #define BACKWARD2 #define TURNLEFT3 #define TURNRIGHT 4 //定義需要用到的引腳 int leftMotor1 = 16; int leftMotor2 = 17; int rightMotor1 = 18; int rightMotor2 = 19; void setup() { // put your setup code here, to run once: //設定控制電機的引腳為輸出狀態 pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); } void loop() { // put your main code here, to run repeatedly: int cmd; for(cmd=0;cmd<5;cmd++)//依次執行向前、向後、向左、想有、停止四個運動狀態 { motorRun(cmd); delay(2000);//每個命令執行2s } } //運動控制函式 void motorRun(int cmd) { switch(cmd){ case FORWARD: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); break; case BACKWARD: digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); break; case TURNLEFT: digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); break; case TURNRIGHT: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); break; default: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); } }
OK,不出意外的話,你的小車也可以動起來啦!!!!鼓掌:clap:
程式碼解析:
case FORWARD: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); break;
可以看到 前進的時候,我們把引腳leftMotor1設定為了低電壓,leftMotor2設定為了高電壓

有人會問為啥 從圖上看,為啥兩個馬達的 高低電壓 不同,卻是相同的方向。那是因為,這兩個馬達是這樣放的。

如果是你把後面那個擺成跟前面那個一樣,後面的下上就變成了上下,其實上下的高低電壓就一致了。所以,前後輪的轉動方向就一致了(這裡根據我們的接線方法 我們是前進,如果說接線方法不同或者接反了,可以把程式碼裡面的LOW和HIGH進行互換)
轉彎:
我們這裡的行為方式是跟坦克類似的,因為我們沒有轉向輪。
如果想要左轉,就是左邊輪子向後,右邊輪子向前。這樣的話會是,原地的左轉;如果想要,向左轉彎,保持前進的話,就應該是,左邊保持低速前進,右邊保持高速前進;如果想要調整原地轉動的速率和轉幅,可以調整左輪的速度和右輪的速度差值來實現。後面的藍芽小車調速會講到。
右轉也是同理。