विषयसूची:

Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर: 5 कदम
Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर: 5 कदम

वीडियो: Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर: 5 कदम

वीडियो: Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर: 5 कदम
वीडियो: How to use Potentiometer with Arduino (code explained)| analogRead | Arduino tutorial 5 2024, नवंबर
Anonim
Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर
Arduino के साथ DS1803 डुअल डिजिटल पोटेंशियोमीटर

मैं एक Arduino के साथ DS1803 डिजिटल पॉटमीटर के उपयोग को साझा करना पसंद करता हूं। इस आईसी में दो डिजिटल पॉटमीटर हैं जिन्हें दो वायर इंटरफेस पर नियंत्रित किया जा सकता है, इसके लिए मैं वायर.एच लाइब्रेरी का उपयोग करता हूं।

यह आईसी एक सामान्य एनालॉग पॉटमीटर की जगह ले सकता है। इस तरह आप उदाहरण के लिए एक एम्पलीफायर या बिजली की आपूर्ति को नियंत्रित करने में सक्षम हैं।

इस निर्देशयोग्य में मैं काम करने के लिए दो एलईडी की चमक को नियंत्रित करता हूं।

आर्डिनो एक रोटरी एनकोडर की दालों को गिनता है और मान को वेरिएबल पॉट [0] और पॉट [1] में रखता है। जब आप एनकोडर पर स्विच दबाते हैं, तो आप पॉट [0] और पॉट [1] के बीच स्विच कर सकते हैं।

बर्तनों के वास्तविक मूल्य को DS1803 से वापस पढ़ा जाता है और वेरिएबल पॉटवैल्यू [0] और पॉटवैल्यू [1] में रखा जाता है और एक एलसीडी पर प्रदर्शित किया जाता है।

चरण 1: DS1803. के कनेक्शन

DS1803. के कनेक्शन
DS1803. के कनेक्शन

यहां आप DS1803 के कनेक्शन देख सकते हैं। H पोटेंशियोमीटर का ऊँचा भाग है, L निचला भाग है और W वाइपर है। एससीएल और एसडीए बस कनेक्शन हैं।

कनेक्शन A0, A1 और A2 के साथ आप DS1803 को इसका अपना पता दे सकते हैं, इस तरह आप एक बस के माध्यम से अधिक उपकरणों को नियंत्रित कर सकते हैं। मेरे उदाहरण में मैंने सभी पिनों को जमीन से जोड़कर DS1803 एड्रेस 0 दिया है।

चरण 2: कमांड बाइट

कमांड बाइट
कमांड बाइट

जिस तरह से DS1803 संचालित होता है उसका उपयोग कमांड बाइट में किया जा सकता है। जब आप "राइट पोटेंशियोमीटर-0" चुनते हैं, तो दोनों पोटेंशियोमीटर चुने जाते हैं, जब आप केवल पोटेंशियोमीटर-0 को एडजस्ट करना चाहते हैं, तो आपको केवल पहला डेटा बाइट भेजना होगा। "पोटेंशियोमीटर -1 लिखें" केवल पोटमीटर -1 को समायोजित करें। "दोनों पोटेंशियोमीटर को लिखें" दोनों पोटेंशियोमीटर को समान मान देता है।

चरण 3: DS1803. का नियंत्रण

DS1803. का नियंत्रण
DS1803. का नियंत्रण

नियंत्रण बाइट (चित्र 3) में एक उपकरण पहचानकर्ता होता है, यह हमेशा समान रहता है। मेरे उदाहरण में A0, A1 और A2 0 हैं क्योंकि हम सभी A-पिन को जमीन पर रखकर एड्रेस का चयन करते हैं। Arduino में "Wire.beginTransmission" और "Wire.requestFrom" कमांड द्वारा अंतिम बिट R/W को 0 या 1 पर सेट किया जाएगा। चित्र 5 में आप पूरा टेलीग्राम देख सकते हैं। पढ़ा गया तार चित्र 4 में दिखाया गया है।

चरण 4: सेट अप

सेट अप
सेट अप

यह सर्किट दिखाता है कि सब कुछ कैसे जोड़ा जाए। नोकिया एलसीडी विभिन्न कनेक्शनों के साथ उपलब्ध है, सुनिश्चित करें कि आप अपना सही कनेक्ट करते हैं। इसके अलावा रोटरी एनकोडर उसके अलग-अलग संस्करण हैं, कुछ में मध्य पिन पर आम है अन्य नहीं। मैंने एन्कोडर के ए और बी आउटपुट सिग्नल को फ़िल्टर करने के लिए थोड़ा फ़िल्टर नेटवर्क (100nF कैप के साथ 470 ओम रोकनेवाला) लगाया है। मुझे इस फ़िल्टर की आवश्यकता है क्योंकि आउटपुट में बहुत अधिक शोर था। मैंने कुछ शोर को रद्द करने के लिए अपने कार्यक्रम में एक बहस टाइमर भी लगाया। बाकी के लिए मुझे लगता है कि सर्किट स्पष्ट है। एलसीडी को एडफ्रूट https://www.adafruit.com/product/338 के जरिए ऑर्डर किया जा सकता है।

चरण 5: कार्यक्रम

2-तार बस के उपयोग के लिए मैं Wire.h पुस्तकालय शामिल करता हूं। LCD का उपयोग करने के लिए I में Adafruit पुस्तकालय शामिल है जिसे आप https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library से भी डाउनलोड कर सकते हैं Adafruit_GFX.h पुस्तकालय यहां https://github पर उपलब्ध है। com/adafruit/Adafruit-GFX-Library.

#शामिल

#शामिल

#शामिल

Adafruit_PCD8544 डिस्प्ले = Adafruit_PCD8544 (7, 6, 5, 4, 3);

यहां आप सभी चर देख सकते हैं। पहले बताए अनुसार बाइट और कमांड बाइट को नियंत्रित करें। आपके एन्कोडर पर शोर के आधार पर deBounceTime को समायोजित किया जा सकता है।

बाइट पॉट[2] = {1, 1};बाइट कंट्रोलबाइट = B0101000; // 7 बिट्स, बाइट कमांडबाइट = B10101001; // अंतिम 2 बिट पॉटमीटर चयन है। बाइट पॉटवैल्यू[2]; इंट मैं = 0; int deBounceTime = १०; // शोर के आधार पर इस मान को समायोजित करें int encoder_A = 8; कॉन्स्ट इंट एनकोडर_बी = 9; कॉन्स्ट इंट बटनपिन = 2; अहस्ताक्षरित लंबा newDebounceTime = 0; अहस्ताक्षरित लंबे पुराने समय; बूलियन दबाया = 0; बूलियन गिनती = 1;

सेटअप में मैं सही पिन को परिभाषित करता हूं और स्थिर टेक्स्ट को LCD. पर रखता हूं

शून्य सेटअप () {वायर.बेगिन (); सीरियल.बेगिन (९६००); पिनमोड (एनकोडर_ए, इनपुट); पिनमोड (एनकोडर_बी, इनपुट); पिनमोड (बटनपिन, इनपुट); newDebounceTime = मिली ();

डिस्प्ले.बेगिन ();

डिस्प्ले.सेटकंट्रास्ट (50); डिस्प्ले। क्लियरडिस्प्ले (); display.setTextSize(1); display.setTextColor (काला); डिस्प्ले.सेट कर्सर (0, 10); display.println ("पॉट 1 ="); डिस्प्ले.सेट कर्सर (0, 22); display.println ("पॉट 2 ="); डिस्प्ले.डिस्प्ले ();

}

लूप में मैं पहले जांचता हूं कि क्या अंतराल 500ms से अधिक है, यदि हाँ तो LCD अपडेट हो जाता है। यदि नहीं, तो एन्कोडर पर बटन चेक किया गया है। अगर टॉगलबफर दबाया जाता है तो कॉल किया जाता है। इसके बाद एनकोडर की जांच की जाती है। यदि इनपुट 0 कम है (रोटेशन का पता चला है) मैं इनपुट बी की जांच करता हूं, अगर इनपुट बी 0 है तो मैं इंक्रीमेंट पॉट , अन्य मैं घटाता हूं। इसके बाद वेल्यू DS1803 को wire.write के जरिए भेज दी जाएगी।

शून्य लूप () {

मध्यान्तर();

अगर (डिजिटल रीड (बटनपिन) == 1 && (दबाया गया == 0)) {टॉगलबफर ();} अगर (डिजिटल रीड (बटनपिन) == 0) {दबाया = 0;}

अगर (डिजिटलरेड (एनकोडर_ए) == 0 && गिनती == 0 && (मिली () - न्यूडेब्यूसटाइम> डीबाउंसटाइम)) {अगर (डिजिटलरेड (एनकोडर_बी) == 0) {पॉट ++; अगर (पॉट > 25) {पॉट = 25;}} और {पॉट --; अगर (बर्तन <१) {बर्तन = १;}} गिनती = १; newDebounceTime = मिली ();

वायर.बेगिनट्रांसमिशन (कंट्रोलबाइट); // ट्रांसमिट करना शुरू करें

वायर.राइट (कमांडबाइट); // पॉटमीटर का चयन वायर।राइट (पॉट [0] * 10); // पॉटमीटर डेटा का पहला बाइट भेजें Wire.write(pot[1] *10); // पॉटमीटर डेटा का दूसरा बाइट भेजें Wire.endTransmission (); // ट्रांसमिट करना बंद करें} और अगर (डिजिटलरेड (एनकोडर_ए) == 1 && डिजिटल रीड (एनकोडर_बी) == 1 && काउंट == 1 && (मिलिस () - न्यूडेब्यूसटाइम> डीबॉन्सटाइम)) {काउंट = 0; newDebounceTime = मिली (); } }

शून्य टॉगलबफ़र () {दबाया गया = 1; अगर (i == 0) {i = 1;} और {i = 0;}}

सबसे पहले मैं उस क्षेत्र को साफ़ करता हूँ जहाँ मुझे चर लिखना है। मैं इस क्षेत्र में एक आयत बनाने के लिए ऐसा करता हूँ। उसके बाद मैं स्क्रीन पर वेरिएबल लिखता हूं।

शून्य लिखना ToLCD () {वायर। अनुरोध से (नियंत्रणबाइट, 2); पॉटवैल्यू [0] = वायर.रीड (); // पहले पॉटमीटर बाइट पॉटवैल्यू पढ़ें [1] = वायर.रीड (); // दूसरा पॉटमीटर बाइट डिस्प्ले पढ़ें।फिलरेक्ट (40, 0, 40, 45, सफेद); // एलसीडी डिस्प्ले पर स्पष्ट चर स्क्रीन। सेट कर्सर (40, 10); डिस्प्ले.प्रिंट (पॉटवैल्यू [0]); // LCD डिस्प्ले पर पहला पॉटमीटर मान लिखें। सेट कर्सर (40, 22); डिस्प्ले.प्रिंट (पॉटवैल्यू [1]); // LCD डिस्प्ले पर दूसरा पॉटमीटर मान लिखें। सेट कर्सर (60, (10 + i * 12)); डिस्प्ले.प्रिंट ("<"); डिस्प्ले.डिस्प्ले (); }

शून्य अंतराल () {// अंतराल टाइमर एलसीडी को डेटा लिखने के लिए अगर ((मिलिस () - पुराना समय)> 500) {लिखने के लिए एलसीडी (); पुराना समय = मिली (); } }

सिफारिश की: