पीडब्लूएम का उपयोग करके रास्पबेरी पाई से जुड़ी एलईडी की चमक को नियंत्रित करना सीखें।

पीडब्लूएम एक ऐसी चीज़ है जिसका उपयोग हम सभी प्रतिदिन करते हैं, भले ही हम इसके बारे में नहीं जानते हों। यह एक ऐसी तकनीक है जो विभिन्न अनुप्रयोगों में सीधी और अविश्वसनीय रूप से उपयोगी है। सबसे अच्छी बात यह है कि यह कुछ ऐसा है जिसे आपकी रास्पबेरी पाई बिना ज्यादा मेहनत किए कर सकती है। कैसे? चलो एक नज़र मारें।

पीडब्लूएम क्या है?

जैसा कि शब्दावली में कहा गया है, "पल्स-विड्थ मॉड्यूलेशन" बहुत आकर्षक लगता है। लेकिन हम यहां वास्तव में विद्युत सिग्नल को बंद करने और फिर से चालू करने के बारे में बात कर रहे हैं - बहुत तेज़ी से। हम ऐसा क्यों करना चाहेंगे? सिर्फ इसलिए कि यह किसी वेरिएबल एनालॉग सिग्नल को बिना सहारा लिए अनुकरण करने का एक बहुत आसान तरीका है रास्पबेरी पाई हैट्स, ऐड-ऑन, या अतिरिक्त सर्किटरी। कुछ अनुप्रयोगों के लिए, जैसे स्टोव को गर्म करना, मोटर चलाना, या एलईडी को मंद करना, एक पीडब्लूएम सिग्नल वस्तुतः "वास्तविक" एनालॉग वोल्टेज से अप्रभेद्य है।

कर्तव्य चक्र

तो, हमारे पास दालों की एक श्रृंखला है जिसे एक लोड (वह चीज़ जिसे हम चला रहे हैं) में डाला जा रहा है। यह अकेले इतना उपयोगी नहीं है - जब तक कि हम उन दालों की चौड़ाई को बदलना (या मॉड्यूलेट करना) शुरू नहीं करते। किसी दिए गए ऑन-ऑफ अवधि का "चालू" चरण कुल चक्र के 0-100% तक कहीं भी हो सकता है। इस प्रतिशत को हम कहते हैं

साइकिल शुल्क.

उदाहरण के लिए, मान लीजिए कि हमारे पास 50% के कर्तव्य चक्र के साथ एक 3वी पीडब्लूएम सिग्नल है। एलईडी के माध्यम से जाने वाली बिजली की औसत मात्रा 1.5V के हमेशा चालू रहने वाले सिग्नल के बराबर होगी। कर्तव्य चक्र को ऊपर उठाएं, और एलईडी उज्ज्वल हो जाती है; इसे नीचे डायल करें, और एलईडी मंद हो जाएगी। हम उसी विधि का उपयोग करके ऑडियो उत्पन्न कर सकते हैं - यही कारण है कि यदि आप अन्य चीजों के लिए पीडब्लूएम का उपयोग कर रहे हैं तो आपके रास्पबेरी पाई पर ऑडियो काम करना बंद कर सकता है।

रास्पबेरी पाई पर पीडब्लूएम

आप रास्पबेरी पाई के प्रत्येक GPIO पिन पर सॉफ़्टवेयर PWM का उपयोग कर सकते हैं। लेकिन हार्डवेयर PWM केवल पर उपलब्ध है GPIO12, GPIO13, GPIO18, और GPIO19.

क्या फर्क पड़ता है? ठीक है, यदि आप सिग्नल उत्पन्न करने के लिए सॉफ़्टवेयर का उपयोग करने जा रहे हैं, तो आप सीपीयू चक्र का उपभोग करेंगे। हालाँकि, आपके सीपीयू के पास एलईडी को प्रति सेकंड कई सौ बार बंद करने और चालू करने के लिए कहने से बेहतर काम हो सकता है। वास्तव में, यह अन्य कार्यों से विचलित और उलझा हुआ हो सकता है, जो आपके पीडब्लूएम समय के साथ गंभीर रूप से गड़बड़ कर सकता है।

नतीजतन, कार्य को विशेष सर्किटरी को सौंपना अक्सर एक बेहतर विचार होता है। रास्पबेरी पाई के मामले में, यह सर्किटरी अंदर रहती है चिप पर सिस्टम जिसमें सीपीयू होता है। हार्डवेयर पीडब्लूएम अक्सर अधिक सटीक और सुविधाजनक होता है, और इस प्रकार यह ज्यादातर मामलों में पसंदीदा विकल्प होता है। यदि आप जानना चाहते हैं कि रास्पबेरी पाई 4 के ब्रॉडकॉम बीसीएम2711 चिप में हुड के नीचे क्या चल रहा है, तो आप इसे देख सकते हैं BCM2711 दस्तावेज़ीकरण. अध्याय 8 में PWM सामग्री शामिल है!

एक एलईडी को मंद करना

हमारी एलईडी को हमारे रास्पबेरी पाई के साथ काम करने के लिए, हमें कुछ ब्रेडबोर्डिंग करने की आवश्यकता होगी। इसका मतलब है कि दो घटक: एलईडी स्वयं, और एक वर्तमान-सीमित अवरोधक, जिसे हम इसके साथ श्रृंखला में जोड़ देंगे। अवरोधक के बिना, यदि आपकी एलईडी में बहुत अधिक करंट प्रवाहित होता है, तो उसके धुएँ के दुर्गंधयुक्त झोंके में ख़त्म होने का ख़तरा होता है।

अवरोधक मान पर काम करना

इससे कोई फर्क नहीं पड़ता कि आप एलईडी के किस सिरे से अवरोधक को जोड़ते हैं। अवरोधक का मूल्य क्या मायने रखता है। रास्पबेरी पाई 4 प्रति पिन लगभग 16 मिलीमीटर प्रदान कर सकता है। तो हम कर सकते हे ओम के नियम का प्रयोग करें आवश्यक अवरोधक का मान निकालने के लिए।

कहा गया कानून कहता है कि प्रतिरोध धारा पर वोल्टेज के बराबर होना चाहिए। हम Pi के GPIO पिन (3.3V) से निकलने वाले वोल्टेज को जानते हैं, और हम जानते हैं कि करंट क्या होना चाहिए (16 मिलीएम्प्स, या 0.016 एम्प्स)। यदि हम पहले को दूसरे से विभाजित करते हैं, तो हमें 206.25 मिलता है। अब, चूंकि आपको इस मान के प्रतिरोधकों को ढूंढने में कठिनाई होगी, तो चलिए इसके बजाय 220 ओम का उपयोग करते हैं।

एलईडी के एनोड (लंबे पैर) को कनेक्ट करें जीपीआईओ 18 (जो रास्पबेरी पाई पर भौतिक पिन 12 है)। कैथोड (शॉर्ट लेग) को पाई के किसी भी ग्राउंड पिन से कनेक्ट करें। रास्ते में कहीं अवरोधक को मत भूलना। अब आप जाने के लिए तैयार हैं!

रास्पबेरी पाई पर पीडब्लूएम लागू करना

रास्पबेरी पाई पर काम करने वाले हार्डवेयर PWM को प्राप्त करने के लिए, हम इसका उपयोग करेंगे कैमरून डेविडसन-पिलोन से आरपीआई-हार्डवेयर-पीडब्लूएम लाइब्रेरी, से अनुकूलित जेरेमी इम्पसन द्वारा कोड. में इसका प्रयोग किया गया है पियोरिएक्टर (एक पाई-आधारित बायोरिएक्टर) - लेकिन यह हमारे उद्देश्यों के लिए काफी सरल है।

सबसे पहले, आइये config.txt संपादित करेंफ़ाइल, में मिली /boot निर्देशिका। हमें बस एक पंक्ति जोड़ने की जरूरत है: dtoverlay=pwm-2chan. यदि हम 18 और 19 के अलावा GPIO पिन का उपयोग करना चाहते हैं, तो हम यहां कुछ अतिरिक्त तर्क जोड़ सकते हैं। अभी के लिए, आइए चीजों को सरल रखें।

अपने Pi को रीबूट करें और चलाएँ:

lsmod | grep pwm

यह कमांड ओएस के केंद्रीय भाग, जिसे कर्नेल कहा जाता है, पर लोड किए गए सभी मॉड्यूल को सूचीबद्ध करता है। यहां, हम केवल पीडब्लूएम सामग्री ढूंढने के लिए उन्हें फ़िल्टर कर रहे हैं ग्रेप (वह "ग्लोबल रेगुलर एक्सप्रेशन प्रिंट" है) कमांड।

अगर pwm_bcm2835 सूचीबद्ध मॉड्यूल के बीच दिखाई देता है, तो हम सही रास्ते पर हैं। हमारी तैयारी लगभग पूरी हो चुकी है! जो कुछ बचा है वह वास्तविक पुस्तकालय स्थापित करना है। टर्मिनल से, चलाएँ:

sudo pip3 install rpi-hardware-pwm

अब हम आरंभ करने के लिए तैयार हैं।

पीडब्लूएम एलईडी सर्किट कोडिंग

अपने हाथों को थोड़े से गंदे करने का समय आ गया है पायथन में कोडिंग. थॉनी को फायर करें और निम्नलिखित कोड में कॉपी करें। फिर मारा दौड़ना.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

सब ठीक होने पर, आप देखेंगे कि एलईडी धीरे-धीरे तेज होती जाएगी मैं काउंटर वैरिएबल 100 तक पहुँच जाता है. फिर यह बंद हो जाएगा. यहाँ क्या चल रहा है? आइए इसके माध्यम से चलें।

हम हार्डवेयर PWM लाइब्रेरी का प्रासंगिक हिस्सा आयात कर रहे हैं (साथ में) समय मॉड्यूल) और एक नया वेरिएबल घोषित करना। हम सेट कर सकते हैं pwm_चैनल 0 या 1 तक, जो क्रमशः Pi पर GPIO पिन 18 और 19 से मेल खाता है।

हर्ट्ज मूल्य हम अपनी पसंद की किसी भी आवृत्ति पर सेट कर सकते हैं (हालाँकि हम अंततः पाई की घड़ी की गति से सीमित हैं)। 60Hz पर, हमें कोई PWM झिलमिलाहट नहीं दिखनी चाहिए। लेकिन बहुत कम मूल्य (जैसे 10) से शुरुआत करना और धीरे-धीरे चीजों को ऊपर ले जाना एक अच्छा विचार हो सकता है। ऐसा करें, और आप वास्तव में धड़कनों को होते हुए देख पाएंगे। बस इसके लिए हमारी बात न मानें!

हम अपने कर्तव्य चक्र पर काम करते हैं (मैं) 0 से 100 तक लूप के लिए पायथन का उपयोग करना. यह ध्यान देने योग्य है कि हम इसे सेट कर सकते हैं समय पर सोये तर्क यह है कि जब तक हम चाहें-चूंकि पीडब्लूएम को हार्डवेयर में संभाला जा रहा है, यह पर्दे के पीछे चलेगा, भले ही हम प्रोग्राम को प्रतीक्षा करने के लिए कहें।

पीडब्लूएम के साथ सीखने के लिए और भी बहुत कुछ है

बधाई हो! आपने अपना पहला PWM प्रोग्राम लिखा है। लेकिन, जैसा कि अक्सर रास्पबेरी पाई के मामले में होता है, इस सामान के साथ आप बहुत कुछ कर सकते हैं, खासकर यदि आप अपने रास्पबेरी पाई को सही पीडब्लूएम एचएटी के साथ बढ़ाते हैं। इसलिए, एक छोटी एलईडी से संतुष्ट न रहें। आप इस नई शक्ति का उपयोग मोटरों को नियंत्रित करने, संदेशों को एन्कोड करने और सिंथेसाइज़र टोन उत्पन्न करने के लिए कर सकते हैं। मॉड्यूलेशन की एक दुनिया आपका इंतजार कर रही है!