آموزش رزبری پای رزبری پای میکروپایتون Micropython

آموزش میکروپایتون با رزبری پای پیکو بخش سیزدهم: تابع ریاضی map

getting-started-with-raspberry-pi-pico-micropython-part-thirteen-map-digispark
نوشته شده توسط پریسا پوربلورچیان

استفاده از تابع ریاضی در کدنویسی میکروکنترلرها سرعت روند اجرای پروژه‌ها را افزایش می‌دهد. یکی از این توابع ریاضی map است که در میکروپایتون هم میتوان از آن به راحتی استفاده کرد. تا به حال چند آموزش مقدماتی و مهم برنامه نویسی میکروپایتون با برد رزبری پای پیکو را منتشر کرده‌ایم. همچنین چندین پروژه جذاب با این برد را هم پیاده سازی کرده‌ایم. در ادامه‌ی اهمیت یادگیری زبان میکروپایتون به بررسی تابع مپ Map می‌پردازیم. در ادامه آموزش تابع Map میکروپایتون با مرجع تخصصی میکروپایتون به زبان فارسی، دیجی اسپارک همراه باشید.

تابع مپ در میکروپایتون با رزبری پای پیکو - دیجی اسپارک

 


عملکرد تابع map میکروپایتون


تابع ریاضی map همانند علمکرد نگاشت در مبحث هندسه است. به کمک تابع map ورودی روی خروجی بسته به مقداری که تعریف می‌کنیم، نگاشت داده می‌شود و چندین خط کدنویسی را به سادگی کاهش میدهد. تابع map یکی از ابزارهای کاربردی و قدرتمند در برنامه‌نویسی است که امکان اعمال یک تابع به هر یک از عناصر یک مجموعه یا دنباله را می‌دهد. این تابع معمولا در زبان‌های برنامه‌نویسی مختلفی وجود دارد. تابع map با استفاده از یک تابع که به عنوان ورودی به آن داده می‌شود، این تابع را بر روی هر یک از عناصر ورودی اجرا می‌کند و نتیجه‌ی به دست آمده از هر اجرا را در یک مجموعه جدید ذخیره می‌کند. این مجموعه نتیجه نهایی است که محتوای آن بر اساس اعمال تابع به عناصر اولیه تشکیل می‌شود. استفاده از تابع map مزایای زیر را به همراه دارد.

  1. کد کم‌حجم‌تر و خواناتر: با استفاده از map نیاز به نوشتن حلقه‌های تکراری برای اعمال تابع به هر عنصر از مجموعه را ندارید و کد خود را ساده‌تر و قابل فهم‌تر می‌کنید.
  2. کد مقیاس‌پذیر: تابع map امکان اعمال تابع به مجموعه‌های بزرگ‌تر را فراهم می‌کند، بدون اینکه نیاز به تغییرات زیادی در کد داشته باشید.
  3. عدم تغییر مجموعه اصلی: استفاده از map باعث نمی‌شود مجموعه اصلی تغییر کند؛ بلکه یک مجموعه جدید از نتایج به دست می‌آید.

الگوهای نوشتاری map برای میکروپایتون در ادامه لیست شده است.

لیست تابع مپ map در میکروپایتون - دیجی اسپارک

 

تابع مپ map میکروپایتون - دیجی اسپارک

 

تابع مپ map در میکروپایتون - دیجی اسپارک

 


تست برنامه map توسط پیکو


برای تست تابع ریاضی map یک برنامه مینویسیم. به این صورت که به یک ورودی ADC و یک خروجی نیاز داریم. برای اجرای map حتما بایستی در برنامه تابع map معرفی شود. روش کار به این صورت است که یک ولوم متغیر به عنوان ورودی ADC در برنامه تعریف می‌کنیم. یک خروجی ال ای دی هم در نظر گرفته شده است. توسط ماژول machine فراخوانی می‌کنیم.  در پیکو پایه ADC_AVDD از SMPS 3.3 ولت با استفاده از فیلتر R-C تغذیه می‌شود. ADC جریان زیادی در مدار مصرف میکند تا جایی که در صورت غیرفعال بودن حسگر دما تا حدود ۱۵۰ میلی آمپر جریان کشیده و به همین دلیل جریان ماسفت برابر ۱۵۰μA*200 = ~30mV خواهد بود. با استفاده از تغییر مقاومت بین پایه VREF و پایه ۳٫۳ ولت میتواند تا حدودی ماسفت و نویز ایجاد شده را کاهش دهد. برای استفاده از پایه های ADC کافیست از پین های GP26-GP27 و GP28 استفاده کنید. کلاس ADC یک رابط برای تبدیل آنالوگ به دیجیتال فراهم می‌کند که ولتاژ پیوسته ای ایجاد کرده که میتوان ولتاژ را به یک مقدار از هم گسستته تبدیل کرد. روش فراخوانی کلاس به صورت زیر است. توسط دستور اول یک آبجکت ADC ساخته شده که به یک پایه نسبت داده می‌شود. سپس در دستور دوم مقدار خام آنالوگ از ورودی خوانده شده و این عدد دریافتی بین بازه ی ۰ تا ۶۵۵۳۵ خواهد بود.

دستور adc در تابع map میکروپایتون - دیجی اسپارک

from machine import ADC, Pin
from utime import sleep


pot = ADC(26)
led = Pin(25, Pin.OUT)
سپس تابع map را فراخوانی می‌کنیم.
فراخوانی تابع map در میکروپایتون - دیجی اسپارک
def map(s, a1, a2, b1, b2):
return b1 + (s – a1) * (b2 – b1) / (a2 – a1)

 

فراخوانی تابع map میکروپایتون - دیجی اسپارک

 

سپس شرط نویسی را آغاز می‌کنیم. دیتا از پایه ورودی ADC خوانده شده و سپس وارد تابع map می‌شود.

raw = pot.read_u16()
delay = map(raw, 0, 65535, 0, 1)

برای نمایش داده از print استفاده می‌کنیم.

print('Raw: {} '.format(raw), 'Delay {:.1f}s'.format(delay))

سپس فانکشن خروجی ال ای دی را به برای برنامه فعال می‌کنیم.

led.value(1)
sleep(delay)
led.value(0)
sleep(delay)
</pre>

 

کد کامل اعمال تابع map ریاضی در میکروپایتون به صورت زیر است.

from machine import ADC, Pin
from utime import sleep

pot = ADC(26)
led = Pin(25, Pin.OUT)

def map(s, a1, a2, b1, b2):
return b1 + (s - a1) * (b2 - b1) / (a2 - a1)

while True:
raw = pot.read_u16()
delay = map(raw, 0, 65535, 0, 1)
print('Raw: {} '.format(raw), 'Delay {:.1f}s'.format(delay))
led.value(1)
sleep(delay)
led.value(0)
sleep(delay)

 

نمونه برنامه map در زبان میکروپایتون - دیجی اسپارک

 

پروژه نور ال ای دی با تابع map در میکروپایتون رزبری پیکو - دیجی اسپارک

 

عملکرد برنامه به این صورت است که توسط ولوم سرعت چشمک زدن خروجی ال ای دی را کنترل می‌کنیم. با چرخاندن شافت ولوم ال ای دی با delay 0.0  تا delay 1.0 ثانیه به صورت چشمک زن تغییر می‌کند.

تابع Map میکروپایتون - دیجی اسپارک

 


اتصالات تابع Map میکروپایتون


برای پروژه تابع Map میکروپایتون از ولوم و ال ای دی استفاده می‌کنیم.

  • پایه وسط ولوم متغیر را به پایه GP26 پیکو اتصال دهید.
  • یکی از پایه های کناری را به ۳v3 اتصال دهید.
  • پایه دیگری را به GND اتصال دهید.

برد رزبری پای پیکو در تابع Map میکروپایتون - دیجی اسپارک

 

  • پایه کاتد ال ای دی را به یکی از پایه های GP اتصال دهید.
  • پایه آند را به یکی از پایه های GND اتصال دهید.

اجرای پروژه تابع Map میکروپایتون با رزبری پای پیکو - دیجی اسپارک

 


وسایل مورد نیاز


رزبری پای پیکو

ولوم

ال ای دی

برد بورد

کابل

 

چنانچه در مراحل راه اندازی برد رزبری پای پیکو Pico و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه