查看: 14180|回复: 14

[教程] Arduino+L298N小车实例教程

[复制链接]
  • TA的每日心情
    无聊
    2019-7-1 18:52
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2018-12-25 16:08 | 显示全部楼层 |阅读模式
    (第一次写教程,如有错漏,敬请拍砖)
    Arduino+L298N小车实例教程
    Arduino小车是一个非常常见且经典的实例,在搭建了小车以后,我们就可以通过在小车上安装超声波、红外感应、舵机机械手、蓝牙等各种外接传感器和部件,将其改造成寻迹、避障、遥控、机械手等各类智能小车,不仅对于我们学习Arduino非常有帮助,而且项目本身也非常具有可玩性,还具有无限的扩展性。但很多Arduino初学者常常在网上购买了小车底盘、马达和轮子等设备后,却无法正确的对小车进行控制,卡在了第一步上。究其原因,主要是对于Arduino如何驱动马达没有理解透彻,网上的很多教程也基本是属于泛泛而谈,没有针对其软硬件进行系统介绍,导致很多初学者在碰到问题时不知道问题出在什么地方。
    本教程针通过对“Arduino+L298N+TT马达”组成的基本小车项目进行详细简介,希望对你加深了解Arduino小车项目有所帮助,也希望你能够在此基础上进一步挖掘,在此基本小车的基础上添加更多功能,开发出有自己个性风格的智能小车。
    一、电机驱动模块简介:
    常见的马达电机驱动模块有红色和绿色两种板子,即L9110和L298N两种驱动板,如下图所示:
    L298N+L9110.jpg
    由于L298N具有更大的电压范围和供电电流,因此,常见的智能小车均以L298N居多。L9110因其体积更小,在一些对体积要求较高无需载重等要求的项目中常常使用它居多。两者在硬件连接上基本差不多,程序也可通用。因此本教程将以红板L298N为例进行介绍。
    L298N是一种高电压、大电流电机驱动芯片,最高工作电压可达46V,输出电流大,瞬间峰值可达3A,持续工作电流2A,额定功率25W,内含2个H桥高电压大电流全桥驱动器,可用来驱动直流电机和步进电机等,有两个使能控制端,可驱动1个两相或四相步进电机或者2个直流电机。因此,其实你在学会本教程中利用L298N驱动小车的实例后,也可以试试用类似的方法驱动步进电机了。
    二、   零件清单:
    Arduino Nano主板1块;
    L298N电机驱动板1块;
    TT马达2个;
    9V电池1块;
    开关1个;
    小车1架(底板+2个轮子+1个万向轮);

    三、电路连接图:
    L298N+Arduino逻辑连接图.png
    上图为逻辑连接图,适合已经有一定硬件连接的同学直接学习,这样的逻辑图简单直观,易于操作。
    L298N+Arduino虚拟连接图.jpg
    这是模拟仿真连接图,对于新手和初学者,可对照着上图进行连接,更加接近实际情况。其中有一点需要特别注意,就是上图中的外接电源需要7~12V,但是图中由于画图软件的限制只显示了两节5号电池的图样,千万不要搞错,两节其实是不够的,在实际操作时可直接用9V电池替换,如下图所示:
    9V电池.jpg
    四、L298N与Arduino的连接方法及注意事项:
    L298N.jpg
    下面我们来了解下L298N的各个接口和引脚,如上图所示。引脚虽然较多,但按照说明一个个连接完全不用担心出错。
    1、首先我们来看信号输出引脚,也就是将控制信号从L298N传送至马达的接口,总共有4个引脚,即位于两侧的输出A(OUT1和OUT2)和输出B(OUT3和OUT4),他们分别与TT马达相连,接线不用分顺序,直接将螺丝拧松后插入线头再拧紧即可。
    2、再来看输入信号引脚,也就是图中标识的“逻辑输入”所包含的4个引脚(IN1、IN2、IN3、IN4)。其中IN1和IN2对应控制输出A,IN3和IN4对应控制输出B,因此,IN1~IN4对应接Arduino的4个数字口即可,在上述的电路连接图中,对应的就是Arduino的2,3,4,5四个接口,只需要给这四个口不同的高低电平信号,即可让输出A和输出B产生正转、反转和停止的效果,具体的信号输入与输出关系如下表所示(另一个马达类似,不再赘述):
      
    马达旋转方式
      
    IN1
    IN2
    正转
    反转
    停止
    停止
    其实在具体实践时,无需去记这个表格,只需要在连接时保证两个接口输入电平信号不同即可转动,至于转动的方向,如果发现反了,只需要调换两个接口即可。
    3、使能信号接口:
    L298N上的两个使能信号接口“通道A使能(ENA)”和“通道B使能(ENB)”,其作用是对马达进行调速(通道A控制输出A,通道B控制输出B)。两个使能接口默认是跳线帽扣上的,如果小车无需变速(马达运转时保持最高功率运行),则这两个接口不用动,直接用跳线帽扣上即可,如果小车需要变速(马达转速可调),则这两个跳线帽需要拔掉,并将外侧标有ENA和ENB字样的针脚分别连接Arduino的3,5,6,9,10,11等几个支持PWM输出的任意数字口,并在程序中通过AnalogWrite()语句实现速度快慢的调节。
    4、最后来看一下供电接口:
    总共有4个关于供电的接口,其中12V供电口接7-12V外接电源,切记此处不可从Arduino直接接5V使用,这样会导致电流不够无法驱动马达。
    供电GND要接两条线,分别与12V供电电源的负极和Arduino的GND引脚相连,这样两者的GND参考电压也就一致了。
    5V供电接口和板载5V使能分两种情况:
    一种是当外接电源在7~12V之间时(常规应用,也是推荐的做法),则可以让板载5V使能接口保持默认状态(扣上跳线帽),此时L298N由自身(7~12V)对其内部逻辑电路进行供电。如果Arduino本身已经有外接电源供电,则此时的5V供电接口应留空,不输入电压;而如果L298N和Arduino共用一块电池供电,即都采用7~12V外接电源供电,则此时5V供电接口可直接连Arduino板的Vin,将其作为Arduino板的输入电压。
    另一种情况是当外接电源高于12V时(12~24V),比如需要驱动电压较高的电机时(非常规应用),则此时板载5V使能的跳线帽必须要拔掉,并在5V供电接口处接上Arduino的5V引脚,以便对L298N内部逻辑电路进行5V供电(个人猜测可能当外接高于12V的电压时,如果仍然用此电压对L298N内部逻辑电路进行供电,可能会烧掉)。
    五、Arduino程序编写:
    对于利用Arduino+L298N对小车进行控制的程序来说,非常简单,如果不需要PWM调速,则直接将四个IN逻辑输入接口所连的Arduino数字端口分别写入高低高低等电平即可启动电机,具体代码如下:
    void setup() {
    //初始化各IO,模式为OUTPUT 输出模式
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    //默认电机停止转动,全部设为低电平
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    }
    void loop() {
          //forward 前进
         digitalWrite(2,HIGH); //给高电平
         digitalWrite(3,LOW); //给低电平
         digitalWrite(4,HIGH); //给高电平
         digitalWrite(5,LOW); //给低电平
        }
    而如果需要对小车进行调速控制,则只需在上述代码的基础上加上analogWrite函数进行PWM调速即可,代码如下:
    analogWrite(9,255);//左轮全速运行
    analogWrite(10,128);//右轮半速左右运行
    当然,其中的速度可利用变量进行进一步的控制和调整。
    六、结语:

    在研究了所有这些内容后,我也做了一个演示用的小车,如下图所示(请忽略那乱七八糟的连线吧),这就是一辆还没有任何控制功能的基本版小车,只有一个开关来负责接通电源。
    小车实物图.jpg
    基本上,到这里,你应该已经掌握了Arduino连接L298N的方法以及其背后的原理和原因了,应该也已经可以让这台Arduino小车跑起来了。至于后面如何控制小车的方向、速度及其他更多的应用,我想在你学习了Arduino中各种红外或者蓝牙等技术后,就可以进行进一步的控制了。希望你可以以此小车为出发点,开发出更多更好玩更新奇的作品,也希望你可以共享你的作品制作过程。


  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2018-12-27 14:06 | 显示全部楼层
    十分不建议用图上的9V电池,如你图上的碱性电池还能凑合用几分钟,而很多人图便宜买的是碳性9V叠层,根本带不动电机负载,出现很多莫名其妙的问题,会给新手造成困惑;可以改用双锂电池或者多节电池的电池盒~
    打赏一点,努力一点

    1人打赏

  • TA的每日心情
    无聊
    2019-7-1 18:52
  • 签到天数: 6 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-12-28 14:05 | 显示全部楼层
    sun910231 发表于 2018-12-27 14:06
    十分不建议用图上的9V电池,如你图上的碱性电池还能凑合用几分钟,而很多人图便宜买的是碳性9V叠层,根本带 ...

    多谢指教
  • TA的每日心情
    无聊
    2019-7-1 18:52
  • 签到天数: 6 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-12-28 14:08 | 显示全部楼层
    sun910231 发表于 2018-12-27 14:06
    十分不建议用图上的9V电池,如你图上的碱性电池还能凑合用几分钟,而很多人图便宜买的是碳性9V叠层,根本带 ...

    两节18650会不会好一点?
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2018-12-28 14:42 | 显示全部楼层
    zfoo 发表于 2018-12-28 14:08
    两节18650会不会好一点?

    当然最好~~2节18650 很好用~
    教程写的很详细,对新手帮助很大~
    打赏一点,努力一点

    该用户从未签到

    发表于 2018-12-29 12:44 来自手机 | 显示全部楼层
    楼楼,想请教一下,如何将红外循迹,和超声波避障融合到一起呢?我尝试了好多办法,要不就是只循迹,不避障;要不就是只避障,不循迹;最后就是卡卡的,循迹循到一半,就卡了,一边轮子不动了,或者是循迹循到一半,就开始瞎跑,去避障了……
  • TA的每日心情
    无聊
    2019-7-1 18:52
  • 签到天数: 6 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-1-2 08:18 | 显示全部楼层
    刚好遇见你 发表于 2018-12-29 12:44
    楼楼,想请教一下,如何将红外循迹,和超声波避障融合到一起呢?我尝试了好多办法,要不就是只循迹,不避障 ...

    我也还没有研究到这一步呢。
  • TA的每日心情
    难过
    2019-2-20 18:19
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-2-26 14:56 | 显示全部楼层
    不知道是我的驱动板有问题还是电池的问题,连上去后电机不转
  • TA的每日心情
    开心
    2019-2-27 10:21
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-2-27 11:10 | 显示全部楼层
    OK,不错的尝试

    该用户从未签到

    发表于 2019-3-2 20:53 | 显示全部楼层
    感谢!最近正好在学!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    Blink——Arduino的Hello World!
    Blink——Arduino的Hello
    本教程节选自《Arduino程序设计基础》 Arduino编程基础(零)——Blink,Arduino的He
    ATmega2560-16AU刷BootLoader好慢
    ATmega2560-16AU刷BootLoa
    各位朋友,ATmega2560-16AU刷BootLoader好慢,有没有比较快的办法,一块板子要5分钟左
    【Arduino】108种传感器模块系列实验(104)---MAX30102手腕心率
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表