الدرس 14/31-5: مثال 2 على دالة map() في برمجة الأردوينو
يشرح هذا البرنامج التعليمي كيفية استخدام دالة map() في الأردوينو للتحكم في سطوع مصباح LED باستخدام قيمة النسبة المئوية (0–100%) بدلاً من النطاق الخام 0–255 المطلوب بواسطة analogWrite(). هذه تقنية أساسية تبسط الكود الخاص بك وتجعله أكثر بديهية، حيث يمكنك التفكير بالنسب المئوية بدلاً من القيم البايتية العشوائية.
هذه المهارة ضرورية لأي مشروع تحتاج فيه إلى تحجيم قراءات المستشعرات أو إشارات التحكم. على سبيل المثال، يمكنك استخدامها من أجل:
- التحكم في سطوع مصباح LED أو سرعة محرك بناءً على قراءة مقياس الجهد.
- تحويل مخرجات مستشعر درجة الحرارة (مثل 0–1023) إلى نطاق مئوي أو فهرنهايتي.
- ربط الإدخال التناظري لعصا التحكم للتحكم في موضع محرك سيرفو.
- إنشاء واجهة مستخدم بسيطة حيث تُستخدم قيمة النسبة المئوية لضبط مستوى طاقة الجهاز.
بنهاية هذا الدرس، ستكون قادرًا على كتابة كود أنظف وأكثر قابلية للصيانة وأسهل في القراءة والتعديل.
المكونات/الأجهزة
يستخدم هذا المشروع مجموعة بسيطة من المكونات، مما يجعله مثاليًا للمبتدئين. ستحتاج إلى:
- لوحة أردوينو (مثل Uno).
- مصباح LED.
- مقاوم 220 أوم.
- أسلاك توصيل.
- لوحة تجارب (اختيارية لكن موصى بها).
دليل التوصيل
التوصيل في هذا المشروع بسيط جدًا، كما هو موضح في الفيديو (في الفيديو عند 20:47). يتم توصيل مصباح LED بالدبوس 3 من الأردوينو عبر مقاوم محدد للتيار بقيمة 220 أوم.
قم بتوصيل الأنود (الطرف الأطول) لمصباح LED بالدبوس 3 عبر المقاوم. قم بتوصيل الكاثود (الطرف الأقصر) لمصباح LED بالأرضي (GND) في الأردوينو.
شرح الكود
يركز هذا المثال على دالة معرفة من قبل المستخدم تبسط التحكم في سطوع مصباح LED. تم بناء الكود حول دالة مخصصة تسمى pwmValue()، وهي المفتاح لجعل الكود بديهيًا.
دعنا نقسم الأجزاء القابلة للتكوين في الكود:
int LEDpin = 3; //تحديد الدبوس لمصباح LED
يحدد هذا السطر دبوس الأردوينو الذي يتصل به مصباح LED. يمكنك تغيير الرقم 3 إلى أي دبوس آخر يدعم PWM على لوحة الأردوينو الخاصة بك.
جوهر المشروع هو الدالة المخصصة pwmValue(). تأخذ هذه الدالة قيمة النسبة المئوية كمدخل وتحولها إلى النطاق 0–255 المستخدم بواسطة analogWrite(). هنا تقوم دالة map() بسحرها.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
لاستخدام هذه الدالة، ببساطة قم باستدعائها مع النسبة المئوية للسطوع المطلوبة. ستعيد الدالة القيمة الصحيحة لـ analogWrite(). على سبيل المثال، pwmValue(60) سيعيد 153، وهو ما يعادل 60% من 255. تتضمن الدالة أيضًا فحص أمان لضمان أن النسبة المئوية للإدخال بين 0 و100، وتعيد 0 إذا كانت خارج هذا النطاق.
في دالة setup()، يمكنك رؤية كيفية استخدام هذا:
int b=5;//سطوع 60%
Serial.println( pwmValue(b) );//طباعته على الشاشة التسلسلية
analogWrite(LEDpin, pwmValue(b));// تشغيل مصباح LED بسطوع 60%
هنا، يتم تعيين المتغير b إلى النسبة المئوية للسطوع المطلوبة. ثم يتم استخدام الدالة pwmValue(b) لطباعة القيمة المحولة على الشاشة التسلسلية ولضبط سطوع مصباح LED. لتغيير سطوع مصباح LED، تحتاج فقط إلى تعديل قيمة b. تتولى دالة map() جميع الحسابات اللازمة نيابة عنك.
المشروع/العرض الحي
في الفيديو، يعرض المقدم المشروع عن طريق تغيير قيمة المتغير b ورفع الكود إلى الأردوينو. عندما يتم تعيين b إلى 60، يقوم الكود بتحويله إلى 153 ويضيء مصباح LED بسطوع 60%. تغيير b إلى 90 يحوله إلى 229، مما يجعل مصباح LED أكثر سطوعًا بشكل ملحوظ. تعيينه إلى 100 يحوله إلى 255، وهو أقصى سطوع. يوضح العرض بوضوح كيف تسمح لك دالة map() بالتحكم في مصباح LED باستخدام قيمة النسبة المئوية البديهية، بينما تؤكد الشاشة التسلسلية القيمة الدقيقة 0–255 التي يتم إرسالها إلى الدبوس (في الفيديو عند 21:29).
مشاريع ذات صلة من هذا الفيديو
- الدرس 14/31-1: دوال Millis (بدون تأخير) و map في الأردوينو | SunFounder Robojax
- الدرس 14/31-2: مثال 2 لبرمجة millis() في الأردوينو مع حدث
- الدرس 14/31-3: مثال 3 لبرمجة millis() في الأردوينو مع زر ضغط
- الدرس 14/31-4: مثال 1 لبرمجة map() في الأردوينو
الفصول
- [00:00] مقدمة إلى دوال Millis و map
- [01:19] ما هو Millis ولماذا استخدامه
- [05:46] استخدام Millis مع حدث لاتخاذ إجراء
- [08:35] مثال 2 لـ Millis مع زر ضغط
- [12:14] مثال 3 لـ Millis للتحقق من ضغطتين على الزر
- [17:20] مقدمة إلى دالة map()
- [19:47] مثال كود لتحويل النسبة المئوية إلى سطوع مصباح LED
- [20:47] عرض حي لدالة map()
- [22:41] إنشاء دالة مخصصة للتعامل مع التحويل
/*
Lesson 14/31-5: Arduino coding map( ) example-2
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);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
الأشياء التي قد تحتاجها
-
أمازونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
أمازون
-
أمازون
-
أمازون
-
أمازون
-
آخر
الموارد والمراجع
-
خارجياشترِ مجموعة التعلم الذكية 3 في 1 من سن فاونديرsunfounder.com
ملفات📁
دليل المستخدم
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB