在淘宝上看了下硬件选型,小车好像比较普遍都是用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板子
接线:
- 板子的GND和电池仓负极一起接L298N的GND共地,这里尤其要注意
- 板子本身用USB来供电或者用充电宝来单独供电
- IN1和IN2对应的公口插入芯片对应的GPIO口对应的面包板的位置
橙色线 IN1 接 G17;灰色线 IN2接 G18
由于当前我们没有接摄像头,所以暂时用G17和18两个口,具体哪些口可以用
接好的硬件图如下,接线前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录音并通过豆包转文字,都打通了
下一步,把这两个串起来,语音控制小车前进和后退。