单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小白做的寻迹小车教程与单片机源程序,适合小白

  [复制链接]
跳转到指定楼层
楼主
第一次发帖,有什么不好的会改进
适合小白的教程,只是简单的寻迹功能,
文件包含程序代码,原理图

制作出来的实物图:


简单寻迹小车教程
  • 材料

  • 一个89c51或者89c52单片机
  • 一个4路红外线多路探测系统
  • 两个L298N驱动电机
  • 四个小车马达电机
如果有条件的话,可以买模板
原理图,因为某某原因,只能手画了,有点丑,慢慢看

  • 89c52单片机是要有最小系统的,我的原理图上没有画出来,不懂的百度“最小系统”,本次实践只是应用单片机的P1端口和P3端口
  • 其中P3口是用来检测红外线信号的
P3.0连接1号红外线端口
P3.1连接2号红外线端口
P3.2连接3号红外线端口
P3.3连接4号红外线端口
(注;我这里的1234号红外线端口可能和板子是的印刷字不一样)
  • P1口是用来控制4个马达的,
马达1是由P1.0和P1.4控制
马达2是由P1.1和P1.5控制
马达3是由P1.2和P1.6控制
马达4是由P1.3和P1.7控制
(解释;在L298N模板上,IN1输入高电平,那么OUT1输出高电平,如果IN1是低电平,那么OUT1也是低电平)同理
IN1----------OUT1
IN2----------OUT2
IN3----------OUT3
IN4----------OUT4
(L298N模板上有印刷IN,OUT的字样)
如果要马达转动,对应的端口输入一个高电平,一个低电平就行了,



单片机源程序如下:
  1. //寻迹小车
  2. #include <reg51.h>
  3. #define hei 1                                                //红外线如果探到黑色的地方,会输出高电平
  4. #define bai 0                                                //红外线如果探到白色的地方,会输出低电平

  5. sbit s1=P3^0;                                                //p3   红外线对应端口,读取数据
  6. sbit s2=P3^1;
  7. sbit s3=P3^2;
  8. sbit s4=P3^3;

  9. //P1口信号输出
  10. //P1.0-P1.4控制1电机
  11. //P1.1-P1.5控制2电机
  12. //P1.2-P1.6控制3电机
  13. //P1.3-P1.7控制4电机



  14. void delay(unsigned int i)                //延时函数
  15. {
  16.         unsigned int k;
  17.         for (k=0;k<i;k++);
  18. }




  19. void main()
  20. {
  21.         while (1)
  22.                 {
  23. /**********************直走   直走  直走  直走  直走  直走  直走  直走  直走 *************************************/
  24.                         if (s1==bai && s4==bai && s2==hei && s3==hei)                //第1种,直线走,14为白,23为黑
  25.                                 {
  26.                                         delay(500);
  27.                                 if (s1==bai && s4==bai && s2==hei && s3==hei)
  28.                                 {                                                                                                                //p1        1 1 1 1                        分别对应1234号马达
  29.                                         P1=0x0f;                                                                        //                0 0 0 0                        上面是高电平,下面是低电平,四个马达都会向前开
  30.                                         delay(500);                                                                //延时降速,如果L298N是接12V的电源,那么马达的速度太快了,需要降速
  31.                                         P1=0x00;                                                                        //这里降速的原理是让马达转500毫秒,停一下,转500毫秒,停一下,转500毫秒,停一下,从而达到降速的效果
  32.                                 }                                                                                               
  33.                                 else                                                                               
  34.                                 P1=0x00;
  35.                                
  36.                 }                       
  37.        

  38. /******************                左                左                左                左                左                左                左                左                左********************************************/               
  39.                        
  40.                          else if (s1==hei)                                                        //第1种,左转,1为黑
  41.                         {
  42.                                 delay(500);
  43.                                 if (s1==hei )
  44.                                 {                                                                                                //p1  0 1 0 1                                马达2 4向前开,马达1 3向后开
  45.                                         P1=0x5a;                                                        //    1 0 1 0
  46.                                         delay(1000);
  47.                                         P1=0x00;
  48.                                 }
  49.                                
  50.                                 else
  51.                                         P1=0x00;
  52.                         }               
  53.                        
  54.                        
  55.                        

  56.                          else if (s1==hei && s2==hei)                                                        //第2种,左转,1 2为黑
  57.                         {
  58.                                 delay(500);
  59.                                 if (s1==hei )
  60.                                 {                                                                                                //p1  0 1 0 1                        马达24向前开,马达13向后开
  61.                                         P1=0x5a;                                                        //    1 0 1 0
  62.                                         delay(1000);
  63.                                         P1=0x00;
  64.                                 }
  65.                                
  66.                                 else
  67.                                         P1=0x00;
  68.                         }                                       
  69.                        

  70.                        
  71.                         else if (s1==bai && s3==bai && s4==bai && s2==hei)                                                        //第3种,微左转,2黑,134白
  72.                         {                                                                                                                                                                                                        //本来小车是直线行走的,但是稍微偏离了一点,这时需要微调转弯
  73.                                 delay(600);
  74.                                 if (s2==hei && s3==bai)
  75.                                         {                                                                        //P1        0 1 0 0                                        马达2向前开,马达3向后开,这样做转弯的幅度比较小,达到微调的效果
  76.                                         P1=0x5a;                                        //                0 0 1 0
  77.                                         delay(600);
  78.                                         P1=0x00;
  79.                                         }
  80.                                
  81.                                 else
  82.                                         P1=0x00;
  83.                         }
  84.                                
  85.                                
  86. /*********************右        右        右        右        右        右        右        右        右        右********************************************************/                       
  87.                                
  88.                         else if (s4==hei && s1==bai && s2==bai && s3==bai)                                                        //第3种,右转,4黑,123白
  89.                         {
  90.                                 delay(500);
  91.                                 if (s4==hei)
  92.                                 {                                                                                //P1 1 0 1 0                        马达13向前开,马达24向后开
  93.                                         P1=0xa5;                                        //         0 1 0 1
  94.                                         delay(1000);
  95.                                         P1=0x00;
  96.                                 }
  97.                                 else
  98.                                         P1=0x0;
  99.                         }       
  100.                        
  101.                        
  102.                                                 else if (s4==hei && s1==bai && s2==bai && s3==hei)                                                        //第3种,右转,4黑,123白
  103.                         {
  104.                                 delay(500);
  105.                                 if (s4==hei)
  106.                                 {                                                                                //P1 1 0 1 0
  107.                                         P1=0xa5;                                        //         0 1 0 1
  108.                                         delay(1000);
  109.                                         P1=0x00;
  110.                                 }
  111.                                 else
  112.                                         P1=0x0;
  113.                         }       
  114.                        
  115.                        
  116.                         else if (s1==bai && s2==bai && s4==bai && s3==hei)                                                        //第3种,微右转,3黑,124白
  117.                         {
  118.                                 delay(600);
  119.                                 if (s3==hei && s2==bai)
  120.                                 {                                                                //P1 1 0 0 0
  121.                                         P1=0xa5;                        //         0 0 0 1
  122.                                         delay(600);
  123.                                         P1=0x00;
  124.                                 }
  125.                                 else
  126.                                         P1=0x0;
  127.                         }       
  128.                        
  129. /*****************停车         停车         停车         停车         停车         停车         停车         *********************************/               
  130.                        
  131.                        
  132.                         else if (s4==hei && s1==hei && s2==hei &&s3==hei)                                                        //第4种,停车,1234黑
  133.                         {
  134.                                 delay(1200);                                                                //P1 0 0 0 0
  135.                                 P1=0x0;                                                                                        //         0 0 0 0
  136.                         }

  137.                                
  138.                        
  139.                         else if (s4==bai && s1==bai && s2==bai &&s3==bai)                                                        //第4种,停车,1234黑
  140.                         {
  141.                                 delay(1200);
  142.                                 if (s4==bai && s1==bai && s2==bai &&s3==bai)
  143.                                 {                                                                                //P1        0 0 0 0
  144.                                         P1=0x0;                                                //                0 0 0 0
  145.                                 }

  146.                         }       

  147.                
  148.         }

  149.        
  150. }
  151. //如果小车的速度不是你想要的效果,只要更改delay(****)里面的数值就行

复制代码



所有资料51hei提供下载:

简单寻迹小车教程.rar (14.51 MB, 下载次数: 77)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
狼狈的色鬼 发表于 2019-3-19 21:05 | 只看该作者
请问这个单片机只是用最小系统的么?最小系统就够用了是吧?
回复

使用道具 举报

板凳
狼狈的色鬼 发表于 2019-3-19 21:06 | 只看该作者
请问这个单片机最小系统就够用了是吧?
回复

使用道具 举报

地板
加内特tom 发表于 2019-6-1 17:41 来自手机 | 只看该作者
这个轨道是什么样的呀。
回复

使用道具 举报

5#
280570255 发表于 2019-6-26 17:24 | 只看该作者
我发现这里的帖子很不活跃,2018年的帖子,2019年有人问,
回复

使用道具 举报

6#
zctwss321 发表于 2019-6-28 10:02 | 只看该作者
还能多点彩图吗?
回复

使用道具 举报

7#
rujia 发表于 2019-9-21 13:14 来自手机 | 只看该作者
加内特tom 发表于 2019-6-1 17:41
这个轨道是什么样的呀。

应该是中间是一条黑线的
回复

使用道具 举报

8#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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