ESP32-S3-CAM:豆包语音识别文字后控制小车(五)——认识L298N驱动模块

在淘宝上看了下硬件选型,小车好像比较普遍都是用L298N来驱动,但是一个L198N只能控制两个电机,后来发现有那种一个驱动模块控制四个电机的模块。

L198N上接线都要用螺丝拧紧,所以必须要准备个小螺丝刀。。。。

1、认识L298N

网上学习了L298N的介绍,L298N介绍视频

out1和out2 控制电机1,控制信号由IN1和IN2来控制,IN信号就是后面可以通过ESP32板子传递信号的地方,旁边的ENA是控制转速的,默认是有个帽子套住的,这个时候就是默认全速,作为初学者,这里我买来的驱动模块我没动它,后面需要用的时候再揭开。

out3和out4 控制电机2,控制信号也就由IN3和IN4控制。

这个方向依次是12V输入,GND接地和5V输出

12V输入是给L298N供电用的,电压范围可以是6V到20V好像,我在淘宝买的套餐里是四个5号电池用的电池仓,连起来是10V

GND接地,这个和芯片的GND共同接地

5V输出的意思是,通过L298N还可以向外输出5V电压,但是这里要注意,如果本身12V输入那里电压就不高,这里的输出是很不稳定的,我用电池仓10V供电的时候发现这个5V 输出连ESP32芯片都带不动。

再来看看背面

L298N上面有个高高的黑色立起来的散热槽,我刚开始是好奇,这玩意干啥用的,豆包了一下。

最后看下具体电机IN对应的信号是怎么正转,怎么反转,这个部分的截图都是从视频中截图的,尊重视频作者劳动成果哈。

2、供电并接电机

连电机的时候就要注意,为了防止接反,电机同一个方向的接线要对应上,

比如下图中,两个电机的左边和右边接线要分别对应好,比如左边电机的左侧接线接到L298N的OUT1了,那右边电机左侧接线就要接到OUT3,右边分别对应OUT2和4,这样接好以后才不会出现左边电机前进,右边电机后退的尴尬。

然后我们接一个电机:

电池仓供电,我在正极电路上接了个开关,好控制供电,便于后面插线拔线的时候好断电,

这个刚开始没想到,刚开始学L298N的时候,总是担心接错线,怕烧了,后来才淘宝买了个开关。

红色线接L298N的12V输入,黑色负极接中间GND接地。

只接一个电机,OUT1和OUT2可以随意接,接上后通电,其实电机并不会转动。

点击转动是要靠前面提到的 IN1到4来输出信号的,我这里接的OUT1和OUT2,对应的信号就是IN1和IN2,用一根线一头连接上IN1,然后一头连接到 电机转速控制的信号区,就能动了,相当于输出了控制信号,注意接到IN3和4是没反应的,因为那个是负责输出信号的。

找一根 一公一母的杜邦线,母的那头(没有针那头。。。懂的都懂吧)插入到L298N中

公的那头(有针那头)可以搭到其他位置,比如用帽子套起来的 控制转速的区域,只要接触上,

电机就会转了,轮子也就跟着转了。

相信再连接一个电机,就简单了,同样的操作,要注意接线配对,前面提到过。

到此,L298N就基本了解差不多了,接下来是接芯片控制电机转动。

3、L298N接ESP32-S3-CAM板子

接线:

  1. 板子的GND和电池仓负极一起接L298N的GND共地,这里尤其要注意
  2. 板子本身用USB来供电或者用充电宝来单独供电
  3. IN1和IN2对应的公口插入芯片对应的GPIO口对应的面包板的位置

橙色线 IN1 接 G17;灰色线 IN2接 G18

由于当前我们没有接摄像头,所以暂时用G17和18两个口,具体哪些口可以用

参见:ESP32-S3-CAM:认识引脚

接好的硬件图如下,接线前L298N先断电。

完整接线后的图

板子的GND和电池仓负极一起接L298N的GND共地,这里尤其要注意

上图中是 亮黄色的线和L298N的GND连接,电池仓负极也一起共地。

4、写控制程序

让kimi写一段代码

提示词:

我现在用ESP32-S3-CAM接L298N驱动模块,IN1和IN2分别接如了G17和18两个口,帮我写一段代码,在Ardunio IDE里运行,当我在终端输入1的时候,就前进,输入0 就后退

代码如下:

cpp 复制代码
// ESP32-S3-CAM + L298N 电机驱动控制
// IN1 -> GPIO17, IN2 -> GPIO18

#define IN1 17  // L298N IN1 接 GPIO17
#define IN2 18  // L298N IN2 接 GPIO18

void setup() {
  Serial.begin(115200);
  
  // 设置GPIO为输出模式
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  
  // 初始状态:停止
  stopMotor();
  
  Serial.println("ESP32-S3 L298N 电机控制已启动");
  Serial.println("命令: 1=前进, 0=后退, s=停止");
}

void loop() {
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    
    // 处理换行符和回车符,只处理有效命令
    if (cmd == '\n' || cmd == '\r') return;
    
    switch (cmd) {
      case '1':
        forward();
        Serial.println("→ 前进");
        break;
        
      case '0':
        backward();
        Serial.println("← 后退");
        break;
        
      case 's':
      case 'S':
        stopMotor();
        Serial.println("■ 停止");
        break;
        
      default:
        Serial.println("未知命令,使用: 1=前进, 0=后退, s=停止");
    }
  }
}

// 前进:IN1高电平,IN2低电平
void forward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
}

// 后退:IN1低电平,IN2高电平
void backward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
}

// 停止:两个引脚都低电平(或都高电平实现刹车)
void stopMotor() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}

在终端输入1 ,轮子就往前转了,注意看代码,输入1,给IN1写入的HIGH高电平,就是1,IN2输入的是低电平0,就和前面第一部分表格里的控制信号对应起来了。

车轮转动

到此,电机驱动车轮,通过mic录音并通过豆包转文字,都打通了

下一步,把这两个串起来,语音控制小车前进和后退。

相关推荐
AI你一生一世16 分钟前
Cloudflare OS:当边缘网络开始承载 Agent 运行时
人工智能·serverless·边缘计算·容器编排·cloudflare os·agent 运行时
JJJennie77723 分钟前
2026年大模型网关自建还是买?MAI Gateway等主流方案横评
人工智能·开源·gateway·ai网关
拆房老料2 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
运维行者_3 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
张张123y3 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
国科安芯7 小时前
四重证据,一条逻辑链:商业航天级微控制器MCU抗辐射验证方法学综述——以国科安芯AS32S601为例
人工智能·单片机·嵌入式硬件·mcu·安全·抗辐射
dk_tjy7 小时前
AI驱动的自动化攻击背景下:企业端点安全体系的技术架构与建设路径
网络·人工智能·安全·自动化·终端安全管理·数据防泄漏
布吉岛的石头7 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
2601_965454238 小时前
用AI把开源项目功能清单做成MG动画介绍视频
人工智能·开源·音视频
风雅GW8 小时前
局域网访问为何少一半配置页:DSH 的安全边界设计复盘
人工智能