كود البحث

الدرس 14/31-4: مثال 1 على دالة map() في برمجة الأردوينو

الدرس 14/31-4: مثال 1 على دالة map() في برمجة الأردوينو

هذا الدرس جزء من سلسلة حول برمجة الأردوينو ويركز على الاستخدام العملي لدالة map(). في هذا الدرس، ستتعلم كيفية تحويل قيمة النسبة المئوية (0-100) إلى قيمة PWM (تعديل عرض النبضة) (0-255) للتحكم في سطوع مصباح LED. بدلاً من الحساب اليدوي بأن 60% تساوي 153، تقوم دالة map() بالتحويل الخطي نيابةً عنك، مما يجعل الكود الخاص بك أنظف وأكثر بديهية.

هذه التقنية ضرورية للعديد من التطبيقات الواقعية حيث تحتاج إلى ترجمة قراءات المستشعرات أو مدخلات المستخدم إلى نطاقات مختلفة. على سبيل المثال، يمكنك استخدامها من أجل:

  • التحكم في سرعة محرك تيار مستمر بناءً على قراءة مقياس الجهد.
  • عرض القيمة الخام لمستشعر درجة الحرارة على مقياس 0-100%.
  • تحويل إحداثيات عصا التحكم إلى زوايا محرك مؤازر.
  • ضبط سطوع LED بناءً على مستشعر الضوء المحيط.
  • تحويل قراءة تناظرية من 0-5 فولت إلى قيمة رقمية من 0-1023 أو العكس.

الأجهزة/المكونات

لمتابعة هذا المشروع، ستحتاج إلى المكونات التالية:

  • لوحة أردوينو (Uno، Nano، إلخ)
  • مصباح LED
  • مقاوم 220 أوم
  • أسلاك توصيل
  • لوحة تجارب (اختيارية، لكن يوصى بها)

دليل التوصيل

في الفيديو، يوضح المدرب المشروع باستخدام إعداد توصيل من درس سابق حول تخفيت LED. الدائرة بسيطة: قم بتوصيل الأنود (الطرف الطويل) لمصباح LED بمقاوم 220 أوم، وقم بتوصيل الطرف الآخر من هذا المقاوم بالدبوس الرقمي 3 على الأردوينو. قم بتوصيل الكاثود (الطرف القصير) لمصباح LED مباشرة بدبوس الأرضي (GND) على الأردوينو.

شرح الكود

الكود لهذا المثال موجز جدًا، حيث يقع المنطق الأساسي في دالة setup(). دعنا نقوم بتفصيل الأجزاء القابلة للتخصيص من قبل المستخدم.

int LEDpin = 3; // تحديد الدبوس الخاص بـ LED

هذا السطر يحدد دبوس الأردوينو الذي يتصل به مصباح LED. في هذا المثال، تم ضبطه على الدبوس 3، وهو دبوس يدعم PWM، وهو ضروري للإخراج التناظري. يمكنك تغيير هذا الرقم إذا قمت بتوصيل مصباح LED بدبوس PWM مختلف.

int b=8;//سطوع 60%

هذا هو المتغير الرئيسي الذي ستقوم بتعديله لاختبار مستويات سطوع مختلفة. إنه يمثل السطوع المطلوب كنسبة مئوية. التعليق في الكود يقول "60%"، لكن القيمة مضبوطة على 8 لأغراض العرض التوضيحي في الفيديو. يمكنك تغيير هذا إلى أي عدد صحيح بين 0 و100. على سبيل المثال، ضبط b = 60 سيمثل مستوى سطوع بنسبة 60%.

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

هذا هو جوهر الدرس. تأخذ دالة map() قيمة النسبة المئوية الخاصة بك (b) وتحولها من نطاقها الأصلي (0 إلى 100) إلى نطاق هدف جديد (0 إلى 255). يتم تخزين النتيجة في متغير brightness، والذي يُستخدم بعد ذلك لكتابة قيمة تناظرية إلى دبوس LED.

analogWrite(LEDpin, brightness);// تشغيل LED بسطوع 60%

أخيرًا، يرسل هذا السطر القيمة المحولة إلى دبوس LED باستخدام analogWrite(). هذا يضبط دورة عمل LED، مما يتحكم فعليًا في سطوعه. جمال هذا النهج هو أنك تحتاج فقط إلى تغيير متغير b للتحكم في LED، وتقوم دالة map() بجميع الحسابات اللازمة.

المشروع/العرض الحي

في الفيديو، يقوم المدرب برفع الكود ويعرض تأثير تغيير متغير b. عندما يتم ضبط b على 8، تطبع الشاشة التسلسلية القيمة المحولة 20، ويكون LED خافتًا بشكل ملحوظ. تغيير b إلى 90 ينتج عنه قيمة محولة 229، مما يجعل LED أكثر سطوعًا. ضبط b على 100 يحول إلى 255، وهو السطوع الكامل. يوضح هذا العرض العملي بوضوح كيف تبسط دالة map() عملية التحكم في المخرجات التناظرية بقيم النسبة المئوية سهلة الاستخدام.

مشاريع ذات صلة من هذا الفيديو

الفصول

  • [00:00] مقدمة إلى دورة الأردوينو بواسطة Robojax
  • [01:19] ما هو millis() ولماذا نستخدمه
  • [05:46] مثال 1: استخدام millis() لحدث مؤقت
  • [08:29] مثال 2: استخدام millis() مع زر ضغط
  • [12:14] مثال 3: اكتشاف ضغطة زر ثانية بعد تأخير
  • [17:20] مقدمة إلى دالة map()
  • [19:47] شرح الكود لمثال map()
  • [20:41] عرض حي لدالة 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() {

 
 }
 

الأشياء التي قد تحتاجها

ملفات📁

دليل المستخدم