تصویر شاخص نوشته: پتانسیومتر چیست و چطور ولتاژ را تنظیم می‌کند؟

پتانسیومتر چیست و چطور ولتاژ را تنظیم می‌کند؟

۲۷ تیر ۱۴۰۵ سنسورها و ورودی‌ها

پتانسیومتر (Potentiometer) همان قطعه‌ای است که وقتی ولومِ صدا را کم و زیاد می‌کنی زیرِ انگشتت می‌چرخد. در واقع یک مقاومت است که یک زبانهٔ متحرک (wiper) روی آن می‌لغزد و یک تقسیم‌کنندهٔ ولتاژِ قابلِ تنظیم می‌سازد. همین باعث می‌شود میکروکنترلر بتواند «مقدارِ چرخشِ دستِ تو» را به عدد تبدیل کند.

چطور واقعاً کار می‌کند

پتانسیومتر سه پایه دارد. داخلش یک نوارِ مقاومتی است که دو سرش به دو پایهٔ کناری وصل است؛ پایهٔ وسط به یک زبانهٔ متحرک به‌نامِ wiper می‌رود که با چرخاندنِ دسته، روی این نوار می‌لغزد.

حالا اگر دو سرِ نوار را به Vcc و GND وصل کنی، یک «تقسیم‌کنندهٔ ولتاژِ قابلِ تنظیم» ساخته‌ای: هرجا wiper باشد، ولتاژِ آن نقطه به نسبتِ موقعیتِ wiper تعیین می‌شود. رابطه‌اش خیلی تمیز است:

V_wiper = Vcc × position

یعنی اگر wiper دقیقاً وسط باشد (position = 0.5)، ولتاژِ خروجی نصفِ Vcc است؛ اگر ته باشد صفر و اگر بالا باشد کاملِ Vcc. جالب اینجاست که شبیه‌سازِ آیرو هم دقیقاً همین فرمول را حل می‌کند تا ولتاژِ wiper را دربیاورد. بعد میکروکنترلر با ADCِ خودش این ولتاژ را می‌خواند و به یک عدد (در ESP32 بینِ ۰ تا ۴۰۹۵) تبدیل می‌کند. این‌طوری «چرخشِ دستِ تو» به یک عدد در برنامه تبدیل می‌شود.

کاربردهای واقعی

  • ولومِ صدا: کلاسیک‌ترین کاربرد؛ کم و زیادکردنِ صدا.
  • دیمرِ نور: تنظیمِ روشناییِ لامپ یا LED.
  • جوی‌استیک: هر جوی‌استیک در واقع دو پتانسیومتر است که موقعیتِ افقی و عمودی را می‌خواند.
  • کالیبراسیون و تنظیم: در خیلی از دستگاه‌ها یک پتانسیومترِ کوچک برای تنظیمِ دقیقِ یک مقدار (مثلِ حساسیت) وجود دارد.

در عمل

سیم‌بندی ساده است: یک پایهٔ کناری به 3V3، پایهٔ کناریِ دیگر به GND، و پایهٔ وسط (wiper) به یک پایهٔ ورودیِ آنالوگ مثلِ GPIO34. در کد با ADC عددش را می‌خوانیم و مثلاً به روشناییِ یک LED نگاشت (map) می‌کنیم:

from machine import Pin, ADC, PWM
import time

pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB)
led = PWM(Pin(25), freq=1000)

def map_value(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

while True:
    raw = pot.read()                               # 0 ta 4095
    brightness = map_value(raw, 0, 4095, 0, 1023)  # 0 ta 1023
    led.duty(brightness)
    print("raw:", raw, "-> duty:", brightness)
    time.sleep_ms(50)

اشتباه‌های رایج

  • وصل‌کردنِ فقط دو پایه: اگر به‌جای سه پایه فقط wiper و یک سر را ببندی، دیگر تقسیم‌کننده نداری و عدد درست خوانده نمی‌شود.
  • جابه‌جاییِ جهت: اگر Vcc و GND را جابه‌جا ببندی، جهتِ زیاد/کم‌شدنِ عدد برعکس می‌شود.
  • خواندنِ پایهٔ آنالوگِ نامناسب: همهٔ پایه‌های میکروکنترلر ورودیِ آنالوگ نیستند؛ پایهٔ درست را انتخاب کن.

همین حالا امتحان کن

در همین مرورگر پتانسیومتر را بچرخان و ببین عددِ ADC و روشناییِ LED چطور تغییر می‌کند: آزمایشگاه: پتانسیومتر و ADC. توضیحِ کاملِ گام‌به‌گام هم در فصلِ پتانسیومتر هست.