找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2953|回复: 12
打印 上一主题 下一主题
收起左侧

做了一个智能小车,分享一下,顺便问问大家改进方法

[复制链接]
跳转到指定楼层
楼主
ID:285225 发表于 2018-2-26 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机新手,求勿喷或者轻喷
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285225 发表于 2018-2-26 23:15 | 只看该作者
我的思路是这样的,分为3个模块,电源模块,单片机主控模块,还有电机模块,一开始我用了3个板子来做,结果发现线非常乱,于是放弃
回复

使用道具 举报

板凳
ID:285225 发表于 2018-2-26 23:23 | 只看该作者
D:\QQPCmgr\Desktop\图片
这个图片怎么发。。。不会啊,这里附上图片,之前做的3个模块,还有一个后来集在一起的电路图,画了后我才知道有ad这种大神器,于是焊了第二块板
回复

使用道具 举报

地板
ID:285225 发表于 2018-2-26 23:28 | 只看该作者
D:\QQPCmgr\Desktop\图片
这个是小车做好的图片,芯片也在上面了,用了18650电池,lm317,stc89c52rc,l293d,hc05蓝牙芯片
回复

使用道具 举报

5#
ID:285225 发表于 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. }
复制代码
回复

使用道具 举报

6#
ID:285225 发表于 2018-2-26 23:30 | 只看该作者
然后。。。问问,如果要差速转弯要怎么做?
回复

使用道具 举报

7#
ID:69072 发表于 2018-2-27 08:17 | 只看该作者
一个轮前进 一个轮后退 这样
如果还想更好的变速 还可以 使用PWM调速
回复

使用道具 举报

8#
ID:272345 发表于 2018-2-28 09:55 | 只看该作者
分别控制两个轮旋转方向
回复

使用道具 举报

9#
ID:286274 发表于 2018-3-1 10:28 | 只看该作者
你这程序就已经是差速转弯了,如果想要转弯更急,可以把一个轮后退一个前进。。如果还想再改进,可以尝试PWM调速,网上可以找到参考例程,同时你的控制器(串口通信)也要重新设置多个参数来调整转弯幅度
回复

使用道具 举报

10#
ID:287622 发表于 2018-3-5 10:09 | 只看该作者
我之前物联网大赛做过智能小车,他其实跟四轴飞行器是类似的,比那个简单,因为是在一个平面上运动,而四轴飞行器是立体的,PID调节不好会翻机。首先是PID调节,因为四个轮胎的转速可能是有细微差别的,需要做PID调节,才可以使小车按照规定的路线走,也就是走直线,不会原地打弯;其次是控制左右转、急转,这个只需要调节四个轮胎的转速和方向就可以啦,至于你说的急转弯,假如需要左转的话,就是左边两个轮胎的转速向后,右边两个轮胎转速向前,调节至最大就可以了;再者是避障,这里有好多算法,对于很复杂的路线图,有时候避障传感器太灵敏可能会多次避障造成死循环,所以避障算法也是很重要的模块。
回复

使用道具 举报

11#
ID:287936 发表于 2018-3-5 21:01 | 只看该作者
可以做一个蓝牙模块,在手机上能实时控制
回复

使用道具 举报

12#
ID:285225 发表于 2018-3-13 17:52 | 只看该作者
现在焊了一个遥控器,连上了蓝牙模块,用矩阵键盘,感觉不错
回复

使用道具 举报

13#
ID:225288 发表于 2018-3-13 19:18 | 只看该作者
谁都是从新手开始的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表