標(biāo)題: 做了一個(gè)智能小車,分享一下,順便問問大家改進(jìn)方法 [打印本頁(yè)]

作者: owenliang    時(shí)間: 2018-2-26 23:14
標(biāo)題: 做了一個(gè)智能小車,分享一下,順便問問大家改進(jìn)方法
單片機(jī)新手,求勿噴或者輕噴

作者: owenliang    時(shí)間: 2018-2-26 23:15
我的思路是這樣的,分為3個(gè)模塊,電源模塊,單片機(jī)主控模塊,還有電機(jī)模塊,一開始我用了3個(gè)板子來做,結(jié)果發(fā)現(xiàn)線非常亂,于是放棄
作者: owenliang    時(shí)間: 2018-2-26 23:23
D:\QQPCmgr\Desktop\圖片
這個(gè)圖片怎么發(fā)。。。不會(huì)啊,這里附上圖片,之前做的3個(gè)模塊,還有一個(gè)后來集在一起的電路圖,畫了后我才知道有ad這種大神器,于是焊了第二塊板
作者: owenliang    時(shí)間: 2018-2-26 23:28
D:\QQPCmgr\Desktop\圖片
這個(gè)是小車做好的圖片,芯片也在上面了,用了18650電池,lm317,stc89c52rc,l293d,hc05藍(lán)牙芯片
作者: owenliang    時(shí)間: 2018-2-26 23:30
  1. #include <reg52.h>

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. u8 r_buf; //&Agrave;&para;&Ntilde;&Agrave;&frac12;&Oacute;&Ecirc;&Otilde;&micro;&frac12;&micro;&Auml;×&Ouml;·&ucirc;&acute;&aelig;&acute;&cent;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;
  5. sbit M1 = P0^1;
  6. sbit M2 = P0^2;
  7. sbit M3 = P0^4;
  8. sbit M4 = P0^5;
  9. sbit state = P3^6; //&Agrave;&para;&Ntilde;&Agrave;&Aacute;&not;&Iacute;¨&micro;&Auml;×&acute;&Igrave;&not;±ê&Ouml;&frac34;&Icirc;&raquo;
  10. void delay(u16 z) //&Ntilde;&Oacute;&sup3;&Ugrave;&ordm;&macr;&Ecirc;&yacute;
  11. {  
  12.         u16 x,y;  
  13.         for(x=z;x>0;x--)   
  14.         for(y=125;y>0;y--);
  15. }
  16. void InitUART() //&acute;&reg;&iquest;&Uacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;9600
  17.         {
  18. //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&acute;&reg;&iquest;&Uacute;&para;¨&Ecirc;±&AElig;÷9600
  19.                 TMOD = 0x20;
  20.                 PCON = 0x00;
  21.                 SCON = 0x50;   
  22.                 TH1 = 0xFD;
  23.                 TL1 = 0xFD;
  24.                 TR1 = 1;
  25.                 ES = 1;
  26.                 EA = 1;
  27.         }
  28. void SendOneByte(unsigned char c) //·&cent;&Euml;&Iacute;×&Ouml;·&ucirc;&ordm;&macr;&Ecirc;&yacute;
  29. {
  30.     SBUF = c;
  31.     while(!TI);
  32.     TI = 0;
  33. }
  34. void main(void)        //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&micro;&ccedil;&raquo;ú
  35. {
  36.     InitUART();
  37.         M1 = 0;
  38.         M2 = 0;
  39.         M3 = 0;  
  40.         M4 = 0;
  41.         r_buf = '2';
  42. }
  43. void UARTInterrupt(void) interrupt 4 //&acute;&reg;&iquest;&Uacute;&frac12;&Oacute;&Ecirc;&Otilde;×&Ouml;·&ucirc;
  44. {
  45.     if(RI)
  46.     {
  47.         RI = 0;
  48.         //add your code here!
  49.                 r_buf = SBUF;
  50.         if(r_buf == '1')//&Egrave;&ccedil;&sup1;&ucirc;&Icirc;&ordf;×&Ouml;·&ucirc;&iexcl;&reg;0&iexcl;&macr;&pound;&not;&Ocirc;ò&Ouml;&Ccedil;&Otilde;&Iuml;&ETH;&iexcl;&sup3;&micro;&Ccedil;°&frac12;&oslash;
  51.         {
  52.                    M1=1;                                   
  53.                    M2=0;
  54.                    M3=1;
  55.                    M4=0;
  56.                 delay(1000);
  57.         }
  58.         if(r_buf == '2')//&Egrave;&ccedil;&sup1;&ucirc;&Icirc;&ordf;×&Ouml;·&ucirc;&iexcl;&reg;2&iexcl;&macr;&pound;&not;&Ocirc;ò&Ouml;&Ccedil;&Otilde;&Iuml;&ETH;&iexcl;&sup3;&micro;×ó×&ordf;
  59.         {
  60.                    M1=0;                                   
  61.                    M2=0;
  62.                    M3=1;
  63.                    M4=0;
  64.                 delay(1000);
  65.         }
  66.         if(r_buf == '3')//&Egrave;&ccedil;&sup1;&ucirc;&Icirc;&ordf;×&Ouml;·&ucirc;&iexcl;&reg;3&iexcl;&macr;&pound;&not;&Ocirc;ò&Ouml;&Ccedil;&Otilde;&Iuml;&ETH;&iexcl;&sup3;&micro;&Oacute;&Ograve;×&ordf;
  67.         {
  68.                    M1=1;                                   
  69.                    M2=0;
  70.                    M3=0;
  71.                    M4=0;
  72.                 delay(1000);
  73.         }
  74.         if(r_buf == '4')//&Egrave;&ccedil;&sup1;&ucirc;&Icirc;&ordf;×&Ouml;·&ucirc;&iexcl;&reg;1&iexcl;&macr;&pound;&not;&Ocirc;ò&Ouml;&Ccedil;&Otilde;&Iuml;&ETH;&iexcl;&sup3;&micro;&ordm;ó&Iacute;&Euml;
  75.         {
  76.                    M1=0;                                   
  77.                    M2=1;
  78.                    M3=0;
  79.                    M4=1;
  80.                 delay(1000);
  81.         }
  82.            SendOneByte(r_buf);//&raquo;&Oslash;·&cent;&cedil;&Atilde;×&Ouml;·&ucirc;
  83.     }
  84. }
復(fù)制代碼

作者: owenliang    時(shí)間: 2018-2-26 23:30
然后。。。問問,如果要差速轉(zhuǎn)彎要怎么做?
作者: 鳳姐438    時(shí)間: 2018-2-27 08:17
一個(gè)輪前進(jìn) 一個(gè)輪后退 這樣
如果還想更好的變速 還可以 使用PWM調(diào)速
作者: 納蘭小宇    時(shí)間: 2018-2-28 09:55
分別控制兩個(gè)輪旋轉(zhuǎn)方向
作者: zhuo_272    時(shí)間: 2018-3-1 10:28
你這程序就已經(jīng)是差速轉(zhuǎn)彎了,如果想要轉(zhuǎn)彎更急,可以把一個(gè)輪后退一個(gè)前進(jìn)。。如果還想再改進(jìn),可以嘗試PWM調(diào)速,網(wǎng)上可以找到參考例程,同時(shí)你的控制器(串口通信)也要重新設(shè)置多個(gè)參數(shù)來調(diào)整轉(zhuǎn)彎幅度
作者: songofjoy    時(shí)間: 2018-3-5 10:09
我之前物聯(lián)網(wǎng)大賽做過智能小車,他其實(shí)跟四軸飛行器是類似的,比那個(gè)簡(jiǎn)單,因?yàn)槭窃谝粋(gè)平面上運(yùn)動(dòng),而四軸飛行器是立體的,PID調(diào)節(jié)不好會(huì)翻機(jī)。首先是PID調(diào)節(jié),因?yàn)樗膫(gè)輪胎的轉(zhuǎn)速可能是有細(xì)微差別的,需要做PID調(diào)節(jié),才可以使小車按照規(guī)定的路線走,也就是走直線,不會(huì)原地打彎;其次是控制左右轉(zhuǎn)、急轉(zhuǎn),這個(gè)只需要調(diào)節(jié)四個(gè)輪胎的轉(zhuǎn)速和方向就可以啦,至于你說的急轉(zhuǎn)彎,假如需要左轉(zhuǎn)的話,就是左邊兩個(gè)輪胎的轉(zhuǎn)速向后,右邊兩個(gè)輪胎轉(zhuǎn)速向前,調(diào)節(jié)至最大就可以了;再者是避障,這里有好多算法,對(duì)于很復(fù)雜的路線圖,有時(shí)候避障傳感器太靈敏可能會(huì)多次避障造成死循環(huán),所以避障算法也是很重要的模塊。
作者: 147258369f    時(shí)間: 2018-3-5 21:01
可以做一個(gè)藍(lán)牙模塊,在手機(jī)上能實(shí)時(shí)控制
作者: owenliang    時(shí)間: 2018-3-13 17:52
現(xiàn)在焊了一個(gè)遙控器,連上了藍(lán)牙模塊,用矩陣鍵盤,感覺不錯(cuò)
作者: 1820732662@qq.c    時(shí)間: 2018-3-13 19:18
誰都是從新手開始的




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1