SW-420 震动传感器使用笔记
使用 ESP32 开发板,Arduino 框架
今天用了一下 SW-420 震动传感器,记录一下使用方法。
SW-420 是什么
SW-420 是一个震动传感器模块,可以用来检测震动或者碰撞。比如敲击桌子、设备震动之类的场景都能检测到。
引脚说明
| 引脚 | 说明 |
|---|---|
| VCC | 接 3.3V 或 5V |
| GND | 接地 |
| DO | 数字输出,正常状态输出 HIGH,检测到震动输出 LOW |
这个传感器只有一个数字输出引脚,没有模拟输出,所以接线很简单。
工作原理
SW-420 内部有一个震动感应元件,当检测到震动时,DO 引脚会从高电平变成低电平。和 KY-270 声音传感器的逻辑是一样的。
传感器上也有一个蓝色小电位器,可以调节灵敏度。顺时针调高灵敏度(更容易触发),逆时针调低灵敏度。
使用方法
接线很简单:
- VCC 接 3.3V 或 5V
- GND 接地
- DO 接 ESP32 的数字输入引脚
代码方面,推荐使用边沿触发,也就是检测从高电平到低电平的跳变瞬间。这样每次震动只会触发一次,不会连续触发。
uint8_t lastShakeStatus = HIGH;
void loop() {
const uint8_t shakeStatus = digitalRead(SW_DO);
// 检测下降沿:上次是高电平,这次变低电平了
if (lastShakeStatus == HIGH && shakeStatus == LOW) {
// 检测到震动的那一瞬间
Serial.println("震动啦!!!");
delay(2000);
}
lastShakeStatus = shakeStatus;
}
完整示例代码
//
// Created by 25466 on 2026/5/2.
//
#include <Arduino.h>
#define SW_DO 34
uint8_t lastShakeStatus = HIGH;
void setup()
{
pinMode(SW_DO, INPUT);
Serial.begin(115200);
Serial.println("Test begin");
}
void loop()
{
const uint8_t shakeStatus = digitalRead(SW_DO);
if (lastShakeStatus == HIGH && shakeStatus == LOW)
{
Serial.println("震动啦!!!");
delay(2000);
}
lastShakeStatus = shakeStatus;
}
注意事项
- 电位器调节:调灵敏度的时候慢慢来,边调边测试,找到合适的灵敏度
- 边沿触发:建议用下降沿触发,不要直接检测低电平,否则会连续触发
- 供电电压:3.3V 和 5V 都能用,ESP32 的话接 3.3V 就行
- 防抖处理:触发后加个延迟避免重复触发,代码里用的是 2000ms,可以根据需要调整
和 KY-270 的关系
SW-420 和 KY-270 声音传感器的使用方式几乎是一样的,都是数字输出,都是检测下降沿。
如果你在使用 SW-420 的时候遇到了和我之前用 KY-270 一样的问题(比如电位器阈值太高、直接检测低电平不行),可以去看看我写的 KY-270 踩坑记录,解决方法是完全一样的~
就这些啦,希望能帮到刚开始用这个传感器的人~