做机器人手柄遥控、无人机云台手动微调、或者给小车加个方向摇杆,KY-023双轴摇杆模块几乎是入门必用。它本质是两颗电位器加一个按键,结构简单、成本极低,Arduino用模拟口读两个方向的电压、用数字口读按键,就能实现类比量操控。这篇把它的五个引脚怎么接、数据怎么读、怎么消除抖动讲透。
先看清KY-023的五个引脚
模块通常是十字形摇杆,上下左右摆动时会带动内部两颗电位器,按下去会触发一个按键。正面一般引出五个引脚:GND接地、+5V接电源、VRX是X轴电位器输出、VRY是Y轴电位器输出、SW是按键输出。有的板子标注成X/Y或A0/A1,意思相同。

供电上,+5V和GND接好,VRX和VRY是模拟输出,分别接到Arduino的任意两个模拟输入口(比如A0、A1),SW接一个数字输入口(比如D2)。摇杆处于中心位置时,VRX和VRY大约输出2.5V,往一边推会接近0V,往另一边接近5V。
读模拟量灵活用,加个死区更稳
读取方式很直接,用analogRead读A0、A1,得到的数值范围大概在0到1023之间,中心点约512。程序里通常做一个映射,把0到1023映射成需要的控制范围,比如小车油门、舵机角度。关键是要处理死区:因为电位器和元件误差,摇杆回中不会正好是512,会有一点偏移,如果直接把原始值拿去做判断,不操作时也会误触发。给中心附近留一段范围(比如460到564以内都当作静止)就能避免漂移。

SW按键别踩上拉悬浮的坑
SW是按下导通的按键,常见接法有两种:一种板子已带上拉到VCC,按下变低电平;另一种需要自己在程序里用INPUT_PULLUP把内部上拉打开。如果不清楚板子是哪种,用INPUT_PULLUP最保险——按下读LOW、松开读HIGH。要是程序里初始化没开上拉,按键状态会悬浮乱跳,判断时好时坏。
读取时一般还要加一点软件消抖,按下时读到低电平,延时十几毫秒再确认一次,防止一个动作被判定成多次。
小提示:从摇杆到舵机/小车的映射
实际项目里通常把两轴输出映射成两个方向的运动量,X轴控转向、Y轴控速度,SW做功能键(比如刹车、切换模式)。给模拟量加滤波或死区后,操控会更顺滑,不容易一碰就跑偏。
按这五个引脚接好、对模拟量做映射和死区、用INPUT_PULLUP读按键,KY-023摇杆就基本能用了。卡壳大多在上拉和死区这两处,顺着查很快定位。


SW按键上拉悬浮那段太真实了,我第一次没开INPUT_PULLUP,按键状态乱跳,开了就正常了
从摇杆映射到舵机角度很方便,先加滤波再映射,手感确实顺滑很多
模拟量回中不是正好512这个坑我踩过,不处理死区,摇杆一松小车自己老往一边偏,加了死区马上稳