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;
}

注意事项

  1. 电位器调节:调灵敏度的时候慢慢来,边调边测试,找到合适的灵敏度
  2. 边沿触发:建议用下降沿触发,不要直接检测低电平,否则会连续触发
  3. 供电电压:3.3V 和 5V 都能用,ESP32 的话接 3.3V 就行
  4. 防抖处理:触发后加个延迟避免重复触发,代码里用的是 2000ms,可以根据需要调整

和 KY-270 的关系

SW-420 和 KY-270 声音传感器的使用方式几乎是一样的,都是数字输出,都是检测下降沿。

如果你在使用 SW-420 的时候遇到了和我之前用 KY-270 一样的问题(比如电位器阈值太高、直接检测低电平不行),可以去看看我写的 KY-270 踩坑记录,解决方法是完全一样的~

就这些啦,希望能帮到刚开始用这个传感器的人~