前言:
在学玩51单片机或者stm32的你,可能第一时间会做一个属于自己的智能小车,不仅仅可以把自己所学的理论转换为实际,也能提高自己的动手能力,拥有属于自己的第一辆智能小车,可以说是每一个刚刚初学嵌入式的学生的一个梦想,毕竟,谁不想年纪轻轻就有一辆自己的小车呢?
我这里会将智能小车的原理和实现过程,大概的讲给你听,因为网上关于小车开源的项目太多了,我讲详细也是多此一举,我这个可以帮你快速理解智能小车,让你在之后的学习上,更加得心应手。
效果图:
模块介绍:
电源模块:
电源模块,顾名思义,供电的,毕竟没电,车怎么跑起来呢。
电机模块:
车要动起来,轮子得有吧,所以得有电机,来驱动小车。
车转弯:
车怎么转弯呢?我们知道,轮子与地板接触,会有摩擦,如果这个时候,左轮的速度比右轮快呢?这个时候,车会右转,反过来也一样的道理,右轮比左轮快的时候,小车也就会左转。如果连转动的方向都不同的话,那么,转弯幅度就大幅加大,前提是摩檫力够,放在光滑的地板上,根本转不动,小车也就没用了。
车前进和后退:
我们一般只用两个电机来驱动小车,左边一个轮子,右边一个轮子,前进就同时往前滚,后退就同时往后滚。
车轮转动的方向怎么改变?
首先要知道,电机有两个电极,如果两次接入的正负极不一样,这样,电机转动的方向也会不一样,所以,改变正负极,就能改变电机的转动方向,那么怎么改变正负极呢?这就是电机驱动芯片干的活了,图上的电机驱动芯片能同时驱动两个电机,改变正负极的引脚分别是IN1、IN2和IN3、IN4。1和2一组,3和4一组,我们用单片机的一个GPIO引脚来控制它,当IN1为高电平且IN2为低电平,这个时候,正转。当IN1为低电平且IN2为高电平,这个时候,反转。我们就可以编写一个函数,分别对这一组引脚进行改变,实现正反转。
车轮的转动速度怎么改变?
电机转动的速度,取决于电压输入的大小,但是,我们的单片机没有模拟输出功能,这个时候可以用pwm来模拟模拟电压,通过改变占空比来控制电机转动的速度。我们这一块芯片,有两个使能引脚,一个为EN1,另一个为EN2,当引脚为有效电平的时候,电机驱动芯片才能工作,我们只需要用pwm来控制使能端,就能控制电机输出电压的pwm,从而实现数字电压到模拟电压的转变,实现电机速度的控制。对51单片机来说,可以用定时器中断,设定相应的时间就对使能引脚翻转,然后编写一个函数,通过修改定时器参数,就可以输出一个自己可以控制占空比的pwm,当然,速度的决定因素是占空比,但是如果pwm的频率过大,电机会发出一些令人不适的噪音,可以适当调节一些频率。对stm32来说,输出pwm可太简单了,利用定时器通道,就可以输出自己想要的pwm。
蓝牙模块以及红外遥控模块:
我们可以通过这两个模块来实现对小车运动的控制。
红外遥控模块:
- 红外遥控模块通过接收红外线信号来实现通信。通常情况下,红外遥控器会发射特定编码的红外信号,然后红外接收模块接收并解码这些信号,将其转换为数字信号供单片机处理。
- 单片机可以通过检测红外信号的特定编码来识别用户的操作,比如前进、后退、左转、右转等命令,然后相应地控制电机驱动芯片的引脚,从而控制电机。
蓝牙模块:
- 蓝牙模块通过蓝牙技术与其他设备进行通信。
- 单片机与蓝牙模块通过串口通信进行连接,单片机可以接收来自蓝牙模块的数据,比如指令或控制信号。
- 用户可以通过连接到单片机的蓝牙模块的手机应用程序发送指令,比如前进、后退、左转、右转等,单片机接收到这些指令后,再相应地控制智能小车的运动。
超声波模块:
单片机通过超声波模块进行距离测量的基本原理如下:
1. 发射超声波信号:超声波模块内部包含一个超声波发射器(通常是一个压电晶体),当触发测距时,单片机发送一个触发信号给超声波模块,使其发射一束超声波信号。
2. 接收回波信号:超声波信号被发射后,它会在与物体碰撞或反射后返回到超声波模块。超声波模块内部包含一个接收器,用于接收这些回波信号。
3. 计算距离:单片机在发送触发信号后开始计时,当接收到回波信号时,停止计时。通过计算触发信号发送与接收到回波信号之间的时间差,可以确定超声波的往返时间。由于超声波在空气中的传播速度是已知的,因此可以使用时间差和传播速度来计算物体与超声波模块之间的距离。
4. 距离计算公式:超声波的往返时间(t)与距离(d)之间的关系可以由以下公式表示:
距离=时间*声速/2。
需要注意的是,超声波模块测距的精度受到多种因素的影响,包括超声波模块的性能、环境条件(如温度、湿度等)、物体的形状和表面特性等。因此,在实际应用中需要进行校准和适当的误差处理。
红外避障与循迹模块:
我们首先要知道,红外线是可以反射的,当在非黑色的材质下,材质对红外线的吸收非常小,射出的红外光大部分都会反射回来,如果是在黑色材质下,材质对红外线的吸收就非常大了。我们先说一下循迹模块,这个时候,我们可以在地面上画一个黑线,此时红外发射和接收管都对着地面,如果感受不到红外线的反射,说明车在黑线上面,如果感受到了红外线的反射,说明车不在黑线上面 ,这个时候说明车偏离了航线。避障模块也是同样的道理,红外模块只需要放在车头的位置,红外线反射的强弱也和距离有关系,通过接收头感应红外线的强度大小,设定合理的临界值,车就可以识别出障碍物,但是一般用超声波模块避障,因为超声波不受反射物材质的影响。
这个模块有几个电位器,他的作用就是通过改变比较电压的值,红外接收模块会通过红外接收的感应强度来改变输出电压值的大小,通过来设置红外接收的阈值感应强度,当你觉得识别不出黑线的时候,或者全识别出是黑线,可以通过改变电位器,来设置一个合适的范围。
搭建模块:
我们既然要做一个自己的小车,那么它所有的组成,都需要我们一步步的组成,我们该如何下手呢?首先,既然知道各个模块的作用以及原理,那么我们就可以根据自己的主控,51或者32为核心来绘制电路板,我这里使用的嘉立创EDA。
先去绘制一份原理图,每个模块对应的芯片有很多种,这里并不需要和我的一模一样,只需要能实现功能即可,我们需要去查阅芯片手册,来查看各种芯片,最后决定我们该选哪一个,以及原理图怎么绘制才合理。
然后将原理图转换为PCB,接下来就是走线环节了,这个过程是漫长的,我也是第一次画,也没什么经验,所有也走的很乱,但是,当我接完之后,我还是得出了一些经验,所以,大胆去连,什么都得有第一次。
编写代码:
如果PCB绘制完后,打板完,街上模块,先烧录几个测试程序,如果说板子没有问题,这个时候就可以进入编写代码环节。
记住,要有良好的编程习惯,一个模块有一个文件,各个引脚可以用宏定义,方便以后的移值。
结束语:
这篇文章对智能小车的各个模块进行的粗略的介绍,帮你快速了解小车各个模块的作用以及工作原理,和代码该如何编写,具体是操作过程需要你之后一步步进行实操, 希望各位能早日提车。