Arduino के साथ डिजिटल पोटेंशियोमीटर MCP41xx का उपयोग करना

समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें





इस परियोजना में हम arduino के साथ एक डिजिटल पोटेंशियोमीटर इंटरफ़ेस करने जा रहे हैं। इस प्रदर्शन में पोटेंशियोमीटर MCP41010 का उपयोग किया जाता है, लेकिन आप MC41 ** श्रृंखला के किसी भी डिजिटल पोटेंशियोमीटर का उपयोग कर सकते हैं।

अंकित नेगी द्वारा



MC41010 के लिए परिचय

डिजिटल पोटेंशियोमीटर केवल एक अंतर के साथ तीन टर्मिनलों के साथ किसी भी एनालॉग पोटेंशियोमीटर की तरह हैं। जबकि एनालॉग एक में आपको वाइपर स्थिति को मैन्युअल रूप से बदलना होगा, डिजिटल पोटेंशियोमीटर वाइपर स्थिति के मामले में किसी भी माइक्रोकंट्रोलर या माइक्रोप्रोसेसर का उपयोग करके पोटेंशियोमीटर को दिए गए संकेत के अनुसार सेट किया गया है।

अंजीर। MC41010 आईसी पिनआउट

अंजीर। MC41010 आईसी पिनआउट



MC41010 लाइन पैकेज आईसी में एक 8 पिन दोहरी है। किसी भी एनालॉग पोटेंशियोमीटर की तरह यह आईसी 5k, 10k, 50k और 100k में आता है। इस सर्किट में 10k पोटेंशियोमीटर का उपयोग किया जाता है
MC4131 में 8 टर्मिनल हैं:

पिन नं। पिन नाम छोटा विवरण

1 सीएस इस पिन का उपयोग आर्डिनो से जुड़े गुलाम या परिधीय का चयन करने के लिए किया जाता है। अगर यह है
कम तब MC41010 का चयन किया जाता है और यदि यह उच्च है तो MC41010 का चयन रद्द कर दिया जाता है।

2 SCLK साझा / सीरियल घड़ी, arduino से डेटा हस्तांतरण के आरंभ के लिए घड़ी देता है
Arduino को IC और इसके विपरीत।

3 एसडीआई / एसडीओ सीरियल डेटा को इस पिन के माध्यम से आर्डिनो और आईसी के बीच स्थानांतरित किया जाता है
Arduino का 4 VSS ग्राउंड टर्मिनल IC के इस पिन से जुड़ा हुआ है।

५ पीए ० यह पोटेंशियोमीटर का एक टर्मिनल है।

6 PW0 यह टर्मिनल पोटेंशियोमीटर का वाइपर टर्मिनल है (प्रतिरोध बदलने के लिए)
7 PB0 यह पोटेंशियोमीटर का एक और टर्मिनल है।

इस पिन के जरिए IC को 8 VCC पॉवर दिया जाता है।

इस आईसी में केवल एक पोटेंशियोमीटर होता है। कुछ आईसी में अधिकतम दो पोटेंशियोमीटर इनबिल्ट होते हैं। इस
वाइपर और किसी अन्य टर्मिनल के बीच प्रतिरोध का मान 0 से 255 तक 256 चरणों में बदल जाता है। चूंकि हम प्रतिरोध के 10k प्रतिरोधक मूल्य का उपयोग कर रहे हैं, इसलिए निम्न चरणों में बदल दिया जाता है:
10k / 256 = 39 ओम प्रति चरण 0 और 255 के बीच

अवयव

हमें इस परियोजना के लिए निम्नलिखित घटकों की आवश्यकता है।

1. ARDUINO
2. MC41010 आईसी
3. 220 ओएचएम रेजिस्टेंट
4. एलईडी
5. कनेक्टिंग तार

अंजीर में दिखाए अनुसार संबंध बनाएं।

1. सीएस पिन को डिजिटल पिन 10 से कनेक्ट करें।
2. SCK पिन को डिजिटल पिन 13 से कनेक्ट करें।
3. एसडीआई / एसडीओ पिन को डिजिटल पिन 11 से कनेक्ट करें।
4. VSS arduino के ग्राउंड पिन के लिए
5. आर्डूइनो का PA0 से 5V पिन
6. पीबडू के मैदान के लिए PB0
7. PWO को arduino के एनालॉग पिन A0 से।
8. VCC से 5 v के arduino।

कार्यक्रम कोड 1

यह कोड वाइपर टर्मिनल पर वोल्टेज परिवर्तन और Arduino IDE के सीरियल मॉनिटर पर जमीन प्रिंट करता है।

#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)

मौजूदा कोड 1:

Arduino के साथ डिजिटल पोटेंशियोमीटर का उपयोग करने के लिए आपको पहले SPI लाइब्रेरी को शामिल करना होगा जो कि Arduino IDE में ही प्रदान किया गया है। बस इस आदेश के साथ पुस्तकालय को बुलाओ:
#शामिल

शून्य सेटअप में, पिंस को आउटपुट या इनपुट के रूप में सौंपा गया है। और Arduino और ic के बीच SPI और धारावाहिक संचार शुरू करने के लिए आदेश भी दिए गए हैं:

#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}

शून्य लूप में, कुल 256 चरणों में डिजिटल पॉट के प्रतिरोध को बदलने के लिए लूप का उपयोग किया जाता है। पहले 0 से 255 तक और फिर प्रत्येक चरण के बीच 10 मिलीसेकेंड की देरी के साथ फिर से 0 पर वापस:

SPI.begin() and Serial.begin(9600)

digitalPotWrite (i) फ़ंक्शन, ic के विशेष पते पर प्रतिरोध को बदलने के लिए theese मान लिखता है।

वाइपर और एंड टर्मिनल के बीच प्रतिरोध की गणना इन सूत्रों का उपयोग करके की जा सकती है:

आर 1 = 10k * (256-स्तर) / 256 + आरडब्ल्यू
तथा
आर 2 = 10k * स्तर / 256 + आरडब्ल्यू

यहाँ वाइपर और एक टर्मिनल के बीच R1 = प्रतिरोध
R2 = वाइपर और अन्य टर्मिनल के बीच प्रतिरोध
स्तर = एक विशेष तात्कालिक पर कदम (चर 'मैं' लूप के लिए उपयोग किया जाता है)
आरडब्ल्यू = वाइपर टर्मिनल का प्रतिरोध (आईसी के डेटशीट में पाया जा सकता है)
DigitalPotWrite () फ़ंक्शन का उपयोग करके CS पिन को LOW वोल्टेज असाइन करके डिजिटल पोटेंशियोमीटर चिप का चयन किया जाता है। अब जैसे ही ic सिलेक्ट किया जाता है, एक एड्रेस पर कॉल करना होगा, जिस पर डेटा लिखा होगा। कोड के अंतिम भाग में:

SPI.transfer (B00010001)

पता कहा जाता है जो कि आईसी के वाइपर टर्मिनल का चयन करने के लिए B00010001 है जिस पर डेटा लिखा जाएगा। और इसलिए लूप के मूल्य के लिए यानी, मुझे प्रतिरोध को बदलने के लिए लिखा गया है।

वर्किंग वर्किंग:

जब तक i का मान एयू पिन के इनपुट को बदलता रहता है तब तक 0 और 1023 के बीच भी परिवर्तन होता रहता है। ऐसा इसलिए होता है क्योंकि वाइपर टर्मिनल सीधे A0 पिन से जुड़ा होता है, और पोटेंशियोमीटर के अन्य टर्मिनल क्रमशः 5volt और ग्राउंड से जुड़े होते हैं। अब जब प्रतिरोध बदल जाता है, तो वोल्टेज को पार करते हैं जो सीधे इनपुट के रूप में आर्डिनो द्वारा लिया जाता है और इस प्रकार हम प्रतिरोध के एक विशेष मूल्य के लिए धारावाहिक मॉनिटर पर वोल्टेज मान प्राप्त करते हैं।

गणना 1:

मैं इस सर्किट में i के विभिन्न मूल्यों के लिए कुछ सिमुलेशन चित्र हैं:

अब बस IC के वाइपर टर्मिनल को 220ohm रेसिस्टर के साथ सीरीज़ से कनेक्ट करें जैसा कि चित्र में दिखाया गया है।

कोड 2:

for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)

रोमांचक कोड 2:

यह कोड कोड 1 के समान है सिवाय इसके कि इस कोड में कोई सीरियल कमांड नहीं हैं। इसलिए सीरियल मॉनीटर पर कोई मूल्य नहीं छपेगा।

काम का विस्तार

चूंकि वाइपर टर्मिनल और जमीन के बीच में नेतृत्व जुड़ा हुआ है, इसलिए प्रतिरोध में परिवर्तन होता है, इसलिए पूरे वोल्टेज का नेतृत्व करें। और इसलिए प्रतिरोध जिसके परिणामस्वरूप नेतृत्व जुड़ा हुआ है 0ohm से अधिकतम उगता है ताकि नेतृत्व की चमक बढ़े। जो प्रतिरोध में कमी के कारण अधिकतम 0v से धीरे-धीरे दूर हो जाता है।

अनुकरण २

सिमुलेशन 3




पिछला: जॉयस्टिक का उपयोग करके सर्वो मोटर को कैसे नियंत्रित किया जाए अगला: Arduino का उपयोग करके यह उन्नत डिजिटल Ammeter बनाएं