در ادامه آموزش های میکروپایتون بر پایه ESP32 در این بخش قصد داریم به مورد ADC در این برد بپردازیم. در پروژ های متفاوتی به این مورد نیاز داریم تا مقادیر سنسور های مختلف را با استفاده یک پین بخوانیم و تحلیل کنیم. کلاس ADC یک رابط برای مبدل های آنالوگ به دیجیتال ارائه می دهد و نقطه پایانی واحد را نشان می دهد که می تواند از ولتاژ پیوسته نمونه برداری کرده و آن را به مقدار گسسته تبدیل کند. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
آنالوگ به دیجیتال ADC چیست؟
مبدل سیگنال آنالوگ به دیجیتال یا Analog to Digital Converter) ADC)، مداری الکترونیکی است که سیگنالهای پیوسته آنالوگ را به دادههای گسسته دیجیتالی یا رقمی تبدیل میکند. این فرآیند در سه مرجله صورت میگیرد که عبارت است از، نمونه برداری، کوانتیزهسازی و دیجیتال سازی. تمام این فرآیند ها به ما کمک میکند تا مقادیر خام را از سنسور یا قطعه الکترونیک دریافت و تحلیل کنیم تا نتیجه مناسبی برای اندازه گیری های ما در پروژه داشته باشد.
وضوح مبدل نشان دهنده تعداد مقادیر مختلف، یعنی گسسته است که می تواند در محدوده مجاز مقادیر ورودی آنالوگ تولید کند. بنابراین یک وضوح خاص میزان خطای مبدل را تعیین می کند و بنابراین حداکثر نسبت سیگنال به نویز ممکن برای یک ADC ایده آل را بدون استفاده از نمونه برداری بیش از حد تعیین می کند. نمونه های ورودی معمولا به صورت الکترونیکی به صورت دوتایی در ADC ذخیره می شوند ، بنابراین وضوح مقادیر معمولا به عنوان عمق بیت صوتی بیان می شود.
ADC در میکروپایتون
در برد ESP32 قابلیت ADC در پین های ۳۲ الی ۳۹ موجود است. توجه داشته باشید که هنگام استفاده از پیکربندی پیش فرض، ولتاژ های ورودی در پین ADC باید بین ۰٫۰v تا ۱٫۰v باشد در واقع هر ولتاژی بالاتر از ۱٫۰v فقط ۴۰۹۵ خوانده می شود. برای استفاده از قابلیت ADC به کمک میکروپایتون ابتدا از پکیج machine مورد مدنطر که در این مورد ADC است را وارد میکنیم.
from machine import ADC
در مرحله بعد برای مشخص کردن پین مدنظر باید از کد زیر استفاده کنید تا نمونه برداری از پین مشخص شده، صورت بگیرد.
adc = ADC(Pin(32))
در ادامه اگر قصد خواندن مقادیر ADC از پین مشخص شده را داریم از کد زیر استفاده میکنیم که مقدار را بین ۰ تا ۴۰۹۵ به ما تحویل میدهد، که در واحد ولتاژ مقداری بین ۰ تا ۱ ولت میشود.
adc.read()
با استفاده از کد زیر این مورد برای ما فراهم میشود که ۱۱db ورودی تضعیف که بین ولتاژ ۰ تا ۳٫۶ ولت خواهد بود در اختیار داشته باشیم. این روش امکان تنظیم میزان تضعیف ورودی ADC را فراهم می کند. این مورد اجازه می دهد تا محدوده ولتاژ ورودی وسیع تری را، به دقت همان تعداد بیت در حال حاضر محدوده وسیع تری را نشان می دهد ایجاد کند.
نکته: با وجود تضعیف ۱۱ دسی بل تا محدوده ۳٫۶ ولت، توجه داشته باشید که حداکثر ولتاژ مطلق برای پایه های ورودی ۳٫۶ ولت است، بنابراین نزدیک شدن به این مرز ممکن است به IC آسیب برساند.
adc.atten(ADC.ATTN_11DB)
با استفاده از کد زیر قادر خواهید بود ۹ بیت مقدار برگشتی تنظیم کنید، این روش اجازه می دهد تا تعداد بیت هایی که در حین خواندن ADC مورد استفاده و بازگشت قرار می گیرند تنظیم شود.
adc.width(ADC.WIDTH_9BIT)
در نمونه کد زیر یک فرآیند ساذه را مشاده میکنید که مقادیر خام را برای ما بین ۰ تا ۶۵۵۳۵ تبدیل میکند. ابتدا در خط اول دسترسی به ADC مرتبط با منبعی که با شناسه مشخص شده است برقرار میشود. در خط دوم یک مقدار آنالوگ میخوانیم و یک عدد صحیح را در محدوده ۰-۶۵۵۳۵ باز میگردانیم. مقدار بازگشتی نشان دهنده قرائت خام است که توسط ADC گرفته شده است، و به گونه ای مقیاس شده است که حداقل مقدار آن ۰ و حداکثر مقدار آن ۶۵۵۳۵ باشد.
import machine adc = machine.ADC(pin) val = adc.read_u16()
وسایل مورد نیاز
کلام آخر با سایفر
در این آموزش قابلیت ADC را در میکروپایتون و در بستر ESP32 بررسی کردیم، این قابلیت در اکثر پروژه ها کارایی دارد بخصوص اگر از کتابخانه ای برای راهاندازی استفاده نکنید.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.