Arduino తో డిజిటల్ పొటెన్టోమీటర్ MCP41xx ను ఉపయోగించడం

సమస్యలను తొలగించడానికి మా పరికరాన్ని ప్రయత్నించండి





ఈ ప్రాజెక్ట్‌లో మనం డిజిటల్ పొటెన్షియోమీటర్‌ను ఆర్డునోతో ఇంటర్‌ఫేస్ చేయబోతున్నాం. ఈ ప్రదర్శనలో పొటెన్టోమీటర్ MCP41010 ఉపయోగించబడుతుంది కాని మీరు MC41 ** సిరీస్ యొక్క ఏదైనా డిజిటల్ పొటెన్టోమీటర్‌ను ఉపయోగించవచ్చు.

రచన అంకిత్ నేగి



MC41010 కు పరిచయం

డిజిటల్ పొటెన్షియోమీటర్లు మూడు టెర్మినల్స్ కలిగిన ఒకే అనలాగ్ పొటెన్షియోమీటర్ లాగా ఉంటాయి. అనలాగ్ ఒకటిలో మీరు వైపర్ స్థానాన్ని మానవీయంగా మార్చాలి, డిజిటల్ పొటెన్టోమీటర్ వైపర్ స్థానం ఏదైనా మైక్రోకంట్రోలర్ లేదా మైక్రోప్రాసెసర్ ఉపయోగించి పొటెన్టోమీటర్‌కు ఇచ్చిన సిగ్నల్ ప్రకారం సెట్ చేయబడి ఉంటుంది.

అత్తి. MC41010 IC పిన్అవుట్

అత్తి. MC41010 IC పిన్అవుట్



MC41010 అనేది లైన్ ప్యాకేజీ IC లో 8 పిన్ డ్యూయల్. ఏదైనా అనలాగ్ పొటెన్షియోమీటర్ మాదిరిగానే ఈ ఐసి 5 కె, 10 కె, 50 కె, మరియు 100 కె. ఈ సర్క్యూట్లో 10 కె పొటెన్షియోమీటర్ ఉపయోగించబడుతుంది
MC4131 క్రింది 8 టెర్మినల్స్ ఉన్నాయి:

పిన్ నం. పిన్ పేరు చిన్న వివరణ

1 CS ఈ పిన్ arduino కి కనెక్ట్ చేయబడిన బానిస లేదా పరిధీయతను ఎంచుకోవడానికి ఉపయోగించబడుతుంది. ఇది ఉంటే
తక్కువ అప్పుడు MC41010 ఎంపిక చేయబడింది మరియు ఇది ఎక్కువగా ఉంటే MC41010 ఎంపిక తీసివేయబడుతుంది.

2 SCLK షేర్డ్ / సీరియల్ క్లాక్, arduino నుండి డేటా బదిలీని ప్రారంభించడానికి గడియారం ఇస్తుంది
ఆర్డునో టు ఐసి మరియు దీనికి విరుద్ధంగా.

3 SDI / SDO ఈ పిన్ ద్వారా arduino మరియు IC మధ్య సీరియల్ డేటా బదిలీ చేయబడుతుంది
ఆర్డినో యొక్క VSS గ్రౌండ్ టెర్మినల్ IC యొక్క ఈ పిన్‌తో అనుసంధానించబడి ఉంది.

5 PA0 ఇది పొటెన్షియోమీటర్ యొక్క ఒక టెర్మినల్.

6 PW0 ఈ టెర్మినల్ పొటెన్షియోమీటర్ యొక్క వైపర్ టెర్మినల్ (ప్రతిఘటనను మార్చడానికి)
7 PB0 ఇది పొటెన్షియోమీటర్ యొక్క మరొక టెర్మినల్.

ఈ పిన్ ద్వారా 8 విసిసి పవర్ టు ఐసి ఇవ్వబడుతుంది.

ఈ ఐసిలో ఒక పొటెన్షియోమీటర్ మాత్రమే ఉంది. కొన్ని ఐసిలో గరిష్టంగా రెండు పొటెన్షియోమీటర్ ఇన్‌బిల్ట్ ఉంది. ఇది
వైపర్ మరియు మరే ఇతర టెర్మినల్ మధ్య నిరోధకత యొక్క విలువ 0 నుండి 255 వరకు 256 దశల్లో మార్చబడుతుంది. మేము రెసిస్టర్ యొక్క 10 కె రెసిస్టర్ విలువను ఉపయోగిస్తున్నందున దశల్లో మార్చబడింది:
0 మరియు 255 మధ్య దశకు 10 కే / 256 = 39 ఓంలు

భాగాలు

ఈ ప్రాజెక్ట్ కోసం మాకు క్రింది భాగాలు అవసరం.

1. అర్దునో
2. ఎంసి 41010 ఐసి
3. 220 ఓహెచ్ఎం రెసిస్టర్
4. ఎల్‌ఈడీ
5. వైర్లను కనెక్ట్ చేయడం

అత్తి చూపిన విధంగా కనెక్షన్లు చేయండి.

1. సిఎస్ పిన్ను డిజిటల్ పిన్ 10 కి కనెక్ట్ చేయండి.
2. SCK పిన్ను డిజిటల్ పిన్ 13 కి కనెక్ట్ చేయండి.
3. SDI / SDO పిన్‌ను డిజిటల్ పిన్ 11 కి కనెక్ట్ చేయండి.
4. ఆర్ఎస్యునో యొక్క గ్రౌండ్ పిన్ నుండి VSS
5. PA0 నుండి 5v పిన్ arduino
6. ఆర్బినో యొక్క భూమికి పిబి 0
7. ఆర్డ్యూనో యొక్క అనలాగ్ పిన్ A0 కు PWO.
8. VCC నుండి 5 v arduino వరకు.

ప్రోగ్రామ్ కోడ్ 1

ఈ కోడ్ వైపర్ టెర్మినల్ మరియు గ్రౌండ్ అంతటా వోల్టేజ్ మార్పును ఆర్డినో 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 లోనే అందించబడుతుంది. ఈ ఆదేశంతో లైబ్రరీకి కాల్ చేయండి:
# చేర్చండి

శూన్య సెటప్‌లో, పిన్‌లను అవుట్పుట్ లేదా ఇన్‌పుట్‌గా కేటాయించారు. మరియు ఆర్డినో మరియు ఐసిల మధ్య 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)

డిజిటల్ పాట్ రైట్ (i) ఫంక్షన్ ఐసి యొక్క ప్రత్యేక చిరునామా వద్ద ప్రతిఘటనను మార్చడానికి థీస్ విలువను వ్రాస్తుంది.

వైపర్ మరియు ఎండ్ టెర్మినల్ మధ్య ప్రతిఘటనను ఈ సూత్రాలను ఉపయోగించి లెక్కించవచ్చు:

R1 = 10k * (256-స్థాయి) / 256 + Rw
మరియు
R2 = 10k * స్థాయి / 256 + Rw

ఇక్కడ R1 = వైపర్ మరియు ఒక టెర్మినల్ మధ్య నిరోధకత
R2 = వైపర్ మరియు ఇతర టెర్మినల్ మధ్య నిరోధకత
స్థాయి = ఒక నిర్దిష్ట తక్షణ వద్ద దశ (లూప్ కోసం ఉపయోగించే వేరియబుల్ “I”)
Rw = వైపర్ టెర్మినల్ యొక్క నిరోధకత (ఐసి యొక్క డేటాషీట్లో చూడవచ్చు)
డిజిటల్‌పాట్‌రైట్ () ఫంక్షన్‌ను ఉపయోగించి సిఎస్ పిన్‌కు తక్కువ వోల్టేజ్‌ను కేటాయించడం ద్వారా డిజిటల్ పొటెన్షియోమీటర్ చిప్ ఎంపిక చేయబడుతుంది. ఇప్పుడు ఐసి ఎంచుకోబడినప్పుడు, ఏ డేటా వ్రాయబడుతుందో దానిపై చిరునామా తప్పక పిలువబడుతుంది. కోడ్ యొక్క చివరి భాగంలో:

SPI.transfer (B00010001)

డేటా వ్రాయబడే ఐసి యొక్క వైపర్ టెర్మినల్‌ను ఎంచుకోవడానికి చిరునామాను B00010001 అంటారు. అందువల్ల లూప్ విలువ కోసం, అంటే, ప్రతిఘటనను మార్చడానికి నేను వ్రాయబడ్డాను.

సర్క్యూట్ వర్కింగ్:

I యొక్క విలువ A0 పిన్ ఆర్డునోకు మారుతున్నంతవరకు 0 మరియు 1023 మధ్య కూడా మారుతూ ఉంటుంది. ఎందుకంటే వైపర్ టెర్మినల్ నేరుగా A0 పిన్‌తో అనుసంధానించబడి ఉంటుంది మరియు పొటెన్షియోమీటర్ యొక్క ఇతర టెర్మినల్ వరుసగా 5 వోల్ట్ మరియు గ్రౌండ్‌కు అనుసంధానించబడి ఉంటుంది. ఇప్పుడు ప్రతిఘటన మారినప్పుడు దాని అంతటా వోల్టేజ్ చేయండి, ఇది నేరుగా ఆర్డునో చేత ఇన్పుట్ గా తీసుకోబడుతుంది మరియు అందువల్ల ప్రతిఘటన యొక్క నిర్దిష్ట విలువ కోసం సీరియల్ మానిటర్లో వోల్టేజ్ విలువను పొందుతాము.

అనుకరణ 1:

I యొక్క వివిధ విలువలతో ఈ సర్క్యూట్ కోసం ఇవి కొన్ని అనుకరణ చిత్రాలు:

ఇప్పుడు చిత్రంలో చూపిన విధంగా 220ohm రెసిస్టర్‌తో IC యొక్క వైపర్ టెర్మినల్‌తో సిరీస్‌ను నడిపించండి.

కోడ్ 2:

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

కోడ్ 2 ని వివరిస్తూ:

ఈ కోడ్ కోడ్ 1 కి సమానంగా ఉంటుంది తప్ప ఈ కోడ్‌లో సీరియల్ ఆదేశాలు లేవు. కాబట్టి సీరియల్ మానిటర్‌లో విలువలు ముద్రించబడవు.

వర్కింగ్ ఎక్స్‌ప్లానేషన్

లీడర్ వైపర్ టెర్మినల్ మరియు గ్రౌండ్ మధ్య రెసిస్టెన్స్ మార్పులతో అనుసంధానించబడి ఉంటుంది కాబట్టి లెడ్ అంతటా వోల్టేజ్ చేయండి. అందువల్ల దారితీసిన ప్రతిఘటన 0ohm నుండి గరిష్టంగా పెరుగుతుంది కాబట్టి దారితీసిన ప్రకాశం చేయండి. గరిష్టంగా 0v కు నిరోధకత తగ్గడం వల్ల ఇది మళ్ళీ నెమ్మదిగా మసకబారుతుంది.

అనుకరణ 2

అనుకరణ 3




మునుపటి: జాయ్ స్టిక్ ఉపయోగించి సర్వో మోటారును ఎలా నియంత్రించాలి తర్వాత: ఆర్డునో ఉపయోగించి ఈ అధునాతన డిజిటల్ అమ్మీటర్‌ను తయారు చేయండి