شِفر (کود) جستجو

درس ۱۴/۳۱-۴: مثال ۱ تابع map() در آردوینو

درس ۱۴/۳۱-۴: مثال ۱ تابع map() در آردوینو

این آموزش بخشی از یک سری برنامه‌نویسی آردوینو است و بر استفاده عملی از تابع map() تمرکز دارد. در این درس، یاد خواهید گرفت که چگونه یک مقدار درصدی (۰–۱۰۰) را به یک مقدار PWM (مدولاسیون عرض پالس) (۰–۲۵۵) برای کنترل روشنایی یک LED تبدیل کنید. به جای محاسبه دستی اینکه ۶۰٪ برابر با ۱۵۳ است، تابع map() تبدیل خطی را برای شما انجام می‌دهد و شِفر (کود) شما را تمیزتر و شهودی‌تر می‌کند.

این تکنیک برای بسیاری از کاربردهای دنیای واقعی که نیاز به تبدیل خوانش سنسورها یا ورودی‌های کاربر به محدوده‌های مختلف دارید، ضروری است. به عنوان مثال، می‌توانید از آن برای موارد زیر استفاده کنید:

  • کنترل سرعت یک موتور DC بر اساس خوانش پتانسیومتر.
  • نمایش مقدار خام یک حساس(حس کننده) دما در مقیاس ۰-۱۰۰٪.
  • نگاشت مختصات جوی‌استیک به زوایای سرو موتور.
  • تنظیم روشنایی LED بر اساس حساس(حس کننده) نور محیط.
  • تبدیل یک خوانش آنالوگ ۰-۵ ولت به مقدار دیجیتال ۰-۱۰۲۳ یا برعکس.

سخت‌افزار/قطعات

برای دنبال کردن این پروژه، به قطعات زیر نیاز دارید:

  • برد آردوینو (Uno، Nano و غیره)
  • یک LED
  • یک مقاومت ۲۲۰ اهمی
  • سیم‌های جامپر
  • برد بورد (اختیاری، اما توصیه می‌شود)

راهنمای سیم‌کشی

در ویدیو، مربی پروژه را با استفاده از یک تنظیمات سیم‌کشی از درس قبلی در مورد محو شدن LED نشان می‌دهد. مدار ساده است: آند (پای بلند) LED را به یک مقاومت ۲۲۰ اهمی وصل کنید و انتهای دیگر آن مقاومت را به پایه دیجیتال ۳ روی آردوینو متصل کنید. کاتد (پای کوتاه) LED را مستقیماً به پایه زمین (GND) روی آردوینو وصل کنید.

توضیح شِفر (کود)

شِفر (کود) این مثال بسیار مختصر است و منطق اصلی در تابع setup() قرار دارد. بیایید بخش‌های قابل تنظیم توسط کاربر را بررسی کنیم.

int LEDpin = 3; //تعریف پایه برای LED

این خط پایه آردوینو را که LED شما به آن متصل است تعریف می‌کند. در این مثال، روی پایه ۳ تنظیم شده است که یک پایه با قابلیت PWM است و برای خروجی آنالوگ ضروری است. اگر LED خود را به پایه PWM دیگری وصل کنید، می‌توانید این عدد را تغییر دهید.

int b=8;//روشنایی ۶۰٪

این متغیر کلیدی است که برای آزمایش سطوح مختلف روشنایی آن را تغییر می‌دهید. این متغیر نشان‌دهنده روشنایی مطلوب به صورت درصد است. نظر در شِفر (کود) می‌گوید «۶۰٪»، اما مقدار برای اهداف نمایشی در ویدیو روی 8 تنظیم شده است. می‌توانید این را به هر عدد صحیحی بین ۰ و ۱۰۰ تغییر دهید. به عنوان مثال، تنظیم b = 60 نشان‌دهنده سطح روشنایی ۶۰٪ خواهد بود.

int brightness = map(b, 0, 100, 0,255);

این قلب درس است. تابع map() مقدار درصدی شما (b) را می‌گیرد و آن را از محدوده اصلی خود (۰ تا ۱۰۰) به یک محدوده هدف جدید (۰ تا ۲۵۵) تبدیل می‌کند. نتیجه در متغیر brightness ذخیره می‌شود که سپس برای نوشتن یک مقدار آنالوگ به پایه LED استفاده می‌شود.

analogWrite(LEDpin, brightness);// LED را با روشنایی ۶۰٪ روشن کنید

در نهایت، این خط مقدار نگاشت‌شده را با استفاده از analogWrite() به پایه LED می‌فرستد. این کار چرخه وظیفه LED را تنظیم می‌کند و به طور مؤثر روشنایی آن را کنترل می‌کند. زیبایی این رویکرد این است که فقط باید متغیر b را تغییر دهید تا LED را کنترل کنید و تابع map() تمام محاسبات لازم را انجام می‌دهد.

پروژه زنده/نمایش

در ویدیو، مربی شِفر (کود) را آپلود می‌کند و اثر تغییر متغیر b را نشان می‌دهد. وقتی b روی ۸ تنظیم شود، نمایشگر مسلسل مقدار نگاشت‌شده ۲۰ را چاپ می‌کند و LED به طور محسوسی کم‌نور است. تغییر b به ۹۰ منجر به مقدار نگاشت‌شده ۲۲۹ می‌شود و LED را بسیار روشن‌تر می‌کند. تنظیم b روی ۱۰۰ به ۲۵۵ نگاشت می‌شود که روشنایی کامل است. این نمایش عملی به وضوح نشان می‌دهد که چگونه تابع map() فرآیند کنترل خروجی‌های آنالوگ با مقادیر درصدی کاربرپسند را ساده می‌کند.

پروژه‌های مرتبط از این ویدیو

فصل‌ها

  • [۰۰:۰۰] مقدمه دوره آردوینو توسط Robojax
  • [۰۱:۱۹] millis() چیست و چرا از آن استفاده کنیم
  • [۰۵:۴۶] مثال ۱: استفاده از millis() برای یک رویداد زمان‌بندی‌شده
  • [۰۸:۲۹] مثال ۲: استفاده از millis() با یک دکمه فشاری
  • [۱۲:۱۴] مثال ۳: تشخیص فشار دوم دکمه پس از یک تأخیر
  • [۱۷:۲۰] مقدمه تابع map()
  • [۱۹:۴۷] بررسی شِفر (کود) برای مثال map()
  • [۲۰:۴۱] نمایش زنده تابع map()

تصاویر

Sunfounder car assembled
Sunfounder car assembled
919-Lesson 14/31-4: Arduino coding map() example 1
زبان: C++
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialize serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=8;//60% brightness
    int brightness = map(b, 0, 100, 0,255);
    Serial.println(brightness);//print it on serial monitor
    analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }
 

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

راهنمای کاربر