单片机智能小车_单片机智能小车设计 - CSDN
精华内容
参与话题
  • 51单片机智能小车的通俗易懂讲解

    千次阅读 多人点赞 2020-09-07 10:13:14
    从上面导航图,我们可以看到,智能小车,共分为三步 外部检测,控制中心,轮子输出控制。 等于人的 眼睛,大脑,手脚。 . . 因为控制中心和轮子输出控制是一样的,只有前面的外部检测,换个模块工作而已。 . . . . ...

    在这里插入图片描述
    .
    .
    从上面导航图,我们可以看到,智能小车,共分为三步

    外部检测,控制中心,轮子输出控制。

    等于人的

    在这里插入图片描述

    .
    .
    因为单片机控制中心和轮子输出控制是一样的,只有前面的外部检测,换个模块工作而已。
    .
    .

    在这里插入图片描述

    .
    .
    .

    .

    我们以一个循迹小车为例子讲解,当你明白这个后,其它的实验你就明白了。
    先来讲解一下公共的控制中心,和轮子输出的组装。
    .
    .

    在这里插入图片描述.
    .

    组装小车,只需要三样东西。
    1 车模。
    2 控制中心板。
    3 轮子电机驱动模块。
    .
    .

    1车模。
    对于新手来说你需要一个车模,当然也可以自己制作一个模型,下面这个是两个电机的智能小车。
    .
    .

    在这里插入图片描述
    .
    .

    上面这个车模包含有,1个车模底板,2个减速电机,2个轮子,1个万向轮(上面图片,电池盒下面那个),1个电池盒。
    这种车模很多地方都有,你只要按照说明书组装成功就可以了。
    .
    .

    2 主控板
    另外你还需要一个单片机最小系统作为控制中心
    .
    .

    在这里插入图片描述
    .
    .

    这个主控板的单片机型号是,STC89C52RC,你也可以选择更高级类型的51单片机
    .
    .
    3 轮子电机驱动模块。
    .
    .

    在这里插入图片描述
    .
    .

    这个电机驱动系统的模块是L298N(上面图片,最大黑色那个)
    .
    这种驱动模块是可以同时驱动两个电机的,完全可以满足你小车的驱动动力,为什么要驱动呢?因为主控板的电流太弱了,不够功率让电机运行,所以才会有电机驱动模块的产生。
    .
    .

    但是,不论外部检测是什么,上面的小车基础配置是公用的
    .
    .

    在这里插入图片描述
    .
    .
    .
    下面是外部检测讲解。

    现在我们既然讲解的是循迹小车,那么你还需要循迹传感器
    .
    .

    在这里插入图片描述
    .
    .

    循迹模块安装位置,如下图所示

    .
    .

    在这里插入图片描述

    .
    .
    就是这么简单,我们的循迹小车,配置模块就是这么多,
    .
    .

    在这里插入图片描述
    .
    .
    再通过程序的编写。我们的循迹小车,就可以循黑色线走了,非常简单。

    .
    .
    智能小车小资料:点我下载

    希望同学们喜欢了

    展开全文
  • 单片机智能小车电路原理图,智能循迹,无线遥控,避障
  • 基于51单片机的蓝牙智能小车——《入门篇》

    万次阅读 多人点赞 2018-08-29 10:02:38
    在上一篇文章中我已经提到了制作智能小车所需要的材料,如果大家已经准备好材料,或是想进一步了解智能小车的制作原理,接下来呢,我会对多个模块进行介绍,由零散的模块一步一步将我们的小车制作出来。 我们可以按...

    我认为在制作小车前需要有心里准备,要充满自信、满怀激情,学会坚持,切忌三分钟热度,半途而废。

    在上一篇文章中我已经提到了制作智能小车所需要的材料,如果大家已经准备好材料,或是想进一步了解智能小车的制作原理,接下来呢,我会对多个模块进行介绍,由零散的模块一步一步将我们的小车制作出来。

    我们可以按着电路图先焊一个51单片机的最小系统出来,有一点需要注意的是需要引出更多的VCC,GND接口,以防接口不够。

     

    一辆小车的基本功能就是让它能动起来,能通过手机蓝牙进行遥控,所以就需要用到L298N电机驱动模块HC-06蓝牙模块。下面就简单介绍一下这两个模块。

        一个L298N电机驱动模块能驱动2个马达,小车是四驱驱动,我们可以把两个L298N模块并联,并用12V电压供电,如果你的小车不需要调速,就不用考虑PWM问题,也就无需把使能端ENA、ENB的跳线帽拔掉,直接将IN1、IN2、IN3、IN4与单片机的端口相连,把OUT1、OUT2、OUT3、OUT4与马达相连即可。

        如果你的小车需要调速,则需要把ENA、ENB跳线帽拔掉,把使能端ENA、ENB分别接入单片机的不同端口,然后调速主要是程序的问题,这里用到T0定时器来制造不同的调制信号,说白了就是一定时间内使能端高电平所占的比例,比例越高,速度越快。

    void timer0() interrupt 1
    {                                
       TH0=(65536-50)/256;
       TL0=(65536-50)%256;
       PWMcntA++;        
       PWMcntB++;        
       PWMcntC++;        
       PWMcntD++;        
       if (PWMcntA>=230)
       {  PWMcntA=1;}
       if (PWMcntA<=cntPWMA)
       {   PWMa=1; }
       else
        {  PWMa=0; }
        .
        .
        .
        PWMb、PWMc、PWMd依此类推
    } 

    (程序仅供参考)

     

    电机驱动模块弄好后,离它能动就只有一步之遥了,我们需要用到HC-06蓝牙模块对小车进行控制

    蓝牙模块的TXD,RXD要分别与单片机的RXD、TXD相连,这样串口通信才能收发正常,然后软件设置串口。利用switch 函数,对蓝牙接收的数据进行处理,执行相应的运动。

     

    void service()
    {
    switch (BlueToothData)
    {
    case 'g':go_forward();
                   delay(1);
                   break;
    case 'b':go_back(); 
                   delay(1);
                   break;
    case 's':stop ();
                   delay(1);
                   break;
    .
    .
    依此类推
    }
    } 

    (程序仅供参考)

    如果上面的都弄好后,距离小车能动就只差半步了,这时候我们还需要一部手机,如果你会写上位机,你不妨可以自己做个APP来控制小车,如果不会开发手机APP,那也可以使用别人写好的蓝牙串口助手APP,在这里,我推荐SPP蓝牙助手,它是目前我试过的最好用的一款安卓蓝牙串口助手APP,它可以编辑你想要的按键功能,方便我们的个性化开发。

    做到这一步,恭喜你的小车已经可以动了,我认为你已经是一名合格的司机了,怎么样?系不系有点小激动?

    那就开车吧!

    展开全文
  • 基于51单片机寻迹智能小车程序原理图 非常实在好用,希望对你有帮助!
  • 单片机智能小车

    千次阅读 2019-06-06 18:03:06
    单片机智能小车: 基于单片机控制的自主寻迹电动小车的设计: 摘 要:针对小车在行驶过程中的寻迹要求,设计了以AT89C51单片机为核心的控制电路,采用模块化的设计方案,运用色标传感器、金属探测传感器、...
    单片机智能小车:

    none.gifnone.gif


    基于单片机控制的自主寻迹电动小车的设计:

    摘 要:针对小车在行驶过程中的寻迹要求,设计了以AT89C51单片机为核心的控制电路,采用模块化的设计方案,运用色标传感器、金属探测传感器、超声波传感器、霍尔传感器组成不同的检测电路,实现小车在行驶中轨迹、探测预埋金属铁片、躲避障碍物、测量车速等问题检测,并对设计的电路进行了理论分析和实际测试。结果表明,该智能小车具有很好的识别与检测的能力,具有定位精度、运行稳定可靠的特点。
        关键词:自主寻迹;单片机;电动小车;传感器
    0 引 言
        自主寻迹电动小车是一个运用传感器、单片机、信号处理、电机驱动及自动控制等技术来实现环境感知和自动行驶为一体的高新技术综合体,它在军事、民用和科学研究等方面已获得了应用。本文研究的电动小车是在给定的区域内沿着轨迹完成对各个目标点的访问,主要指标有行驶距离、时间、探测物计数、障碍物躲避等。本文采用AT89C51单片机作控制,针对小车在行驶过程中的不同要求,采用模块化设计方案,进行了各部分电路的设计。
    1 智能小车控制的基本要求    小车必须沿规定路线行驶,控制部分设计不能采用无线遥控,具体控制要求如下:
        (1)电动车从起跑线出发,沿规定引导直线行驶到达B点。在“直道区”下沿引导线埋有1一3块宽度为15cm、长度不等的薄铁片。电动车在行驶中检测到薄
    铁片时需立即发出声光指示信息,并实时存储、显示在“直道区”检测到的薄铁片数目。电动车在“直道区”行驶过程中,存储并显示每个薄铁片(中心线)至起跑
    线间的距离;
        (2)电动车到达B点以后进人“弯道区”,沿圆 弧引导线到达C点。C点下埋有边长为 15cm的正方形薄铁片,要求电动车到达C点检测到薄铁片后在C点处停车5秒,停车期间发出断续的声光信息;
        (3)电动车在光源的引导下,通过障碍区进人停车区并到达车库。电动车必须在两个障碍物之间通过且不得与其接触;
        (4)电动车完成上述任务后应立即停车。停车后,能准确显示电动车全程行驶时间。
    2 方案的选择与实现
    2.1 系统方案的确定
        根据题目要求,将控制对象及检测目标划分为不同模块,即障碍物检测、路面铁片检测、路面轨迹检测、光源检测、速度路程检测等模块。针对不同模块的控制要求分别采用不同的设计方案实现。系统组成及原理框图如图1所示。其中色标传感器用来检测小车的运行轨迹,金属探测传感器用来检测路迹下薄铁片的数目,超声波传感器用来检测小车前进方向的障碍物,霍尔传感器用于检测小车行驶的速度及距离。


    完整内容下载附件查看.


    代码:

     
    1. //========================================================
    2. //  工程名称:        Car_Demo
    3. //  功能描述:        实现DIY竞赛小车的语音控制
    4. //  涉及的库:        CMacro1016.lib
    5. //                    bsrv222SDL.lib
    6. //                                sacmv26e.lib
    7. //  组成文件:        main.c
    8. //                                Flash.asm, hardware.asm,ISR.asm
    9. //                             hardware.h,s480.h, hardware.inc
    10. //        硬件连接:        IOA0-----KEY1
    11. //                                IOA1-----KEY2
    12. //                                IOA2-----KEY3
    13. //                                IOB10----MOTOR1A
    14. //                                IOB11----MOTOR1B
    15. //                                IOB12----MOTOR2A
    16. //                                IOB13----MOTOR2B
    17. //        维护记录:        2007-06  v1.0
    18. //  本代码在原凌阳小车代码上修改而成,版权原作者所有!-61mcu
    19. //  更多资料请察看:www.61mcu.com
    20. //========================================================
    21.  
    22. #include "s480.h"
    23. #include "bsrsd.h"
    24.  
    25. #define        P_IOA_Data                         (volatile unsigned int *)0x7000   
    26. #define P_IOA_Dir                         (volatile unsigned int *)0x7002
    27. #define P_IOA_Attrib                 (volatile unsigned int *)0x7003
    28. #define P_IOB_Data                        (volatile unsigned int *)0x7005  
    29. #define P_IOB_Dir                        (volatile unsigned int *)0x7007   
    30. #define P_IOB_Attrib                (volatile unsigned int *)0x7008   
    31. #define P_TimerA_Data                (volatile unsigned int *)0x700A   
    32. #define P_TimerA_Ctrl                (volatile unsigned int *)0x700B   
    33. #define P_TimerB_Data                (volatile unsigned int *)0x700C   
    34. #define P_TimerB_Ctrl                (volatile unsigned int *)0x700D   
    35. #define P_Watchdog_Clear        (volatile unsigned int *)0x7012   
    36. #define P_INT_Mask                        (volatile unsigned int *)0x702D   
    37. #define P_INT_Clear                        (volatile unsigned int *)0x7011   
    38.  
    39. #define NAME_ID                         0x100
    40. #define COMMAND_GO_ID                 0x101
    41. #define COMMAND_BACK_ID         0x102
    42. #define COMMAND_LEFT_ID         0x103
    43. #define COMMAND_RIGHT_ID         0x104
    44.  
    45. #define S_NAME                                0                                                        //给我取个名字吧
    46. #define S_ACT1                                1                                                        //前进
    47. #define S_ACT2                                2                                                        //倒车,请注意
    48. #define S_ACT3                                3                                                        //左拐
    49. #define S_ACT4                                4                                                        //右拐       
    50. #define S_RDY                                5                                                        //Yeah
    51. #define S_AGAIN                                6                                                        //请再说一遍
    52. #define S_NOVOICE                        7                                                        //没有听到任何声音
    53. #define S_CMDDIFF                        8                                                        //说什么暗语呀
    54. #define S_NOISY                                8                                                        //说什么暗语呀
    55. #define S_START                                9                                                        //准备就绪,开始辨识       
    56. #define S_GJG                                10                                                        //拐就拐
    57. #define S_DCZY                                11                                                        //倒车,请注意
    58.  
    59. extern  unsigned int BSR_SDModel[100];                                        //外部变量BSR_SDModel[100],辨识器自带
    60. extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);
    61. extern void F_FlashErase(unsigned int sector);
    62. unsigned int uiTimeset = 3;                                                                //运行时间定时,调整该参数控制运行时间
    63. unsigned int uiTimecont;                                                                 //运行时间计时
    64.  
    65. //=============================================================
    66. // 语法格式:        void Delay();
    67. // 实现功能:        延时
    68. // 参数:                无
    69. // 返回值:                无
    70. //=============================================================
    71. void Delay()                                                       
    72. {
    73.         unsigned int i;
    74.         for(i=0;i<0x3Fff;i++)
    75.         {
    76.                 *P_Watchdog_Clear=0x0001;
    77.         }
    78. }
    79.  
    80. //=============================================================
    81. // 语法格式:        void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);
    82. // 实现功能:        语音播放函数
    83. // 参数:                SndIndex-播放语音资源索引号
    84. //                                DAC_Channel-播放声道选择
    85. // 返回值:                无
    86. //=============================================================
    87. void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)
    88. {
    89.         BSR_StopRecognizer();                                                                //停止识别器
    90.         SACM_S480_Initial(1);                                                                //初始化为自动播放
    91.         SACM_S480_Play(SndIndex, DAC_Channel, 3);                        //开始播放一段语音
    92.         while((SACM_S480_Status()&0x0001)!= 0)                                //是否播放完毕?
    93.         {
    94.                 SACM_S480_ServiceLoop();                                                //解码并填充队列
    95.                 *P_Watchdog_Clear=0x0001;                                                //清看门狗
    96.         }
    97.         SACM_S480_Stop();                                                                        //停止播放
    98.         BSR_InitRecognizer(BSR_MIC);                                                //初始化识别器
    99. }
    100.  
    101. //=============================================================
    102. // 语法格式:        int TrainWord(int WordID,int SndID);
    103. // 实现功能:        训练一条指令
    104. // 参数:                WordID-指令编码
    105. //                                SndID-指令提示音索引号
    106. // 返回值:                无
    107. //=============================================================
    108. int TrainWord(unsigned int WordID,unsigned int SndID)
    109. {
    110.         int Result;
    111.         PlaySnd(SndID,3);                                                                        //引导训练,播放指令对应动作
    112.         while(1)
    113.         {
    114.                 Result = BSR_Train(WordID,BSR_TRAIN_TWICE);                //训练两次,获得训练结果
    115.                                                                                
    116.                 if(Result==0)break;
    117.                 switch(Result)
    118.                 {
    119.                 case -1:                                                                                //没有检测出声音
    120.                         PlaySnd(S_NOVOICE,3);
    121.                         return -1;
    122.                 case -2:                                                                                 //需要训练第二次
    123.                         PlaySnd(S_AGAIN,3);
    124.                         break;
    125.                 case -3:                                                                                //环境太吵
    126.                         PlaySnd(S_NOISY,3);
    127.                         return -3;       
    128.                 case -4:                                                                                //数据库满
    129.                          return -4;       
    130.                 case -5:                                                                     //检测出声音不同
    131.                         PlaySnd(S_CMDDIFF,3);
    132.                         return -5;
    133.                 case -6:                                                                     //序号错误
    134.                         return -6;
    135.                 default:
    136.                         break;
    137.                 }
    138.         }
    139.         return 0;
    140. }
    141.  
    142. //=============================================================
    143. // 语法格式:        void TrainSD();
    144. // 实现功能:        训练函数
    145. // 参数:                无
    146. // 返回值:                无
    147. //=============================================================
    148. void TrainSD()
    149. {
    150.         while(TrainWord(NAME_ID,S_NAME) != 0) ;                          //训练名称
    151.         while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ;                  //训练第1个动作
    152.         while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ;          //训练第2个动作
    153.         while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ;          //训练第3个动作
    154.         while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;        //训练第4个动作
    155. }
    156.  
    157. //=============================================================
    158. // 语法格式:        void StoreSD();
    159. // 实现功能:        存储语音模型函数
    160. // 参数:                无
    161. // 返回值:                无
    162. //=============================================================
    163. void StoreSD()                                                  
    164. {        unsigned int ulAddr,i,commandID,g_Ret;
    165.         F_FlashWrite1Word(0xef00,0xaaaa);
    166.         F_FlashErase(0xe000);
    167.            F_FlashErase(0xe100);
    168.            F_FlashErase(0xe200);
    169.            ulAddr=0xe000;//********
    170.         for(commandID=0x100;commandID<0x105;commandID++)
    171.         {
    172.                 g_Ret=BSR_ExportSDWord(commandID);                       
    173.                 while(g_Ret!=0)                                                                        //模型导出成功?
    174.                 g_Ret=BSR_ExportSDWord(commandID);               
    175.                 for(i=0;i<100;i++)                                                                //保存语音模型SD1(0xe000---0xe063)
    176.                 {
    177.                     F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
    178.                         ulAddr+=1;                                                                                               
    179.                 }
    180.         }
    181. }
    182.  
    183. //=============================================================
    184. // 语法格式:        void StoreSD();
    185. // 实现功能:        装载语音模型函数
    186. // 参数:                无
    187. // 返回值:                无
    188. //=============================================================
    189. void LoadSD()                                                  
    190. {        unsigned int *p,k,jk,Ret,g_Ret;
    191.         p=(int *)0xe000;                                                                                                                                                                       
    192.         for(jk=0;jk<5;jk++)
    193.         {
    194.                 for(k=0;k<100;k++)
    195.                 {
    196.                         Ret=*p;                                                       
    197.                         BSR_SDModel[k]=Ret;                                        //装载语音模型                       
    198.                         p+=1;                                                                                                       
    199.                 }                                       
    200.                 g_Ret=BSR_ImportSDWord();                               
    201.                 while(g_Ret!=0)                                                        //模型装载成功?
    202.                 g_Ret=BSR_ImportSDWord();                                                               
    203.         }
    204. }
    205.  
    206. //=============================================================
    207. // 语法格式:        void GoAhead();
    208. // 实现功能:        前进子函数
    209. // 参数:                无
    210. // 返回值:                无
    211. //=============================================================
    212. void GoAhead()                                                     //前进
    213. {  
    214.         PlaySnd(S_ACT1,3);                                                        //提示
    215.         *P_IOB_Data=0x1400;                                                        //前进
    216.         *P_INT_Mask |= 0x0004;                                                //以下为中断定时操作
    217.         __asm("int fiq,irq");
    218.         uiTimecont = 0;
    219. }
    220. //=============================================================
    221. // 语法格式:        void BackUp();
    222. // 实现功能:        后退子函数
    223. // 参数:                无
    224. // 返回值:                无
    225. //=============================================================
    226. void BackUp()                                                //倒退
    227. {       
    228.         PlaySnd(S_DCZY,3);                                                        //提示
    229.         *P_IOB_Data=0x2800;                                                        //倒退
    230.         *P_INT_Mask |= 0x0004;                                                //以下为中断定时操作
    231.         __asm("int fiq,irq");
    232.         uiTimecont = 0;
    233. }
    234.  
    235. //=============================================================
    236. // 语法格式:        void TurnLeft();
    237. // 实现功能:        左转子函数
    238. // 参数:                无
    239. // 返回值:                无
    240. //=============================================================
    241. void TurnRight()                                           //右转
    242. {
    243.         PlaySnd(S_GJG,3);       
    244.         *P_IOB_Data=0x1800;                                                        //右转
    245.         Delay();                                                                        //延时
    246.         *P_IOB_Data=0x2400;                                                        //左转
    247.         *P_INT_Mask |= 0x0004;                                                //以下为中断定时操作
    248.         __asm("int fiq,irq");
    249.         uiTimecont = 0;
    250. }
    251. //=============================================================
    252. // 语法格式:        void TurnRight();
    253. // 实现功能:        右转子函数
    254. // 参数:                无
    255. // 返回值:                无
    256. //=============================================================
    257. void TurnLeft()                                               //左转
    258. {
    259.         PlaySnd(S_GJG,3);                                                        //语音提示
    260.     *P_IOB_Data=0x2400;                                                        //左转
    261.         Delay();                                                                        //延时
    262.         *P_IOB_Data=0x1800;                                                        //右转       
    263.         *P_INT_Mask |= 0x0004;                                                //以下为中断定时操作
    264.         __asm("int fiq,irq");
    265.         uiTimecont = 0;
    266. }
    267.  
    268. //=============================================================
    269. // 语法格式:        void Stop();
    270. // 实现功能:        停车子函数
    271. // 参数:                无
    272. // 返回值:                无
    273. //=============================================================
    274. void Stop()                                                   //停车
    275. {
    276.         *P_IOB_Data=0x0000;                                                        //停车
    277.         PlaySnd(S_RDY,3);                                                        //语音提示
    278. }
    279.  
    280. //=============================================================
    281. // 语法格式:        void BSR(void);
    282. // 实现功能:        辨识子函数
    283. // 参数:                无
    284. // 返回值:                无
    285. //=============================================================
    286. void BSR(void)
    287. {       
    288.         int Result;                                                                        //辨识结果寄存
    289.         Result = BSR_GetResult();                                        //获得识别结果
    290.  
    291.         if(Result>0)                                                                //有语音触发?
    292.         {       
    293.                 *P_IOB_Data=0x0000;                                                //临时停车
    294.                 switch(Result)
    295.                 {
    296.                 case NAME_ID:                                                        //识别出名称命令
    297.                         Stop();                                                                //停车待命
    298.                         break;
    299.                 case COMMAND_GO_ID:                                                //识别出第一条命令
    300.                         GoAhead();                                                        //执行动作一:直走
    301.                         break;
    302.                 case COMMAND_BACK_ID:                                        //识别出第二条命令
    303.                         BackUp();                                                        //执行动作二:倒车
    304.                         break;
    305.                 case COMMAND_LEFT_ID:                                        //识别出第三条命令
    306.                         TurnLeft();                                                        //执行动作三:左转
    307.                         break;
    308.                 case COMMAND_RIGHT_ID:                                        //识别出第四条命令
    309.                         TurnRight();                                                //执行动作四:右转
    310.                         break;
    311.                 default:
    312.                         break;
    313.                 }
    314.         }
    315. }
    316. //=============================================================
    317. // 语法格式:        void IRQ5(void);
    318. // 实现功能:        中断服务子函数
    319. // 参数:                无
    320. // 返回值:                无
    321. //=============================================================
    322. void IRQ5(void)__attribute__((ISR));                        //运动定时控制
    323. void IRQ5(void)
    324. {
    325.         if(uiTimecont++ == uiTimeset)
    326.         {
    327.                 *P_IOB_Data = 0x0000;
    328.         }
    329.         *P_INT_Clear = 0x0004;
    330. }
    331.  
    332. //=============================================================
    333. // 语法格式:        int main(void);
    334. // 实现功能:        主函数
    335. // 参数:                无
    336. // 返回值:                无
    337. //=============================================================
    338. int main(void)
    339. {        unsigned int BS_Flag;                                                //Train标志位
    340.        
    341.         *P_IOA_Dir=0xff00;                                                        //初始化IOA,IOA0~7下拉输入
    342.         *P_IOA_Attrib=0xff00;
    343.         *P_IOA_Data=0x0000;
    344.        
    345.         *P_IOB_Dir=0x0f00;                                                        //初始化IOB,IOB8~11同向输出
    346.         *P_IOB_Attrib=0x0f00;
    347.         *P_IOB_Data=0x0000;
    348.        
    349.         BSR_DeleteSDGroup(0);                                                //初始化存储器RAM
    350.         BS_Flag=*(unsigned int *)0xe000;                        //读存储单元0xe000
    351.         if(BS_Flag==0xffff)                                                        //没有经过训练(0xe000内容为0xffff)
    352.         {
    353.                 TrainSD();                                                                //训练
    354.                 StoreSD();                                                                //存储训练结果(语音模型)
    355.         }
    356.         else                                                                                 //经过训练(0xe000内容为0x0055)
    357.         {
    358.                 LoadSD();                                                                //语音模型载入识别器
    359.         }
    360.        
    361.         PlaySnd(S_START,3);                                                        //开始识别提示
    362.         BSR_InitRecognizer(BSR_MIC);                                //初始化识别器
    363.        
    364.         while(1)
    365.         {       
    366.                 BSR();
    367.                 if((*P_IOA_Data)&0x0004)                                //是否重新训练
    368.                 {       
    369.                         F_FlashErase(0xe000);
    370.                         while(1);
    371.                 }
    372.         }
    373. }
    374.  
    375.  
    复制代码


     

    文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-208666-1-1.html

    展开全文
  • 51单片机实现智能小车的寻轨避障功能

    万次阅读 多人点赞 2017-05-10 14:46:50
    我们先来讨论智能小车的各个模块: 1.电机驱动 2.寻迹传感器 它具有四个引脚,分别是:VCC GND D0 A0,我们只需要用到三个引脚,AO不需要使用。一般智能小车上我们是安装两个,左边一个右边一个。 原理: ...


    我们先来讨论智能小车的各个模块:

    1.电机驱动


    2.寻迹传感器

    它具有四个引脚,分别是:VCC  GND  D0  A0,我们只需要用到三个引脚,AO不需要使用。一般智能小车上我们是安装两个,左边一个右边一个。

    原理:

    1.利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,反射器发射出去的红外光被大部分反射回来。于是传感器输出低电平0。
    2.当平面中有一条黑线,传感器在黑线上方时,因黑色的反射能力很弱,反射的红外光很少,打不到传感器动作的水平,所以传感器输出1。

    所以当探头经过黑线时,传感器上的开关指示灯会熄灭,输出的是高电平。如果没有经过黑线,一直保持低电平。

    3.红外传感器

    它具有三个引脚,分别是:VCC  GND  OUT

    有障碍物灯就会亮,所以有障碍物代表低电平,没有障碍物高电平。

    代码实现过程:

    我没有将寻轨和避障合并实现,而是分别调试的。

    #include <reg51.h>
    
    sbit IN1=P0^0;  //电机驱动模块引脚
    sbit IN2=P0^1;
    sbit IN3=P0^2;
    sbit IN4=P0^3;
    sbit Left_led=P0^4;  //寻轨模块引脚
    sbit Right_led=P0^5;
    
    sbit Left_bizhang=P0^6;//避障模块引脚
    sbit Right_bizhang=P0^7;
    
    
    unsigned char pwm_val=0;//变量定义,每次加1
    unsigned char push_val=0;//栈空比N/10
    
    //延时函数
    void delay(unsigned int k)
    {
    	unsigned int x,y;
    	for(x=0;x<k;x++)
    	{
    		for(y=0;y<2000;y++);
    	}
    }
    
    //前进
    void run(void)
    {
    	push_val=3;
    	IN1=1;
    	IN2=0;
    	IN3=1;
    	IN4=0;
    }
    
    //后退
    void backrun(void)
    {
    	IN1=0;
    	IN2=1;
    	IN3=0;
    	IN4=1;
    }
    
    //左转
    void leftrun(void)
    {
    	IN1=0;
    	IN2=0;
    	IN3=1;
    	IN4=0;
    }
    
    //右转
    void rightrun(void)
    {
    	IN1=1;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    //点击停止转动
    void stop(void)
    {
    	IN1=0;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    
    void pwm_out_moto(void)
    {
    	if(pwm_val <= push_val)
    	{
    
    		run();
    	}
    	else
    	{
    		stop();
    	}
    	if(pwm_val>=10)
    		pwm_val=0;
    }
    
    void timer0()interrupt 1 using 2
    {
    	TH0=0xFC;
    	TL0=0x18;
    	pwm_val++;
    	pwm_out_moto();
    
    }
    void main(void)
    {
    	P1=0x00;
    	TMOD=0x01;
    	TH0=0xFC;//定时1ms
    	TL0=0x18;
    	TR0=1;	
    	EA=1;
    	while(1)
    	{
    		run();
    		/*if(Left_led==0&&Right_led==0)
    		{
    			ET0=1;
    			run();
    		}
    		else
    		{
    			if(Left_led==0&&Right_led==1)
    			{
    				rightrun();
    			}
    			if(Right_led==0&&Left_led==1)
    			{
    				leftrun();
    			}
    		}*/
    
    		 if(Left_bizhang==1&&Right_bizhang==1)
    		 {
    		 	run();
    		 }
    		 else
    		 {
    		 	if(Left_bizhang==1&&Right_bizhang==0)
    		 	{
    
    		 		backrun();
    		 		delay(50);
    		 		leftrun();
    				delay(100);
    		 	}
    		 	if(Left_bizhang==0&&Right_bizhang==1)
    		 	{
    		 		backrun();
    		 		delay(50);
    		 		rightrun();
    				delay(100);
    		 	}
    		 }
    	}
    }
    



    展开全文
  • 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术。因此,基于嵌入式技术的无线通信...
  • 51单片机智能小车

    2020-07-29 14:20:06
    20、51单片机智能车(避障+循迹+声音+光敏+震动+触摸) (2)
  • 基于51单片机智能小车的设计与实现

    万次阅读 多人点赞 2018-04-02 10:28:13
    0引言学习智能小车系统,有助于提高搭建系统的能力和对自动控制技术的理解。智能小车是一个较为完整的智能化系统,而智能化的研究已成为我国追赶世界科技水平的重要任务。智能小车有它特有的特点:成本低,涉及的...
  • 大一暑假,在家自己动手做的。记录下 源码:
  • 之前做了一个andriod通过Wifi控制单片机的app,最近没事传上来,顺便赚点积分 app主要是界面更加友好,界面上有一个触控摇杆,四个拖动条(0-100),四个开关和四个按钮,作为控制,做遥控小车或者其他的手机端控制...
  • 基于51单片机的蓝牙遥控小车程序【硬软件部分】

    万次阅读 多人点赞 2020-03-07 12:55:20
    ****这是我写的第一篇博客,如果有问题欢迎指正...小车模型一个(直流电机一对) 电池18650一对 HC-08蓝牙模块 蓝牙模块主要要掌握其基本参数以及工作原理即可,附下图。 L298模块 l298内部包含4...
  • WiFi智能小车

    万次阅读 2019-07-14 01:53:34
    WiFi智能小车是利用本APP作为控制端,通过手机连接wifi模块(路由器)以获得wifi信号,同时车载也连接wifi模块以获得和手机相同的IP地址,实现手机和小车的连接,然后利用PC或手机上的控制软件以wifi网络信号为载体...
  • 51单片机控制红外避障小车

    千次阅读 多人点赞 2019-04-28 11:48:18
    51单片机控制红外避障小车 产品图片
  • 其实前几周就已经将小车调好并且也发了视频,但是每天忙于复习,也没有时间来对小车的流程设计、硬件设计、程序编写进行一个总结,正好周五可以休息一下,就分三个模块对这个智能小车项目进行一个总结。 这个小项目...
  • 51单片机的超声波智障(避障)小车

    万次阅读 多人点赞 2020-01-20 21:24:51
    51单片机制作的超声波智障(避障)小车 最近在学习51单片机,暑假闲着无聊,便从网上买了个51单片机和一些传感器模块,不知怎么的突然想起小时候对小车的痴迷,于是便准备利用暑假时间做一超声波避障小车,就算是对...
  • 51单片机寻迹小车完整程序

    万次阅读 多人点赞 2016-09-25 23:10:35
    哈哈哈,今天终于把小车调成功了耶!!! 费了好大劲去调PWM波把速度降下来,然后写转弯,左转大湾,左转小湾,右转大湾,右转小湾,四个红外收发管,所以就写了四个转弯的状态. P1是用来控制电机的端口,IN~控制前进...
  • 这个是蓝牙小车的下篇,上篇的地址为:http://blog.csdn.net/lpstudy/article/details/78992038。 源代码: https://github.com/lpstudy/bluetooth-car 此帖子为昨天发的帖子...
  • 51单片机循迹小车源程序

    万次阅读 2017-03-20 19:16:42
    自动循迹小车程序(51) #define P_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Dir (volatile unsigned int *)0x7002 #define P_IOA_Attrib (volatile unsigned int *)0x7003 unsigned...
  • 接下来我对所用的模块以及小车的硬件部分做一个讲解 小车的总体效果图如下: 首先是模块简介: 1、首先就是L298N,这是一个经典的电机驱动,相信基本所有玩过单片机,玩过电机的人都使用过,它可以最高容忍15v...
1 2 3 4 5 ... 20
收藏数 1,700
精华内容 680
关键字:

单片机智能小车