news 2026/6/13 0:58:52

Arduino入门教程二十一|L298N驱动直流电机(串口控速控向+缓启停+LM35温度自动调速)保姆级教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Arduino入门教程二十一|L298N驱动直流电机(串口控速控向+缓启停+LM35温度自动调速)保姆级教程

我整理了一套Arduino零基础 从入门到高级 完整系统课程,包含视频讲解、全套源码、接线图纸、库文件、ESP32/ESP32-S3 摄像头 & 物联网实战项目,循序渐进,新手也能零基础吃透。需要系统学习可以查看我主页专属课程(零基础保姆级Arduino教程从入门到实战_在线视频教程-CSDN程序员研修院)。

📌文章摘要

本文针对Arduino新手、高校实训、机器人入门学习者,带来L298N模块驱动直流电机全套实操教程。全程零基础友好,从直流电机转动底层物理原理、L298N模块H桥驱动逻辑、引脚定义与接线规范讲起,手把手实现串口指令精准控制电机方向与PWM无级调速,拓展电机缓加速、缓减速循环往复进阶实验。同时新增热门实训:LM35温度传感器自动调节电机转速实验(工业常用线性测温传感器,高温快转、低温慢转),搭配详细调参技巧、全套可运行源码与完整故障排查方案,所有代码实测可用、注释详尽,适配课程实训、结课作业、科创项目、智能温控散热场景。

🔥前言

直流电机驱动是Arduino智能硬件开发的核心基础知识点,绝大多数智能小车、移动机器人、自动控制设备、智能散热系统,核心执行单元都是直流电机。而L298N模块凭借性价比高、接线简单、稳定性强、双路独立驱动的优势,成为新手入门的首选电机驱动模块。

网上多数教程仅基础串口调速,缺少传感器联动智能控制,无法满足实训加分、科创作业需求。本文在基础实验之上,新增LM35线性温度传感器智能调速实战,实现模拟设备温控散热、智能调速逻辑,原理通俗、代码开源可直接跑,零基础也能一次实操成功。

一、直流电机核心工作原理(通俗详解)

1.1通电旋转底层逻辑

直流电机转动的核心物理原理:磁场对通电导体产生安培力

电机内部固定N、S两极磁场,通电线圈置于磁场中,通电后线圈受安培力产生位移;通过机械结构设计,将直线受力运动转化为圆周旋转运动,最终实现电机持续转动。

1.2换向器:电机持续转动的关键

很多新手疑惑:为什么线圈转到平衡位置不会卡住?核心依靠换向器

换向器由两个绝缘金属半圆环组成,核心作用:当线圈旋转至磁场受力平衡、即将停滞时,自动切换线圈内部电流方向,保证线圈受力方向始终一致,杜绝卡顿、停顿、反向现象,实现电机单向持续旋转。

核心总结:通电导体磁场受力 + 换向器自动换向 = 直流电机连续稳定旋转

二、电机正反转控制核心逻辑

直流电机无需修改硬件结构,仅通过改变电机两端电流正负极输入方向,即可切换旋转方向:

  • 正向通电 → 电机顺时针正转
  • 反向通电 → 电机逆时针反转

⚠️重要避坑知识点:Arduino主控板IO口输出电流极小,无法直接驱动直流电机,强行直连会瞬间烧毁主板引脚!必须搭配L298N H桥驱动模块,实现电流放大、正反转切换与PWM无级调速,同时隔离大电流,保护主控板。

三、L298N驱动模块超全解析

L298N是入门级双路H桥电机驱动模块,可同时独立驱动两路直流电机,适配各类小型直流电机,是智能硬件开发的标配模块。

3.1核心硬件参数(新手必看)

  • 驱动芯片:L298N双H桥专用驱动芯片
  • 驱动电压:电机外接5-12V直流电源,适配绝大多数小型直流电机
  • 驱动电流:单路最大2A,自带散热片,支持中小功率电机稳定运行
  • 核心功能:双路电机独立控制、正反转切换、PWM无级调速
  • 供电模式:外置独立供电,实现主控与电机大电流隔离,保护主板

3.2引脚功能详细说明

  • 12V电源接口:接入5-12V外接电源,为电机单独供电
  • GND:公共地线,必须与Arduino GND共地,否则信号失效
  • 5V输出:模块稳压输出5V,可反向给Arduino供电(新手不推荐)
  • ENA/ENB:电机A、B调速引脚,接收PWM信号实现无级调速
  • IN1IN2/IN3IN4:电机A、B方向控制引脚,普通IO电平控制
  • OUT1OUT2/OUT3OUT4:对应连接直流电机两极

3.3强制使用注意事项(杜绝烧板烧模块)

  • 电机必须外接独立电源供电,严禁用Arduino主板5V引脚直供,防止大电流倒灌烧毁主控板
  • 所有接线必须断电操作,严格区分电源正负极,避免接反烧毁模块
  • 模块GND与Arduino GND必须可靠共地,这是电机正常工作的前提
  • 实验结束及时断开电机外接电源,避免模块长期通电老化损坏

四、标准化接线方案(即插即用)

本次所有实验统一采用电机A通道控制,固定接线引脚,代码无需修改,直接适配所有标准Arduino主板。后续新增LM35温度调速实验仅新增传感器接线,不改动原有电机接线。

L298N模块引脚

Arduino控制引脚

功能定义

工作模式

IN1

4

电机A正向控制

普通IO输出

IN2

7

电机A反向控制

普通IO输出

ENA

5

电机A速度调速

PWM模拟调速

GND

GND

公共地线

共地连接

电机接线说明:电机两根导线任意接入L298N OUT1、OUT2接口,无固定正负极,仅影响默认转向,不影响调速与控制逻辑。

五、PWM无级调速原理(通俗易懂)

本次所有调速实验均采用Arduino PWM信号实现无级调速,无固定档位,转速顺滑可控,核心依靠占空比调节平均输出电压

  • PWM数值区间:0 ~ 255
  • 0:无输出电压,电机完全停止
  • 255:满电压输出,电机最大转速运行
  • 数值越大,平均电压越高,电机转速越快

相比传统档位调速,PWM调速可实现缓启停、无级变速、顺滑过渡,完美适配精准控制、智能温控场景。

六、核心实验一:串口指令控制电机方向+速度

6.1实验需求

通过电脑串口监视器发送自定义指令,远程控制直流电机的旋转方向与运行速度,支持精准调速、正反切换,非法指令自动停机保护。

6.2统一指令规则

指令格式:r+数字/ l+数字(无空格,输入后回车生效)

  • rxxx:电机顺时针正转(例:r125 = 正转,速度125)
  • lxxx:电机逆时针反转(例:l80 = 反转,速度80)
  • 非法指令/空指令:电机立即停止运行
  • 数值超0-255区间:程序自动约束,避免报错异常

6.3实验执行逻辑

  1. 初始化串口通信(9600波特率)与控制引脚为输出模式
  1. 循环检测串口输入数据,逐字符拼接完整指令
  1. 解析指令首字符,判断电机旋转方向
  1. 解析后续数字,约束PWM速度区间0-255
  1. 配置IO口电平切换转向,PWM信号输出调速
  1. 识别非法指令,执行停机保护并串口提示

6.4完整实测源码(注释超全、直接运行)

cpp
// L298N模块-直流电机串口控速控向实验
// 适配本文固定接线,零基础直接编译烧录
const int IN1 = 4; // 电机A正向控制引脚
const int IN2 = 7; // 电机A反向控制引脚
const int ENA = 5; // 电机A PWM调速引脚

String cmd = ""; // 存储串口接收指令

void setup() {
Serial.begin(9600);
// 初始化所有控制引脚为输出模式
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);

// 上电初始状态:电机停止,杜绝误启动
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);

// 串口初始化提示
Serial.println("===== L298N电机控制系统启动成功 =====");
Serial.println("指令规则:r+数值(正转) / l+数值(反转)");
Serial.println("速度数值范围:0-255 | 输入错误自动停机");
Serial.println("示例:r125=正转125速度 | l80=反转80速度");
}

void loop() {
// 检测串口是否有输入数据
if(Serial.available() > 0){
char ch = Serial.read();
// 回车符判定指令输入完成,开始解析
if(ch == '\n'){
if(cmd.length() > 1){
char dir = cmd[0]; // 提取方向指令
int speed = cmd.substring(1).toInt(); // 提取速度数值

// 强制约束速度区间,防止参数异常报错
speed = constrain(speed, 0, 255);

if(dir == 'r'){
// 顺时针正转逻辑
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, speed);
Serial.print("运行状态:正转 | 当前速度:");
Serial.println(speed);
}
else if(dir == 'l'){
// 逆时针反转逻辑
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, speed);
Serial.print("运行状态:反转 | 当前速度:");
Serial.println(speed);
}
else{
// 非法指令停机保护
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
Serial.println("指令错误!电机已停止,请输入规范指令");
}
}
cmd = ""; // 清空指令,等待下次输入
}
else{
cmd += ch; // 逐字符拼接指令
}
}
}

6.5实验现象说明

  • 输入 r125:电机平稳顺时针正转,中等速度稳定运行
  • 输入 l200:电机高速逆时针反转,动力充足
  • 输入乱码、纯数字、错误字母:电机立即停机,串口弹窗提示错误
  • 输入数值>255或<0:程序自动修正为极限数值,保证设备安全

七、核心实验二:LM35温度传感器自动调速电机(高分实训项目)

本章节为实训高频加分项目,替换常用的LM35线性温度传感器,相比NTC热敏电阻,LM35具备线性度高、测温精准、电路简单、稳定性强的特点,是高校Arduino温控实验、智能散热项目的标配传感器。本实验模拟设备温控散热场景,实现温度联动电机无级调速,高温全速散热、低温待机节能,适配课程作业、科创设计。

7.1 LM35传感器简介

  • 测温范围:0℃ ~ 100℃,完全满足常规实训场景
  • 输出特性:线性模拟输出,10mV/℃,温度换算简单精准
  • 工作电压:4V~30V,兼容Arduino 5V供电,接线极简
  • 优势:无非线性误差、数据波动小、新手零门槛调试

7.2实验硬件准备

原有L298N、电机、电源硬件不变,新增:LM35温度传感器

7.3 LM35专属接线规则(全程不改电机接线)

电机沿用前文固定接线方式,仅需新增LM35传感器接线,接线极简无分压电阻:

  • LM35 VCC(左脚) → Arduino 5V
  • LM35 GND(右脚) → Arduino GND
  • LM35 OUT(中间脚) → Arduino A0 模拟输入引脚

7.4实验控制逻辑

Arduino读取LM35模拟电压信号,精准换算为环境温度,采用分段线性调速逻辑,转速随温度平滑变化,无档位突变:

  • 温度 30℃以下:电机停止,节能待机
  • 温度 30℃~45℃:低速递增运转(PWM 80~150)
  • 温度 45℃~60℃:中高速递增运转(PWM 150~220)
  • 温度 60℃以上:电机全速运转(PWM 255),强力散热

7.5 LM35温度调速完整实测源码

cpp
// L298N电机+LM35温度自动调速实验
// 线性测温、精准调速、智能温控散热
// 接线严格对应:LM35中间脚接A0
const int IN1 = 4;
const int IN2 = 7;
const int ENA = 5;
const int LM35_PIN = A0; // LM35温度传感器信号引脚

float temperature = 0.0;
int motorSpeed = 0;

void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);

// 固定电机正向旋转方向
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
Serial.println("===== LM35智能温控调速系统启动 =====");
}

// LM35精准温度换算函数(标准10mV/℃)
float readLM35()
{
int adcValue = analogRead(LM35_PIN);
// Arduino 5V基准电压,10位ADC分辨率1023
float voltage = adcValue * (5.0 / 1023.0);
// LM35标准公式:温度 = 输出电压 / 0.01
float temp = voltage / 0.01;
return temp;
}

void loop() {
temperature = readLM35();

// 分段智能调速逻辑
if(temperature < 30.0)
{
motorSpeed = 0; // 低温停机节能
}
else if(temperature >= 30.0 && temperature < 45.0)
{
motorSpeed = map(temperature, 30, 45, 80, 150);
}
else if(temperature >= 45.0 && temperature < 60.0)
{
motorSpeed = map(temperature, 45, 60, 150, 220);
}
else
{
motorSpeed = 255; // 超温全速散热
}

// 转速区间约束,保护设备
motorSpeed = constrain(motorSpeed, 0, 255);
analogWrite(ENA, motorSpeed);

// 串口打印数据,方便调试观测
Serial.print("环境温度:");
Serial.print(temperature, 1);
Serial.print(" ℃ | 电机PWM转速:");
Serial.println(motorSpeed);

delay(200);
}

7.6实验现象与精细化调参技巧

  • 手捏LM35传感器升温:温度数值平稳上升,电机转速线性递增,过渡顺滑无抖动
  • 松开传感器自然降温:温度缓慢下降,电机自动降速,低于30℃自动停机待机
  • 可自定义温度阈值:修改30℃、45℃、60℃数值,适配不同散热场景
  • 可调整转速区间:修改map函数参数,自定义温度与转速对应关系
  • 数据稳定优化:增大delay数值,可进一步降低温度数据跳动

八、进阶实验:电机缓加速+缓减速往复实验

常规启停存在急停急转、抖动明显的问题,本实验通过PWM数值渐变,实现平滑缓启停、循环往复运行,适配机器人、智能小车等高精度场景。

8.1实现思路

  1. 初始化电机正向旋转,初始速度为0(静止状态)
  1. 通过循环自增PWM数值,逐步提升电压,实现平稳缓加速
  1. 速度达到最大值255后,循环自减数值,实现平滑缓减速
  1. 减速至0后短暂延时,自动重启循环,实现往复运行

8.2进阶完整源码

cpp
// L298N电机缓加速、缓减速循环往复程序
// 无抖动、无急停,适配智能设备精准控制
const int IN1 = 4;
const int IN2 = 7;
const int ENA = 5;

int speed = 0; // 电机速度变量
int step = 5; // 调速步长(越小启停越顺滑)

void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);

// 固定电机正向旋转方向
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
Serial.println("缓启停往复程序启动!");
}

void loop() {
// 阶段1:0~255 缓慢加速
for(speed = 0; speed <= 255; speed += step){
analogWrite(ENA, speed);
delay(30); // 控制加速快慢,数值越大加速越慢
}

// 阶段2:255~0 缓慢减速
for(speed = 255; speed >= 0; speed -= step){
analogWrite(ENA, speed);
delay(30); // 控制减速快慢
}

delay(500); // 停机缓冲延时,循环往复
}

8.3精细化调参技巧

  • 提升顺滑度:减小step步长(如3)、适当缩短delay延时,过渡更细腻,几乎无抖动
  • 提升响应速度:增大step步长(如8-10)、延长delay延时,启停响应更快
  • 调整停机间隔:修改末尾delay(500)数值,可改变停机等待时长

九、高频故障排查(新手100%适配)

汇总实验中最常见的各类问题,精准定位、快速解决,告别反复踩坑:

  • 电机完全不转:检查外接电源是否通电、模块与Arduino GND共地、接线引脚是否匹配、PWM速度是否为0、IO口电平是否正常
  • 只能单向旋转:排查IN1/IN2接线松动、代码高低电平逻辑错误、引脚定义混淆问题
  • 调速无明显变化:电机空载特性导致,空载低速差异不明显,搭载负载后调速效果清晰
  • 模块发热严重:排查电机短路、电源电压过高、电机过载,立即断电检修
  • 程序运行正常,电机无响应:重点检查模块使能端悬空、接线虚接、电源正负极接反
  • 串口指令失效:指令无空格、严格遵循r/l+数字格式,输入完成必须回车确认
  • LM35温度数值为0/无变化:检查传感器三脚接线顺序、A0引脚是否占用、5V供电是否正常
  • 温度数值跳动偏大:增加采集延时、确保GND共地可靠,减少信号干扰
  • 温度正常但电机不调速:核对电机接线、PWM调速引脚是否对应、代码调速逻辑是否开启

十、技术总结与学习延伸

本文完整覆盖Arduino+L298N直流电机驱动的入门全链路+LM35温控进阶拓展,通过原理+接线+多实验源码+调参+排错的闭环教学,帮助零基础学习者快速掌握核心技能:

  1. 吃透直流电机旋转底层原理与换向器核心作用,理解硬件运行逻辑
  1. 掌握L298N H桥驱动原理,熟练通过电流换向实现电机正反转控制
  1. 熟记标准化接线方案,区分方向控制引脚与PWM调速引脚,规避接线错误
  1. 掌握串口指令解析、速度方向分离控制的编程思路,实现精准调速控向
  1. 熟练运用PWM渐变逻辑,实现电机平滑缓启停,夯实自动控制基础
  1. 精通LM35线性温度采集+电机智能调速闭环逻辑,掌握主流传感器联动控制技术,适配各类实训、科创加分项目

本教程内容是智能小车、机械臂、自动避障机器人、智能温控散热设备等进阶项目的核心基础,熟练掌握后可快速拓展双电机差速转向、红外调速、超声波避障等进阶功能。

💡写在最后

所有源码均实测编译通过、可直接烧录运行,适配全部标准Arduino主控板,适合课程实训报告、结课作业、新手进阶练手、科创项目入门参考!新增LM35温控调速为高校高频实训项目,相比普通基础教程含金量更高,实操性更强。全程无冗余理论,干货满满,跟着步骤操作即可一次成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 18:25:24

依托 AI 导出鸭落地高效方案,解决 Claude 生成的文本到 word 中格式混乱痛点

巧用AI导出鸭解决Claude生成的文本到word中格式混乱问题全解析 摘要&#xff1a;本文深入解析了Claude生成文本迁移至Word时普遍存在的格式混乱问题&#xff0c;介绍了AI导出鸭作为专业解决方案的技术架构与核心能力。通过五类导出方案横向对比、数据实证、专家点评和真实用户案…

作者头像 李华
网站建设 2026/6/13 1:31:03

靠谱的团建拓展公司

在快节奏的现代生活中&#xff0c;企业团建拓展活动已成为提升团队凝聚力、激发员工潜能的重要手段。佛山作为大湾区内的热门选择之一&#xff0c;不仅能够帮助企业实现团队建设的目标&#xff0c;还能通过丰富的活动形式和专业的服务为企业带来全新的体验。然而&#xff0c;在…

作者头像 李华
网站建设 2026/6/11 22:18:35

28-源码-栈帧管理

栈帧管理前言在第 26 篇和第 27 篇中&#xff0c;我们看到了解释器的整体架构和指令分发机制。现在&#xff0c;我们将注意力转向解释器的另一个核心子系统——栈帧管理&#xff08;Stack Frame Management&#xff09;。栈帧&#xff08;Stack Frame&#xff09;是方法执行时的…

作者头像 李华
网站建设 2026/6/11 20:25:34

第76篇 | HarmonyOS 保险箱详情页:私密照片如何浏览、恢复和导出

第76篇 | HarmonyOS 保险箱详情页&#xff1a;私密照片如何浏览、恢复和导出第 76 篇讲保险箱详情页。私密照片解锁后不能只显示一个列表&#xff0c;用户还需要像普通相册一样查看前后镜头、滑动浏览、恢复公开相册、导出到系统相册或再次锁定。区别在于这些动作都必须在保险箱…

作者头像 李华
网站建设 2026/6/13 17:37:58

10+ 开源项目,让 AI 帮你做出设计师级别的 PPT 和网页

AI 生成内容的能力已经很强了&#xff0c;但「能看」和「好看」之间隔着一整个设计师。 你有没有这种感觉&#xff1a;AI 写出来的页面&#xff0c;功能都有&#xff0c;排版就是差点意思——间距要么挤要么空、配色像系统默认、PPT 更是一页白底黑字从头杵到尾。不是你 promp…

作者头像 李华
网站建设 2026/6/13 1:02:33

2026求职季5款主流AI面试工具深度测评:从全真模拟到定向突破

一、 测评背景与选型逻辑 进入2026年的求职春/秋招周期&#xff0c;“AI面试”已经从前沿尝鲜步入日常备考的基础环节。市面上面试模拟平台琳琅满目&#xff0c;如何挑选最契合自身需求的工具&#xff0c;成了许多候选人面临的第一道门槛。 本次面试工具推荐&#xff0c;我们…

作者头像 李华