- BH1750 डिजिटल लाइट सेंसर मॉड्यूल का परिचय
- Arduino
- BH1750 लाइट सेंसर के इंटरफेस के लिए Arduino प्रोग्रामिंग
जब आप अपने फोन को धूप या उच्च प्रकाश में लेते हैं, तो यह प्रकाश की स्थिति के अनुसार चमक को स्वचालित रूप से समायोजित करता है। अधिकांश डिस्प्ले डिवाइस अब एक दिन है, चाहे वह टीवी या मोबाइल फोन हो, ब्राइटनेस को अपने आप एडजस्ट करने के लिए एम्बिएंट लाइट सेंसर अंदर होता है। आज इस ट्यूटोरियल में, हम एक ऐसे सेंसर BH1750 लाइट सेंसर मॉड्यूल का उपयोग करेंगे और इसे Arduino के साथ इंटरफेस करेंगे और 16x2 LCD पर लक्स का मान दिखाएंगे।
BH1750 डिजिटल लाइट सेंसर मॉड्यूल का परिचय
BH1750 एक डिजिटल एम्बिएंट लाइट सेंसर या एक लाइट इंटेंसिटी सेंसर है, जिसका उपयोग ऑटो में मोबाइल, एलसीडी डिस्प्ले में प्रदर्शन की चमक को समायोजित करने या बाहरी प्रकाश व्यवस्था के आधार पर कारों में हेडलाइट्स को चालू / बंद करने के लिए किया जा सकता है।
सेंसर I 2 C सीरियल संचार प्रोटोकॉल का उपयोग करता है जो माइक्रोकंट्रोलर्स के साथ उपयोग करना आसान बनाता है। I2C संचार के लिए यह sdi और SDA पिन है। BH1750 परिवेश प्रकाश संवेदक के pinout नीचे दिखाया गया है:
इस सेंसर का आउटपुट LUX (lx) में है, इसलिए इसे किसी और गणना की आवश्यकता नहीं है। लक्स प्रकाश की तीव्रता मापने की इकाई है। यह किसी विशेष क्षेत्र पर प्रकाश की मार की मात्रा के अनुसार तीव्रता को मापता है। एक लक्स एक लुमेन प्रति वर्ग मीटर के बराबर है।
सेंसर 2.4V से 3.6V (आमतौर पर 3.0V) पर वोल्टेज पर काम करता है और यह 0.12mA की वर्तमान खपत करता है । इस सेंसर की एक विस्तृत श्रृंखला और उच्च रिज़ॉल्यूशन (1-65535lx) है और इसके अलावा, माप भिन्नता भी छोटी है (लगभग +/- 20%)। यह किसी भी बाहरी घटक के बिना स्वतंत्र रूप से भी काम कर सकता है।
हालांकि एक LDR सेंसर का उपयोग प्रकाश की स्थिति के आधार पर उपकरणों को नियंत्रित करने के लिए भी किया जा सकता है लेकिन यह सटीक नहीं है। हमने कई हल्के नियंत्रित अनुप्रयोगों के निर्माण के लिए LDR सेंसर का उपयोग किया है:
- एलडीआर का उपयोग करते हुए Arduino लाइट सेंसर सर्किट
- LDR और 555 टाइमर आईसी का उपयोग करते हुए डार्क डिटेक्टर
- लाइट का पता लगाने के लिए सरल LDR सर्किट
- Arduino कलर मिक्सिंग लैंप RGB RGB और LDR का उपयोग कर
Arduino
BH1750 लाइट सेंसर को Arduino से जोड़ने के लिए सर्किट आरेख नीचे दिखाया गया है।
I2C संचार पिन SDA और SC17 of BH1750 I 2 C संचार के लिए क्रमशः Arduino pin A4 और A5 से जुड़े हैं । जैसा कि हम जानते हैं कि सेंसर के लिए ऑपरेटिंग वोल्टेज 3.3v है इसलिए BH1750 का VCC और GND Arduino के 3.3V और GND से जुड़ा हुआ है। एलसीडी के लिए, डेटा पिन (D4-D7) Arduino के डिजिटल पिन D2-D5 से जुड़े होते हैं और RS और EN पिन D6 और D7 के Arduino से जुड़े होते हैं। एलसीडी का V0 पॉट से जुड़ा होता है और एलसीडी की चमक को नियंत्रित करने के लिए 10k पॉट का उपयोग किया जाता है।
BH1750 लाइट सेंसर के इंटरफेस के लिए Arduino प्रोग्रामिंग
Arduino के साथ इस LUX सेंसर का उपयोग करने के लिए प्रोग्रामिंग भाग बहुत आसान है। हालाँकि इस सेंसर के लिए एक पुस्तकालय उपलब्ध है, लेकिन हम इसके बिना भी इसका उपयोग कर सकते हैं।
सबसे पहले, हमने एलसीडी और आई 2 सी प्रोटोकॉल के लिए हेडर फाइलें शामिल की हैं ।
#शामिल
में सेटअप समारोह, हम दोनों एलसीडी और सेंसर प्रारंभ और एलसीडी पर उद्घाटन संदेश मुद्रित गए हैं।
शून्य सेटअप () { वायर.begin (); lcd.begin (16,2); lcd.print ("BH1750 लाइट"); lcd.setCursor (0,1); lcd.print ("तीव्रता सेंसर"); देरी (2000); }
यहाँ BH1750_Read और BH1750_Init फ़ंक्शन क्रमशः लक्स मानों को पढ़ने और लिखने के लिए उपयोग किए जाते हैं। Wire.beginTransmission () समारोह प्रसारण शुरू करने के लिए प्रयोग किया जाता है और Wire.requestFrom (पता, 2) समारोह रजिस्टरों जहां 2 इंगित करता है रजिस्टरों की संख्या को पढ़ने के लिए प्रयोग किया जाता है।
आगे Wire.endTransmission () का उपयोग ट्रांसमिशन को समाप्त करने के लिए किया जाता है और इसमें उस रजिस्टर के पते को दर्ज करके वांछित रजिस्टर पर जाने के लिए Wire.write () फ़ंक्शन का उपयोग किया जाता है।
int BH1750_Read (इंट पता) { int i = 0; वायर.beginTransmission (पता); वायर.requestFrom (पता, 2); जबकि (वायर.उपलब्ध ()) { बफ = वायर.डर (); मैं ++; } वायर.endTransmission (); मैं लौटा; } void BH1750_Init (int address) { वायर.beginTransmission (पता); वायर.राइट (0x10); वायर.endTransmission (); }
में पाश समारोह, हम कर रहे हैं एलसीडी से अधिक वास्तविक समय लक्स मूल्यों मुद्रण । पहले BH1750_Read फ़ंक्शन से वापसी मान की तुलना 2 के साथ करें, और उसके बाद लक्स मानों को प्रिंट करना शुरू करें यदि यह 2 के बराबर है। यहां मानों की तुलना 2 के साथ की गई है क्योंकि BH1750_Read फ़ंक्शन रजिस्टर काउंट का मान लौटाता है और हम केवल 2 बहनें पढ़ रहे हैं। इसलिए जब यह 2 तक पहुंचता है, तो कार्यक्रम प्रकाश की तीव्रता के लक्स मानों को छापना शुरू कर देता है।
फिर दोनों रजिस्टरों से मान प्राप्त करने और उन्हें 1.2 से विभाजित करने के लिए एक सूत्र का उपयोग किया जाता है, जो माप सटीकता है।
शून्य लूप () { int i; uint16_t मूल्य = 0; BH1750_Init (BH1750address); देरी (200); if (2 == BH1750_Read (BH1750address)) { value = ((बफ << 8) -बफ) /1.2; lcd.clear (); lcd.print ("लक्स में तीव्रता"); lcd.setCursor (6,1); lcd.print (मान); } देरी (150); }
अंत में Arduino को शक्ति दें और कार्यक्रम को Arduino में अपलोड करें। जैसे ही प्रोग्राम अपलोड होता है, एलसीडी LUX इकाइयों में प्रकाश की तीव्रता दिखाना शुरू कर देता है। आप नीचे दिए गए वीडियो में दिखाए अनुसार सेंसर के चारों ओर प्रकाश की तीव्रता को बदलकर मूल्यों को भी बदल सकते हैं।