متوسط⏱ 14 دقیقه مطالعه

بسیاری از سنسورها (پتانسیومتر، سنسور نور LDR، سنسور رطوبت خاک و …) خروجی آنالوگ می‌دهند، یعنی ولتاژی پیوسته بین ۰ تا ۳٫۳ ولت. برای خواندن این ولتاژ در دنیای دیجیتال، از ADC (مبدل آنالوگ به دیجیتال) استفاده می‌کنیم.

پایه‌های ADC در ESP32

ESP32 دارای دو واحد ADC است (ADC1 و ADC2) که روی پایه‌های خاصی مانند GPIO32 تا GPIO39 در دسترس‌اند. توجه کنید هنگام استفادهٔ هم‌زمان از Wi-Fi، ADC2 ممکن است در دسترس نباشد؛ بنابراین ADC1 (پایه‌های 32-39) انتخاب امن‌تری است.

PYTHON
from machine import ADC, Pin
from time import sleep

adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)   # بازهٔ کامل تقریباً ۰ تا ۳٫۳ ولت
adc.width(ADC.WIDTH_12BIT) # دقت ۱۲ بیتی: ۰ تا ۴۰۹۵

while True:
    raw = adc.read()
    voltage = raw / 4095 * 3.3
    print("مقدار خام:", raw, " ولتاژ:", round(voltage, 2))
    sleep(0.5)
ℹ️ اطلاعات

تنظیم atten (تضعیف) مشخص می‌کند چه بازه‌ای از ولتاژ ورودی قابل اندازه‌گیری است. ATTN_11DB بازهٔ کامل تقریباً ۰ تا ۳٫۳ ولت را پوشش می‌دهد.

مثال کاربردی: نگاشت پتانسیومتر به PWM

PYTHON
from machine import ADC, Pin, PWM

adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)

led = PWM(Pin(2))
led.freq(1000)

while True:
    raw = adc.read()             # ۰ تا ۴۰۹۵
    duty = int(raw / 4095 * 1023)  # نگاشت به بازهٔ PWM
    led.duty(duty)
خواندن مقدار پتانسیومتر با ADC باز کردن در Wokwi ↗

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود.

🛠️ کارگاه عملی

کارگاه عملی: یک دیاگرام Wokwi با پتانسیومتر بسازید و مقدار آن را به روشنایی LED یا موقعیت یک نوار متنی در سریال نگاشت کنید.

❓ دقت پیش‌فرض ADC در مثال بالا چند بیت است؟
طراحی و توسعه: امین شیخ نجدیglcd.ir