كيفية التحكم في سطوع LED على Raspberry Pi باستخدام PWM

كيفية التحكم في سطوع LED على Raspberry Pi باستخدام PWM

[ad_1]

إذا كنت قد استمتعت بجعل مصابيح LED تومض على Raspberry Pi ، فانتظر حتى تسمع عن التحكم في سطوعها! في هذا الدليل ، نعمل مع زوج من الأزرار لضبط سطوع الصمام على Raspberry Pi.

بدء أول مشروع Raspberry Pi الخاص بك؟ إليك كيفية تثبيت نظام Raspberry Pi OS بسرعة على جهازك.

ماذا يفعل PWM لمصباح LED

PWM ، أو Pulse Width Modulation ، هي طريقة تقلل بشكل مصطنع من خرج الجهد لدبابيس Raspberry Pi GPIO (إدخال / إخراج للأغراض العامة). إنه مصطنع ، لأنك لا تقلل الجهد حقًا وتقوم فقط بتشغيله وإيقافه بسرعة كبيرة بحيث يصبح الجهد الإجمالي أقل من الجهد الحقيقي الذي تقوم بتطبيقه عليه.

بالنسبة إلى الصمام الثنائي الباعث للضوء أو الصمام الثنائي الباعث للضوء ، فإن زيادة الجهد الكلي تجعله يتألق أكثر ، بينما يؤدي تقليله إلى جعله باهتًا. ولكن نظرًا لأن Raspberry Pi ليس له خرج تناظري ، فإننا نستخدم PWM للتحكم في سطوع LED.

ماذا ستحتاج

  • 2 أزرار انضغاطية
  • 3 مقاومات (250-550Ω ستعمل. استخدم تصنيفًا أقل إذا كان مؤشر LED داكنًا جدًا.)
  • 1 LED (أي لون)
  • اللوح
  • أسلاك العبور
  • Raspberry Pi (أي طراز باستثناء Pi Pico)

كيفية استخدام PWM للتحكم في سطوع LED على Raspberry Pi

في هذا الدليل ، نستخدم زرين لجعل إضاءة LED أكثر إشراقًا أو باهتة مع PWM. يؤدي الضغط على الزر “أكثر إشراقًا” إلى زيادة خرج PWM ، بينما يؤدي الضغط على زر “باهتة” إلى تقليله.

تحضير الدائرة

  1. لنبدأ بمصباح LED. على اللوح ، ضع مؤشر LED وقم بتوصيل المقاوم بجانب واحد. لا يهم الجانب الذي يوضع فيه المقاوم.
الصمام والمقاوم على اللوح لدليل Raspberry Pi Pwm
  1. قم بتوصيل العبور بجانب الكاثود الخاص به. سيشير هذا إلى رقم 11 في Raspberry Pi. أضف وصلة مرور أخرى تؤدي إلى السكة الزرقاء على لوح التجارب ، ثم أضف وصلة مرور أخرى من تلك السكة الزرقاء إلى رقم 9 على Raspberry Pi ، وهو GND.
الصمام والمقاوم على اللوح متصل بـ Raspberry Pi لدليل Raspberry Pi Pwm Led

ملحوظة: للعثور على رقم التعريف الشخصي الصحيح على Raspberry Pi ، أمسك اللوحة بحيث يكون درج دبوس GPIO على اليمين. يجب أن يكون الدبوس العلوي الأيسر هو الدبوس 1 ، ويجب أن يكون السن 2 جهة اليمين ، ويجب أن يكون السن 3 أدناه.

Raspberry Pi Pinout
  1. ستحتاج إلى بناء الأزرار الانضغاطية. ضع الأزرار الانضغاطية على لوح التجارب وأضف المقاوم إلى ساق واحدة من كل زر ضغط. يجب أن يؤدي الجانب الآخر من المقاوم إلى السكة الزرقاء للوح.

تلميح: هل تريد معرفة المزيد عن الأزرار الانضغاطية؟ لدينا دليل كامل مخصص لتوضيح كيفية استخدام الأزرار الانضغاطية مع دبابيس Raspberry Pi GPIO.

  1. أضف أسلاك توصيل في اتصال متوازي مع المقاوم وزر الضغط. قم بتوصيل الجانب الآخر من هذه الأطراف بالدبابيس 13 (الزر “أكثر سطوعًا”) و 15 (زر “باهتة”).
أزرار الضغط على اللوح مع Led لدليل Raspberry Pi Pwm Led
  1. استخدم سلك توصيل لتوصيل الأزرار الانضغاطية بالجانب مع السكة الحمراء للوح.
أسلاك توصيل حمراء على أزرار ضغط اللوح لدليل Raspberry Pi Pwm Led
  1. قم بتوصيل السكة الحمراء بمصدر 3.3 فولت على Raspberry Pi ، مثل الدبوس 1.

إذا كانت Python هي لغة البرمجة المفضلة لديك ، فتعلم كيفية تثبيت إصدارات Python المتعددة وإدارتها في Linux.

تحضير المدونة

باستخدام أداة تحرير التعليمات البرمجية المفضلة لديك ، قم بإنشاء ملف جديد وحفظه باسم “rpi-lcdpwm.py.”

  1. ابدأ بالرمز أدناه ، والذي يمنحك طريقتين لاستيراد الوحدات على Python: الأولى تستورد ملف RPi.GPIO وحدة ويتيح لك الاتصال به فقط GPIO، ويستورد الثاني فقط ملف sleep() وظيفة من مجمل time وحدة.
import RPi.GPIO as GPIO
from time import sleep
  1. حدد أرقام الدبوس لتسهيل تغيير الدبابيس في حالة تغيير رأيك لاحقًا.
ledPin = 11
brightenButton = 13
dimButton = 15
  1. اختياري: أضف السطر GPIO.setwarnings(False) بحيث يمكنك تجنب رسالة تحذير GPIO عند بدء تشغيل البرنامج النصي لاحقًا.
  1. اضبط طريقة اختيار الدبوس. BOARD يعد اختيارًا جيدًا للمبتدئين ، حيث يسهل البحث عن المسامير دون الحاجة إلى الرجوع إلى pinout. الطريقة الأخرى هي BCM، والتي تعني “Broadcom”. يستخدم هذا أرقام Broadcom المخصصة لكل دبوس ، والتي قد تختلف بناءً على طراز Raspberry Pi الخاص بك.
  1. قم بتعيين دبابيس GPIO كمدخل أو إخراج. نحن نتنازل ledPin كدبوس إخراج وسيبدأ دائمًا حالته كـ LOW. تعيين السطرين التاليين brightenButton و dimButton كدبابيس الإدخال التي تستمع إلى دفعات الزر. يجب أيضًا تعيين هذه كـ GPIO.PUD_DOWN لتعيينها على أنها تستخدم المقاومات المنسدلة.
GPIO.setup(ledPin, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
  1. دعنا نعلن عن PWM. pwmLEDPin هو متغير يسهل كتابته GPIO.PWM(ledPin, 100) في وقت لاحق ، و .start(0) يبدأ الأمر عملية PWM. يمكننا الآن تغيير ناتج ledPin باستخدام PWM.
pwmLEDPin = GPIO.PWM(ledPin, 100)
pwmLEDPin.start(0)
  1. دورة العمل هي النسبة المئوية للوقت الذي يكون فيه الدبوس نشطًا أثناء الموجة النبضية. هنا ، نقوم بتعيين دورة العمل إلى 100٪ أولاً. لقد أجرينا مناقشة مطولة حول هذا الموضوع في دليلنا لاستخدام محركات مؤازرة مع Raspberry Pi ، إذا كنت مهتمًا.
dutyCycle = 100
GPIO.output(ledPin, GPIO.HIGH)
  1. بالنسبة للجزء التكراري ، فإننا نضع ملف while حلقة تعمل إلى الأبد تقريبًا.
  1. في بداية دورة التكرار هذه ، نقوم بتحديث دورة العمل.
pwmLEDPin.ChangeDutyCycle(dutyCycle)
  1. دعونا نبرمج ما brightenButton يفعل. عندما يكتشف التوت الكهرباء التي تمر عبر الدبوس ل brightenButton، ستظهر رسالة تقول “BrightenButton is HIGH” ، والتي تضيف 5 إلى القيمة الحالية لدورة العمل حتى تصل إلى 100.
if GPIO.input(brightenButton) == GPIO.HIGH:
                print("brightenButton is HIGH")
                if dutyCycle < 100:
                        dutyCycle += 5
                        sleep(0.25)
                else: dutyCycle = 100
  1. عند برمجة ملف dimButton تقوم بالعكس ، وتقليل القيمة بمقدار 5 حتى تصل إلى 0.
elif GPIO.input(dimButton) == GPIO.HIGH:
                print("dimButton is HIGH")
                if dutyCycle > 0:
                        dutyCycle -= 5
                        sleep(0.25)
                else: dutyCycle = 0

الكود النهائي:

import RPi.GPIO as GPIO
from time import sleep
 
ledPin = 11
brightenButton = 13
dimButton = 15
 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledPin, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
pwmLEDPin = GPIO.PWM(ledPin, 100)
pwmLEDPin.start(0)
dutyCycle = 100
GPIO.output(ledPin, GPIO.HIGH)
 
while True:
        pwmLEDPin.ChangeDutyCycle(dutyCycle)
        if GPIO.input(brightenButton) == GPIO.HIGH:
                print("brightenButton is HIGH")
                if dutyCycle < 100:
                        dutyCycle += 5
                        sleep(0.25)
                else: dutyCycle = 100
        elif GPIO.input(dimButton) == GPIO.HIGH:
                print("dimButton is HIGH")
                if dutyCycle > 0:
                        dutyCycle -= 5
                        sleep(0.25)
                else: dutyCycle = 0

جعلها تعمل

أولاً ، ستحتاج إلى محطة طرفية. يمكنك استخدام المحطة الطرفية المضمنة في Raspberry Pi أو التحكم في Raspberry Pi من خلال SSH على جهاز كمبيوتر منفصل. من خلال المحطة ، يجب أن تذهب إلى دليل نص بايثون وتدخل python3 rpi-ledpwm.py أو اسم الملف الذي استخدمته.

في بعض الأحيان سيبدو مؤشر LED وكأنه يومض. من المحتمل أن يكون تردد PWM منخفضًا جدًا ، إذا كان هذا هو الحال. يمكنك زيادة التردد عن طريق زيادة الرقم في pwmLEDPin = GPIO.PWM(ledPin, 100) حتى يختفي الوميض.

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

تلميح: تفضل اردوينو بدلا من ذلك؟ إليك دليل كامل لتبدأ في مشاريع Arduino.

أسئلة مكررة

ما هو الحد الأدنى للتردد الذي يمكنني إنشاؤه باستخدام Raspberry Pi؟

أقل تردد يمكنك ضبطه على Raspberry Pi هو 10 هرتز. لا يمكن للجهاز دعم أي شيء أقل من ذلك.

ما هو الحد الأقصى للتردد الذي يمكنني إنشاؤه باستخدام Raspberry Pi؟

أعلى تردد يمكنك ضبطه على Raspberry Pi هو 8000 هرتز.

هل يمكن تحويل الموجات النبضية إلى موجات صوتية؟

نعم. باستخدام عنصر كهرضغطية ، من الممكن تمامًا تحويل موجات النبض إلى موجات صوتية يمكنك سماعها. في هذه الحالة ، يؤدي تعديل التردد إلى تغيير درجة الصوت ، بينما يؤدي تعديل دورة العمل إلى ضبط مستوى الصوت.

جميع الصور بواسطة Terenz Jomar Dela Cruz.

تيرينز جومار ديلا كروز
تيرينز جومار ديلا كروز

Terenz هو هاوٍ متخصص في الروبوتات يحاول بناء أروع روبوت شهده العالم على الإطلاق. كان بإمكانه فعل ذلك بالفعل إذا لم يكن مشغولًا جدًا في حرق مصابيح LED كهواية ثانية.

اشترك في نشرتنا الإخبارية!

تم تسليم أحدث دروسنا مباشرة إلى صندوق الوارد الخاص بك

[ad_2]

Comments

No comments yet. Why don’t you start the discussion?

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *