|
很高興有這么個機會可以發帖子,這是我第一次在網絡上發帖子
這次的diy項目,是避障循跡小車。本人純屬個人愛好,沒有這方面的經驗。唯一占點優勢的是,我是從事軟件開發的。雖然沒接觸過c語言,但基本都懂。
前年做過一個8*8*8的光立方,雖然也能點亮燈。但是整體過程都是參考網上,就是照葫蘆畫瓢,最后的效果也是非常不理想。感覺沒什么意思。
做這個小車,也是蓄謀已久,終于狠下心開始弄。因為對這方面的不了解,包括買元件,買錯好幾次,所以此次成本控制的非常不理想。希望我這個帖子可以幫助到一些想做的朋友。
P71109-174347.jpg (3.98 MB, 下載次數: 147)
下載附件
2017-12-14 15:40 上傳
P71109-174345.jpg (3.92 MB, 下載次數: 122)
下載附件
2017-12-14 15:39 上傳
進入正題
此小車為四驅驅動 車底盤網上買的現成的
使用stc89c52rc芯片
l298n電機驅動模塊(網上買的現成的 當時想自己做 但是看說是有很多互相干擾的因素 沒敢嘗試)
四路紅外尋跡
超聲波避障
小車主要邏輯是檢測到黑線 按黑線行走 沒有黑線 轉到避障模式。
一、底盤
小車的底盤,我是在網上買的現成的。 比較坑爹的是,因為我的最小系統是自己焊接的。而且其他模塊也都是單獨購買,因為不是和底盤是一套的東西。所以看著底盤上的開孔什么的非常多。
但是都和我設計的不一樣 所以我自己又借的電轉自己轉的眼。建議想做的朋友,如果動手能力強就自己做個底盤,然后買幾個電機和輪子。
1.jpg (3.56 MB, 下載次數: 129)
下載附件
2017-12-14 15:35 上傳
二、焊接最小系統
這一塊基本了解一些,所以基本還可以。比較順利。我的焊接水平有限,大家勿噴
P71122-221510.jpg (4.38 MB, 下載次數: 139)
下載附件
2017-12-14 15:49 上傳
P71122-221502.jpg (4.57 MB, 下載次數: 116)
下載附件
2017-12-14 15:48 上傳
P71122-221459.jpg (4.53 MB, 下載次數: 133)
下載附件
2017-12-14 15:48 上傳
三、測試電機驅動模塊
因為我都不是很懂 所以每個階段都需要反復測試
電機驅動,我使用的網上現成的L298n模塊。使用了兩個,一個模塊驅動兩個電機。控制方式是一個模塊控制前兩個輪子,另外一個控制后兩個輪子。這塊的連線應該還是比較容易的
網上搜索有一堆資料。這塊還是強調一下,要和單片機共地。 另外說一嘴,電機的導線接的長一點。我的驅動因為放在底層的底盤,所以弄的短了些。當時我手頭沒有104電容,所以電機也沒焊接
電容。但是還好,我沒遇到干擾的問題。建議焊接上,具體什么作用,我就不大了解了,說是濾波。
P71111-190510.jpg (3.78 MB, 下載次數: 148)
下載附件
2017-12-14 15:47 上傳
P71111-190513.jpg (4.07 MB, 下載次數: 152)
下載附件
2017-12-14 15:48 上傳
P71111-190507.jpg (3.78 MB, 下載次數: 128)
下載附件
2017-12-14 15:47 上傳
四、測試舵機
舵機這塊是我最撓頭的,調試時間最長。程序調了好久,電路也調整好幾次。我一開始連接到p0上了,怎么弄都不好用。后來查了一下,p0端口需要焊接上拉電阻(應該沒叫錯吧)。但是舵機各種神奇
的現象。要么一圈一圈的轉(正常180度),要么不動。最后懷疑是不是舵機壞掉了。一狠心在網上又買了兩個。回來測試還是這樣。 然后又拿出一開始的那個,還是原來的電路,還是原來的程序,居然可以了。
應該是我程序上控制了轉動時候 不是完全的90度 不到90度就停下來(控制方波長度)。正好在單位撿了一塊抽屜底下的小木板,就自己用壁紙刀切了一個舵機云臺。感覺還不錯。哈哈
P71125-104100.jpg (3.53 MB, 下載次數: 121)
下載附件
2017-12-14 15:51 上傳
五、避障模式
電機驅動、電機、舵機都拼到一塊。發現的電源根本帶不動,后來查了一下需要18650電池。原來查資料以為就是普通的五號電池。我這也不知道還有這種電池啊。就買了兩節。回來發現電機就是不動。然后用12v的變壓器
測試都是正常的。測試兩節電池串聯電壓大約在7.4v,感覺應該夠了。反正就還是不行。然后我就又買了兩節。用了三節電池都還是不行。然后就是拆開整個小車,分析各個電路,就都是發現不了問題。只要單片機供上電
電機就停止。當時晚上鼓搗的,不知怎么鬼使神差的居然把芯片燒掉了。然后換個芯片,又燒掉了。后來發現應該是有一個驅動模塊穩壓模塊壞了,輸出的電壓不是5v。直接變成高電壓了。最后的最后才發現,最終的
損失不止兩個芯片一個驅動模塊,居然連超聲波也燒壞了一個。沒辦法沒芯片了,又得等好幾天了。 然后后來發現 我電池還是得充電,未充滿。我tm也是醉了。 沒文化這可怕啊。最后的最后 實在是各種神經問題。
就采用單片機和驅動單獨供電。兩節電池供電機,一節電池供單片機。基本穩定下來了。程序就比較容易了。我懂了機制,程序問題不大。
六、循跡模式
我一開始沒控制電機驅動的通道使能。小車都是全速前進的。在循跡這塊發現不行了,跑的太快了。小車都沖出跑道。唉 真心覺得不能偷懶 又都都拆開,重新接上杜邦線。這塊也發現,因為我個人不算有潔癖,但還是希望
小車整體看起來利索點。所以驅動和紅外模塊都放在底層底盤了。這個其實不是特別方便。因為在調試的時候 看不到紅外模塊的指示燈。大家可以注意點。
調整程序 通過占空比 控制輪子轉速。這塊程序也比較順利 程序基本是一次性通過。
最終效果:
P71125-102753.jpg (3.61 MB, 下載次數: 132)
下載附件
2017-12-14 15:51 上傳
P71124-234309.jpg (3.87 MB, 下載次數: 120)
下載附件
2017-12-14 15:51 上傳
P71124-234319.jpg (3.06 MB, 下載次數: 124)
下載附件
2017-12-14 15:51 上傳
P71125-102757.jpg (3.63 MB, 下載次數: 121)
下載附件
2017-12-14 15:51 上傳
電路圖我沒有了 就是參考網上焊接的。程序放上來 可能不符合行業標準 大家別笑話。
這次瞎胡鬧,感覺結果還不錯,實現自己想要的功能了。滿滿的成就感。這里特別感謝一下網友,有個網友特別熱心,請教的問題都是知無不言。
帖子就到這里 大家有什么問題可以提出來 反正我也不一定會……哈哈
部分單片機源程序:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- /********常量聲明********/
- #define uint unsigned int
- /********方法聲明********/
- void Init();
- void Delay10us(); //@12.000MHz
- void Run();
- void ToLeft();
- void ToRight();
- void ToForward();
- void ToBack();
- void KeyScan();
- /********針腳聲明********/
- sbit Left_Lamp = P1^0; //左轉向燈
- sbit Right_Lamp = P1^1; //右轉向燈
- sbit Forward_Lamp = P1^2; //前進 大燈
- sbit Back_Lamp = P1^3; //后退 大燈
- sbit Left_Switch = P1^4; //左轉向 按鍵 主要用于測試 控制左轉 左轉向燈變亮
- sbit Right_Switch = P1^5; //右轉向 按鍵 主要用于測試 控制右轉 右轉向燈變亮
- sbit Forward_Switch = P1^6; //前進 按鍵 主要用于測試 控制前進 前進燈變亮
- sbit Back_Switch = P1^7; //后退 按鍵 主要用于測試 控制后退 后退燈變亮
- /********電機驅動針腳********/
- sbit P2_0 = P2^0;
- sbit P2_1 = P2^1;
- sbit P2_2 = P2^2;
- sbit P2_3 = P2^3;
- sbit P2_4 = P2^4;
- sbit P2_5 = P2^5;
- sbit P2_6 = P2^6;
- sbit P2_7 = P2^7;
- /********電機動作定義********/
- #define Left_Moto_Go {P2_0=1, P2_1=0, P2_2=1, P2_3=0;} //左邊兩個電機向前走
- #define Left_Moto_Back {P2_0=0, P2_1=1, P2_2=0, P2_3=1;} //左邊兩個電機向后轉
- #define Left_Moto_Stop {P2_0=0, P2_1=0, P2_2=0, P2_3=0;} //左邊兩個電機停轉
- #define Right_Moto_Go {P2_4=1, P2_5=0, P2_6=1, P2_7=0;} //右邊兩個電機向前走
- #define Right_Moto_Back {P2_4=0, P2_5=1, P2_6=0, P2_7=1;} //右邊兩個電機向前走
- #define Right_Moto_Stop {P2_4=0, P2_5=0, P2_6=0, P2_7=0;} //右邊兩個電機停轉
- uint Left_Switch_Flag = 0; //左轉向按下標志
- uint Right_Switch_Flag = 0; //右轉向按下標志
- uint Forward_Switch_Flag = 0; //前進按下標志
- uint Back_Switch_Flag = 0; //后退按下標志
- /********主函數********/
- void main()
- {
- Init();
- while(1)
- {
- Run();
- }
- }
- /********系統初始化********/
- void Init()
- {
-
- }
- /********開始運行********/
- void Run()
- {
- KeyScan();
- if (Left_Switch_Flag)
- {
- ToLeft();
- }else
- {
- Left_Lamp = 1;
- }
- if (Right_Switch_Flag)
- {
- ToRight();
- }else
- {
- Right_Lamp = 1;
- }
- if (Forward_Switch_Flag)
- {
- ToForward();
- }else
- {
- Forward_Lamp = 1;
- }
- if (Back_Switch_Flag)
- {
- ToBack();
- }else
- {
- Back_Lamp = 1;
- }
- }
- /********按鍵判斷函數********/
- void KeyScan()
- {
- if (Left_Switch == 0) //左轉向按下
- {
- Delay10us();
- if (Left_Switch == 0)
- {
- while(Left_Switch==0); //等待按鍵抬起
- Left_Switch_Flag = !Left_Switch_Flag;
- Right_Switch_Flag = 0;
- Forward_Switch_Flag = 0;
- Back_Switch_Flag = 0;
- }
- }
-
- if (Right_Switch == 0) //右轉向按下
- {
- Delay10us();
- if (Right_Switch == 0)
- {
- while(Right_Switch==0); //等待按鍵抬起
- Left_Switch_Flag = 0;
- Right_Switch_Flag = !Right_Switch_Flag;
- Forward_Switch_Flag = 0;
- Back_Switch_Flag = 0;
- }
- }
-
- if (Forward_Switch == 0) //前進按下
- {
- Delay10us();
- if (Forward_Switch == 0)
- {
- while(Forward_Switch==0); //等待按鍵抬起
- Forward_Switch_Flag = !Forward_Switch_Flag;
- Left_Switch_Flag = 0;
- Right_Switch_Flag = 0;
- Back_Switch_Flag = 0;
- }
- }
-
- if (Back_Switch == 0) //后退向按下
- {
- Delay10us();
- if (Back_Switch == 0)
- {
- while(Back_Switch==0); //等待按鍵抬起
- Back_Switch_Flag = !Back_Switch_Flag;
- Forward_Switch_Flag = 0;
- Left_Switch_Flag = 0;
- Right_Switch_Flag = 0;
- }
- }
- }
- /********小車向左 左轉向燈閃爍 右側電機正轉運行 左側電機停止 ********/
- void ToLeft()
- {
- Right_Lamp = 1; //右轉向燈
- Forward_Lamp = 1; //前進 大燈
- Back_Lamp = 1; //后退 大燈
-
- Left_Moto_Stop; //左側電機停止
- Right_Moto_Go; //右側電機前行
- Delay10us();
-
- Left_Lamp = ~Left_Lamp; //左轉向燈
- }
- /********小車向右 右轉向燈亮起 右側電機停止 左側電機正轉運行********/
- void ToRight()
- {
- Left_Lamp = 1; //左轉向燈
- Forward_Lamp = 1; //前進 大燈
- Back_Lamp = 1; //后退 大燈
- Left_Moto_Go; //左側電機前行
- Right_Moto_Stop; //右側電機停止
- Delay10us();
- Right_Lamp = ~Right_Lamp; //右轉向燈
- }
- /********小車前行 前行燈亮起 右側電機正轉運行 左側電機正轉運行********/
- void ToForward()
- {
- Left_Lamp = 1; //左轉向燈
- Right_Lamp = 1; //右轉向燈
- Forward_Lamp = 0; //前進 大燈
- Back_Lamp = 1; //后退 大燈
-
- Left_Moto_Go; //左側電機前行
- Right_Moto_Go; //右側電機前行
- }
- /********小車后退 后退燈亮起 右側電機反轉運行 左側電機反轉運行********/
- void ToBack()
- {
- Left_Lamp = 1; //左轉向燈
- Right_Lamp = 1; //右轉向燈
- Forward_Lamp = 1; //前進 大燈
- Back_Lamp = 0; //后退 大燈
- Left_Moto_Back; //左側電機后退
- Right_Moto_Back; //右側電機后退
- }
- /********小車停止 燈全滅掉 右側電機停止 左側電機停止********/
- void Stop()
- {
- Left_Lamp = 1; //左轉向燈
- Right_Lamp = 1; //右轉向燈
- Forward_Lamp = 1; //前進 大燈
- Back_Lamp = 0; //后退 大燈
- Left_Moto_Stop; //左側電機停止
- Right_Moto_Stop; //右側電機停止
- }
- /********延時函數********/
- void Delay10us() //@12.000MHz
- …………
- …………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
|
-
P71111-001550.jpg
(3.87 MB, 下載次數: 220)
下載附件
2017-12-14 15:47 上傳
-
P71111-151713.jpg
(3.62 MB, 下載次數: 220)
下載附件
2017-12-14 15:47 上傳
-
P71111-001553.jpg
(3.89 MB, 下載次數: 203)
下載附件
2017-12-14 15:47 上傳
-
P71111-151715.jpg
(3.95 MB, 下載次數: 216)
下載附件
2017-12-14 15:47 上傳
-
P71111-190518.jpg
(3.15 MB, 下載次數: 214)
下載附件
2017-12-14 15:48 上傳
-
P71111-190520.jpg
(3.22 MB, 下載次數: 229)
下載附件
2017-12-14 15:48 上傳
-
P71121-065727.jpg
(3.64 MB, 下載次數: 203)
下載附件
2017-12-14 15:48 上傳
-
P71121-065734.jpg
(3.77 MB, 下載次數: 211)
下載附件
2017-12-14 15:48 上傳
-
P71122-221509.jpg
(4.23 MB, 下載次數: 184)
下載附件
2017-12-14 15:49 上傳
-
P71123-210628.jpg
(3.85 MB, 下載次數: 208)
下載附件
2017-12-14 15:49 上傳
-
P71123-210630.jpg
(3.9 MB, 下載次數: 206)
下載附件
2017-12-14 15:49 上傳
-
P71123-210639.jpg
(4.3 MB, 下載次數: 196)
下載附件
2017-12-14 15:49 上傳
-
P71123-221451.jpg
(3.92 MB, 下載次數: 215)
下載附件
2017-12-14 15:49 上傳
-
P71123-221454.jpg
(3.25 MB, 下載次數: 226)
下載附件
2017-12-14 15:49 上傳
-
P71124-211824.jpg
(4.06 MB, 下載次數: 199)
下載附件
2017-12-14 15:50 上傳
-
P71124-221123.jpg
(3.91 MB, 下載次數: 229)
下載附件
2017-12-14 15:50 上傳
-
P71124-233811.jpg
(3.01 MB, 下載次數: 213)
下載附件
2017-12-14 15:50 上傳
-
P71124-233814.jpg
(3.68 MB, 下載次數: 211)
下載附件
2017-12-14 15:50 上傳
-
P71124-233827.jpg
(4.39 MB, 下載次數: 188)
下載附件
2017-12-14 15:50 上傳
-
P71124-233832.jpg
(4.05 MB, 下載次數: 216)
下載附件
2017-12-14 15:50 上傳
-
P71125-104107.jpg
(3.41 MB, 下載次數: 217)
下載附件
2017-12-14 15:51 上傳
-
P71128-190643.jpg
(3.87 MB, 下載次數: 189)
下載附件
2017-12-14 15:51 上傳
-
P71202-112731.jpg
(4.31 MB, 下載次數: 227)
下載附件
2017-12-14 15:52 上傳
-
P71202-112737.jpg
(4.12 MB, 下載次數: 210)
下載附件
2017-12-14 15:52 上傳
-
P71203-202109.jpg
(3.69 MB, 下載次數: 202)
下載附件
2017-12-14 15:52 上傳
-
P71210-181339.jpg
(3.74 MB, 下載次數: 202)
下載附件
2017-12-14 15:52 上傳
-
P71210-181347.jpg
(4.19 MB, 下載次數: 206)
下載附件
2017-12-14 15:52 上傳
-
P71210-181355.jpg
(3.38 MB, 下載次數: 202)
下載附件
2017-12-14 15:52 上傳
-
P71213-181808.jpg
(2.95 MB, 下載次數: 190)
下載附件
2017-12-14 15:52 上傳
-
P71213-181812.jpg
(2.99 MB, 下載次數: 185)
下載附件
2017-12-14 15:53 上傳
-
P71213-182110.jpg
(4.04 MB, 下載次數: 184)
下載附件
2017-12-14 15:53 上傳
-
0.jpg
(24.68 KB, 下載次數: 189)
下載附件
2017-12-14 22:44 上傳
-
-
StubbornSmallTaurus.zip
2017-12-14 16:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
53.26 KB, 下載次數: 111, 下載積分: 黑幣 -5
|