متوسط⏱ 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)
🛠️ کارگاه عملی
کارگاه عملی: یک دیاگرام Wokwi با پتانسیومتر بسازید و مقدار آن را به روشنایی LED یا موقعیت یک نوار متنی در سریال نگاشت کنید.
❓ دقت پیشفرض ADC در مثال بالا چند بیت است؟
طراحی و توسعه: امین شیخ نجدی — glcd.ir