در سری آموزش های مقدماتی رزبری پای پیکو به بررسی و تست پایه های آنالوگ ADC رزبری پای میپردازیم. در آموزش فتوسل با رزبری پای توسط سنسور نوری فتوسل و استفاده از ADC مقادیر نوری را دریافت خواهیم کرد. در این آموزش از میکروپایتون برای ارتباط بین سنسور و میکروکنترلر استفاده شده است. در ادامه با مرجع تخصصی رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
فتوسل Photocell
فتوسل یا LDR با قرار گرفتن در یک محیط کاملا تاریک مقاومت آن تا محدوده ۱ مگااهم میرسد. با تابش نور در مقابل سنسور مقاومت آن تا نزدیک به صفر افت پیدا میکند اما در شرایط نرمال تابش نور، مقاومت در کمترین حالت خود به ۸ تا ۲۰ کیلو میرسد. با ترکیب فتوسل با یک مقاومت استاتیک یک تقسیم ولتاژ ساخته و در نهایت یک ولتاژ متغیر ساخته میشود. مقدار عددی سنسور توسط مبدل آنالوگ به دیجیتال میکروکنترلر قابل خواندن است. فتوسل با نام دیگری به اسم LDR هم شناخته شده است و دارای دو ترمینال اسنت که با میزان شدت نور، مقاومت دو سر ترمینال افزایش و کاهش مییابد.
استفاده از ADC رزبری پای پیکو
رابط ADC در RP2040 فاقد رفرنس است و به همین دلیل از تغذیه ۳٫۳ ولت داخلی تراشه استفاده میکند. در پیکو پایه ADC_AVDD از SMPS 3.3 ولت با استفاده از فیلتر R-C تغذیه میشود. ADC جریان زیادی در مدار مصرف میکند تا جایی که در صورت غیرفعال بودن حسگر دما تا حدود ۱۵۰ میلی آمپر جریان کشیده و به همین دلیل جریان ماسفت برابر ۱۵۰μA*200 = ~30mV خواهد بود. با استفاده از تغییر مقاومت بین پایه VREF و پایه ۳٫۳ ولت میتواند تا حدودی ماسفت و نویز ایجاد شده را کاهش دهد. برای استفاده از پایه های ADC کافیست از پین های GP26 و GP27 و GP28 استفاده کنید.
ترتیب پایه های GP در رزبری پای پیکو به صورت زیر است.
اتصال فتوسل به رزبری پای پیکو
برای اتصال سنسور فتوسل به رزبری پای پیکو از پایه آنالوگ ADC استفاده میکنیم. پایه های ADC به ترتیب GP26 و GP27 و GP28 است.
فتوسل دارای دو پایه است. تفاوتی بین دو پایه وجود ندارد. برای اتصال به میکروکنترلر به یک مقاومت ۱۰ کیلواهمی نیاز داریم. مقاومت بایستی به یک پایه سنسور فتوسل و از سمت دیگر به GND متصل شود. از اشتراک پایه فتوسل و پایه مقاومت به پایه ADC رزبری پای پیکو ( GP26) اتصال دهید. پس از انجام اتصالات، توسط کابل MICRO USB رزبری پای پیکو را به سیستم خود وصل کنید.
برنامه نویسی با THONNY IDE
در پروژه فتوسل با رزبری پای برنامه نویسی به زبان پایتون و پشتیبانی از میکروپایتون توسط نرم افزار Thonny انجام میشود. قبل از اقدام به هر کاری بایستی نصب میکروپایتون Thonny در ویندوز را انجام دهیم. قبل از اتصال رزبری پای پیکو به سیستم کلید BOOTSEL را نگه داشته و پس از اتصال کابل MICRO USB و اتصال به سیستم دست خود را از کلید بردارید. با اینکار رزبری پای پیکو شناسایی شده و پنجره ی آن باز میشود.
در نرم افزار Thonny بر روی نوار سمت راست پایین صفحه کلیک کنید.
سپس بر روی Configure Interpreter کلیک کنید. سپس پس از شناسایی رزبری پای پیکو، صفحه ی زیر باز شده و پکیج را نصب کنید. حالا Thonny Python آماده برنامه نویسی برای رزبری پای پیکو است.
در اولین قدم برای کدنویسی ماژول های مورد نیاز را فراخوانی میکنیم. در این برنامه با توجه به اینکه نیاز به استفاده از پایه های آنالوگ adc داریم، ماژول adc همراه با ماژول زمان را در برنامه تعریف میکنیم.
from machine import ADC, Pin from time import sleep
در مرحله یعدی پایه ای که به سنسور فتوسل متصل است را به عنوان متغیر در برنامه تعریف میکنیم. سپس یک نام دلخواه برای متغیر انتخاب میکنیم. در این آموزش از پایه شماره ۲۶ یعنی Adc استفاده شده است.
photocellpin = 26
سنسور فتوسل شدت نور محیط را دریافت میکند و با کاهش و افزایش نور محیط عملکرد آن متفاوت میشود. در این مرحله بایستی یک تابعی نوشته شود که مقادیر شدت نور را خوانده و به یک عدد بر واحد درصد تبدیل کند. پس در این بخش یک تابع برای تعریف این مقادیر در برنامه نیاز داریم. قبل از نوشتن تابع بایستی بررسی کنیم که تابع چه وظیفه ای داشته و چه مقادیری را به عنوان ورودی در برنامه میپذیرد و سپس خروجی ها به چه صورت است. برای تعریف تابع در پایتون از def استفاده میکنیم.
def functionname (parameters): statments
از def برای تعریف تایع استفاده میکنیم. functionname نام تابعی است که میخواهید تعریف کنید. parameters لیست پارامترهایی است که تابع باید دریافت کند. در داخل تابع دستوراتی باید اجرا شود که با Statement مشخص شده است. کلاس ADC در پایتون که مبدل آنالوگ به دیجیتال است، به صورت زیر در برنامه تعریف میشود.
import machine adc = machine.ADC(pin) # create an ADC object acting on a pin val = adc.read_u16() # read a raw analog value in the range 0-65535
متد کلاس ADC در برنامه به صورت زیر است. رنج این بازه بین ۰- ۶۵۵۳۵ است.
ADC.read_u16()
تابع برای سنسور فتوسل به صورت زیر است.
def readLight(photoGP): photoResistor = ADC(Pin(26))
طبق متد ADC مقادیر دریافتی از سنسور فتوسل با رزبری پای در یک تابع ۱۶ بیتی به صورت زیر نوشته میشود.
light = photoResistor.read_u16()
پس با توجه به اینکه خروجی ۱۶ بیتی و بین ۰ تا ۶۵۵۳۵ متغیر است، مقادیر بایستی به یک عدد درصد تبدیل شود.
light = round(light/65535*100,2) return light
تا این مرحله مقادیر لایت را از سنسور در برنامه دریافت کردیم. حال برای نمایش اعداد بایستی داده دریافتی راه به استرینگ STRING تبدیل کنیم.
while True: print("light: " + str(readLight(photocellpin)) +"%") sleep(1)
کد نهایی برنامه به صورت زیر است.
from machine import ADC, Pin from time import sleep photocellpin = 26 def readLight(photoGP): photoResistor = ADC(Pin(26)) light = photoResistor.read_u16() light = round(light/65535*100,2) return light while True: print("light: " + str(readLight(photocellpin)) +"%") sleep(1)
برای اجرای برنامه بر روی کلید run کلیک کنید. سپس برنامه اجرا شده و در shell مقادیر دریافتی یعنی شدت نور دریافتی از محیط را بر حسب درصد نمایش میدهد.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
خیلی هم عالی دمتون گرم
با سلام
از همراهی شما صمیمانه سپاسگزارم.
سلام و خسته نباشید بابت تحلیل هر خط از برنامه از شما ممنونم نه تنها هیچ سورس وجود نداره بلکه سایت های خارجی هم اینجوری تحلیل نکردن
با سلام
سپاس از همراهی شما کاربر گرامی
امیدوارم آموزش ها مفید واقع شود.
با سلام
من بدون تابع def هم راه اندازی کردم تفاوتی در دقت خواهد داشت؟
با سلام
خیر تفاوتی ندارد و این مورد وابسته به خلاقیت شما در کدنویسی است.
عالی ممنونم خسته نباشید
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم مفید واقع شده باشد.
سلام
ممنون بابت توضیحات
میخوام از یک led در این پروژه استفاده کنم
برنامه باید تغییر بدم ؟
با سلام
خیر نیازی به تغییر نیست.