电位器

原理简介

电位器是一种可变电阻器,旋转或滑动改变电阻值,从而把机械位置变成电压信号。

  • 工作原理:两端接电源和地,中间抽头输出一个随位置变化的电压(分压)
  • 三脚接法:两边两脚接 3V3 和 GND,中间脚(抽头)接 ADC
  • 接口:ADC 模拟输入,注意 Pico 只有 GP26 / GP27 / GP28 三个 ADC 脚
  • 读出的是电压,不是角度,需要自己换算成百分比或量程

典型应用

  • 亮度调节
  • 音量控制
  • 电机速度调节
  • 参数设置(如阈值、延时)
  • 位置 / 角度粗略检测

接线图

[接线图占位,后续添加]

文字说明(具体接法见下方代码注释):

  • 电位器左脚 → Pico 3V3
  • 电位器右脚 → Pico GND
  • 电位器中间脚(抽头)→ Pico GP26(ADC0)
  • ADC 只能接 GP26 / GP27 / GP28,其它脚不能当模拟输入

示例代码

基础示例:读取电位器值

# ============ 接线 ============
# 电位器左脚 → Pico 3V3
# 电位器右脚 → Pico GND
# 电位器中间脚(抽头)→ Pico GP26(ADC0)
# ADC 引脚只能用 GP26 / GP27 / GP28
# =============================
from machine import ADC, Pin
import time

adc = ADC(Pin(26))      # GP26 即 ADC0

print('开始读取电位器...')

while True:
    value = adc.read_u16()              # 读 16 位值(0-65535)
    voltage = value * 3.3 / 65535       # 换算成电压(参考电压 3.3V)
    percent = value / 65535 * 100       # 换算成百分比

    print(f'值: {value:5d}, 电压: {voltage:.2f}V, 百分比: {percent:.1f}%')
    time.sleep(0.5)

进阶示例:平滑滤波

# ============ 接线 ============
# 电位器左脚 → Pico 3V3
# 电位器右脚 → Pico GND
# 电位器中间脚 → Pico GP26(ADC0)
# =============================
from machine import ADC, Pin
import time

adc = ADC(Pin(26))

# 多次采样取平均,减少抖动
def read_smoothed(samples=10):
    total = 0
    for _ in range(samples):
        total += adc.read_u16()
        time.sleep_ms(10)
    return total / samples

print('带平滑滤波的电位器读取')

while True:
    smooth = read_smoothed()
    voltage = smooth * 3.3 / 65535
    percent = smooth / 65535 * 100

    print(f'平滑值: {smooth:.0f}, 电压: {voltage:.2f}V, 百分比: {percent:.1f}%')
    time.sleep(0.5)

应用示例:电位器调 LED 亮度

# ============ 接线 ============
# 电位器:左脚 → 3V3,右脚 → GND,中间脚 → GP26(ADC0)
# 板载 LED 在 GP25,直接用 PWM 调亮度(不用外接)
# =============================
from machine import ADC, Pin, PWM
import time

adc = ADC(Pin(26))
pwm = PWM(Pin(25))      # GP25 = 板载 LED
pwm.freq(1000)

print('用电位器调节 LED 亮度')

while True:
    value = adc.read_u16()
    pwm.duty_u16(value)             # 直接用 ADC 值当占空比(0-65535)

    percent = value / 65535 * 100
    print(f'亮度: {percent:.1f}%')
    time.sleep(0.1)

注意事项

  • ADC 脚有限:只有 GP26 / GP27 / GP28(对应 ADC0/1/2)能读模拟量,数字脚读不到电压
  • 量程对齐:read_u16() 返回 0–65535,对应 0–3.3V;超过 3.3V 会饱和且可能伤脚
  • 供电用 3V3:电位器两端接 3V3 和 GND,抽头电压就不会超过 3.3V,安全
  • 噪声:转动时数值会跳,重要场合用进阶示例的「移动平均」滤波
  • 方向:左右脚接反只是数值反相(转到头变最小),调换两脚即可

常见问题

Q: 电位器读数一直是 0 或一直是 65535? A: 多半中间脚没接到 ADC 脚,或两脚接成了 3V3 和中间脚。确认中间脚接 GP26,两端分别接 3V3 和 GND。

Q: 读数抖动厉害怎么办? A: 用进阶示例的多次平均滤波,或在抽头到地并一个小电容(如 0.1µF)。

Q: 想用两个电位器? A: 再接一个到 GP27(ADC1),新建 ADC(Pin(27)) 即可,三脚接法相同。