پروژه هایی که با برد رزبری پای پیکو اجرا شده است با هدف یادگیری میکروپایتون برای میکروکنترلرها است. پیش نیاز برنامه نویسی میکروپایتون یادگیری پایتون است تا بتوانیم با سامان دهی به کدها برنامه بهترین کد را برای میکروپایتون بنویسیم. در این پروژه با زبان برنامه نویسی میکروپایتون یک دیمر دیچیتال با رزبری پای پیکو و سه عدد خروجی لامپ ال ای دی طراحی میکنیم. در ادامه ساخت دیمر دیجیتال با MicroPython با مرجع تخصصی میکروپایتون با رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
ایجاد لیست در پایتون
اگر با آرایه در آردوینو با سی پلاس پلاس کار کرده باشید، عملکرد لیست در پایتون هم به همان صورت خواهد بود. در اکثر زبان های برنامه نویسی آرایه کاربرد دارد که شامل مجموعه ای از داده های هم نوع است. یکی از این آرایه ها با نام لیست List شناخته میشود که که دنباله ای از انواع تغییر پذیر داده هستند. جهت دسترسی به عناصر یک لیست باید از اندیس گذاری استفاده کنیم.
listnme = [name1, name32, name3, ..., nameN]
توسط تابع range() در پایتون میتوان لیستی از اعداد را تولید کرد و جهت پیمایش در حلقه for استفاده میشود. رنج range از سه بخش تشکیل شده است.
- start = تعیین کننده ی عدد شروع در تابع range است
- stop = تعیین کننده ی عدد پایان در تابع range است
- step = تعیین کنند ی گام حرکت بین start , stop است
موج PWM در زبان میکروپایتون
موج مربعی PWM) Pulse Width Modulation) مدولاسیون پهنای باند روشی برای به دست آوردن خروجی آنالوگ روی پین دیجیتال است. PWM به دو پارامتر فرکانس و دیوتی سایکل وابسته است. در PWM عرض سیگنال مدام در حال تغییر است اما فرکانس ثابت ادامه میدهد. در صورتیکه سیگنال PWM در یک فرکانس ثابت کار کند، با تغییر زمان، زمانیکه دامنه سیگنال High باشد، زمان دامنه سیگنال پایین را تغییر داده میشود. به این بازه ی زمانی پهنای پالس گفته میشود. پهنای پالس که وابسته به دوره ی سیگنال است، دیوتی سایکل Duty Cycle گفته می شود. دوره زمانی سیگنال (T) که به پریود زمانی نیز گفته می شود از لحظه افزایش پله ی سیگنال موج مربعی شروع شده و به میزان شروع فزایش بعدی طول می کشد. تراشه RP2040 از هشت پایه PWM دو کاناله به صورت A B تشکیل شده است. به صورتی که پایه B میتواند برای اندازه گیری فرکانس و دیوتی سایکل استفاده شود. تمامی پایه های GPIO برد رزبری پای پیکو میتوانند ماهیت PWM داشته باشند.
from machine import Pin , PWM pwm = PWM ( Pin ( 16 ) ) # GP16 pwm. freq ( 100000 ) # 100kHz pwm. duty_u16 ( 32768 ) # duty 50% (65535/2)
اتصالات پروژه دیمر دیجیتال با MicroPython
برای تست برنامه دیمر دیجیتال با MicroPython به سه ال ای دی LED نیاز داریم. از پایه های ۱۶، ۱۷، ۱۸ رزبری پای پیکو استفاده کنید. برای pwm از تمامی پایه های برد رزبری پای پیکو مجاز به استفاده هستید.
کد میکروپایتون پروژه دیمر دیجیتال
برای تست و اجرای برنامه دیمر دیجیتال با MicroPython از نرم افزار Thonny IDE استفاده کنید. اگر تجربه ی کار با این نرم افزار را ندارید، بر روی لینک کلیک کنید. نرم افزار Thonny را باز کرده و سپس کد زیر را کپی کنید. برای اجرا قبل از RUN بایستی فریمور را بر روی برد رزبری پای پیکو انتخاب کنید.
کد کامل پروژه دیمر دیجیتال به صورت زیر است.
import time from machine import Pin, PWM pins = [16,17,18] pwms = [PWM(Pin(pins[0])),PWM(Pin(pins[1])),PWM(Pin(pins[2]))] [PWM.freq(1000) for PWM in pwms] step=64 bright = [a for a in range (0, 2**16, step)] dimm = [a for a in range (2**16, -step, -step)] while True: for pwm in pwms: for a in bright + dimm: pwm.duty_u16(a) time.sleep(0.001) for pwm in pwms: pwm.duty_u16(a) time.sleep(0.001)
در ابتدا از ماژول ماشین machine کلاس Pin , PWM را فراخونی میکنیم. برای تاخیر بین دو زمان روشن و خاموش شدن از کلاس time استفاده شده است.
import time from machine import Pin, PWM
در قدم بعدی کلاس آرایه را برای خروجی ها مینویسیم.
pins = [16,17,18]
در قدم بعدی بایستی برای هر خروجی مشخص کنیم که خروجی از کلاس PWM است.
pwms = [PWM(Pin(pins[0])),PWM(Pin(pins[1])),PWM(Pin(pins[2]))]
از ترکیب List و range برای دو وضعیت افزایش شدت نور و کاهش شدت نور دو لیست با مشخص کردن start, stop, step مینویسیم.
step=64 bright = [a for a in range (0, 2**16, step)] dimm = [a for a in range (2**16, -step, -step)]
سپس یک حلقه برای تکرار مینویسیم. برای اینکار نیاز به کلاس PWM داریم که قبلا در آموزش میکروپایتون با رزبری پای پیکو آموزش داده شده است. بر روی لینک کلیک کنید.
for pwm in pwms: for a in bright + dimm: pwm.duty_u16(a) time.sleep(0.001) for pwm in pwms: pwm.duty_u16(a) time.sleep(0.001)
برای اجرای پروژه دیمر دیجیتال با MicroPython بر روی گزینه ی Run Current Script کلیک کنید. هر سه ال ای دی با سرعت فرکانس ۱۰۰۰ هرتز روشن و سپس خاموش میشود.
لینک خرید وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
برنامه نویسی میکروپایتون واقعا خوبه و چقدر خوشحالم که دیجی اسپارک داره روش کار میکنه به زودی فراگیر میشه
با سلام
کاربر گرامی
سپاس از همراهی شما
سلام
آیا امکان استفاده از چندین PWM در پروژه وجود دارد؟
با سلام
بله برای هر pwm یک کلاس جداگانه در کد مشخص کنید.